приложение EAR (Java EE), которое прослушивает запрос сокета - PullRequest
9 голосов
/ 28 января 2010

Я хочу создать приложение Java EE (EAR), которое не только предоставляет веб-службу (WAR) или прямой JMS-запрос (EJB), но и хотелось бы также принять запрос сокета (например, пакет UDP).

Я попытался написать слушатель с помощью java.net.DatagramSocket, позволить ему работать как отдельный процесс и перенаправить запрос в мое приложение EAR.

вопрос в том .. Как я могу без проблем встроить такой слушатель сокетов в приложение Java EE (EAR)?

спасибо.

Ответы [ 3 ]

11 голосов
/ 28 января 2010

Правильный подход заключается в создании адаптера JCA для этого. Адаптер JCA можно использовать для исходящего или входящего подключения. Вам разрешено начинать работу или планировать работу в адпатере JCA. входящее подключение от адаптера JCA к EJB выполняется с помощью пользовательского компонента, управляемого сообщениями.

  • Адаптер запускает прослушиватель сокетов и управляет подключением с удаленных клиентов
  • Когда пакет получен, сообщение доставляется на пользовательский MDB
  • Затем MDB может делегировать обработку другим EJB

Вы даже можете запустить транзакцию из коннектора JCA, чтобы доставить сообщение / пакет в EJB. JCA является частью спецификаций Java EE и поддерживается всеми серверами приложений.

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

4 голосов
/ 28 января 2010

Все должно контролироваться контейнером, потому что это единственный способ иметь масштабирующее приложение, использующее Java EE.

Несколько вариантов:

  • Реализация коннектора (JCA), например, здесь: http://www.theserverside.com/tt/articles/article.tss?l=J2EE1_4 вероятно, лучший способ, если у вас есть существующие клиенты.

  • Использовать очереди сообщений Java

    Связь между этими методами обсуждается здесь http://java.sun.com/products/jms/faq.html#relship_ejbs

  • Запись внешнего сервера, который хранит запросы в базе данных. (Без поддержки Tx)

  • Если у вас есть только один сервер, и это требует слишком много времени, вы можете игнорировать эти аспекты. Но если вам нужны транзакции позже или дополнительные узлы, эта часть должна быть переработана.

1 голос
/ 28 января 2010

Насколько я знаю, это не соответствует спецификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...