Предыстория: у меня есть относительно старое приложение, которое использует 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> 
