Правильный подход заключается в создании адаптера JCA для этого. Адаптер JCA можно использовать для исходящего или входящего подключения. Вам разрешено начинать работу или планировать работу в адпатере JCA. входящее подключение от адаптера JCA к EJB выполняется с помощью пользовательского компонента, управляемого сообщениями.
- Адаптер запускает прослушиватель сокетов и управляет подключением с удаленных клиентов
- Когда пакет получен, сообщение доставляется на пользовательский MDB
- Затем MDB может делегировать обработку другим EJB
Вы даже можете запустить транзакцию из коннектора JCA, чтобы доставить сообщение / пакет в EJB. JCA является частью спецификаций Java EE и поддерживается всеми серверами приложений.
Другой подход (но не совместимый со спецификацией) заключается в запуске потока, который слушает сокет, из ServletContextListener
. Поток будет работать в веб-слое, и вы можете вызывать EJB как обычно. Внедрение зависимостей не будет работать, но поиск JNDI все равно должен быть в порядке.