私の場合、セッションの寿命を延ばすつもりはありません。代わりに、タスクを作成し、タスクを実行するオブジェクトを@ApplicationScoped
Bean のキューに追加し、ジョブを開始したユーザーとジョブのステータスをデータベース (またはその他の場所) に保存します。
ユーザーがログオフ (手動でログオフするか、Web ブラウザーを閉じる) しても、タスクは (要求やユーザー セッションではなく) アプリケーション全体によって管理されるため、引き続き実行されます。ユーザーが再度ログインすると、このアプリケーション キューにタスクのステータスを問い合わせることができます。
(少なくとも)以下が必要です。
@ApplicationScoped
タスクを含み、処理するマネージド Bean 。
- 1 つまたは複数のタスクを同時に処理および実行する方法。
ExecutorService
これは、または同様の技術で達成できます。注: 自分で新しいスレッドを手動で開始しようとしないでください。Web アプリケーション サーバーが停止するだけです。
- ユーザーが開始したタスクにユーザーをマップするための構造。
Map<String, List<Task>>
1 人のユーザーが同時に複数のタスクを持つことができるように、 でマップできます。メモリに常駐しないこれらのタスクのログを取得するには、これをデータベース (または同様のもの) に保存することをお勧めします。Web アプリケーションをアンデプロイしたり、サーバーが突然シャットダウンしたりした場合に、savestate ポイントから手元のタスクを再開できるように、これを設計することもできます。