2012-09-04 5 views
6

私は、マネージドBeanでリモートステートフルセッションBean(EJB 3.0)からビジネスロジックを呼び出すJSFアプリケーションを持っています。@Remove注釈付きメソッドが呼び出されていない場合、ステートフルセッションBeanでリークが発生する可能性がありますか?

現在、ステートフルセッションBeanで@Remove注釈付きメソッドを呼び出すHttpSessionListenerがあるため、HttpSessionが破棄されるとすぐにステートフルセッションBeanをコンテナで削除できます。

ここで@Remove注釈付きメソッドを呼び出さずにHttpSessionが破棄されたらどうなるのでしょうか。ステートフルセッションBeanのクライアントにはログが存在しません。コンテナはステートフルセッションBeanを削除しますか?それとも永遠にある種のリーク(メモリ/ディスク)を引き起こしていますか?

答えて

9

はい、タイムアウトになると、コンテナは未使用のステートフルセッションBeanを削除します。とにかく、Beanの状態がもはや必要でないとき@Removeアノテートされたメソッドを呼び出すことは、それに続くパターンです。

ステートフルセッションBeanの削除タイムアウトは、アプリケーションサーバーの設定で設定できます。

4

@Removeアノテーションが指定されていない場合、ステートフルBeanは指定されたタイムアウト時間までコンテキスト内にとどまります。それは直接リークを呼び出すのではなく、依存関係を正しく管理しておらず、いくつかの参照が残っていると、メモリリークの可能性があります。したがって、@Remove注釈を使用することをお勧めします。

関連する問題