0

Hibernate Search 3.1.1 の時点で、さらに処理するためにインデックス付きエンティティを JMS キューに送信したい場合onMessage()、処理中の MDB のメソッドでは、キャストを適用して LuceneWork のリストを取得するだけで十分でした。

List<LuceneWork> queue = (List<LuceneWork>) objectMessage.getObject();

しかし、バージョン 4.2.0 では、これはもはやオプションではなく、objectMessage.getObject()a を返しますbyte[]

これをどのように逆シリアルbyte[]化できList<LuceneWork>ますか?

メッセージを調べたところ、 の値があることがわかりましたJMSBackendQueueTask.INDEX_NAME_JMS_PROPERTY

4

1 に答える 1

1

AbstractJMSHibernateSearchControllerを拡張して、これらの詳細を処理するか、以下を含むソースを確認することができます。

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 と比較すると、留意すべき主な設計上の違いが 2 つあります。

  • Serializer サービスはプラグ可能であるため、検索する必要があります。
  • 各インデックス (名前で識別) は独立したバックエンドを持つことができます

新しい Lucene クラスはシリアライズ可能ではないため、シリアライゼーションは (デフォルトで) Apache Avro を使用して実行されるようになりました。

于 2013-01-29T08:58:37.267 に答える