Beetl+JFinal序列化问题

D-L 发布于 2014/08/27 11:02
阅读 649
收藏 3

使用的Jfinal,模板引擎用的Beetl,在使用EhCache的时候爆出了序列化的错误。各位帮看看有可能哪里出现问题。

java.io.NotSerializableException: org.beetl.core.GroupTemplate
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
at java.util.HashMap.writeObject(HashMap.java:1133)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:440)
at net.sf.ehcache.Element.writeObject(Element.java:867)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
at net.sf.ehcache.util.MemoryEfficientByteArrayOutputStream.serialize(MemoryEfficientByteArrayOutputStream.java:97)
at net.sf.ehcache.store.disk.DiskStorageFactory.serializeElement(DiskStorageFactory.java:403)
at net.sf.ehcache.store.disk.DiskStorageFactory.write(DiskStorageFactory.java:385)
at net.sf.ehcache.store.disk.DiskStorageFactory$DiskWriteTask.call(DiskStorageFactory.java:477)
at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1071)
at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1055)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)

加载中
0
JFinal
JFinal

     仿照 CacheInterceptor 写一个 MyCacheInterceptor,改造一下 cacheAction 与 useCacheDataAndRender。

    cacheAction 只将 render 中的String view 缓存起来,useCacheDataAndRender 中取出前面存放的 view,然后自己  new BeetleRender(view) 来使用。

    这样不仅可以解决问题,而且还避免了 jfinal 目前在 CacheInterceptor 中存在的线程安全问题,jfinal 1.9 将加以改进。

JFinal
JFinal
回复 @osacar : 国庆后应该可以出
红白机
红白机
1.9什么时候出啊?
0
闲大赋
闲大赋
GroupTemplate 是个重量级对象,不应该序列化吧
0
D-L
D-L

引用来自“JFinal”的评论

     仿照 CacheInterceptor 写一个 MyCacheInterceptor,改造一下 cacheAction 与 useCacheDataAndRender。

    cacheAction 只将 render 中的String view 缓存起来,useCacheDataAndRender 中取出前面存放的 view,然后自己  new BeetleRender(view) 来使用。

    这样不仅可以解决问题,而且还避免了 jfinal 目前在 CacheInterceptor 中存在的线程安全问题,jfinal 1.9 将加以改进。

明白
0
iginx
iginx

加载beetl的cache方法类

页面顶部直接写<%cache("cacheName"){%>

底部<%}%>

直接就实现页面缓存,对Controller没有改变


0
隐性精神病人
隐性精神病人
朋友,问题解决了么,代码贴出来看看
返回顶部
顶部