2
所以我正在使用MySQL/MyBatis3/Tomcat進行一個側面項目。我目前正在開啓MyBatis中的緩存功能。當我第一次嘗試打開緩存時,由於我的對象沒有實現Serializable,我得到了異常。所以,在用我試圖緩存的對象實現Serializable之後,它似乎緩存罰款。從MyBatis 3上的緩存反序列化對象問題3/Java
但是;當我打我的servlet第二次用同樣的情況,和對象映射器試圖從緩存中反序列化我的對象,我得到以下堆棧跟蹤:
### 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;
爲什麼它甚至試圖加載類開始?它只需要投射到Serializable。值得注意的是,當我沒有打開緩存時,一切按預期工作。