2009-04-07 7 views
2

サーブレットコンテナ、つまりTomcatで長寿命のXMPP接続を管理する方法についてのコメントがあります。サーブレット経由でのXMPPサーバーへのログインの処理

基本的には、ログイン資格情報をサーブレットに送信するクライアントがあり、セッションごとにXMPPConnectionを作成し、HttpSessionに格納します。

簡単に言うと、クライアントは、ログイン、メッセージの送受信、ログアウトの4つの操作を実行できます。

(1)ご覧のとおり、XMPPConnectionの有効期間は、クライアント によって処理(制御)される必要があります。私たちの場合、HttpSessionにはタイムアウトが関連付けられています。 HttpSessionへの依存は間違いだと思いますか?

(2)ガベージコレクションの観点からは、HttpSessionがタイムアウトしたときに問題がありますか? 特にXMPPConnection.disconnect()を呼び出さないでください。タイムアウトに達すると、Sessionスコープ内のすべてのオブジェクトがGCされます。 XMPPConnectionがまだ接続されていれば、VMはそれを見て無視しますか?

(3)HttpSessionのタイムアウトと無効化の違いは何ですか?タイムアウトは特定のオブジェクトを参照していますが、無効化 はすべてを削除します。

答えて

0

(1)良い方法があるかもしれませんが、セッションにXMPP資格情報を格納する際に問題が発生するとは限りません。私は最近、似たようなことをして、HttpSessionに依存しました。

(2)タイムアウトの問題を解決するには、いくつかのオプションがあります。サーブレットがメッセージの送受信(session.setTimeout())を行う場合でも、セッションタイムアウトを動的に設定することも、web.xmlで静的な値にすることもできます(値-1はタイムアウトを意味しません)。次に、SessionListenerを作成し、sessionDestroyedでXMPPConnection.disconnect()を呼び出すことができます。

+0

ありがとうございました。それがあなたのために働いたことを知ってうれしいです(re:XMPPConnection in HttpSession)。代わりにSessionAttributeListenerを使用します。それは同じ目標を達成するはずです。 –

関連する問題