2011-02-04 62 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 ....