Sommaire WebSphere MQ Technique Blog

Photos

Liens

Debian GNU/Linux

Valid HTML 4.01 Transitional

Configurer les queue et queue connection factory (Accès JMS) pour IBM WebSphere MQ sous Linux et Windows

Définir des queue et queue connection factory dans un annuaire JNDI en flat file (com.sun.jndi.fscontext.RefFSContextFactory) et les utiliser depuis le client JMS.

Voir aussi Installer IBM WebSphere MQ (MQ Series) sous Linux

Installer IBM WebSphere MQ (MQ Series) sous Debian avec l'utilitaire alien


Résumé:

Une fois MQ Series installé, on doit, pour y accéder via l'API JMS, définir dans l'annuaire JNDI les objets queue, queue connection factory, et les objets équivalents pour les topic.

Cette page décrit comment effectuer les bind dans JNDI de ces objets et l'utilisation du fichier .bindings de l'annuaire JNDI sous forme de fichier plat, par le client JMS, dans le cadre d'une utilisation d'MQ Series en dehors du serveur d'applications WebSphere Application Server (WAS).

L'utilisation de JNDI avec MQSeries présentée ici est compatible avec MQSeries 5.3 et MQSeries 6.0 sous Linux et Windows.


Mots clés:

JNDI, JMS, JMSAdmin, com sun jndi fscontext reffscontextfactory, ctx lookup, flat file, fichier .bindings, lookup, annuaire, jmsadmin, répertoire /var/mqm, annuaire JNDI, JMSAdmin.config, RefFSContextFactory, LDAP, websphere mq, mq series, channel mq series, Linux, Debian.

Configurer les queue et queue connection factory (Accès JMS) pour IBM WebSphere MQ sous Linux et Windows

L'utilitaire JMSAdmin de configuration de l'annuaire JNDI

Modifier le fichier JMSAdmin.config

Ajouter des objets dans l'annuaire JNDI de MQ Series

Créer un channel serveur MQSeries

Utiliser le fichier .bindings créé par l'utilitaire JMSAdmin

Inconvénients de l'annuaire JNDI en flat file


L'utilitaire JMSAdmin de configuration de l'annuaire JNDI

Pour effectuer un bind dans JNDI, il faut utiliser l'utilitaire JMSAdmin qui se trouve dans le répertoire /opt/mqm/java/bin.

C'est un peu l'équivalent de runmqsc quand on configure JMS sur MQSeries.

JMSAdmin utilise un fichier de configuration JMSAdmin.config qui se trouve dans le même répertoire.

Modifier le fichier JMSAdmin.config

En étant root, on décommente les deux lignes qui correspondent aux caractéristiques du type d'annuaire JNDI que l'on va utiliser:

INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory
PROVIDER_URL=file:/var/mqm
Les autres lignes du fichier JMSAdmin.config qui concernent INITIAL_CONTEXT_FACTORY et PROVIDER_URL restent commentées.

On utilise ici JNDI en "flat file", c'est à dire que l'annuaire JNDI se trouve dans un fichier plat.

L'autre façon de faire consiste à utiliser un annuaire LDAP pour enregistrer les objets MQSeries, par exemple avec OpenLDAP.

On ne décrit pas ici comment utiliser JNDI via un annuaire LDAP.

Ajouter des objets dans l'annuaire JNDI de MQ Series

Pour utiliser l'API JMS d'MQSeries depuis une application Java, on a besoin de faire un lookup JNDI sur deux types d'objets:

jess:/opt/mqm/java/bin> JMSAdmin
5648-C60, 5724-B41, 5655-F10 (c) Copyright IBM Corp. 2002. All Rights Reserved.
Starting Websphere MQ classes for Java(tm) Message Service Administration

InitCtx> DEFINE QCF(MYQCF) HOSTNAME(172.17.15.10) PORT(3129) TRANSPORT(client) QMANAGER(fourmond) CHANNEL(SYSTEM.DEF.SVRCONN)
InitCtx> DEFINE Q(MYQUEUE) QMANAGER(fourmond) QUEUE(MYQUEUE)
InitCtx> end
On vient de créer dans l'annuaire JNDI:

La queue physique a été créée auparavant avec runmqsc.

Créer un channel serveur MQSeries

Si l'on veut créer son propre channel, avec runmqsc mqseries (pour un qmgr nommé mqseries):
define channel(MYCHANNEL) CHLTYPE(SVRCONN) MCAUSER('mqm')
Puis avec JMSAdmin (ou JMSAdmin.bat sous Windows):
define QCF(MYQCF) hostname(172.17.15.10) port(3129) transport(client) qmanager(mqseries) channel(MYCHANNEL)
Cette création de channel MQSeries fonctionne sous Linux.

Pour définir un channel MQ Series sous Windows, on utilisera:

define channel(MYCHANNEL) CHLTYPE(SVRCONN) MCAUSER('MUSR_MQADMIN')

Utiliser le fichier .bindings créé par l'utilitaire JMSAdmin

La commande précédente vient de créer un fichier dans le répertoire /var/mqm/, le fichier .bindings.

Pour utiliser le fichier .bindings du coté client, il suffit de le placer dans un répertoire utilisateur (à transférer en ASCII, c'est un fichier texte), disons /home/myuser/.

Ensuite on positionne les paramètres suivants dans l'environnement du client JMS:

INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory
PROVIDER_URL=file:/home/myuser
On positionnera alors les propriétés suivantes dans une Hashtable à passer en paramètre au constructeur de la classe javax.naming.InitialContext:
Context.INITIAL_CONTEXT_FACTORY
Context.PROVIDER_URL
de la façon suivante:
java.util.Hashtable env = new Hashtable();
env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
env.put(javax.naming.Context.PROVIDER_URL, "file:/home/myuser");
javax.naming.InitialContext context = new javax.naming.InitialContext(env);
Si l'on doit utiliser plusieurs providers JMS dans le même applicatif Java, la façon portable de faire consiste à placer les valeurs des propriétés Context.INITIAL_CONTEXT_FACTORY et Context.PROVIDER_URL dans un fichier .properties Java ou sur la ligne de commande java via -Dname=value.

Si le client se trouve sur la machine serveur, on gardera /var/mqm.

Inconvénients de l'annuaire JNDI en flat file

L'utilisation de JMS avec MQSeries et un annuaire JNDI en flat file est très simple à configurer ; par contre cela oblige à transférer coté client (et surtout à mettre à jour) le fichier .bindings, sauf bien sur si le client et le serveur MQSeries résident sur la même machine.

Voir aussi Configurer xinetd pour IBM WebSphere MQ (MQ Series)

et Configurer inetd pour IBM WebSphere MQ.