2011-02-04 14 views
2

私はMySQL/MyBatis3/Tomcatを使用してサイドプロジェクトに取り組んでいます。私は現在MyBatisでキャッシングを有効にしています。私が最初にキャッシングをオンにしようとしたとき、私のオブジェクトがSerializableを実装していないという事実に例外があります。だから、私はキャッシュしようとしていたオブジェクトでSerializableを実装した後、それはうまくキャッシュするように見えました。MyBatis 3/Javaのキャッシュからオブジェクトを逆シリアル化する際の問題

しかし、私は私のサーブレットと同じような状況で2回目を押すと、オブジェクトマッパーは、キャッシュからの私のオブジェクトをデシリアライズしようとしたとき、私は次のスタックトレースを取得する:

### Error querying database. Cause: org.apache.ibatis.cache.CacheException: Error deserializing object. Cause: java.lang.ClassNotFoundException: my.package.MyClass 
### Cause: org.apache.ibatis.cache.CacheException: Error deserializing object. Cause: java.lang.ClassNotFoundException: my.package.MyClass 
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8) 
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:77) 
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:69) 
at org.apache.ibatis.binding.MapperMethod.executeForList(MapperMethod.java:85) 
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:65) 
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:38) 
at $Proxy5.selectAllArgs(Unknown Source) 

私は理解していない他の事はこれです:

Serializable result; 
try { 
    ByteArrayInputStream bis = new ByteArrayInputStream((byte[]) value); 
    ObjectInputStream ois = new ObjectInputStream(bis); 

    // LINE THROWING EXCEPTION IN org.apache.ibatis.cache.decorators.SerializedCache 
    result = (Serializable) ois.readObject(); 
    // -- ----------------------------------- 

    ois.close(); 
} catch (Exception e) { 
    throw new CacheException("Error deserializing object. Cause: " + e, e); 
} 
return result; 

なぜクラスを読み込みしようとしていますか?シリアライズ可能にキャストするだけです。私がキャッシングをオンにしていないときは、それは注目に値する。すべてが期待どおりに機能します。

答えて

0

基本的には、Eclipseで自分のプロジェクトを正しく設定できなかったため、サーバーが起動したときにクラスが使用できなくなったためです。基本的には、ビルド出力ディレクトリを "workspace/project/build"から "workspace/project/WebContent/WEB-INF/build"に変更するだけでした。私は今、適切なサーブレットのデプロイメントについて詳しく説明します....

関連する問題