最近、Smack フォーラムへの投稿を読みました。
Java EE サーバーでデーモン スレッドを開始することは、大したことではありません。
基本的に、Smack の XMPPConnection は、1 つのデーモン スレッドを開始して着信データを監視し、別のデーモン スレッドを開始して、それぞれ jabber サーバーとの間で発信データを送信します。このシナリオでデーモンスレッドを使用して書き込み/読み取りをリッスンすることは合理的ですか?
最近、Smack フォーラムへの投稿を読みました。
Java EE サーバーでデーモン スレッドを開始することは、大したことではありません。
基本的に、Smack の XMPPConnection は、1 つのデーモン スレッドを開始して着信データを監視し、別のデーモン スレッドを開始して、それぞれ jabber サーバーとの間で発信データを送信します。このシナリオでデーモンスレッドを使用して書き込み/読み取りをリッスンすることは合理的ですか?
はい、XMPPConnection は 2 つのスレッドを作成します。1 つはリスニング/読み取り用、もう 1 つは書き込み用です。しかし、これらは XMPPConnection インスタンスの間だけ存続します。これは永遠ではないと思います。
「Java EEサーバーでデーモンスレッドを開始することは、大したことではありません」
仕様に準拠した EJB を作成していますか? もしそうなら、これは当てはまります。仕様はそれをしないと言っています。EJB 2.1 仕様:
「エンタープライズ Bean は、スレッドの管理を試みてはなりません。エンタープライズ Bean は、スレッドの開始、停止、一時停止、再開、またはスレッドの優先度や名前の変更を試みてはなりません。エンタープライズ Bean は、スレッド グループの管理を試みてはなりません。」
それとも、たまたま Tomcat で実行されているのは単なる webapp ですか? これが事実であれば、根本的な問題はないと思います。スレッドがなければ、Smack クライアントはサーバーと通信できません。
スタンドアロン プログラムであるクライアント接続のみに Smack API を使用しました。まず、J2EE コンテナー内での Smack API の選択 (または目的) を再検討する必要があります。