EAR (Java EE) приложение, которые слушают запрос сокета

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

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

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

спасибо.

9
задан bdoughan 8 May 2011 в 18:13
поделиться

3 ответа

Теперь, когда вы знаете разницу между «= =» и «=», позвольте мне высказать некоторые слова предосторожности. Несмотря на то, что «= =» используется в качестве стандартного теста равенства между сопоставимыми переменными и «=», используемыми в качестве внутреннего назначения по типу, следующая ошибка программирования является довольно распространенной.

В приведенном ниже примере и аналогичных кодах «» = «» называется условным оператором «» Always true «».

#include<stdio.h>
int main()
{
    int i = 10, j = 20;
    if ( i = j )
        printf("Equal\n");
    else
        printf("NOT Equal\n");
    return 0;
}

Таким образом, слово предостережения - «Никогда не используйте ' = ' в , если высказываний, если в вашем сознании нет чего-то злого»

. -121--4088921-

C # 4 не разрешит написанный код, поскольку метод AddCars ожидает IEnumerable < Car > , реализующий IPainting . Это не означает, что вы можете пройти любой класс, реализующий IPainting (например, вы можете иметь класс Bike: IPainting , который не имеет никакого отношения к классу Car . Однако это позволит другим путям вокруг; при наличии коллекции void AddCars (IEnumerable < IPainting >) можно передать методу List < Car > .

До тех пор нужно будет придерживаться передачи последовательностей Car методу, используя некоторый механизм литья (например, картины .Cast < Car > () , предложенный в других ответах).

-121--4594669-

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

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

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

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

11
ответ дан 4 December 2019 в 13:01
поделиться

На самом деле, все вы не правы. Вы можете отладить несколько программ одновременно.

Я не знаю, когда это было впервые реализовано, скорее всего, когда группы проекта были добавлены в Delphi, но я использую это, так как «Forewer», и я уверен, что по крайней мере Delphi 2005 был способен делать Это.

Короче говоря:

  • Создайте группу проекта с двумя программами.
  • Создайте их все! Вы не сможете использовать компилятор после запуска отладчика.
  • Активируйте первую программу (дважды щелкните его имени в менеджере программы) и нажмите F9 (RUN).
  • Активируйте вторую программу в менеджере программы (вы не можете использовать выпадание рядом с кнопкой панели инструментов «Запустить» для этого, так как она будет отключаться на предыдущем шаге) и нажмите F9.

Вуаля! У вас есть две программы, работающие под отладчиком. Вы можете установить точки останова в любом из них, и они будут работать просто файл.

Этот подход работает с любым количеством программ. (Там могут быть некоторые жесткозедированные ограничения, но я никогда не бегал в них.)

-121--3796777-

Все должно контролироваться контейнером, потому что это единственный способ иметь масштабирующую приложение с использованием 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)

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

4
ответ дан 4 December 2019 в 13:01
поделиться

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

1
ответ дан 4 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: