Script Jython de création des ressources JMS

Suite à des demandes pour mettre les articles Jython sous forme de fonctions dans un seul script et je réponds à ces demandes par cet article qui va regrouper tout les fonctions de création des ressources JMS (puisque en générale on livre un seul script pour la création des ressources JMS) déjà traitées sur ce blog à savoir :

Ce Script utilisera également une fonction pour les paramètres depuis un fichier properties.

Chargement des paramètres :
Cette fonction permet de charger les paramètres depuis un fichier properties.

#########################################
## permet de charger la configuration  ##
#########################################
def loadProperties(propertiesFileName):
        print propertiesFileName
        properties = util.Properties()
        try :
                fileInputStream = io.FileInputStream(propertiesFileName)
                properties.load(fileInputStream)
                fileInputStream.close()
                result= {}
                for entry in properties.entrySet():
                        result[entry.key] = entry.value
                return result
        except IOError:
                print ‘fichier introuvable’
                sys.exit(0)

Le fichier properties peut être comme suit :

#Nom du serveur WAS
was.name = server1
#Nom du gestionnaire des files d’attentes MQ
mq.manager = MY.QUEUE.MANAGER
#Nom de la hote ou l’adresse ip du serveur MQ
mq.host = myHost
#Numéro port du gestionnaire des files d’attentes MQ
mq.port = 1420
#Nom du canal du gestionnaire des files d’attentes MQ
mq.channel = SYSTEM.ADMIN.SVRCONN
#Nom de la fabrique de connexion MQ
factory.name = myQueueManager
#Nom JNDI de la fabrique de connexion MQ
factory.jndiName = jms/myQueueManager

Création de fabrique de connexion MQ :
Cette fonction permet de créer une fabrique de connexion MQ.

#####################################################
## Permet de créer une fabrique de connexion MQ    ##
#####################################################
def createFactory(pFactoryName, pFactoryJndiName, pMQQueueManager, pMQServer, pMQServerPort, pMQChannel, pMqJMSProfil):
        oldFactory=AdminConfig.getid(‘/MQQueueConnectionFactory:’+pFactoryName)
        if oldFactory!= » :
                AdminConfig.remove(oldFactory)
        cfname = [‘name’, pFactoryName]
        cfjndi = [‘jndiName’, pFactoryJndiName]
        cfManager=[‘queueManager’, pMQQueueManager]
        cfServer= [‘host’, pMQServer]
        cfPort=[‘port’, pMQServerPort]
        cfChannel=[‘channel’, pMQChannel]
        cfTransportType=[‘transportType’, ‘CLIENT’]
        cfXAEnabled=[‘XAEnabled’, ‘true’]
        mqqcfAttrs = [cfname, cfjndi, cfManager, cfServer, cfPort, cfChannel, cfTransportType, cfXAEnabled]
        factory=AdminConfig.create(‘MQQueueConnectionFactory’, pMqJMSProfil, mqqcfAttrs)
        connectionPool=AdminConfig.showAttribute(factory,‘connectionPool’)
        AdminConfig.modify(connectionPool,[[‘maxConnections’,100]])
        print pFactoryName + ‘ créée’

Création des files d’attente :
La fonction suivante permet de créer une files d’attente.

########################################
## Permet de créer une file d’attente ##
########################################
def createMQQueue(pQueueName, pBaseQueuName, pJndiName, pMQQueueManager, pMQJMSProfil):
        oldQueue=AdminConfig.getid(‘/MQQueue:’+pQueueName)
        if oldQueue!= » :
                AdminConfig.remove(oldQueue)
        mqName=[‘name’, pQueueName]
        mqJndiName=[‘jndiName’, pJndiName]
        mqBaseQueueName=[‘baseQueueName’, pBaseQueuName]
        jmsTarget=[‘targetClient’, ‘JMS’]
        mqqAttrs=[pMQQueueManager, mqName, mqJndiName, mqBaseQueueName, jmsTarget]
        AdminConfig.create(‘MQQueue’, pMQJMSProfil, mqqAttrs)
        print pQueueName+‘ créée!’

Création des ports d’écoute :
la fonciton suivante permet de créer des port d’écoute

#######################################
## Permet de créer un port d’écoute  ##
#######################################
def createListnerPort(pListnerName, pJndiName, pFactoryJndiName, pMessageListnerService):
        oldListner=AdminConfig.getid(‘/ListenerPort:’+pListnerName)
        if oldListner!= » :
                AdminConfig.remove(oldListner)
        messageListnerName=[‘name’, pListnerName]
        messageListnerDestinationJndiName=[‘destinationJNDIName’, pJndiName]
        messageListnerConnectionFactoryJndiName=[‘connectionFactoryJNDIName’, pFactoryJndiName]
        messageListnerMaxMessages=[‘maxMessages’, 1]
        messageListnerMaxRetries=[‘maxRetries’, 3]
        messageListnerMaxSessions=[‘maxSessions’, 1]
        mlattrs=[messageListnerName, messageListnerDestinationJndiName, messageListnerConnectionFactoryJndiName, messageListnerMaxMessages, messageListnerMaxRetries, messageListnerMaxSessions]
        newListner = AdminConfig.create(‘ListenerPort’, pMessageListnerService, mlattrs)
        AdminConfig.create(‘StateManageable’, newListner, [[‘initialState’, ‘START’]])
        print pListnerName + ‘ créé!’

L’utilisation de ces fonctions se fait via un main, qui demande de saisir le chemin du fichier properties et se charge de crérer les ressources :

####################################
##              Main              ##
####################################
def main():
        #load configuration
        print ‘Entrer le chemin de la configuration (*.properties):’
        configFilePath=sys.stdin.readline().strip()
        configProperties = loadProperties(configFilePath)
        print ‘Configuration chargée’
        #Cell name
        cell=AdminControl.getCell()
        print ‘Cellule WAS : ‘+ cell
        #Node name
        node=AdminControl.getNode()
        print ‘Noeud WAS : ‘+ node
        #Server name
        server=configProperties[‘was.name’]
        print ‘Serveur WAS : ‘ + server
        #Queue Manager name
        mqQueueManager=configProperties[‘mq.manager’]
        print ‘Gestionnaire MQ : ‘ + mqQueueManager
        #MQ factory name
        factoryName=configProperties[‘factory.name’]
        print ‘Nom de la fabrique de connexion MQ : ‘ + factoryName
        #MQ factory JNDI name
        factoryJndiName=configProperties[‘factory.jndiName’]
        print ‘Nom JNDI de la fabrique de connexion MQ : ‘ + factoryJndiName
        #MQ server name
        mqServerHost=configProperties[‘mq.host’]
        print ‘Hôte du gestionnaire MQ : ‘ + mqServerHost
        #MQ server port
        mqServerPort=configProperties[‘mq.port’]
        print ‘Port du gestionnaire MQ :’ + mqServerPort
        #MQ Channel
        mqChannel=configProperties[‘mq.channel’]
        print ‘Canal du gestionnaire MQ :’ + mqChannel
        jmsProvider=‘WebSphere MQ JMS Provider’
        baseQueueManagerName=[‘baseQueueManagerName’, mqQueueManager]
        mqJMSProfil = AdminConfig.getid(‘/Cell:’+cell+‘/Node:’+node+‘/Server:’+server+‘/JMSProvider:’+jmsProvider)
        messageListnerServer=AdminConfig.getid(‘/Cell:’+cell+‘/Node:’+node+‘/Server:’+server)
        messageListnerService = AdminConfig.list(‘MessageListenerService’, messageListnerServer)
       
        ##############################################################
        ###           création de la fabrique de connexion          ##
        ##############################################################
        oldFactory=AdminConfig.getid(‘/MQQueueConnectionFactory:’+factoryName)
        if oldFactory== » : #update Factory
                createFactory(factoryName, factoryJndiName, mqQueueManager, mqServerHost, mqServerPort, mqChannel, mqJMSProfil)
       
        #######################################################
        ###           création des files d’attentes          ##
        #######################################################
        #
        createMQQueue(‘MYMQ.SERVICE.IN’, ‘MYMQ.SERVICE.IN’, ‘jms/MYMQ.SERVICE.IN’, baseQueueManagerName, mqJMSProfil)
        createMQQueue(‘MYMQ.SERVICE.OUT’, ‘MYMQ.SERVICE.OUT’, ‘jms/MYMQ.SERVICE.OUT’, baseQueueManagerName, mqJMSProfil)

        ####################################################
        ###          Création des ports d’écoute          ##
        ####################################################
        #create SYSP.LISTENER.CONSULTSITUATIONSOUSSYSTEME Listner
        createListnerPort(‘MYSERVICELISTENER’, ‘jms/MYMQ.SERVICE.IN’, factoryJndiName, messageListnerService)
       
        ##############################################################
        ###         Sauvegarde de la nouvelle configuration         ##
        ##############################################################
        AdminConfig.save()
        print ‘Nouvelle Configuration sauvegardée’

Le script complet est le suivant :

import java.util as util
import java.io as io
import sys
import os

#########################################
## permet de charger la configuration  ##
#########################################
def loadProperties(propertiesFileName):
        print propertiesFileName
        properties = util.Properties()
        try :
                fileInputStream = io.FileInputStream(propertiesFileName)
                properties.load(fileInputStream)
                fileInputStream.close()
                result= {}
                for entry in properties.entrySet():
                        result[entry.key] = entry.value
                return result
        except IOError:
                print ‘fichier introuvable’
                sys.exit(0)

#####################################################
## Permet de créer une fabrique de connexion MQ    ##
#####################################################
def createFactory(pFactoryName, pFactoryJndiName, pMQQueueManager, pMQServer, pMQServerPort, pMQChannel, pMqJMSProfil):
        oldFactory=AdminConfig.getid(‘/MQQueueConnectionFactory:’+pFactoryName)
        if oldFactory!= » :
                AdminConfig.remove(oldFactory)
        cfname = [‘name’, pFactoryName]
        cfjndi = [‘jndiName’, pFactoryJndiName]
        cfManager=[‘queueManager’, pMQQueueManager]
        cfServer= [‘host’, pMQServer]
        cfPort=[‘port’, pMQServerPort]
        cfChannel=[‘channel’, pMQChannel]
        cfTransportType=[‘transportType’, ‘CLIENT’]
        cfXAEnabled=[‘XAEnabled’, ‘true’]
        mqqcfAttrs = [cfname, cfjndi, cfManager, cfServer, cfPort, cfChannel, cfTransportType, cfXAEnabled]
        factory=AdminConfig.create(‘MQQueueConnectionFactory’, pMqJMSProfil, mqqcfAttrs)
        connectionPool=AdminConfig.showAttribute(factory,‘connectionPool’)
        AdminConfig.modify(connectionPool,[[‘maxConnections’,100]])
        print pFactoryName + ‘ créée’
       

########################################
## Permet de créer une file d’attente ##
########################################
def createMQQueue(pQueueName, pBaseQueuName, pJndiName, pMQQueueManager, pMQJMSProfil):
        oldQueue=AdminConfig.getid(‘/MQQueue:’+pQueueName)
        if oldQueue!= » :
                AdminConfig.remove(oldQueue)
        mqName=[‘name’, pQueueName]
        mqJndiName=[‘jndiName’, pJndiName]
        mqBaseQueueName=[‘baseQueueName’, pBaseQueuName]
        jmsTarget=[‘targetClient’, ‘JMS’]
        mqqAttrs=[pMQQueueManager, mqName, mqJndiName, mqBaseQueueName, jmsTarget]
        AdminConfig.create(‘MQQueue’, pMQJMSProfil, mqqAttrs)
        print pQueueName+‘ créée!’

#######################################
## Permet de créer un port d’écoute  ##
#######################################
def createListnerPort(pListnerName, pJndiName, pFactoryJndiName, pMessageListnerService):
        oldListner=AdminConfig.getid(‘/ListenerPort:’+pListnerName)
        if oldListner!= » :
                AdminConfig.remove(oldListner)
        messageListnerName=[‘name’, pListnerName]
        messageListnerDestinationJndiName=[‘destinationJNDIName’, pJndiName]
        messageListnerConnectionFactoryJndiName=[‘connectionFactoryJNDIName’, pFactoryJndiName]
        messageListnerMaxMessages=[‘maxMessages’, 1]
        messageListnerMaxRetries=[‘maxRetries’, 3]
        messageListnerMaxSessions=[‘maxSessions’, 1]
        mlattrs=[messageListnerName, messageListnerDestinationJndiName, messageListnerConnectionFactoryJndiName, messageListnerMaxMessages, messageListnerMaxRetries, messageListnerMaxSessions]
        newListner = AdminConfig.create(‘ListenerPort’, pMessageListnerService, mlattrs)
        AdminConfig.create(‘StateManageable’, newListner, [[‘initialState’, ‘START’]])
        print pListnerName + ‘ créé!’
       
####################################
##              Main              ##
####################################
def main():
        #load configuration
        print ‘Entrer le chemin de la configuration (*.properties):’
        configFilePath=sys.stdin.readline().strip()
        configProperties = loadProperties(configFilePath)
        print ‘Configuration chargée’
        #Cell name
        cell=AdminControl.getCell()
        print ‘Cellule WAS : ‘+ cell
        #Node name
        node=AdminControl.getNode()
        print ‘Noeud WAS : ‘+ node
        #Server name
        server=configProperties[‘was.name’]
        print ‘Serveur WAS : ‘ + server
        #Queue Manager name
        mqQueueManager=configProperties[‘mq.manager’]
        print ‘Gestionnaire MQ : ‘ + mqQueueManager
        #MQ factory name
        factoryName=configProperties[‘factory.name’]
        print ‘Nom de la fabrique de connexion MQ : ‘ + factoryName
        #MQ factory JNDI name
        factoryJndiName=configProperties[‘factory.jndiName’]
        print ‘Nom JNDI de la fabrique de connexion MQ : ‘ + factoryJndiName
        #MQ server name
        mqServerHost=configProperties[‘mq.host’]
        print ‘Hôte du gestionnaire MQ : ‘ + mqServerHost
        #MQ server port
        mqServerPort=configProperties[‘mq.port’]
        print ‘Port du gestionnaire MQ :’ + mqServerPort
        #MQ Channel
        mqChannel=configProperties[‘mq.channel’]
        print ‘Canal du gestionnaire MQ :’ + mqChannel
        jmsProvider=‘WebSphere MQ JMS Provider’
        baseQueueManagerName=[‘baseQueueManagerName’, mqQueueManager]
        mqJMSProfil = AdminConfig.getid(‘/Cell:’+cell+‘/Node:’+node+‘/Server:’+server+‘/JMSProvider:’+jmsProvider)
        messageListnerServer=AdminConfig.getid(‘/Cell:’+cell+‘/Node:’+node+‘/Server:’+server)
        messageListnerService = AdminConfig.list(‘MessageListenerService’, messageListnerServer)
       
        ##############################################################
        ###           création de la fabrique de connexion          ##
        ##############################################################
        oldFactory=AdminConfig.getid(‘/MQQueueConnectionFactory:’+factoryName)
        if oldFactory== » : #update Factory
                createFactory(factoryName, factoryJndiName, mqQueueManager, mqServerHost, mqServerPort, mqChannel, mqJMSProfil)
       
        #######################################################
        ###           création des files d’attentes          ##
        #######################################################
        #
        createMQQueue(‘MYMQ.SERVICE.IN’, ‘MYMQ.SERVICE.IN’, ‘jms/MYMQ.SERVICE.IN’, baseQueueManagerName, mqJMSProfil)
        createMQQueue(‘MYMQ.SERVICE.OUT’, ‘MYMQ.SERVICE.OUT’, ‘jms/MYMQ.SERVICE.OUT’, baseQueueManagerName, mqJMSProfil)

        ####################################################
        ###          Création des ports d’écoute          ##
        ####################################################
        #create SYSP.LISTENER.CONSULTSITUATIONSOUSSYSTEME Listner
        createListnerPort(‘MYSERVICELISTENER’, ‘jms/MYMQ.SERVICE.IN’, factoryJndiName, messageListnerService)
       
        ##############################################################
        ###         Sauvegarde de la nouvelle configuration         ##
        ##############################################################
        AdminConfig.save()
        print ‘New Configuration saved’
       
#invocation of main
main()

En cas de soucis ou d’amélioration de ce code merci de me contacter :)

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 ?