Mybatis配置ehcache报错(说未序列化),求解!~!!

wang_liran 发布于 2013/11/13 14:07
阅读 5K+
收藏 1

VO类已经序列化(部分代码如下):

import java.io.Serializable;




public class Products implements Serializable{


/**

*/
private static final long serialVersionUID = -6193310436318894856L;

ehcache.xml文件配置如下:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">


    <diskStore path="java.io.tmpdir"/>

    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            maxElementsOnDisk="10000000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            />
</ehcache>


 

报错:

2013-11-13 13:53:12,901 - net.sf.ehcache.store.disk.DiskStorageFactory -78860 [org%002emapper%002e%0050roducts.data] ERROR net.sf.ehcache.store.disk.DiskStorageFactory  - Disk Write of 1744313901:5183834706:org.mapper.Products.selectAllByOneBusid:0:2147483647:SELECT * 
        FROM PRODUCTS 
        WHERE BUSINESSID=?
        ORDER BY PROLIKE DESC:5 failed:  
java.io.NotSerializableException: org.apache.ibatis.cache.CacheKey
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:416)
at net.sf.ehcache.Element.writeObject(Element.java:835)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1461)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at net.sf.ehcache.util.MemoryEfficientByteArrayOutputStream.serialize(MemoryEfficientByteArrayOutputStream.java:97)
at net.sf.ehcache.store.disk.DiskStorageFactory.serializeElement(DiskStorageFactory.java:405)
at net.sf.ehcache.store.disk.DiskStorageFactory.write(DiskStorageFactory.java:384)
at net.sf.ehcache.store.disk.DiskStorageFactory$DiskWriteTask.call(DiskStorageFactory.java:485)
at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1088)
at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1072)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:207)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)


请问除了vo类要序列化,还有什么需要序列化?


==================update==========================

报错点在这里:

不明白的是居然该对象不是Serializable对象,但是我明明已经实现了Serializable接口,但是却实例化失败了,这究竟是怎么回事,弄了很久没想明白?恳请各位帮忙。。

加载中
1
李三石
李三石
你 Products  是不是引用了其它没实现序列化接口的对象了!
wang_liran
wang_liran
回复 @李三石 : 我试试
李三石
李三石
回复 @wang_liran : 检查一下你项目lib 下面是不是有两个版本的mybatis 包,升级mybaitis 试试! 貌似和这个一样 https://groups.google.com/forum/#!topic/mybatis-user/kgSd2viMbok
wang_liran
wang_liran
回复 @李三石 : mybatis3.0.2
李三石
李三石
回复 @wang_liran : mybatis 那个版本?
wang_liran
wang_liran
单纯的VO类,全是属性和setter getter方法,没有引用其他类
0
wang_liran
wang_liran
没人知道吗
0
李三石
李三石
貌似你缓存的时候使用 LoggingEhcache  会有问题,换EhcacheCache 就可以了!
0
wang_liran
wang_liran

引用来自“李三石”的答案

你 Products  是不是引用了其它没实现序列化接口的对象了!
h换了最新的jar包,报错一样,不是版本问题
0
wang_liran
wang_liran

引用来自“李三石”的答案

貌似你缓存的时候使用 LoggingEhcache  会有问题,换EhcacheCache 就可以了!
报错如旧,换了EhcacheCache也一样
0
华兹格
华兹格
是不是需要重新 toString方法。。
wang_liran
wang_liran
回复 @hanzhankang : 准确来说是缓存序列化对象,这我知道,但是我的确序列化了,报错却提示说我没有序列化,我不清楚问题出在哪里了
华兹格
华兹格
回复 @wang_liran : EHcache缓存的是对象或者对象的集合
wang_liran
wang_liran
回复 @hanzhankang : 我的对象没有引用任何别的非序列化方法,纯VO类,打印出来的sql就是查询products表,并且按照某个字段进行排序,我能正常运行程序并输出我想要的数据,但是EHcache没有成功运用并且报错,换句话说,程序本身没问题,问题就是缓存这块
华兹格
华兹格
回复 @wang_liran : 检查你的对象,那个打印出来的sql是什么意思
wang_liran
wang_liran
重写了toString方法,报错如旧
0
心有灵犀
心有灵犀
实体类要实现序列化接口,Serializable
wang_liran
wang_liran
麻烦请看清楚问题再回答好吗
0
心有灵犀
心有灵犀
否则怎么写到硬盘上啊,
0
心有灵犀
心有灵犀
重写toString方法很可笑,首先要明白toString方法是干嘛的
0
13123123
13123123
好好看文档
返回顶部
顶部