Printemps de Configuration pour JMS (Websphere MQ SSL, Tomcat, JNDI, Non IBM JRE)

De fond:
J'ai un relativement ancienne application qui utilise Websphere MQ pour la messagerie. Il fonctionne sur A (Websphere Application Server) et utilise Mdb (Message Driven Beans). J'ai été avec succès en mesure de remplacer toutes les banques multilatérales de développement à l'aide de Spring Integration - JMS. Ma prochaine étape est d'essayer de voir si je peux le port de a ÉTÉ, de sorte qu'il peut fonctionner sur n'importe quel autre conteneur de servlet avec un non-IBM JRE (je suis en train d'essayer: apache, tomcat). Notez que la sécurisation des canaux à l'aide de SSL est une exigence. Je préfère utiliser JNDI.

Objectif Final: La
Afin de dissocier mon application à partir de l'application server (was) et d'autres infrastructures telles que la messagerie (MQ). Mais la prise de ce de a ÉTÉ sur tomcat est la première étape. Vient ensuite la tâche de mise à jour de mon infrastructure de messagerie avec quelque chose de plus évolutif. Cela me permet de mettre à jour les différents composants de l'infrastructure que mon application s'appuie sur les, une chose à la fois (serveur d'application, les messages de la couche, banque de données) sans perturber ma demande trop, que je vais.

Question:
Maintenant, mon défi est de définir les ressources JNDI sur tomcat qui peuvent accéder à Websphere MQ. J'ai fait quelques progrès sur ce à l'aide de non-SSL canaux que j'ai défini dans la context.xml fichier comme ceci:

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

Ma prochaine étape est d'obtenir que cela fonctionne avec le protocole SSL canaux. Je comprends la partie qui implique la mise en place du fichier de stockage des clés (kdb fichier cert et la génération et l'échange), la configuration de SSL sur les canaux QM etc. J'ai tout qui fonctionne déjà. Comment puis-je obtenir tomcat pour utiliser mon fichier de stockage des clés, de la suite de chiffrement, etc? Les pointeurs ou un exemple de travail serait génial!

Note: je suis à l'aide de Spring Integration 4.2, Websphere MQ v8, Tomcat v9, actuellement.

Je dois ajouter que je n'ai tout essayer sans le JNDI premier. Donc, ici, est mon de printemps jms non-ssl config sans le JNDI, qui fonctionne:

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

OriginalL'auteur code4kix | 2016-03-29