2011-02-04 15 views
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。值得注意的是,當我沒有打開緩存時,一切按預期工作。

回答

0

基本上,這種情況發生的原因是因爲我在Eclipse中的項目設置不正確,導致某些類在我的服務器啓動時不可用。基本上,我所做的只是將我的構建輸出目錄從「workspace/project/build」更改爲「workspace/project/WebContent/WEB-INF/build」。我現在要詳細瞭解如何正確部署servlet ....