簡體   English   中英

在MyBatis 3 / Java上從緩存反序列化對象時出現問題

[英]Problem deserializing objects from cache on MyBatis 3/Java

因此,我正在使用MySQL / MyBatis3 / Tomcat進行輔助項目。 我目前正在努力打開MyBatis中的緩存。 當我第一次嘗試打開緩存時,由於我的對象未實現Serializable的事實,我遇到了異常。 因此,在使用對象實現Serializable之后,我嘗試進行緩存; 它似乎可以緩存。

但; 當我再次遇到相同情況的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。 值得注意的是,當我沒有打開緩存時; 一切都按預期進行。

基本上,發生這種情況的原因是因為我在Eclipse中的項目設置不正確,導致服務器啟動時某些類不可用。 基本上,我所做的只是將構建輸出目錄從“ workspace / project / build”更改為“ workspace / project / WebContent / WEB-INF / build”。 我現在將閱讀更多有關正確部署servlet的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM