まずはじめに、2.x エンティティ Bean をクラスタリングすべきではないということを認識しておいてください。一般的にリモートオブジェクトとして使用するには精密すぎる要素を露呈し、重要なデータ同期の問題が生じます。読み取り専用か、または1台の読み書きできるノードとキャッシュ無効化サービスと同期する読み取り専用ノードの組み合わせという特別な状況に合う場合でなければ、 EJB 2.x エンティティ Bean のクラスタリングは使用すべきではありません。
EJB 2.x エンティティ Bean をクラスタ化するには、 <clustered> 要素をアプリケーションの jboss.xml デスクリプタファイルに加える必要があります。以下は標準的な jboss.xml ファイルです。
<jboss>
<enterprise-beans>
<entity>
<ejb-name>nextgen.EnterpriseEntity</ejb-name>
<jndi-name>nextgen.EnterpriseEntity</jndi-name>
<clustered>True</clustered>
<cluster-config>
<partition-name>DefaultPartition</partition-name>
<home-load-balance-policy>
org.jboss.ha.framework.interfaces.RoundRobin
</home-load-balance-policy>
<bean-load-balance-policy>
org.jboss.ha.framework.interfaces.FirstAvailable
</bean-load-balance-policy>
</cluster-config>
</entity>
</enterprise-beans>
</jboss>
EJB 2.x エンティティ Bean はロードバランスされたリモートの呼び出しのためにクラスタ化されています。全ての Bean インスタンスは、全てのノードで同じコンテンツを持つように同期されています。
しかし、クラスタ化された EJB 2.x エンティティ Bean は分散ロックメカニズムまたは分散キャッシュを持っていません。それらは、データベースレベルでの行レベルのロックを使用することにより (CMP 仕様の中の<row-lock> 参照) 、もしくは JDBC ドライバのトランザクション分離レベルを TRANSACTION_SERIALIZABLE にセットすることにより、同期させることができます。なぜならば、サポートされている分散ロックメカニズムやデフォルトでコミットオプション "B" を使用する分散キャッシュエンティティ Bean がないからです ( standardjboss.xml やクラスタ化された CMP 2.x エンティティ Bean、クラスタ化された CMP エンティティ Bean、 およびクラスタ化された BMP エンティティ Bean の設定を参照) 。エンティティ Bean が読み取り専用でない限り、コミットオプション "A" を使用することは推奨されません。(コミットオプション "A" を read-mostly Bean で使用を可能にする、いくつかのデザインパターンがあります。また、 Seppuku パターン http://dima.dhs.org/misc/readOnlyUpdates.html を参照できます。 JBoss は将来のバージョンでこのパターンを取り入れるかもしれません。)
もし Bean 管理パーシステンス (BMP) を使用している場合、自分で同期の実装をしなければなりません。 MVCSoft CMP 2.0 パーシステンスエンジン (http://www.jboss.org/jbossgroup/partners.jsp を参照) は、 JBoss クラスタで機能する別の種類のオプティミスティックロックストラテジーを提供します。