Spring-Konfiguration für JMS (Websphere MQ - SSL, Tomcat, JNDI, nicht IBM JRE)

Hintergrund Ich habe eine relativ alte Anwendung, die Websphere MQ für Messaging verwendet. Es läuft auf WAS (Websphere Application Server) und verwendet MDBs (Message Driven Beans). Ich konnte erfolgreich alle MDBs mit @ ersetzSpring Integration - JMS. Der nächste Schritt besteht darin, zu prüfen, ob ich es aus WAS heraus portieren kann, damit es auf jedem anderen Servlet-Container mit einer Nicht-IBM-JRE ausgeführt werden kann (ich versuche: Apache Tomcat). Beachten Sie, dass das Sichern von Kanälen mithilfe von SSL erforderlich ist. Ich bevorzuge die Verwendung von JNDI.

End Goal: Um meine Anwendung vom Anwendungsserver (WAS) und anderen Infrastrukturen wie Messaging (MQ) zu entkoppeln. Aber dies von WAS auf Tomcat zu übertragen, ist der erste Schritt. Als Nächstes muss meine Messaging-Infrastruktur mit etwas Skalierbarerem aktualisiert werden. Auf diese Weise kann ich einzelne Komponenten der Infrastruktur, auf die sich meine App stützt, nacheinander aktualisieren (App-Server, Messaging-Ebene, Datenspeicher), ohne meine Anwendung zu stark zu stören.

Frage Jetzt besteht meine Herausforderung darin, JNDI-Ressourcen auf Tomcat zu definieren, die auf Websphere MQ zugreifen können. Ich habe einige Fortschritte bei der Verwendung von Nicht-SSL-Kanälen erzielt, die ich in der Datei context.xml wie folgt definiert habe:

<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"/>

Mein nächster Schritt ist, dass dies mit SSL-Kanälen funktioniert. Ich verstehe den Teil, der das Einrichten der Keystores (Erstellen und Austauschen von KDB-Dateien und Zertifikaten), das Konfigurieren der SSL-Kanäle auf dem QM usw. umfasst. Ich habe alles, was bereits funktioniert. Wie bringe ich Tomcat dazu, meinen Keystore, meine Cipher Suite usw. zu verwenden? Zeiger oder ein funktionierendes Beispiel wären toll!

Hinweis: Ich verwende derzeit Spring Integration 4.2, Websphere MQ v8 und Tomcat v9.

Ich muss hinzufügen, dass ich zuerst alles ohne JNDI ausprobiert habe. Also hier ist meine Spring-JMS-Nicht-SSL-Konfiguration ohne JNDI, die funktioniert:

<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> 

Antworten auf die Frage(2)

Ihre Antwort auf die Frage