Может ли встроенный сервер XMPP в контейнере Java EE быть вредным из-за потоков?
Я немного поиграл с Vysper, встроив его в веб-приложение Java EE в TomEE. Vysper - это альфа / бета-версия XMPP-сервера на основе Apache Mina, которую можно легко встроить в Java-приложения. Я мог бы успешно создать экземпляр Vysper в компоненте @Startup / @Singleton. Все идет нормально. Кажется, все работает нормально, когда я запускаю его в ванильном экземпляре TomEE из затмения.
Но потом я вспомнил, что приложения Java EE не должны использовать потоки (см. Этот ответ при переполнении стека. Почему не рекомендуется создавать потоки в контейнере Java EE?). Если я хорошо помню, есть даже обертки для потоков, когда кому-то нужно запустить такую вещь из приложения Java EE.
Я знаю, что TomEE+ использует Quartz и ActiveMQ в качестве бэкэнда для реализации нескольких сервисов Java EE, но они являются частью контейнера, а не частью веб-приложения.
Могу поспорить, что Мина и Vysper используют потоки внутри себя, поэтому мне интересно, что не стоит встраивать Vysper непосредственно в веб-приложение Java EE в этом контексте. Конечно, я мог бы просто запустить сервер XMPP как другой компонент системы вне контейнера, что также имело бы больше смысла в кластерном развертывании.
Но предположим, что я работаю в автономном развертывании (один TomEE), запуск встроенного Vysper в веб-приложение Java EE может быть вредным, поскольку он опирается внутренне на потоки? Если это не так, почему?
1 ответ
Некоторые вещи запрещены, но они все менее и менее строги, и время (и большинство серверов EE) не навязывает это, иначе вы почти ничего не можете сделать.
Единственный сюрприз, который вы можете получить, - это ожидание управления (безопасность, CDI и т. Д.), И поскольку это не потоки контейнера, то и вы не являетесь. Если вы принимаете это правило игры, то никаких проблем.
PS: не забудьте правильно закрыть ваши темы