Будет ли Smack работать внутри Java EE, да и нет.Smack будет работать внутри веб-контейнера, но поскольку он создает свои собственные потоки, он НЕ будет работать внутри EJB-контейнера.Так что он будет работать в зависимости от того, где вы его выполняете.
Чтобы понять некоторые из ваших проблем, вы должны понимать, что жизненный цикл ваших объектов в сервлете связан с циклом запрос / ответ каждого запроса.Это не то же самое, что стандартное Java-приложение, в котором объекты обычно живут столько времени, сколько вам нужно, поскольку вы контролируете их жизненный цикл.
Например, в показанном вами коде вы создаете соединениедля каждого запроса (полагаю, так как не весь код показан).Поэтому регистрация прослушивателей для этого соединения будет бессмысленной, поскольку она выйдет из области видимости, как только вы выйдете из метода, и в конечном итоге соберет мусор.Чтобы это работало, вам нужно будет поддерживать соединения вне области запросов сервлета, в противном случае вы будете открывать и закрывать соединения для каждого запроса.
XMPP по своей природе является полностью асинхронным, тогда как запросы сервлетов являются синхронными.Вы должны приложить некоторые усилия, чтобы заставить их работать вместе, поэтому не ожидайте, что код, работающий в автономном приложении, просто будет работать в этой среде.