Créer une fabrique de connexion MQ avec Jython

Après un premier article autour de scripting Websphere Application Server WAS « Créer une fabrique de connexion MQ avec JACL » durant lequel on a codé un script JACL permettant de créer une fabrique de connexion MQ dans un serveur WAS, Je reviens sur cet article pour présenter un script similaire mais cette fois ci avec Jython comme langage de script.

Jython est un interprété de Python écrit en java (pour plus d’infos sur Jython rendez vous ici). JACL a été déprécié en faveur de Jython dans les dernières versions de WAS. Personnellement j’ai trop apprécié Jython dès mon premier script.

Pour mieux assimiler les choses, on va essayer de reproduire le même premier exemple mais cette fois ci avec Jython. Tout d’abord déterminons notre cellule et nœud auxquels il est attaché notre serveur. Supposant que nous avons le chemin suivant :

C:\Program Files\IBM\SDP75\runtimes\base_v61\profiles\myServerProfile\config\cells\myServerCell\nodes\myServerNode
ou
/opt/IBM/SDP75/runtimes/base_v61/profiles/myServerProfile/config/cells/myServerCell/nodes/myServerNode

Dans ce cas :

  • Cellule : myServerCell
  • Nœud : myServerNode

Après l’identification de la cellule et le nœud, passant maintenant au script en définissant le fournisseur de la fabrique :

myJMSProvider=‘WebSphere MQ JMS Provider’

Vous voyez déjà la différence ?? Dans jython l’affectation est faite via l’opérateur ‘=’ au contraire au JACL qui utilise ‘set’. On va supposer que notre serveur est ‘myserver’, dans ce cas la déclaration des variable cellule, nœud et serveur sera comme suit :

myCell=‘myCell’
myNode=‘myNode’
myServer=‘myServer’

Pour récupérer l’environnement de l’exécution du script (la cellule et le nœud) on aura besoin de la commande :

mqjmsp = AdminConfig.getid(‘/Cell:’+myCell+‘/Node:’+myNode+‘/Server:’+myServer+‘/JMSProvider:’+myJMSProvider)

A présent on va s’intéresser au attribut de la fabriques à créer. Les attributs nécessaires à la création de la fabrique sont : le nom de la fabrique et son JNDI. Pour se rassurer essayer :

print AdminConfig.required(‘MQQueueConnectionFactory’)

sinon pour voir la liste des différents attributs possible essayer :

print AdminConfig.attributes(‘MQQueueConnectionFactory’)

‘print’ permet d’afficher la valeur d’une variable dans la console. Pour la mise en place de la fabrique, on va utiliser les attributs suivants :name, jndi, queueManager, serverName, port, channel, transportType et XAEnabled. Puisque notre script pourra être utilisé par vos collègue pour créer d’autres fabriques, je vous propose de définir des variables qui vont contenir nos valeurs réels comme suit :

myQueueManagerName=‘MyAPPQueueManager’
myQueManagerJndiName=‘jms/myJNDIname’
myMQQueueManager=‘APPLICATION.QUEUE.MANAGER’
myMQServer=‘myHostName.dom’
myMQServerPort=‘1414’
myMQChannel=‘CANAL.MYCONN’
myTransportType=‘CLIENT’
myXA=‘true’

Maintenant commençant la création de la fabrique par la définition des paramètres qui seront passès l’opèration rèsrvèe à la crèation.

cfname = [‘name’, myQueueManagerName]
cfjndi = [‘jndiName’, myQueManagerJndiName]
cfManager=[‘queueManager’, myMQQueueManager]
cfServer= [‘host’, myMQServer]
cfPort=[‘port’, myMQServerPort]
cfChannel=[‘channel’, myMQChannel]
cfTransportType=[‘transportType’, myTransportType]
cfXAEnabled=[‘XAEnabled’, myXA]

Pour pouvoir grouper les attributs dans une seule chaine afin de les passer en un seul paramètre à la commende de la création de la fabrique, on va utiliser :

mqqcfAttrs = [cfname, cfjndi, cfManager, cfServer, cfPort, cfChannel, cfTransportType, cfXAEnabled]

Pour terminer la création de la fabrique on aura besoin de la commande :

AdminConfig.create(‘MQQueueConnectionFactory’, mqjmsp, mqqcfAttrs)

c’été facile non!
Attention, on n’a pas vraiment terminé. La fabrique qu’on vient de créer n’est encore prise en considération par le serveur WAS et il faut l’enregistrer sinon tout sera perdu après la déconnexion du serveur (fin de la session).

Pour enregistrer la fabrique et donc qu’elle soit opérationnelle, il est très important de faire appel à la commande :

AdminConfig.save()

Pour simuler ‘create or replace’, on va vérifier si la fabrique existe déjà, si c’est le cas on va la supprimer avant de la recréer, pour cela il faut ajouter le code suivant dans notre script :

exFactory=AdminConfig.getid(‘/MQQueueConnectionFactory:’+myQueueManagerName)
if exFactory!="" :
     AdminConfig.remove(exFactory)

Le code complet du script est le suivant :

myJMSProvider=‘WebSphere MQ JMS Provider’
myCell=‘myCell’
myNode=‘myNode’
myServer=‘myServer’
mqjmsp = AdminConfig.getid(‘/Cell:’+myCell+‘/Node:’+myNode+‘/Server:’+myServer+‘/JMSProvider:’+myJMSProvider)
myQueueManagerName=‘MyAPPQueueManager’
myQueManagerJndiName=‘jms/myJNDIname’
myMQQueueManager=‘APPLICATION.QUEUE.MANAGER’
myMQServer=‘myHostName.dom’
myMQServerPort=‘1414’
myMQChannel=‘CANAL.MYCONN’
myTransportType=‘CLIENT’
myXA=‘true’
exFactory=AdminConfig.getid(‘/MQQueueConnectionFactory:’+myQueueManagerName)
if exFactory!="" :
     AdminConfig.remove(exFactory)
cfname = [‘name’, myQueueManagerName]
cfjndi = [‘jndiName’, myQueManagerJndiName]
cfManager=[‘queueManager’, myMQQueueManager]
cfServer= [‘host’, myMQServer]
cfPort=[‘port’, myMQServerPort]
cfChannel=[‘channel’, myMQChannel]
cfTransportType=[‘transportType’, myTransportType]
cfXAEnabled=[‘XAEnabled’, myXA]
mqqcfAttrs = [cfname, cfjndi, cfManager, cfServer, cfPort, cfChannel, cfTransportType, cfXAEnabled]
AdminConfig.create(‘MQQueueConnectionFactory’, mqjmsp, mqqcfAttrs)
AdminConfig.save()

On a bien créé le script et il faut l’exécuter, comment on l’exécute donc? Comme on a vue au début de l’article, « wsadmin » se charge d’exécuter les scripts dans WAS. Deux appel sont possible :

  1. A partir du bin du WAS :
  2. wsadmin -lang jython -profileName myServerProfile -f myScriptPath.py
  3. A partir du bin du profile :
  4. wsadmin -lang jython -f myScriptPath.py

A propos de l'auteur

Faut il vraiment porter des lunettes, pour travailler la nuit, sur un terminal vert sur noire, pour être Geek pour devenir root ?