9.10.1 Stateful Session Beanの実行時プロパティの設定
アプリケーションを構成する個々のStateful Session Beanに対して,アプリケーション実行時のプロパティを設定します。
(1) 編集する属性ファイル
Session Bean属性ファイル
(2) 編集する属性ファイルの取得と属性の設定
-
属性ファイルの取得
次に示すコマンドを実行してSession Bean属性ファイルを取得します。
- 実行形式
cjgetappprop [<サーバ名称>] [-nameserver <プロバイダURL>] -name <J2EEアプリケーション名> -type ejb -resname <EJB-JAR表示名>/<Stateful Session Bean表示名> -c <Session Bean属性ファイルパス>
- 実行例
cjgetappprop MyServer -name adder -type ejb -resname adder/MyAdder -c C:\home\MyAdder.xml
-
属性の設定
次に示すコマンドを実行して,Session Bean属性ファイルの値を反映します。
- 実行形式
cjsetappprop [<サーバ名称>] [-nameserver <プロバイダURL>] -name <J2EEアプリケーション名> -type ejb -resname <EJB-JAR表示名>/<Stateful Session Bean表示名> -c <Session Bean属性ファイルパス>
- 実行例
cjsetappprop MyServer -name adder -type ejb -resname adder/MyAdder -c C:\home\MyAdder.xml
(3) 編集する属性設定項目
Stateful Session Beanの実行時プロパティは,次の二つに分けられます。
-
Session Bean共通の実行時属性
-
Stateful Session Bean固有の属性
ぞれぞれの設定項目を次に示します。
(a) Session Bean共通の実行時属性
Session Bean共通の実行時属性(<runtime>)のプロパティ設定項目を,次に示します。
項目 |
必須 |
対応するタグ名 |
---|---|---|
Enterprise Beanのルックアップ名※1 |
○ |
<lookup-name> |
リモートインタフェースを持つEnterprise Bean名の別名※1 |
△ |
<optional-name> |
ローカルインタフェースを持つEnterprise Bean名の別名※1 |
△ |
<local-optional-name> |
セッション最大数※2 |
△ |
<maximum-sessions> |
参照渡しの設定※3 |
△ |
<pass-by-reference> |
プロパティの設定項目については,マニュアル「アプリケーションサーバ リファレンス 定義編(アプリケーション/リソース定義)」の「3.4.1 Session Bean属性ファイルの指定内容」を参照してください。
(b) Stateful Session Bean固有の属性
Stateful Session Bean固有の実行時属性(<runtime> - <stateful>)のプロパティ設定項目を,次に示します。
項目 |
必須 |
対応するタグ名 |
---|---|---|
アクティブセッションの最大数 |
○ |
<maximum-active-sessions> |
再び活性化するまでに,非活性化状態に保持している時間 |
○ |
<inactivity-timeout> |
セッションが削除されるまでに非活性化状態に保持している時間 |
○ |
<removal-timeout> |
プロパティの設定項目については,マニュアル「アプリケーションサーバ リファレンス 定義編(アプリケーション/リソース定義)」の「3.4.1 Session Bean属性ファイルの指定内容」を参照してください。
プロパティ項目の設定と動作について,次に説明します。
- アクティブセッションの最大数
-
生成されたStateful Session Beanの状態には,次の二つの状態があります。
-
method-ready状態
-
passive状態
method-ready状態のStateful Session Beanは,EJBクライアントアプリケーションからアクセスされた時点ですでに実行できるようになっています。
passive状態のStateful Session Beanは,活性化されmethod-ready状態になってから実行できます。
アクティブセッションの最大数に,同時にmethod-ready状態になることができるStateful Session Beanの最大数を指定します。この値は,複数のEJBクライアントアプリケーションからアクセスされたときに,すぐに実行開始できるStateful Session Beanの最大数です。ここで指定した数以上のStateful Session Beanが生成された場合,method-ready状態のStateful Session Beanが幾つか非活性化されpassive状態になります。ただし,このとき,method-ready状態のStateful Session Beanの中でトランザクション中のものについては,非活性化の対象になりません。セッション最大数,またはアクティブセッションの最大数に「0」を指定した場合は,非活性化の機能は動作しません(Stateful Session Beanがmethod-ready状態からpassive状態に移りません)。
-
- 再び活性化するまでに,非活性化状態に保持している時間(デフォルト:0(分))
-
タイムアウト値を分単位で指定します。ここで指定された時間が経過するまでにpassive状態のStateful Session Beanが活性化されない場合,このBeanは削除されます。再び活性化するまでに,非活性化状態に保持している時間に「0」を設定した場合は,タイムアウトは発生しません。また,Stateful Session Beanのインスタンスの削除は,指定した<inactivity-timeout>値に対し,最大でejbserver.container.passivate.scan.intervalに指定した時間分の遅延が生じることがあります。この起動間隔を変更したい場合は,usrconf.propertiesファイルのシステムプロパティejbserver.container.passivate.scan.intervalに起動間隔を秒単位で指定してください。デフォルトでは0秒が設定されています。ejbserver.container.passivate.scan.intervalの指定例を次に示します。
10分間隔でpassive状態のStateful Session Beanの削除機能を起動したい場合
ejbserver.container.passivate.scan.interval=600
- セッションが削除されるまでに非活性化状態に保持している時間(デフォルト:0(分))
-
タイムアウト値を分単位で指定します。method-ready状態のStateful Session Beanがここで指定された時間の間,一度も使用されない場合,このBeanは削除されます。ただし,このとき,method-ready状態のStateful Session Beanの中でトランザクション中のものについては,削除の対象になりません。
セッションが削除されるまでに非活性化状態に保持している時間に「0」を設定した場合は,タイムアウトは発生しません。また,Stateful Session Beanのインスタンスの削除は,指定した<removal-timeout>値に対し,最大でejbserver.container.remove.scan.intervalに指定した時間分の遅延が生じることがあります。この起動間隔を変更したい場合は,J2EEサーバ用のusrconf.propertiesファイルのejbserver.container.remove.scan.intervalに起動間隔を分位で指定してください。デフォルト値には5分が仮定されています。ejbserver.container.remove.scan.intervalの指定例を次に示します。
10分間隔でmethod-ready状態のStateful Session Beanの削除機能を起動したい場合
ejbserver.container.remove.scan.interval=10
(4) 注意事項
-
デフォルトのユーザ定義では,「ejbActivate,ejbPassivateを呼び出し,Stateful Session Beanの状態を保存,復元する機能」であり,デフォルトでは,Stateful Session Beanの活性化,非活性化は動作しません。したがって,Stateful Session BeanのEnterprise Bean実行時プロパティとして設定できる,<maximum-active-sessions>の設定は有効になりません。また,非活性化されたStateful Session Beanをタイムアウトで削除する機能は,動作しません。したがって,Stateful Session BeanのEnterprise Bean実行時プロパティとして設定できる,<inactivity-timeout>の設定は有効になりません。
-
活性化,非活性化の機能を利用する場合は,J2EEサーバ用のusrconf.propertiesファイルで,ejbserver.stateful.passivate.switchキーに対し「true」を指定します。
-
非活性化が動作するとき,Stateful Session Beanの状態はファイルに書き込むことで保存され,インスタンスは破棄されます。逆に活性化が動作するときはファイルからStateful Session Beanの状態が読み込まれインスタンスが復元されます。活性化,非活性化が動作する場合,Stateful Session Bean(またはそれが参照するクラス)のメンバ変数に設定されているオブジェクトも保存,復元の対象になります。このとき,保存,復元ができるものを次に示します。
-
直列化できるオブジェクト
-
EJBオブジェクトリファレンス
-
EJBホームオブジェクトリファレンス
-
"java:comp/env"のルックアップで取得したjavax.naming.Context
-
javax.ejb.SessionContext
なお,javax.jta.UserTransactionは保存,復元できないため,メンバ変数に保持しないでください。保存,復元ができないオブジェクトをメンバ変数に保持している場合は,ejbPassivateで解放し(メンバ変数にnull代入),ejbActivateで再取得してください。
-
-
同時に生成できるStateful Session Beanのセッションの最大数とmethod-ready状態のStateful Session Beanの最大数は次の条件を満たすように指定してください。
method-ready状態のStateful Session Beanの最大数≦同時に生成できるStateful Session Beanのセッションの最大数
また,同時に生成できるStateful Session Beanのセッションの最大数を指定した場合,method-ready状態のStateful Session Beanの最大数も指定する必要があります。