23.2. EJB 2.x 内の Entity Bean

最初に、2.x エンティティ Bean はクラスター化しない方がよいこと特記しておきます。クラスター化すると、クラスター化されたリモートオブジェクトに対するリモートオブジェクトとして使用するには粒度が細かすぎる要素を公開し、重大なデータ同期化に関する問題が発生する原因となります。 読み専用ノードや、 読み書き可能なノード 1 つと他の読み専用ノードをキャッシュ無効化サービスで同期化するような特殊な場合以外は、 EJB 2.x エンティティ Bean をクラスター化しないでください。
クラスター化したエンティティ bean を使用するには、 クラスター化された HA-JNDI から 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 に設定するしか方法はありません。 サポートされる分散型ロッキングメカニズムや分散型キャッシュがないため、 エンティティ Bean は、デフォルトでコミットオプション 「B」 を使用します。 (standardjboss.xml と コンテナー設定 Clustered CMP 2.x EntityBean、 Clustered CMP EntityBean、 Clustered BMP EntityBean を参照)。 エンティティ Bean が読み込み専用でない場合は、 コミットオプション 「A」 の使用は推奨できません 。

注記

BMP (Bean Managed Persistence: Bean 管理の永続性) を使用している場合は、ご自身で同期化を実装する必要があります。