3.9. LockFactory の設定

Lucene Directories には、ほとんどの場合に使用できるデフォルトのロック方針がありますが、Hibernate Search により管理される各インデックスに対して使用する LockingFactory を指定できます。
これらのロック方針のいくつかは、ファイルシステムレベルのロックを必要とし、RAM ベースのインデックスに対しても使用できます。ただし、これは推奨されない方法であり、実践的ではありません。
ロックファクトリを選択するには、hibernate.search.<index>.locking_strategy オプションを simplenativesingle、または none のいずれかに設定するか、あるいはorg.hibernate.search.store.LockFactoryFactory の実装の完全修飾名に設定します。このインターフェイスを実装することにより、カスタム org.apache.lucene.store.LockFactory を提供できます。

表3.4 利用可能な LockFactory 実装のリスト

name クラス 説明
simple org.apache.lucene.store.SimpleFSLockFactory
Java のファイル API をベースにした安全な実装。マーカーファイルを作成することにより、インデックスの使用をマークします。
何らかの理由でアプリケーションを終了する必要がある場合は、アプリケーションを再起動する前にこのファイルを削除する必要があります。
これは、FSDirectoryProviderFSMasterDirectoryProvider、および FSSlaveDirectoryProvider のデフォルトの実装です。
native org.apache.lucene.store.NativeFSLockFactory
simple と同様に、これもマーカーファイルを作成することによりインデックスの使用をマークします。ただし、アプリケーションがクラッシュした場合であってもロックがクリーンアップされるようにネイティブの OS ファイルロックが使用されます。
この実装には NFS に関する既知の問題が存在します。
single org.apache.lucene.store.SingleInstanceLockFactory
この LockFactory はファイルマーカーを使用しませんが、メモリ内で保持される Java オブジェクトロックです。したがって、インデックスが他のプロセスにより共有されない場合のみ使用できます。
これは、RAMDirectoryProvider のデフォルトの実装です。
none org.apache.lucene.store.NoLockFactory
このインデックスのすべての変更は、ロックにより調整されません。アプリケーションを慎重にテストし、何が行われるかを理解してください。
設定例:
hibernate.search.default.locking_strategy simple
hibernate.search.Animals.locking_strategy native
hibernate.search.Books.locking_strategy org.custom.components.MyLockingFactory