ステートフルセッション Bean (SFSB) には、クライアント固有の状態が含まれています。クライアントとステートフルセッション Bean の間には、一対一の関係が存在します。作成時、EJB コンテナは各 SFSB に、クライアントにバインドするための一意のセッション ID を割り当てます。
サーバーインスタンスが失敗した場合に備えて、SFSB の状態を持続的なストアに保存することができます。SFSB の状態は、そのライフサイクル内のあらかじめ定義された時点に、持続性ストアに保存されます。これを、チェックポイント設定と呼びます。有効になっている場合、チェックポイント設定は一般に、トランザクションがロールバックする場合でも、Bean がトランザクションを完了したあとに実行されます。
ただし、SFSB が Bean 管理によるトランザクションに参加している場合、そのトランザクションは Bean メソッドの実行の途中でコミットされる可能性があります。このメソッド呼び出しの結果、Bean の状態は遷移している途中である可能性があるため、これは Bean の状態にチェックポイントを設定するのに適切なタイミングではありません。この場合、EJB コンテナは、対応するメソッドの終了時に Bean の状態にチェックポイントを設定します。ただし、メソッドの終了時に、その Bean が別のトランザクションの範囲に入っていないことが前提です。Bean 管理によるトランザクションが複数のメソッドにまたがっている場合は、後続のメソッドの終了時にアクティブなトランザクションが存在しなくなるまで、チェックポイント設定が遅延されます。
SFSB の状態は必ずしもトランザクションではなく、非トランザクションビジネスメソッドの結果として大幅に変更される可能性もあります。SFSB がこれに当てはまる場合は、「チェックポイントを設定するメソッドの指定」で説明しているように、チェックポイントを設定するメソッドのリストを指定することができます。
分散可能 Web アプリケーションが SFSB を参照しており、その Web アプリケーションのセッションがフェイルオーバーする場合は、EJB 参照もフェイルオーバーされます。
Communications Server インスタンスの停止中に、セッション持続性を使用している SFSB の配備が取り消されると、持続性ストア内のセッションデータがクリアされない可能性があります。これを回避するには、Communications Server インスタンスが動作している間、SFSB の配備を取り消します。
「EJB コンテナの可用性」タブを選択します。
「可用性サービス」ボックスにチェックマークを付けます。
可用性を無効にするには、このボックスのチェックマークを外します。
「可用性の設定」の説明に従って、ほかの設定を変更します。
「保存」ボタンをクリックします。
サーバーインスタンスを再起動します。
EJB コンテナの可用性を有効にするには、asadmin set コマンドを使用して、設定に次の 3 つのプロパティーを設定します。
availability-service.ejb-container-availability.availability-enabled
availability-service.ejb-container-availability.sfsb-persistence-type
availability-service.ejb-container-availability.sfsb-ha-persistence-type
たとえば、設定の名前が config1 の場合は、次のコマンドを使用します。
asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability.availability-enabled="true"
asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability.sfsb-persistence-type="file"
asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability.sfsb-ha-persistence-type="replicated"
「可用性サービス」の「EJB コンテナの可用性」タブを使用すると、次の設定を変更できます。
HA 持続型: 可用性が有効になっている SFSB のセッション持続性と非活性化メカニズムを指定します。使用できる値は、file (ファイルシステム) および replicated (ほかのサーバー上のメモリー) です。デフォルト値は replicated です。セッションの持続性が必要となる本稼動環境では、replicated を使用します。
SFSB 持続型: 可用性が有効になっていない SFSB の非活性化メカニズムを指定します。使用できる値は、file (デフォルト) および replicated です。
いずれかの持続型を file に設定すると、EJB コンテナによって非活性化されたセッション Bean が格納されるファイルシステムの場所が指定されます。ファイルシステムに対するチェックポイントはテストには有効ですが、本稼働環境には役立ちません。ストアプロパティーの設定については、管理コンソールのオンラインヘルプを参照してください。
HA 持続性によって、どのサーバーインスタンスが失敗した場合でも、サーバーインスタンスのクラスタは SFSB 状態を復元できます。HA ストアはまた、非活性化と活性化のストアとしても使用されます。SFSB 状態の持続性を必要とする本稼働環境では、このオプションを使用します。
可用性が無効になっている場合、ローカルファイルシステムは SFSB 状態の非活性化に使用されますが、持続性には使用されません。SFSB 状態が格納される場所を変更するには、EJB コンテナのセッション格納位置の設定を変更します。ストアプロパティーの設定については、管理コンソールのオンラインヘルプを参照してください。
配備中に、個々のアプリケーションまたは EJB モジュールの SFSB の可用性を有効にすることができます。
管理コンソールを使用して配備している場合は、可用性を有効にするチェックボックスをチェックします。
asadmin deploy または asadmin deploydir コマンドを使用して配備している場合は、--availabilityenabled オプションを true に設定します。詳細については、deploy(1) および deploydir(1)を参照してください。
個々の SFSB について可用性を有効にし、チェックポイントを設定するメソッドを選択するには、sun-ejb-jar.xml 配備記述子ファイルを使用します。
高可用性セッション持続性を有効にするには、ejb 要素に availability-enabled="true" を設定します。SFSB キャッシュのサイズと動作を制御するには、次の要素を使用します。
max-cache-size: キャッシュに保持されるセッション Bean の最大数を指定します。キャッシュがオーバーフローする (Bean の数が max-cache-size を超える) 場合、コンテナは一部の Bean を非活性化するか、または Bean の直列化された状態をファイルに書き出します。ファイルを作成するディレクトリは、設定 API を使用して EJB コンテナから取得されます。
resize-quantity
cache-idle-timeout-in-seconds
removal-timeout-in-seconds
victim-selection-policy
sun-ejb-jar.xml の詳細については、『Sun GlassFish Communications Server 1.5 Application Deployment Guide』の「The sun-ejb-jar.xml File」を参照してください。
<sun-ejb-jar> ... <enterprise-beans> ... <ejb availability-enabled="true"> <ejb-name>MySFSB</ejb-name> </ejb> ... </enterprise-beans> </sun-ejb-jar>
有効になっている場合、チェックポイント設定は一般に、トランザクションがロールバックする場合でも、Bean がトランザクションを完了したあとに実行されます。Bean の状態に重要な変更をもたらす非トランザクションビジネスメソッドの終了時に、SFSB のオプションのチェックポイント設定を追加で指定するには、sun-ejb-jar.xml 配備記述子ファイルの ejb 要素にある checkpoint-at-end-of-method 要素を使用します。
checkpoint-at-end-of-method 要素内の非トランザクションメソッドは、次のいずれかになります。
SFSB のホームインタフェースで定義された create() メソッド。作成の直後に、SFSB の初期状態にチェックポイントを設定する場合に使用します。
コンテナ管理によるトランザクションのみを使用している SFSB の場合は、トランザクション属性 TX_NOT_SUPPORTED または TX_NEVER でマークされた Bean のリモートインタフェースのメソッド。
Bean 管理によるトランザクションのみを使用している SFSB の場合は、Bean 管理によるトランザクションが起動もコミットもされないメソッド。
このリストに記述されているその他のメソッドはすべて無視されます。これらの各メソッドの呼び出しの終了時に、EJB コンテナは SFSB の状態を持続性ストアに保存します。
SFSB がどのトランザクションにも参加しておらず、checkpoint-at-end-of-method 要素で明示的に指定されているメソッドがない場合は、この Bean に対して availability-enabled="true" が設定されていても、この Bean の状態にチェックポイントは設定されません。
パフォーマンスを向上させるには、メソッドの小さなサブセットを指定します。これらのメソッドは一般に、大量の処理を実行するか、または Bean の状態に重要な変更をもたらします。
<sun-ejb-jar> ... <enterprise-beans> ... <ejb availability-enabled="true"> <ejb-name>ShoppingCartEJB</ejb-name> <checkpoint-at-end-of-method> <method> <method-name>addToCart</method-name> </method> </checkpoint-at-end-of-method> </ejb> ... </enterprise-beans> </sun-ejb-jar>