6

マネージド Bean でリモート ステートフル セッション Bean (EJB 3.0) からビジネス ロジックを呼び出す JSF アプリケーションがあります。

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

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

4

2 に答える 2

9

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

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

于 2012-09-04T09:30:57.720 に答える
4

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

于 2012-09-04T09:35:36.343 に答える