【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”
问题是这样的
我想把下面的book对像(含Factory属性)使用缓存ehcache缓存起来,但是总是报错,相信是我的使用方式不对,或是此路不通吧,有没有什么好的办法可以实现这样的想法呢,多谢了
public class Factory { private String Address; public Factory(String address) { super(); Address = address; } public String getAddress() { return Address; } public void setAddress(String address) { Address = address; } }
public class Book implements Serializable { private String bookName; private Factory factory; public Factory getFactory() { return factory; } public void setFactory(Factory factory) { this.factory = factory; } public Book(String bookName) { this.bookName = bookName; } public String getBookName() { return bookName; } }
Ehcache使用方法
CacheManager manager1 = new CacheManager(); String[] cacheNamesForManager1 = manager1.getCacheNames(); Cache cache = manager1.getCache("sampleCache1"); Book b = new Book("Music Book"); b.setFactory(new Factory("china")); Element element1 = new Element("book", b); cache.put(element1);
报错内容
012-3-10 23:23:06 net.sf.ehcache.store.disk.DiskStorageFactory$DiskWriteTask call 严重: Disk Write of book failed: java.io.NotSerializableException: com.domain.ehcache.Factory at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) at java.io.ObjectOutputStream.writeSerialData(Unknown Source) at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) at java.io.ObjectOutputStream.defaultWriteObject(Unknown Source) at net.sf.ehcache.Element.writeObject(Element.java:797) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source) at java.io.ObjectOutputStream.writeSerialData(Unknown Source) at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream.writeObject(Unknown Source) at net.sf.ehcache.util.MemoryEfficientByteArrayOutputStream.serialize(MemoryEfficientByteArrayOutputStream.java:97) at net.sf.ehcache.store.disk.DiskStorageFactory.serializeElement(DiskStorageFactory.java:413) at net.sf.ehcache.store.disk.DiskStorageFactory.write(DiskStorageFactory.java:392) at net.sf.ehcache.store.disk.DiskStorageFactory$DiskWriteTask.call(DiskStorageFactory.java:493) at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1154) at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1138) at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
这么晚还在呀,多谢回复呀,如果是这样的话我这个路子就行不通了。其实我是有这样的一个需要:
用netty做一个服务器,把连接过来的上下文变量缓存在缓存中,另一个发送的线程直接读该缓存就成了,所以想到用ehcache,但这个老兄你的说法我的这个使用应该是行不通的。那针对我这个想法有什么好的建议没有,多谢!
class
Factory implements
Serializable
@PaulWong 多谢了!
我要缓存 ChannelHandlerContext 但他又没有实现Serializable,所以我上面的想法是不成立的。EHCACHE支持分布式这个我知道,关键是ChannelHandlerContext 对像无法缓存,所以我想像的方案是不可行的,我上图的本意是为了解决高并发时的思路,看来行不能,只能从Haproxy+keepalived来思考一下方案
引用来自“心灯”的评论
这么晚还在呀,多谢回复呀,如果是这样的话我这个路子就行不通了。其实我是有这样的一个需要:
用netty做一个服务器,把连接过来的上下文变量缓存在缓存中,另一个发送的线程直接读该缓存就成了,所以想到用ehcache,但这个老兄你的说法我的这个使用应该是行不通的。那针对我这个想法有什么好的建议没有,多谢!
虽然好久了,我可以回答一下吗,你可以序列化反序列化。