Jms 休眠搜索,将字节[]转换为列表<;LuceneWork>;

Jms 休眠搜索,将字节[]转换为列表<;LuceneWork>;,jms,lucene,hibernate-search,Jms,Lucene,Hibernate Search,从Hibernate Search 3.1.1开始,当人们想要将索引实体发送到JMS队列进行进一步处理时,处理MDB的onMessage()方法足以应用强制转换来获得LuceneWork列表,例如 List<LuceneWork> queue = (List<LuceneWork>) objectMessage.getObject(); List queue=(List)objectMessage.getObject(); 但是在版本4.2.0中,这不再是一个选项,因

从Hibernate Search 3.1.1开始,当人们想要将索引实体发送到JMS队列进行进一步处理时,处理MDB的
onMessage()
方法足以应用强制转换来获得LuceneWork列表,例如

List<LuceneWork> queue = (List<LuceneWork>) objectMessage.getObject();
List queue=(List)objectMessage.getObject();
但是在版本4.2.0中,这不再是一个选项,因为
objectMessage.getObject()
返回一个
字节[]

如何将此
字节[]
反序列化为
列表

我检查了消息,发现我有
JMSBackendQueueTask.INDEX_NAME_JMS_PROPERTY
的值,您可以扩展它并让它处理这些细节,或者查看它的源代码,其中包含:

indexName = objectMessage.getStringProperty(JmsBackendQueueTask.INDEX_NAME_JMS_PROPERTY);
indexManager = factory.getAllIndexesManager().getIndexManager(indexName);
if (indexManager == null) {
    log.messageReceivedForUndefinedIndex(indexName);
    return;
}
queue = indexManager.getSerializer().toLuceneWorks((byte[]) objectMessage.getObject());
indexManager.performOperations(queue, null);
与旧版本3.x相比,需要记住两个主要的设计差异:

  • 序列化程序服务是可插入的,因此需要查找它
  • 每个索引(由名称标识)都可以有一个独立的后端
由于较新的Lucene类不可序列化,因此现在(默认情况下)使用ApacheAvro执行序列化