Session Beanのライフサイクルは,次に示す場合によって異なります。
(a) Stateless Session Beanの場合
Stateless Session Beanのライフサイクルを次の図に示します。
図2-1 Stateless Session Beanのライフサイクル
![[図データ]](figure/zu020100.gif)
- does not exist:
- Stateless Session Beanが存在しない状態
- method-ready pool:
- Stateless Session Beanが実行可能状態としてmethod-readyプール内に存在する状態
(b) Stateful Session Beanの場合
Stateful Session Beanのライフサイクルを次の図に示します。
図2-2 Stateful Session Beanのライフサイクル
![[図データ]](figure/zu020200.gif)
- does not exist:
- Stateful Session Beanが存在しない状態
- method-ready:
- Stateful Session Beanがアクティベイトされ,実行可能状態としてmethod-readyプール内に存在する状態(トランザクションなし)
- method-ready in TX:
- Stateful Session Beanがアクティベイトされ,実行可能状態としてmethod-readyプール内に存在する状態(トランザクションあり)
(c) Singleton Session Beanの場合
Singleton Session Beanのライフサイクルを次の図に示します。
図2-3 Singleton Session Beanのライフサイクル
![[図データ]](figure/zu020210.gif)
- does not exist:
- Singleton Session Beanが存在しない状態
- method-ready:
- Singleton Session Beanが実行可能な状態
Singleton Session Beanの初期化は,EJBコンテナによって実行されます。なお,初期化のタイミングは,アノテーションの指定によって,アプリケーション開発時に明示的に定義できます。
- アプリケーションの開始処理内でSingleton Session Beanを初期化したい場合は,Singleton Session Beanクラスに@Startupアノテーションを指定します。これによって,外部のクライアントからリクエストが送信される前に初期化処理が実行されます。
- @DependsOnアノテーションを指定すると,Singleton Session BeanとほかのSingleton Session Beanのコンポーネントの作成順序を定義できます。
Singleton Session Beanのインスタンスは,初期化されると,アプリケーションが停止するまで存在します。Singleton Session Beanが破棄されるタイミングでのEJBコンテナの動作は次のとおりです。
- PreDestroy処理を実行するコールバックインターセプタメソッドが存在する場合は,該当のメソッドを呼び出します。このメソッドが呼び出されている間,EJBコンテナはDependOnによって依存関係が指定されたすべてのBeanが利用できるように,状態を保持します。
- PreDestroy処理の完了後,EJBコンテナによってSingleton Session Beanのインスタンスが削除されます。