Créer un port d’écoute avec Jython

Un port d’écoute ou Listener d’un serveur WebSphere Application Server (WAS) d’IBM permet à des composants, tels que les MDB, d’écouter les messages déposés sur une file d’attente. Dans des grandes application qui nécessite la création des plusieurs ports d’écoute, il sera très intéressant d’automatiser la création de ces ports d’écoute dans un script qu’on peut livrer avec l’application.
Comme les files d’attentes, les fabriques de connexions, il est possible de coder un script Jython ou JACL permettant la création des ports d’écoute.Et puisque depuis un bon moment que j’utilise Jython, j’essayerai durant cet article de présenter un exemple que vous pouvez utiliser dans vos application.
Tout d’abord il faut savoir que les ports d’écoutes son liés au serveur WAS, donc on va commencer par déterminer la cellule, le nœud, et le serveur sur lequel sera exécuter le script .

Supposant que nous avons le chemin suivant :
C:\Program Files\IBM\SDP75\runtimes\base_v61\profiles\myServerProfile\config\cells\myCell\nodes\ myNode
ou
/opt/IBM/SDP75/runtimes/base_v61/profiles/myServerProfile/config/cells/myCell/nodes/ myNode
Dans ce cas :

  • Cellule : myCell
  • Nœud : myNode

Supposant également que le nom de 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, on aura besoin de la commande :

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

Il faut également identifier le service d’écoute des messages du serveur :

messageListnerService = AdminConfig.list(‘MessageListenerService’, messageListnerServer)

Pour créer un port d’écoute et rendre le script facile à utiliser, on aura besoin de définir quelque attributs qui sont :

  • myFactoryJndiName : le nom JNDI de la fabrique de connexion
  • myListnerName : le nom du port d’écoute
  • myListnerDestinationJndiName : le nom JNDI de la fille d’attente sur laquelle le port va écouter
  • myMessageListnerMaxRetries : le nombre d’essai d’un message

la définition de ces variables est comme suit :

myFactoryJndiName =‘myFactoryJndiName ‘
myListnerName =‘myListnerName ‘
myListnerDestinationJndiName =‘myListnerDestinationJndiName’
myMessageListnerMaxRetries  = 3

Comme j’ai indiqué au début, ces variable qu’on vient de définir ne sert que pour faciliter la modification du script par vos collègues (selon leurs environnements), ce qu’on va essayer d’ajouter au script maintenant sont les paramètres génériques qui seront utilisés pour créer le port d’écoute.

messageListnerName=[‘name’, myListnerName]
messageListnerDestinationJndiName=[‘destinationJNDIName’, myListnerDestinationJndiName]
messageListnerConnectionFactoryJndiName=[‘connectionFactoryJNDIName’, myFactoryJndiName]
messageListnerMaxRetries=[‘maxRetries’, myMessageListnerMaxRetries]

Ces différents paramètre doivent être regroupés dans une seule variable pour qu’on puisse les passer en un seul paramètre pour cela on utilise :

mlattrs=[messageListnerName, messageListnerDestinationJndiName, messageListnerConnectionFactoryJndiName, messageListnerMaxRetries]

Et en dernier lieu, pour créer la file d’attente on va faire appel à la commande :

newListner = AdminConfig.create(‘ListenerPort’, messageListnerService, mlattrs)

Après la création du port d’écoute, on va lui ajouter la faculté de démarrer avec le démarrage du serveur, il s’agit de définir son état initial à démarré :

AdminConfig.create(‘StateManageable’, newListner, [[‘initialState’, ‘START’]])

Pour enregistrer la file d’attente 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 le port d ‘écoute existe déjà, si c’est le cas on va le supprimer avant de le recréer, pour cela il faut ajouter le code suivant dans notre script :

exListener=AdminConfig.getid(‘/ListenerPort:’+myListnerName)
if exListener!= » :
        AdminConfig.remove(exListener)

Le code complet du script est le suivant :

myCell=‘myCell’
myNode=‘myNode’
myServer=‘myServer’
myFactoryJndiName =‘myFactoryJndiName ‘
myListnerName =‘myListnerName ‘
myListnerDestinationJndiName =‘myListnerDestinationJndiName’
myMessageListnerMaxRetries  = 3
messageListnerServer=AdminConfig.getid(‘/Cell:’+myCell+‘/Node:’+myNode+‘/Server:’+myServer)
messageListnerService = AdminConfig.list(‘MessageListenerService’, messageListnerServer)
exListener=AdminConfig.getid(‘/ListenerPort:’+myListnerName)
if exListener!= » :
        AdminConfig.remove(exListener)
messageListnerName=[‘name’, myListnerName]
messageListnerDestinationJndiName=[‘destinationJNDIName’, myListnerDestinationJndiName]
messageListnerConnectionFactoryJndiName=[‘connectionFactoryJNDIName’, myFactoryJndiName]
messageListnerMaxRetries=[‘maxRetries’, myMessageListnerMaxRetries]
mlattrs=[messageListnerName, messageListnerDestinationJndiName, messageListnerConnectionFactoryJndiName, messageListnerMaxRetries]
newListner = AdminConfig.create(‘ListenerPort’, messageListnerService, mlattrs)
AdminConfig.create(‘StateManageable’, newListner, [[‘initialState’, ‘START’]])
AdminConfig.save()
print myListnerName + ‘Listener created’

Le script est maintenant opérationnel, je vais juste rappeler la maniéré par laquelle on peut l’exécuter :

  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 ?