Activation de la prise en charge des partitions serveur multiples via le fournisseur de messagerie IBM MQ

Vous pouvez configurer l'environnement de traitement par lots pour que des serveurs fonctionnent comme des répartiteurs par lots tandis que d'autres serveurs fonctionnent comme des programmes d'exécution par lots.

Pourquoi et quand exécuter cette tâche

Les répartiteurs par lots acceptent les demandes de clients externes et les rendent disponibles pour les programmes d'exécution par lots. Les programmes d'exécutionfinaux par lots reçoivent des demandes qui correspondent à leurs capacités et ils exécutent ces demandes. Si le travail est configuré pour exécuter des partitions, les programmes d'exécution les mettent à disposition des autres programmes d'exécution. Les programmes d'exécution par lots communiquent via le service JMS (Java Messaging Service). Cette tâche vous permet de configurer le serveur de répartition par lots et le programme d'exécution par lots à l'aide du fournisseur de messagerie IBM MQ.

Procédure

  1. Configurez le répartiteur JMS par lots.
    1. Activez la prise en charge JMS en ajoutant la fonction wmqJmsClient-2.0 au gestionnaire de fonctions dans votre fichier server.xml.
    2. Ajoutez l'élément batchJmsDispatcher dans votre fichier server.xml sur le serveur qui héberge le répartiteur par lots.
      <batchJmsDispatcher connectionFactoryRef={reference to a configured JMS connection factory}
      	queueRef={reference to a configured JMS queue} />
      Remarque : Si vous n'indiquez pas les attributs connectionFactoryRef et queueRef, la valeur par défaut de l'élément connectionFactoryRef est batchConnectionFactory et la valeur par défaut de l'élément queueRef est batchJobSubmissionQueue. Vous pouvez spécifier l'élément batchJmsDispatcher en tant que <batchJmsDispatcher/>. Vous devez toujours configurer la fabrique de connexion JMS batchConnectionFactory et la file d'attente batchJobSubmissionQueue JMS dans le fichier server.xml.
    3. Ajoutez la fabrique de connexion JMS et la file d'attente JMS correspondantes à la configuration de serveur. Cet ajout n'est pas spécifique à la configuration par lots.

      L'exemple suivant illustre la configuration du répartiteur JMS par lots et sa configuration JMS à l'aide du mode de liaison d'IBM MQ :

      <batchJmsDispatcher connectionFactoryRef="batchConnectionFactory"
      		      queueRef="batchJobSubmissionQueue" />
      
      <!-- wmq resource adapter -->
      <variable name="wmqJmsClient.rar.location"
         	value="${server.config.dir}/wmq.wlp.rar"/>
      
      <!-- nativeLibraryPath is required for BINDINGS mode -->
      <!-- the startup retry and reconnect retry properties are 
           recommended to ensure robustness of the system.-->
      <wmqJmsClient nativeLibraryPath="/mqm/jms/java/lib" 
      		startupRetryCount=999
      		startupRetryInterval="1000ms"
      		reconnectionRetryCount=10
      		reconnectionRetryInterval="5m">
      </wmqJmsClient>
      
      <authData password="pwd" user="user">
      </authData>
      
      <jmsConnectionFactory id="batchConnectionFactory"	
      		      jndiName="jms/batch/connectionFactory">
      	<properties.wmqJms transportType="BINDINGS"
      			   queueManager="WMQX">
      	</properties.wmqJms>
      </jmsConnectionFactory>
      
      <!-- baseQueueName is the queue defined on WMQ system -->
      <jmsQueue id="batchJobSubmissionQueue"
      	  jndiName="jms/batch/jobSubmissionQueue">
          <properties.wmqJms baseQueueName="BATCHQ"
      			  priority="QDEF"
      			  baseQueueManagerName="WMQX">
          </properties.wmqJms>
      </jmsQueue>

      L'exemple suivant illustre la configuration du répartisseur JMS par lots et sa configuration JMS à l'aide du mode client d'IBM MQ :

      <batchJmsDispatcher connectionFactoryRef="batchConnectionFactory"
      		      queueRef="batchJobSubmissionQueue" />
      
      <!-- wmq resource adapter -->
      <variable name="wmqJmsClient.rar.location"
         	value="${server.config.dir}/wmq.wlp.rar"/>
      
      <!-- the startup retry and reconnect retry properties are 
           recommended to ensure robustness of the system.-->
      <wmqJmsClient startupRetryCount=999
      		 startupRetryInterval="1000ms"
      		 reconnectionRetryCount=10
      		 reconnectionRetryInterval="5m">
      </wmqJmsClient>
      
      <authData password="pwd" user="user">
      </authData>
      
      <jmsConnectionFactory id="batchConnectionFactory"	
      		      jndiName="jms/batch/connectionFactory">
      	<properties.wmqJms 
      			   hostName="webs24.pok.stglabs.ibm.com"
      			   transportType="CLIENT"
      			   channel="WAS.JMS.SVRCONN"
      			   port="1414"
      			   queueManager="WMQX"/>>
      	</properties.wmqJms>
      </jmsConnectionFactory>
      
      <!-- baseQueueName is the queue defined on WMQ system -->
      <jmsQueue id="batchJobSubmissionQueue"
      	  jndiName="jms/batch/jobSubmissionQueue">
          <properties.wmqJms baseQueueName="BATCHQ"
      			  priority="QDEF"
      			  baseQueueManagerName="WMQX">
          </properties.wmqJms>
      </jmsQueue>
      Remarque : Vérifiez que vous référencez un élément jmsConnectionFactory, comme illustré dans l'exemple, et non un élément jmsQueueConnectionFactory. L'utilisation d'un élément jmsQueueConnectionFactory ne fonctionne pas. Votre configuration doit inclure à la fois un élément jmsConnectionFactory et un élément jmsQueue, mais pas un élément jmsQueueConnectionFactory.
  2. Configurez le programme d'exécution JMS par lots pour l'exécutions de travaux.
    1. Activez la prise en charge JMS en ajoutant la fonction wmqJmsClient-2.0 au gestionnaire de fonctions dans votre fichier server.xml.
    2. Ajoutez l'élément batchJmsDispatcher dans votre fichier server.xml sur le serveur qui héberge le programme d'exécution par lots.
      Remarque : Si vous n'ajoutez pas l'élément batchJmsDispatcher à votre fichier server.xml, le serveur ne répartit pas les partitions pour une exécution sur plusieurs serveurs et exécute les partitions localement.
    3. Ajoutez l'élément batchJmsExecutor et une fabrique de connexions (connectionFactory) dans votre fichier server.xml sur le serveur qui héberge le programme d'exécution par lots. Pour plus d'informations, reportez-vous aux étapes 1b et 1c.
      <batchJmsExecutor activationSpecRef={configured activation specification or batch executor}
      	queueRef={reference to the configured JMS queue} />
      Remarque : Si vous n'indiquez pas les attributs activationSpecRef et queueRef, la valeur par défaut de l'élément activationSpecRef est batchActivationSpec et la valeur par défaut de l'élément queueRef est batchJobSubmissionQueue. Vous pouvez spécifier l'élément batchJmsExecutor en tant que <batchJmsExecutor/>. Vous devez toujours configurer la spécification d'activation JMS pour batchActivationSpec et la file d'attente JMS batchJobSubmissionQueue dans le fichier server.xml.
    4. Ajoutez la spécification d'activation JMS et la file d'attente JMS correspondantes à la configuration de serveur. Cet ajout n'est pas spécifique à la configuration par lots.
    5. Définissez les fonctions du serveur de programme d'exécution par lots en incluant un sélecteur de messages JMS dans la spécification d'activation.
      • Filtre basé sur des propriétés définies par le système :

        Les propriétés de répartiteur par lots suivantes sont disponibles dans le message JMS par lots que le programme d'exécution par lots peut utiliser pour filtrer les messages entrants.

        • com_ibm_ws_batch_applicationName : nom de l'application par lots pour la demande de travail
        • com_ibm_ws_batch_moduleName : nom de module de l'application par lots pour la demande de travail
        • com_ibm_ws_batch_componentName : nom de composant de l'application par lots pour la demande de travail
        • com_ibm_ws_batch_work_type : type de travail : "Job"
        Remarque : Spécifiez un sélecteur de message avec au moins la propriété com_ibm_ws_batch_applicationName afin de garantir que l'exécuteur reçoit uniquement les travaux qu'il peut traiter.
        L'exemple ci-après indique l'attribut messageSelector afin que le programme d'exécution accepte un travail pour l'application SimpleBatchJob et BonusPayout.
        messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' OR com_ibm_ws_batch_applicationName = 'BonusPayout'">
      • Filtre basé sur des propriétés définies par l'utilisateur :

        Le répartiteur par lors définit tous les paramètres de travail qui sont conformes à la propriété de message JMS appropriée dans le message de demande du répartiteur par lots. Ces propriétés peuvent également être utilisées par le sélecteur de message pour ajouter un filtrage supplémentaire au sélecteur de message. Le nom de propriété ou l'identificateur doit être conforme aux contraintes de propriété de message JMS. Par exemple, la propriété est une séquence de lettre et de chiffres de longueur illimitée, le premier caractère devant être une lettre. Une lettre est un caractère pour lequel la méthode Character.isJavaLetter renvoie true, et elle inclut '_' et '$'. Une lettre ou un chiffre est un caractère pour lesquels la méthode Character.isJavaLetterOrDigit renvoie true. Consultez la documentation de l'API JMS pour plus d'informations sur le sélecteur de messages JMS.

        L'exemple ci-après illustre un sélecteur de message possible qui utilise la propriété com_ibm_ws_batch_applicationName et un paramètre de travail specialCapability :
        messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' AND specialCapability = 'superCapability'">
      L'exemple suivant illustre la configuration de l'exécuteur JMS par lots et sa configuration JMS à l'aide du mode de liaison IBM MQ :
      <batchJmsExecutor activationSpecRef="batchActivationSpec"
      		  queueRef="batchJobSubmissionQueue"/>
      
      <!-- wmq resource adapter -->
      <variable name="wmqJmsClient.rar.location"
                value="${server.config.dir}/wmq.wlp.rar"/>
      
      <!-- nativeLibraryPath is required for BINDINGS mode -->
      <!-- the startup retry and reconnect retry properties are
           recommended to ensure robustness of the system.-->
      <wmqJmsClient nativeLibraryPath="/mqm/jms/java/lib" 
      		startupRetryCount=999
      		startupRetryInterval="1000ms"
      		reconnectionRetryCount=10
      		reconnectionRetryInterval="5m">
      </wmqJmsClient>
      
      <authData password="pwd" user="user">
      </authData>
      
      <JmsActivationSpec id="batchActivationSpec" >
          <properties.wmqJms destinationRef="batchJobSubmissionQueue" 
                destinationType="javax.jms.Queue"
                messageSelector="(com_ibm_ws_batch_applicationName = 'SimpleBatchJob' OR com_ibm_ws_batch_applicationName = 'BonusPayout') AND com_ibm_ws_batch_work_type='Job'""
                transportType="BINDINGS"
                queueManager="WMQX">
          </properties.wmqJms>
      </jmsActivationSpec>
      
      <!-- baseQueueName is the queue defined on WMQ system -->
      <jmsQueue id="batchJobSubmissionQueue"
      	  jndiName="jms/batch/jobSubmissionQueue">
          <properties.wmqJms baseQueueName="BATCHQ"
                priority="QDEF"
                baseQueueManagerName="WMQX">
          </properties.wmqJms>
      </jmsQueue>
      L'exemple suivant illustre la configuration de l'exécuteur JMS par lots et ses configurations JMS à l'aide du mode client Webs Sphere MQ :
      <batchJmsExecutor activationSpecRef="batchActivationSpec"
      		  queueRef="batchJobSubmissionQueue"/>
      
      <!-- wmq resource adapter -->
      <variable name="wmqJmsClient.rar.location"
                value="${server.config.dir}/wmq.wlp.rar"/>
      
      <!-- the startup retry and reconnect retry properties are
           recommended to ensure robustness of the system.-->
      <wmqJmsClient startupRetryCount=999  
      		 startupRetryInterval="1000ms"
      		 reconnectionRetryCount=10
      		 reconnectionRetryInterval="5m">
      </wmqJmsClient>
      
      <authData password="pwd" user="user">
      </authData>
      
      <JmsActivationSpec id="batchActivationSpec" >
          <properties.wmqJms destinationRef="batchJobSubmissionQueue" 
      			   messageSelector="com_ibm_ws_batch_applicationName = SimpleBatchJob' OR com_ibm_ws_batch_applicationName = 'BonusPayout'"
      		 transportType="CLIENT"
      		 channel="WAS.JMS.SVRCONN"
      		 destinationType="javax.jms.Queue"
      		 queueManager="WMQX"
      		 hostName="webs24.pok.stglabs.ibm.com"
      		 port="1414">
          </properties.wmqJms>
      </jmsActivationSpec>
      
      <!-- baseQueueName is the queue defined on WMQ system -->
      <jmsQueue id="batchJobSubmissionQueue"
      	  jndiName="jms/batch/jobSubmissionQueue">
          <properties.wmqJms baseQueueName="BATCHQ"
         	baseQueueManagerName="WMQX">
          </properties.wmqJms>
      </jmsQueue>
  3. Configurez le programme d'exécution JMS par lots pour l'exécutions de partitions uniquement.
    1. Activez la prise en charge JMS en ajoutant la fonction wmqJmsClient-2.0 au gestionnaire de fonctions dans votre fichier server.xml.
    2. Ajoutez l'élément batchJmsExecutor et une fabrique de connexions (connectionFactory) dans votre fichier server.xml sur le serveur qui héberge le programme d'exécution par lots. Pour plus d'informations, reportez-vous aux étapes 1b et 1c.
      <batchJmsExecutor activationSpecRef={configured activation specification or batch executor}
      	queueRef={reference to the configured JMS queue}
             replyConnectionFactoryRef={reference to the configured JMS connection factory} />
      Remarque : Si vous n'indiquez pas les attributs activationSpecRef et queueRef, la valeur par défaut de l'élément activationSpecRef est batchActivationSpec et la valeur par défaut de l'élément queueRef est batchJobSubmissionQueue. Vous pouvez spécifier l'élément batchJmsExecutor en tant que <batchJmsExecutor/>. Vous devez toujours configurer la spécification d'activation JMS pour batchActivationSpec et la file d'attente JMS batchJobSubmissionQueue dans le fichier server.xml.
    3. Ajoutez la spécification d'activation JMS et la file d'attente JMS correspondantes à la configuration de serveur. Cet ajout n'est pas spécifique à la configuration par lots.
    4. Définissez les fonctions du serveur de programme d'exécution par lots en incluant un sélecteur de messages JMS dans la spécification d'activation.
      • Filtre basé sur des propriétés définies par le système :

        Les propriétés de répartiteur par lots suivantes sont disponibles dans le message JMS par lots que le programme d'exécution par lots peut utiliser pour filtrer les messages entrants.

        • com_ibm_ws_batch_applicationName : nom de l'application par lots pour la demande de travail
        • com_ibm_ws_batch_moduleName : nom de module de l'application par lots pour la demande de travail
        • com_ibm_ws_batch_componentName : nom de composant de l'application par lots pour la demande de travail
        • om_ibm_ws_batch_work_type : type de travail : "Partition"
        • com_ibm_ws_batch_partitionNum(Type=Integer) : numéro de partition de la partition en cours d'attribution
        • com_ibm_ws_batch_stepName : nom de l'étape telle que définie dans le JSL
        Remarque : Spécifiez un sélecteur de message avec au moins la propriété com_ibm_ws_batch_applicationName afin de garantir que l'exécuteur reçoit uniquement les travaux qu'il peut traiter.
        L'exemple ci-après indique l'attribut messageSelector afin que le programme d'exécution accepte un travail pour l'application SimpleBatchJob et BonusPayout.
        messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' OR com_ibm_ws_batch_applicationName = 'BonusPayout'">
      • Filtre basé sur des propriétés définies par l'utilisateur :

        Le répartiteur par lors définit tous les paramètres de travail qui sont conformes à la propriété de message JMS appropriée dans le message de demande du répartiteur par lots. Ces propriétés peuvent également être utilisées par le sélecteur de message pour ajouter un filtrage supplémentaire au sélecteur de message. Le nom de propriété ou l'identificateur doit être conforme aux contraintes de propriété de message JMS. Par exemple, la propriété est une séquence de lettre et de chiffres de longueur illimitée, le premier caractère devant être une lettre. Une lettre est un caractère pour lequel la méthode Character.isJavaLetter renvoie true, et elle inclut '_' et '$'. Une lettre ou un chiffre est un caractère pour lesquels la méthode Character.isJavaLetterOrDigit renvoie true. Consultez la documentation de l'API JMS pour plus d'informations sur le sélecteur de messages JMS.

        L'exemple ci-après illustre un sélecteur de message possible qui utilise la propriété com_ibm_ws_batch_applicationName et un paramètre de travail specialCapability :
        messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' AND specialCapability = 'superCapability'">
      L'exemple suivant illustre la configuration de l'exécuteur JMS par lots et sa configuration JMS à l'aide du mode de liaison IBM MQ :
      <jmsConnectionFactory id="batchConnectionFactory"
                            jndiName="jms/batch/connectionFactory"/>
      
      <batchJmsExecutor activationSpecRef="batchActivationSpec"
      		  queueRef="batchJobSubmissionQueue"/>
                     replyConnectionFactoryRef="batchConnectionFactory"/>
      
      <!-- wmq resource adapter -->
      <variable name="wmqJmsClient.rar.location"
                value="${server.config.dir}/wmq.wlp.rar"/>
      
      <!-- nativeLibraryPath is required for BINDINGS mode -->
      <!-- the startup retry and reconnect retry properties are
           recommended to ensure robustness of the system.-->
      <wmqJmsClient nativeLibraryPath="/mqm/jms/java/lib" 
      		startupRetryCount=999
      		startupRetryInterval="1000ms"
      		reconnectionRetryCount=10
      		reconnectionRetryInterval="5m">
      </wmqJmsClient>
      
      <authData password="pwd" user="user">
      </authData>
      
      <JmsActivationSpec id="batchActivationSpec" >
          <properties.wmqJms destinationRef="batchJobSubmissionQueue" 
                destinationType="javax.jms.Queue"
                messageSelector="(com_ibm_ws_batch_applicationName = 'SimpleBatchJob' OR com_ibm_ws_batch_applicationName = 'BonusPayout') AND com_ibm_batch_work_type='Job'""
                transportType="BINDINGS"
                queueManager="WMQX">
          </properties.wmqJms>
      </jmsActivationSpec>
      
      <!-- baseQueueName is the queue defined on WMQ system -->
      <jmsQueue id="batchJobSubmissionQueue"
      	  jndiName="jms/batch/jobSubmissionQueue">
          <properties.wmqJms baseQueueName="BATCHQ"
                priority="QDEF"
                baseQueueManagerName="WMQX">
          </properties.wmqJms>
      </jmsQueue>
      L'exemple suivant illustre la configuration de l'exécuteur JMS par lots et ses configurations JMS à l'aide du mode client Webs Sphere MQ :
      <jmsConnectionFactory id="batchConnectionFactory"
                            jndiName="jms/batch/connectionFactory"/>
      
      <batchJmsExecutor activationSpecRef="batchActivationSpec"
      		  queueRef="batchJobSubmissionQueue"/>
                     replyConnectionFactoryRef="batchConnectionFactory"/>
      
      <!-- wmq resource adapter -->
      <variable name="wmqJmsClient.rar.location"
                value="${server.config.dir}/wmq.wlp.rar"/>
      
      <!-- the startup retry and reconnect retry properties are
           recommended to ensure robustness of the system.-->
      <wmqJmsClient startupRetryCount=999  
      		 startupRetryInterval="1000ms"
      		 reconnectionRetryCount=10
      		 reconnectionRetryInterval="5m">
      </wmqJmsClient>
      
      <authData password="pwd" user="user">
      </authData>
      
      <JmsActivationSpec id="batchActivationSpec" >
          <properties.wmqJms destinationRef="batchJobSubmissionQueue" 
      			   messageSelector="com_ibm_ws_batch_applicationName = SimpleBatchJob' OR com_ibm_ws_batch_applicationName = 'BonusPayout'"
      		 transportType="CLIENT"
      		 channel="WAS.JMS.SVRCONN"
      		 destinationType="javax.jms.Queue"
      		 queueManager="WMQX"
      		 hostName="webs24.pok.stglabs.ibm.com"
      		 port="1414">
          </properties.wmqJms>
      </jmsActivationSpec>
      
      <!-- baseQueueName is the queue defined on WMQ system -->
      <jmsQueue id="batchJobSubmissionQueue"
      	  jndiName="jms/batch/jobSubmissionQueue">
          <properties.wmqJms baseQueueName="BATCHQ"
         	baseQueueManagerName="WMQX">
          </properties.wmqJms>
      </jmsQueue>
  4. Installez votre application par lots sur le serveur. Pour plus d'informations, voir Déploiement d'applications dans Liberty. Pour désactiver l'exécution de plusieurs partitions serveur : Si vous souhaitez une prise en charge de plusieurs serveurs mais ne souhaitez pas exécuter plusieurs partitions serveur, vous pouvez définir la propriété de travail come.ibm.websphere.batch.partition.multiJVM sur false dans votre fichier XML de travail jsl. L'exemple suivant montre un travail JSL pour désactiver plusieurs partitions serveur :
    <property name="com.ibm.websphere.batch.partition.multiJVM" value="false"/>
    Remarque : Si vous exécutez une partition sur un programme d'exécution distant, aucun journal de travail n'est créé pour cette partition.

Icône indiquant le type de rubrique Rubrique Tâche

Nom du fichier : twlp_batch_multipartitionsmq.html