Какая разница между ActivationSpec и ConnectionFactory?

Я понимаю, что:

  • MD B s (Message Driven Beans) подключается через спецификацию активации.
  • MD P s (Message Driven POJO) подключается через Connection Factory.

Эта диаграмма от IBM полезна:

enter image description here

Для меня это объяснение от IBM не проливает много света на разницу:

  • Соединение factory - используется приложением для подключения к шине обмена сообщениями.
  • Очередь - используется приложением для отправки и получения сообщений.
  • Спецификация активации - используется приложением bean, управляемым сообщением, для подключения к очереди и приема сообщений.

Одна реальная разница которую я нашел, заключается в том, что:

Сессия beans и сущность beans [aka MDPs] позволяют отправлять сообщения JMS и получать их синхронно, но не асинхронно. Чтобы избежать связывания серверных ресурсов, вы можете не использовать блокировку синхронных получает в серверном компоненте. Получение сообщений асинхронно используйте управляемый сообщениями bean [MDB].

Итак, неудовлетворительный список, который у меня есть до сих пор:

  • Используйте ActivationSpec с MDB и ConnectionFactory с POJO (но подождите, может ли POJO использовать ActivationSpec тоже?)
  • MDB работает асинхронно. MBP работает синхронно.

Мой вопрос: существуют ли другие различия? Вы можете уточнить разницу?

Литература:

Ответы

Ответ 1

@Jeffrey Knight: Позвольте мне попытаться разъяснить, основываясь на моем опыте.

Мы понимаем, что MDB beans потребляет входящие сообщения. Теперь необходимо указать, какие сообщения, из какого адресата хочет потреблять конкретный MDB.

MDB - это в основном конечная точка сообщения.

До MDC, совместимых с JCA:

поток в websphere был: -

входящее сообщение → прослушивается слушателем сообщения → прослушиватель порты → доставить в MDB

Таким образом, разработчик должен создать MDB и указать детали адресата сообщения в ejb-jar.xml следующим образом: -

<message-driven-destination>
    <destination-type>javax.jms.Queue</destination-type>
</message-driven-destination>
<res-ref-name>jms/QCF</res-ref-name>
<resource-ref>
    <res-type>javax.jms.QueueConnectionFactory</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

и разработчику потребуется создать порт слушателя и связать развернутый MDB с портом слушателя. QueueConnectionFactory, указанная выше, предназначена для создания подключений к очереди.

Опубликовать совместимые с JCA MDB:

Post JCA, MDB рассматривается как ресурс JCA. Спецификация JCA также включает интерфейсы API обмена сообщениями. Поток в случае JCA: -

incoming message --> listened by Message listener --> Resource Adapter-->deliver to MDB

Теперь, когда JCA была создана для работы с любым типом resouce, это JDBC, JMS, EIS и т.д., поэтому у него есть общий способ "Activation Spec" для создания конфигураций для любого адаптера. В файле ra.xml упоминается, какой тип активации необходим для того, чтобы этот конкретный адаптер работал. Спецификация активации не является средой выполнения, это просто детали конфигурации, используемые адаптером ресурсов. В вышеприведенном случае адаптер JCA будет использовать соединение из очереди на соединение factory, указанное в спецификации активации. Таким образом, в основном соединение в очереди factory в обоих случаях одинаково.

В случае веб-сферы вы можете использовать либо SIB (Service Integration Bus) для обмена сообщениями, либо внешнее программное обеспечение, такое как websphere MQ для обмена сообщениями.

В случае назначения SIB для обмена сообщениями: - SIB реализовал адаптер ресурсов JCA. Таким образом, MDB, использующий пункт назначения в SIB, может использовать спецификацию активации, чтобы указать детали адресата. и модуль адаптера ресурсов может взаимодействовать с механизмом обмена сообщениями и может доставлять сообщения в MDB.

В случае внешней среды обмена сообщениями, такой как websphere MQ: - Так как websphere MQ не реализовал какой-либо JCA-адаптер, нам нужно настроить порт прослушивателя для подключения к адресатам, находящимся на веб-странице MQ. Это порт слушателя, который доставляет сообщения в MDB.

Короче говоря, оба случая используют подключение к очереди factory, чтобы получить соединение в очереди. В одном случае это адаптер ресурсов (с информацией о конфигурации в форме спецификации активации), используемый для доставки сообщений, где, как и в другом случае, это порт слушателя (привязанный к очереди и factory), используемый для доставки сообщений.

Надеюсь, теперь это прояснится.

Ответ 2

Они оба являются конфигурациями, но соединение factory используется для исходящего сообщения, а для входящих сообщений используется спецификация активации.

Вот что я получил от IBM.

Спецификации активации являются частью спецификации JCA 1.5. Приложение MDB использует спецификацию активации для подключения к Менеджер очереди WebSphere MQ для обработки входящих сообщений. спецификация активации также предоставляет другие варианты, такие как безопасность настройки.

Соединение JMS factory содержит информацию о том, как создать подключение. Когда приложение требует JMS-соединения, factoryсоздает экземпляр соединения. Для соединения factory требуется такую ​​же информацию о соединении, что и спецификация активации, которую вы созданный ранее, но используется для исходящих сообщений из MDB, тогда как спецификация активации используется для входящих сообщений.

Ответ 3

Клиент ConnectionFactory - это приложение. Приложение использует ConnectionFactory для push/pull сообщений в/из механизма обмена сообщениями через Queue.

Клиент ActivationSpec является контейнером EJB. Контейнер EJB получает ActivationSpec для регистрации MessageEndpointFactory для MDB или MDP с ResourceAdapter. Когда клиент подает сообщение в механизм обмена сообщениями, механизм обмена сообщениями будет использовать зарегистрированный MessageEndpointFactory для пересылки сообщения в приложение (например, MDB или MDP). Это позволяет приложению "асинхронно" получать сообщения, а не требовать от клиента опроса или блокировки попыток вывести сообщение из очереди.