0

jsfアプリケーションを作成しました。このアプリケーションには、開始、停止ボタンを含むメニューがあります。開始を押すと、アプリケーションはWebサイトからデータの取得を開始し、データベースを更新します。アプリケーションには、更新プロセスの進行状況バーもあります。ただし、このプロセス完了するまでに時間がかかります。ブラウザを閉じると、データベースの更新が続行されます。また、もう一度開くと、以前の状態になります。ただし、これは発生しません。ブラウザを閉じると、アプリケーションも閉じます。どうすればよいですか?

ありがとう。

4

1 に答える 1

1

私の場合、セッションの寿命を延ばすつもりはありません。代わりに、タスクを作成し、タスクを実行するオブジェクトを@ApplicationScopedBean のキューに追加し、ジョブを開始したユーザーとジョブのステータスをデータベース (またはその他の場所) に保存します。

ユーザーがログオフ (手動でログオフするか、Web ブラウザーを閉じる) しても、タスクは (要求やユーザー セッションではなく) アプリケーション全体によって管理されるため、引き続き実行されます。ユーザーが再度ログインすると、このアプリケーション キューにタスクのステータスを問い合わせることができます。

(少なくとも)以下が必要です。

  • @ApplicationScopedタスクを含み、処理するマネージド Bean 。
  • 1 つまたは複数のタスクを同時に処理および実行する方法。ExecutorServiceこれは、または同様の技術で達成できます。注: 自分で新しいスレッドを手動で開始しようとしないでください。Web アプリケーション サーバーが停止するだけです。
  • ユーザーが開始したタスクにユーザーをマップするための構造。Map<String, List<Task>>1 人のユーザーが同時に複数のタスクを持つことができるように、 でマップできます。メモリに常駐しないこれらのタスクのログを取得するには、これをデータベース (または同様のもの) に保存することをお勧めします。Web アプリケーションをアンデプロイしたり、サーバーが突然シャットダウンしたりした場合に、savestate ポイントから手元のタスクを再開できるように、これを設計することもできます。
于 2012-11-12T14:12:36.627 に答える