3.5.2. マスターノード
各インデックスの更新操作は JMS キューから取得され、実行されます。マスターインデックスは定期的にコピーされます。
例3.7 JMS マスターの設定
### master configuration ## DirectoryProvider # (remote) master location where information is copied to hibernate.search.default.sourceBase = /mnt/mastervolume/lucenedirs/mastercopy # local master location hibernate.search.default.indexBase = /Users/prod/lucenedirs # refresh every half hour hibernate.search.default.refresh = 1800 # appropriate directory provider hibernate.search.default.directory_provider = org.hibernate.search.store.FSMasterDirectoryProvider ## Backend configuration #Backend is the default lucene one
更新期間は期待された時間コピーよりも大きくなる必要があります。
Hibernate Search フレームワーク設定以外に、メッセージ駆動 Bean を記述し、JMS を使用してインデックス作業キューを処理するよう設定する必要があります。
例3.8 インデックスキューを処理するメッセージ駆動 Bean
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName="destination", propertyValue="queue/hibernatesearch"),
@ActivationConfigProperty(propertyName="DLQMaxResent", propertyValue="1")
} )
public class MDBSearchController extends AbstractJMSHibernateSearchController implements MessageListener {
@PersistenceContext EntityManager em;
//method retrieving the appropriate session
protected Session getSession() {
return (Session) em.getDelegate();
}
//potentially close the session opened in #getSession(), not needed here
protected void cleanSessionIfNeeded(Session session)
}
}
このサンプルでは、Hibernate Search ソースコードで利用可能な抽象 JMS コントローラクラスから継承し、JavaEE 5 MDB を実装します。この実装はサンプルとして提供され、非 Java EE メッセージ駆動 Bean を使用するよう調整できます (ただし、より複雑になります)。
getSession() と cleanSessionIfNeeded() の詳細については、 AbstractJMSHibernateSearchController の javadoc を参照してください。