0

ユーザーが ViewScoped バッキング Bean を利用する JSF ページで作業している状況を想像してください。アプリケーション内の別のページに移動する場合、Bean のカスタム デストラクタ (@PreDestroy) が自動的に呼び出されます。ユーザーがタブ/ウィンドウを適切に閉じる場合、Bean を解放するために AJAX を介してサーバーでリモート コマンドを呼び出すことができます。

しかし、単純にユーザー側の電源が落ちて、PC の電源がすぐに切れたり、ブラウザーが不適切に終了して JS コードを呼び出すことができなくなったりした場合はどうなるでしょうか。これは、Bean がそのリソースを使用してサーバー側で永遠にハングアップすることを意味します。そのような問題はどのように解決できますか?

私が考えている解決策の 1 つは、リモート コマンドを介してマネージド Bean を「ping」する PrimeFaces ポーリング要素をページに配置することです。Bean がタイムアウトに気付くと、すべてのリソースを解放して終了します。この問題のより良い解決策はありますか? どうも。

4

1 に答える 1

0

基本的に、ViewScoped Bean はセッションより長く続くことはありません。セッションのタイムアウトは構成可能であるため、Bean は「サーバー側で永久にハングアップする」ことはありません。

ただし、ポーリング ベースのソリューションを実装して、ビュー スコープ Bean が使用するメモリを解放することはできます。しかし、突然の電源喪失や誤ってブラウザーを閉じてしまうことは (「通常の」使用法と比較して) めったに起こらないため、ポーリングによる直接的なリソースの浪費は、浪費されたメモリーよりもはるかに高くつきます。

簡単に言うと、次の場合、問題は存在しません。

  • クライアント側の状態保存を使用しています
  • サーバー側の状態保存を使用しており、セッション タイムアウトが適切に構成されている
于 2012-08-28T11:10:15.833 に答える