Créer une fabrique de connexion MQ avec JACL

Dernièrement et à force de créer des profiles dans Websphere Application Server, j’ai eu une forte allergie de créer des factory, des files d’attente ou même des listners. J’ai pensé donc à mettre un script permettant de faciliter la configuration des profiles d’où l’idée d’écrire cet article.

IBM propose deux langages pour la mise en Å“uvre des scripts :

1. JACL : sera déprécie dans les prochains versions, et pourtant il est opérationnel dans la version 6.1.
2. Jython : Remplacera JACL dans les futures versions, et pourtant il est déjà existant dans la version 6.1.

Dans cet article, je vais utiliser JACL (Java Command Language) qui ressemble au langage de script Tcl pour java (pour plus d’infos rendez vous ici). Et je vais me limiter dans la création des fabriques de connexions des files d’attente, et j’espère que j’aurai l’occasion de traiter les files d’attentes et les listers.

Avant de commencer il faut savoir que l’outil responsable de l’exécution du script est « wsadmin » qu’on peut retrouver dans le le dossier bin du WAS (Websphere Application Server) ou même dans le dossier bin du profile qu’on va configurer. Une question qui tombe sur la tête (sans faire du mal biensur 😛 ) : comment peut on déterminer le chemin du profile?

Tout les profiles existent dans le répertoire profiles. Par exemple, pour Linux : /opt/IBM/SDP70/Runtimes/base_v6/Profiles. Et pour windows C:\Program Files\Runtimes\base_v6\Profiles.

On va s’arrêter un peu dans les dossiers des profiles pour définir deux variables essentiels à la mise en Å“uvre du script qui sont le nÅ“ud et la cellule du serveur.

Supposant par la suite que mon profil s’appel myServerProfil, donc on aura une arborescence du genre :

C:\Program Files\Runtimes\base_v6\Profiles\myServerProfile\config\cells\myServerCell\nodes\myServerNode
ou
/opt/IBM/SDP70/Runtimes/base_v6/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 :

set myProviderType « WebSphere MQ JMS Provider »

la commande set permet de définir des variables et les affecter des valeurs. On va l’utiliser pour définir la cellule et le nÅ“ud dans le script :

set myServerCell « myServerCell »
set myServerNode « myServerNode »

Pour rendre le script paramétrable et utilisable par les collègues, on va définir une variable myServer qui va contenir le nom de notre serveur WAS :

set myServer « myServerProfile »

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

set newjmsp [$AdminConfig getid /Cell:$myServerCell/Node:$myServerNode/Server:$myServer/JMSProvider:$myProviderType/]

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 :

$AdminConfig required MQQueueConnectionFactory

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

$AdminConfig attributes MQQueueConnectionFactory

Pour la mise en place de la fabrique, on va utiliser les attributs suivants :

set name [list name MyAPPQueueManager]
set jndi [list jndiName jms/myJNDIname]
set qManager [list queueManager APPLICATION.QUEUE.MANAGER]
set serverName [list host myHostName.dom]
set port [list port 1414]
set channel [list channel CANAL.MYCONN]
set tType [list transportType CLIENT]
set xaEnable [list XAEnabled True]

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

set mqcfAttrs [list $name $jndi $qManager $serverName $port $channel $tType $xaEnable]

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

$AdminConfig create MQQueueConnectionFactory $newjmsp $mqcfAttrs

c’ètè facile non! :)

Attention, on n’as pas vraiment terminé :D. 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érationnel il est très important de faire appel à la commande :

$AdminConfig save

Le code complet du script est le suivant :

set myProviderType « WebSphere MQ JMS Provider »
set myServerCell « myServerCell »
set myServerNode « myServerNode »
set myServer « myServerProfile »
set newjmsp [$AdminConfig getid /Cell:$myServerCell/Node:$myServerNode/Server:$myServer/JMSProvider:$myProviderType/]
set name [list name MyAPPQueueManager]
set jndi [list jndiName jms/myJNDIname]
set qManager [list queueManager APPLICATION.QUEUE.MANAGER]
set serverName [list host myHostName.dom]
set port [list port 1414]
set channel [list channel CANAL.MYCONN]
set tType [list transportType CLIENT]
set xaEnable [list XAEnabled True]
set mqcfAttrs [list $name $jndi $qManager $serverName $port $channel $tType $xaEnable]
$AdminConfig create MQQueueConnectionFactory $newjmsp $mqcfAttrs
$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 -profileName myServerProfile -f myScriptPath.jacl
  3. A partir du bin du profile :
  4. wsadmin -f myScriptPath.jacl

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 ?