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 を参照してください。