Création d'une servlet afin de crééer une connexion WebSPhere MQ avec Tomcat

1. Avant-propos
1.1. Présentation
1.2. Introduction
2. Installation d'une application
2.1. Installation du war MQCentral.war
2.2. Modification du fichier context.xml
2.3. Modification du fichier web.xml dans le war
2.4. Modification du fichier catalina.properties
3. Installation des librairies WebSphere MQ
3.1. Installation du client WebSphere MQ
3.2. Copie des librairies *.jar du client
4. Création d'une servlet
4.1. Exemple de servlet
4.2. Structure du war sous eclipse
5. Tests
5.1. Test avec l'url

1. Avant-propos


1.1 - Présentation.


+------------------------------+                                   +--------------------------------------+ 
| Serveur TOMCAT               |                                   | Serveur WebSphere MQ                 | 
| Hostname : saturn            |                                   | Version : MQ Central                 | 
| Os : Windows 2012            |                                   | Hostname : arecibo                   | 
|                              |                                   |                                      | 
| +--------------------------+ |                                   | +---------------------------------+  | 
| | CLIENT MQ                |-|-----------/ 22515 /---------------|-|--> Queue Manager : MYQUEUMGR    |  | 
| +--------------------------+ |                                   | |    Channel : CHANNEL1.CX.APP01  |  |
|                              |                                   | |    Port : 22515                 |  |
|                              |                                   | |    HostName : arecibo           |  |
|                              |                                   | +---------------------------------+  | 
+------------------------------+                                   +--------------------------------------+ 
                                                                           


1.2 - Introduction


Nous allons réaliser une installation d'une connexion d'un Tomcat 7 vers un WebSphere MQ.

2. Installation d'une application


Dans l'exemple suivant nous allons installer une application sur un serveur TOMCAT sur le serveur "saturn" .
Pour se faire nous allons déployer une application test fournie par "franky goes to Hollywood" :

2.1 - Installation du war MQCentral.war


Dans le répertoire c:\Tomcat-7.0.54\webapps du serveur saturn copier le fichier MQCentral.war

2.2 - Modification du fichier context.xml


Puis modifié le fichier context.xml en ajoutant les balises "Resource" ci-dessous :
vi context.xml


<Resource
      name="jms/MyQCF"
      auth="Container"
      type="com.ibm.mq.jms.MQQueueConnectionFactory"
      factory="com.ibm.mq.jms.MQQueueConnectionFactoryFactory"
      description="JMS Queue Connection Factory for sending messages"
      HOST="arecibo"
      PORT="22515"
      CHAN="CHANNEL1.CX.APP01"
      TRAN="1"
      QMGR="MYQUEUMGR"/>
	  
	  
   <Resource
      name="jms/MyQ"
      auth="Container"
      type="com.ibm.mq.jms.MQQueue"
      factory="com.ibm.mq.jms.MQQueueFactory"
      description="JMS Queue for receiving messages from Dialog"
      QU="Q_MDB"/>



2.3 - Modification du fichier web.xml dans le war


Nous allons modifier le fichier web.xml de l'archive war (pas celui de tomcat).
Placé vous dans WEB-INF/web.xml.
Puis editer le fichier web.xml dans eclipse

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" version="2.4"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http:/java.sun.com/dtd/web-app_2_3.dtd">
  <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>fr.arecibo.mqcentral.HelloServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
  
   <resource-env-ref>
    <resource-env-ref-name>jms/MyQCF</resource-env-ref-name>
    <resource-env-ref-type>javax.jms.QueueConnectionFactory</resource-env-ref-type>
  </resource-env-ref>

  <resource-env-ref>
    <resource-env-ref-name>jms/MyQ</resource-env-ref-name>
    <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
  </resource-env-ref>
  
  
</web-app>


3.4 - Modification du fichier catalina.properties


Afin de charger les librairies au lancement de Tomcat, vous devez modifier le fichier catalina.properties
Vous trouverez ce fichier dans le répertoire c:\Tomcat-7.0.54\configuration
Puis rajouter sur la ligne suivantes l'endroit ou sont vos librairies.

common.loader=[chemin existant],c:\\Tomcat-7.0.54\\lib\\*.jar



3. Installation des librairies WebSphere MQ


Afin de pouvoir récupèrer les dernières librairies "*.jar" du client WebSphere MQ, nous allons devoir le télécharger chez IBM :
Vous pouvez télécharger les fichiers jars en téléchargeant le client à cette url :
client WebSphere MQ 7.5.0.4

3.1 - Installation du client WebSphere MQ


Après avoir télécharger le fichier mqc75_7.5.0.4_win.zip sur le serveur saturn comme ci-dessous
Décompressé le, et installé le sur c:\MQ

3.2 - Copie des librairies *.jar du client


Une fois le client installé copier les fichiers jars contenu dans c:\MQ\java\lib suivants :
c:\
 +--- MQ\
      +--- java\
            +--- lib\
                  +--- com.ibm.mq.jar
                  +--- com.ibm.mqjms.jar
                  +--- connector.jar
                  +--- dhbcore.jar

4. Création d'une servlet


Voici la servlet contenu dans le MQCentral.war

4.1 - Exemple de servlet


Dans l'archive war, dans "Java Resources/src/fr.arecibo.mqcentral/" créé la fichier java HelloServlet.java suivant :
/**
 * Cette class est un exemple pour utiliser un client WebSphere MQ.
 * Pour faire tourner cette exemple, nous avons besoin des jars suivants:
 * com.ibm.mq.jar, com.ibm.mqjms.jar, connector.jar, dhbcore.jar
 * 
 * @author TURLAN
 * @version 1.0
 */


package fr.arecibo.mqcentral;

import java.io.IOException;
import java.io.PrintWriter;


// anciennement randomUUID creation d'une session ID web
import java.util.UUID;

import javax.jms.DeliveryMode;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;

import javax.naming.Context;
import javax.naming.InitialContext;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ibm.mq.jms.MQQueueConnectionFactory;

public class HelloServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		PrintWriter out = res.getWriter();

		MQQueueConnectionFactory connectionFactory = null;
		QueueConnection queueConn = null;
		QueueSession queueSession = null;
		QueueSender queueSender = null;
		TextMessage message = null;

		try {
			connectionFactory = new MQQueueConnectionFactory();


			Context ctx = (Context) new InitialContext()
					.lookup("java:comp/env");
			QueueConnectionFactory qcf = (QueueConnectionFactory) ctx
					.lookup("jms/MyQCF");
			queueConn = qcf.createQueueConnection();
			Queue q = (Queue) ctx.lookup("jms/MyQ");

			// Creation d'une session
			queueSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

			// Creation d'un envoi 
			queueSender = queueSession.createSender(q);

			// Configuration du deliverie mode. Par defaut c'est persistant.
			queueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

			// Creation du message
			message = queueSession.createTextMessage(UUID.randomUUID()
					.toString());

			// Envoi du message
			queueSender.send(message);

			// closing connection
			queueConn.close();

			out.println("Send msg");

		} catch (Exception je) {
			out.println(je.getMessage());
			out.println("cause :");
			if (je.getCause() != null) {
				out.println(je.getCause().getMessage());
			}
		}

		out.println("Hello, world!");
		out.close();
	}
}


4.2 - Structure du war




5. Test


Nous allons maintenant tester l'ensemble des chapitres.

5.1 - Test avec l'url


Taper l'url de votre application.
http://localhost:8080/MQCentralWeb/hello