Предыстория: у меня есть относительно старое приложение, которое использует Websphere MQ для обмена сообщениями. Он работает на WAS (Websphere Application Server) и использует MDB (Message Driven Beans). Мне удалось заменить все MDB с помощью Spring Integration - JMS. Мой следующий шаг - попытаться выяснить, могу ли я перенести его из WAS, чтобы он мог работать в любом другом контейнере сервлетов с JRE не IBM (я пытаюсь: apache tomcat). Обратите внимание, что защита каналов с использованием SSL является обязательным требованием. Я предпочитаю использовать JNDI.
Конечная цель: отделить мое приложение от сервера приложений (WAS) и другой инфраструктуры, такой как обмен сообщениями (MQ). Но вывод этого из WAS на tomcat - первый шаг. Далее следует задача по обновлению моей инфраструктуры обмена сообщениями с помощью чего-то более масштабируемого. Это позволяет мне обновлять отдельные компоненты инфраструктуры, на которые опирается мое приложение, по одной за раз (сервер приложений, уровень обмена сообщениями, хранилище данных), не прерывая работу приложения.
Вопрос: Теперь моя задача - определить ресурсы JNDI для tomcat, которые могут обращаться к Websphere MQ. Я добился некоторого прогресса в этом, используя не-SSL каналы, которые я определил в файле context.xml следующим образом:
<Resource
name="jms/qcf_sandbox"
auth="Container"
type="com.ibm.mq.jms.MQQueueConnectionFactory"
factory="com.ibm.mq.jms.MQQueueConnectionFactoryFactory"
description="JMS Queue Connection Factory for sending messages"
HOST="localhost"
PORT="1414"
CHAN="CHANNEL_SANDBOX"
TRAN="1"
QMGR="QM_SANDBOX"/>
<Resource
name="jms/SandboxQ"
auth="Container"
type="com.ibm.mq.jms.MQQueue"
factory="com.ibm.mq.jms.MQQueueFactory"
description="JMS Queue"
QU="SANDBOX_Q"/>
Мой следующий шаг - заставить это работать с каналами SSL. Я понимаю ту часть, которая включает в себя настройку хранилищ ключей (создание и обмен файлами kdb и сертификатов), настройку каналов SSL в QM и т.д. У меня все это уже работает. Как заставить tomcat использовать мое хранилище ключей, набор шифров и т.д.? Указатели или рабочий пример были бы великолепны!
Примечание. В настоящее время я использую Spring Integration 4.2, Websphere MQ v8, Tomcat v9.
Я должен добавить, что сначала я попробовал все без JNDI. Итак, вот мой весенний jms non-ssl config без JNDI, который работает:
<bean id="mq-jms-cf-sandbox"
class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory">
<ref bean="mqQueueConnectionFactory" />
</property>
</bean>
<bean id="mqQueueConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="hostName" value="localhost" />
<property name="port" value="1414" />
<property name="queueManager" value="QM_SANDBOX" />
<property name="transportType" value="1" />
<property name="channel" value="CHANNEL_SANDBOX" />
</bean>
<bean id="jms-destination-sandbox" class="com.ibm.mq.jms.MQQueue">
<constructor-arg value="SANDBOX_Q" />
<property name="baseQueueManagerName">
<value>QM_SANDBOX</value>
</property>
<property name="baseQueueName">
<value>SANDBOX_Q</value>
</property>
</bean>