私は Vysper で少し遊んでいて、それをTomEEの Java EE Web アプリケーションに埋め込んでいました。Vysper は、Java アプリケーションに簡単に埋め込むことができる Apache Mina に基づく XMPP サーバーのアルファ/ベータ バージョンです。Vysper インスタンスを @Startup / @Singleton スコープの Bean に正常にインスタンス化できました。ここまでは順調ですね。Eclipse内からバニラのTomEEインスタンスで実行すると、問題なく動作するようです。
しかし、その後、Java EE アプリケーションはスレッドを使用すべきではないことを思い出しました (スタック オーバーフローでこの回答を参照してください - Java EE コンテナー内のスレッドの生成が推奨されないのはなぜですか? )。よく覚えているのですが、誰かが Java EE アプリ内からそのようなことを実行する必要がある場合は、スレッドのラッパーさえあります。
TomEE+ が Quartz と ActiveMQ をバックエンドとして使用していくつかの Java EE サービスを実装していることは知っていますが、それらはコンテナーの一部であり、Web アプリケーションの一部ではありません。
Mina と Vysper は内部でスレッドを使用しているので、このコンテキストで Vysper を Java EE Web アプリケーションに直接埋め込むのは得策ではないのではないかと思います。もちろん、コンテナの外で XMPP サーバーをシステムの別のコンポーネントとして実行することもできます。これは、クラスター化された展開でもより理にかなっています。
しかし、スタンドアロン展開 (単一の TomEE) で実行していると仮定すると、埋め込まれた Vysper を Java EE Web アプリケーションに実行すると、内部でスレッドに依存するため、有害になる可能性がありますか? そうでない場合、なぜですか?