0

というバッキング セッション スコープ Bean がありWorkSessionます。この Bean のインスタンスが作成されると、初期化関数 (@PostConstructアノテーションで宣言) を呼び出します。これにより、データベースの現在のユーザー (JASS でユーザー ログを処理します) のステータスが に変更されますONLINE

ユーザーがログアウトしたときに類推したい(ユーザーステータスをに変更するOFFLINE)。ユーザーが Web ページの「ログアウト」ボタンを押すと、これを簡単に行うことができます。問題は、閉じたブラウザーまたはブラウザーのタブを検出する方法がわからないことです。

アプリケーションサーバーのガベージコレクターによって呼び出されるため、アノテーション付き@PreDestroyのメソッドはこれには機能しません。

Glassfish 3.1.2、JPA 2,0、および JSF 2.0 を使用しています。

4

1 に答える 1

1

@PreDestroyアプリケーションサーバーのガベージコレクターによって呼び出されるため、アノテーション付きのメソッドはこれでは機能しないことがわかります。

それはうまくいくはずです。GCからは絶対に呼び出されません。セッションが破棄されると、コンテナによって呼び出されます。おそらくあなたの具体的な問題は、ユーザーがブラウザ全体を閉じるとすぐにセッションが破棄されることを期待していたことです。したがって、これは真実ではありません。サーバー側でタイムアウトした場合にのみ破棄されます。デフォルトのタイムアウトは30分です。したがって、30分待つと、セッションが破棄され、@PreDestroyすべてのセッション(およびビュー)スコープのBeanが呼び出されます。

でデフォルトのタイムアウトを設定でき<session-config><session-timeout>ますweb.xml

参照:


ちなみに、「セッション切断」という用語は、Web開発の世界ではまったく意味がありません。

于 2012-04-22T21:36:57.440 に答える