2012-04-11 12 views
3

ユーザーがアクティブであるかどうかを定期的に確認するセッションを持つすべてのユーザーに対して機能を実行したいと考えています。アクティブでない場合、関数はサーブレットコンテキスト内のユーザのリストからユーザを削除し、ユーザセッションをクリアします。Tomcat上で実行されているJavaサーブレットでセッションごとにバックグラウンドプロセスを実装するにはどうすればよいですか?

各ユーザーの定期的な時間間隔で機能を実行するために使用できるものは何ですか?

私が理解していることから、servletcontextlistenerはサーブレットの有効期間中に1回だけ実行され、各ユーザーには実行されないため、使用できません。また、スレッドを使用することはサーブレットに対して推奨されます。

編集: ユーザー(ajaxを使用)は、最後にサーバーに接続したことを示すユーザーごとに格納された変数を更新する関数を含むアクションを呼び出します。

+0

バックグラウンドスレッドは「ユーザーがアクティブであるかどうかを確認しますか」一般的には、クライアントへの永続的な接続はないので、クライアントが要求を送信したときだけ知ることができます。通常、クライアントが定期的なハートビートメッセージ(たとえば、AJAXを使用)を送信することによって、実行しようとしていることが達成されます。 –

+0

あなたが設定できるセッションの寿命は、あなたのために何をしていますか? – Thilo

+0

セッションは終了しますが、期限が切れると、サーブレットコンテキストの変数からユーザーを削除する機能が必要になります。 web.xmlファイルのsession-expireによって有効期限が切れたときに関数を実行する方法がわかりません。 – samwise

答えて

2

あなたはおそらくjavax.servlet.http.HttpSessionListenerを探しています。 1つを作成してweb.xmlに登録し、sessionDestroyedに作業を依頼してください。私は私の頭の上から考えることができる

+0

有望そうです。私はそれが動作するかどうかを確認するために実装しようとします。ありがとう。 – samwise

1

二つの方法:。

  1. 使用でrequest.getSession()setMaxInactiveInterval(someValueの)

  2. あなたの代わりに送信するのでは、AJAXを使用しているので、実際の「セッションを終了」リクエストを送るかもしれない "ユーザー活動"値。実際の「セッション・キル」ロジックはバックエンドにありますが、ユーザーがアクティブであるかどうかのロジックがクライアント側にあるため、これはhttpコールが少なくなることを意味します。

    Javascriptコードは、ユーザーがアクティブかどうかを確認するために毎分実行されます(実際に見ているものはわかりませんが、それは別の話です)。例えば5分後にユーザーがクライアント側で何もしなかった場合、ajaxコールがバックエンドに送信されてセッションが終了します。

関連する問題