我需要使用EJB通过网络发送一个包含Lucene元素(如Query
)的类,当然这个类需要序列化。我把我的课标记为Serializable
,但这似乎还不够:
org.apache.lucene.search.TermQuery is not Serializable
事实上,当我阅读Lucene(4.0)最后一个稳定版本的javadoc时,我可以看到TermQuery
没有实现Serializable,Query
也没有。我不明白的是,为什么那些类在上一个版本(3.6.1)中用于实现Serializable
,为什么现在不再是这样了?
Mike McCandless,Lucene的贡献者之一以及Lucene 4的变更日志说:
所有序列化代码都已从Lucene的类中删除;你必须在应用程序中处理更高级别的序列化。
实际提交是针对JIRA问题LUCENE-2908和LUCENE-4037完成的。前一个问题的描述是:
我们删除了contrib/remote,但忘记清理序列化地狱处处这不再需要,也从未真正起作用(例如版本),并减慢开发速度(例如,我浪费了很长时间进行调试愚蠢的Similarity.idfExplain当试图制作评分系统的补丁)。
Lucene并不是唯一一个考虑放弃序列化的公司。例如,番石榴也考虑到了这一点。
谈到您的问题,您应该能够始终将查询转换为字符串表示(使用.toString()
)并返回。除非你每秒做一百万次,否则开销应该可以忽略不计。