第22章 クラスター化されたセッション EJB

セッション EJB はリモート呼び出しサービスを提供します。 このセッションはクライアント側のインターセプターアーキテクチャーに基づいてクラスタ化されます。 クラスター化されたセッション Bean のクライアントアプリケーションは、 若干の変更を除きセッション Bean のクラスター化されていないバージョンのクライアントと同じです。 クライアント側ではコードの変更や再コンパイルは必要ありません。 それでは、 EJB 3.0 と EJB 2.x のサーバーアプリケーションそれぞれでクラスター化されたセッション Bean を設定する方法について見てみましょう。

22.1. EJB 3.0 のステートレスセッション Bean

ステートレスセッション Beanのクラスター化は、 ステートが関係しないため、 最も簡単なケースだと言えます。 呼び出しは、 クラスターの参加しているノード (この特定の Bean がデプロイされたすべてのノード) すべてへ呼び出しの負荷を分散することができます。
EJB 3.0 でステートレスセッション Bean をクラスターするには、 @Clustered アノテーションを用いて、 Bean クラスにアノテーションを付けます。 このアノテーションには、 負荷分散ポリシーと使用するパーティションの両方を上書きするオプションのパラメーターが含まれます。
public @interface Clustered
{
   String partition() default "${jboss.partition.name:DefaultPartition}";
   String loadBalancePolicy() default "LoadBalancePolicy";
}
  • partition は、 Bean が参加するクラスタの名前を指定します。 @Clustered アノテーションで、個別の Bean に対してデフォルトパーティション DefaultPartition を上書きできますが、 jboss.partition.name システムプロパティを使用するとすべての Bean に対して上書きできます。
  • loadBalancePolicy は、 クラスターのノード上の呼び出しを Bean スタブが分散する方法を示し、 org.jboss.ha.client.loadbalance.LoadBalancePolicy を実装するクラス名を定義します。 デフォルト値 LoadBalancePolicy は、セッション Bean タイプのデフォルトポリシーを示す特別なトークンです。 ステートレスセッション Bean のデフォルトポリシーは org.jboss.ha.client.loadbalance.RoundRobin です。 独自の実装を使用してデフォルト値を上書き、あるいは使用できるポリシーのリストより選択することができます。
    org.jboss.ha.client.loadbalance.RoundRobin
    無作為のターゲットから開始し、 負荷分散を最大限にするため、 常にリスト上で次に利用できるターゲットを選択しようとします。
    org.jboss.ha.client.loadbalance.RandomRobin
    以前に選択されたターゲットを考慮せずに、 無作為にターゲットを選択します。
    org.jboss.ha.client.loadbalance.aop.FirstAvailable
    ターゲットが選択されると、 同じターゲットを選択しようとします (これ以上負荷分散が行われません)。 ステートフルセッション Bean など、「スティッキーセッション」動作が望まれる場合に便利です。
    org.jboss.ha.client.loadbalance.aop.FirstAvailableIdenticalAllProxies
    FirstAvailable と似ていますが、 希望のターゲットがすべてのプロキシで共有されます。
以下は、クラスター化された EJB 3.0 のステートレスセッション bean の実装例になります。
@Stateless
@Clustered
public class MyBean implements MySessionInt
{
   public void test()
   {
      // Do something cool
   }
}
@Clustered アノテーションを使用する代わりに、 jboss.xml のセッション Bean に対してクラスタリングを有効にすることもできます。
 
<jboss>    
   <enterprise-beans>
      <session>
         <ejb-name>NonAnnotationStateful</ejb-name>
         <clustered>true</clustered>
         <cluster-config>
            <partition-name>FooPartition</partition-name>
            <load-balance-policy>org.jboss.ha.framework.interfaces.RandomRobin</load-balance-policy>
         </cluster-config>
      </session>    
   </enterprise-beans>
</jboss>

注記

<clustered>True</clustered> 要素は conf/standardjboss.xml ファイルの <configuration-name>Clustered Stateless SessionBean</configuration-name> 要素のエイリアスにすぎません。
この Bean の設定では、 Bean がクラスタリング機能のサポートを必要とすることを示す <clustered> 要素のみが必須です。 オプションの <cluster-config> 要素のデフォルト値は @Clustered アノテーションからの対応するプロパティと一致します。