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