L'environnement de traitement par lots peut être configuré
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. 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écution finaux par lots reçoivent des demandes qui correspondent à leurs capacités et ils exécutent ces demandes. Les répartiteurs par lots et les
programmes d'exécution par lots communiquent à l'aide de JMS (Java
Messaging Service).
Avant de commencer
Déterminez le serveur d'hébergement du moteur de
messagerie imbriqué. Ce moteur peut être hébergé sur le serveur de
répartition par lots, sur le serveur de programme d'exécution par lots
ou sur
un serveur distinct. Ce serveur doit être configuré pour que vous puissiez
exécuter cette tâche. La fabrique de connexion JMS et la
spécification d'activation font référence au serveur de moteur de
messagerie dans leur configuration. Pour configurer le moteur de
messagerie :
- Ajoutez la fonction
wasJmsServer-1.0
dans le fichier server.xml.
- Définissez le moteur de messagerie en ajoutant l'élément
messageEngine. Définissez la file d'attente qui
est utilisée pour le répartiteur par lots et le programme
d'exécution par
lots. L'exemple
ci-dessous illustre la configuration du moteur de messagerie dans
votre fichier server.xml.
<!-specify the ports for the message engine.
The ports in this example are the default ports.
This element is not needed when the default ports are used. -->
<wasJmsEndpoint host="*"
wasJmsPort="7280"
wasJmsSSLPort="7290"
enabled="true">
</wasJmsEndpoint>
<messagingEngine>
<!- queue for batch jms message. -->
<queue id="batchLibertyQueue"
forceReliability="ReliablePersistent"
receiveAllowed="true"/>
</messagingEngine>
Pourquoi et quand exécuter cette tâche
Cette tâche permet de configurer le serveur de
répartition par lots et le programme d'exécution par lots à l'aide du
fournisseur de messagerie intégré à Liberty.
Procédure
Pour configurer le répartiteur et le programme d'exécution par lots qui utilisent le fournisseur de messagerie intégré à Liberty :
- Configurez le répartiteur JMS par lots.
- Activez la prise en charge JMS en ajoutant la fonction
wasJmsClient-2.0 au gestionnaire de fonctions
dans votre fichier server.xml.
- 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.
- Ajoutez la fabrique de connexion JMS et la file d'attente JMS
correspondantes à la configuration de serveur. Cela n'est pas
spécifique à la configuration par lots. L'exemple ci-après illustre la configuration de
répartiteur JMS par lots et sa configuration JMS.
Remarque : L'attribut remoteServerAddress pointe sur l'élément
host:port du serveur qui héberge le moteur de
messagerie de Liberty.
<batchJmsDispatcher connectionFactoryRef="batchConnectionFactory"
queueRef="batchJobSubmissionQueue" />
<jmsConnectionFactory id="batchConnectionFactory"
jndiName="jms/batch/connectionFactory">
<properties.wasJms remoteServerAddress="host:7280:BootstrapBasicMessaging">
</properties.wasJms>
</jmsConnectionFactory>
<jmsQueue id="batchJobSubmissionQueue"
jndiName="jms/batch/jobSubmissionQueue">
<properties.wasJms deliveryMode="Persistent"
queuename="batchLibertyQueue">
</properties.wasJms>
</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 fonctionnera pas. Votre configuration doit inclure à la fois un élément
jmsConnectionFactory et un élément jmsQueue, mais pas un élément jmsQueueConnectionFactory.
- Configurez le programme d'exécution JMS par lots.
- Activez la prise en charge JMS en ajoutant la fonction
wasJmsClient-2.0 au gestionnaire de fonctions
dans votre fichier server.xml.
- Ajoutez l'élément batchJmsExecutor
dans votre fichier server.xml sur le serveur
qui héberge le programme d'exécution par lots.
<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.
![[18.0.0.1 and later]](../ng_v18001plus.gif)
Si vous souhaitez appliquer la sécurité de groupe par lots,
activez la sécurité
Liberty en ajoutant la fonction
app-Security-2.0 au gestionnaire de fonctions dans votre fichier
server.xml. De même, ajoutez l'attribut
batchOperationGroupRef
à l'élément
batchJmsExecutor comme illustré dans l'exemple suivant.
<batchJmsExecutor activationSpecRef={configured activation specification or batch executor}
queueRef={reference to the configured JMS queue} />
- Ajoutez la spécification d'activation JMS et la file d'attente
JMS correspondantes à la configuration de serveur.
Cela n'est pas
spécifique à la configuration par lots.
- Facultatif :
Si vous souhaitez appliquer la sécurité de groupe par lots,
ajoutez les sections correspondantes de nom de groupe d'opérations à l'élément
batchJmsExecutor, comme illustré dans l'exemple suivant. <batchJmsExecutor activationSpecRef={configured activation specification or batch executor}
queueRef={reference to the configured JMS queue} >
<operationGroup>GroupA</operationGroup>
</batchJmsExecutor>
Remarque : Vous devez configurer le registre de sécurité pour la prise en charge des noms de groupe répertoriés précédemment.
- 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.
- Filtrage basé sur des propriétés définies par le système :
Plusieurs propriétés de répartiteur par lots 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
component de l'application par lots pour la demande de travail
Remarque : Il est recommandé de spécifier un sélecteur de message avec au moins
la propriété com_ibm_ws_batch_applicationName
afin de garantir que le programme d'exécution reçoit uniquement des
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'">
L'exemple ci-après indique l'attribut
messageSelector afin que le programme
d'exécution accepte un travail pour l'application
SimpleBatchJob.
messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob'">
- Filtrage 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. Pour plus d'informations sur le sélecteur de messages JMS,
voir JMS Javadoc.
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'">
![[18.0.0.1 and later]](../ng_v18001plus.gif)
L'exemple suivant illustre l'exécuteur JMS par lots
qui est configuré avec un groupe d'opérations et sa configuration JMS
à l'aide du mode de liaison
IBM MQ.
<batchJmsExecutor activationSpecRef="batchActivationSpec"
queueRef="batchJobSubmissionQueue"/>
<operationGroup>GroupA</operationGroup>
</batchJmsExecutor>
<!-- wmq resource adapter -->
<variable name="wmqJmsClient.rar.location"
value="${server.config.dir}/wmq.wlp.rar"/>
<!-- nativeLibraryPath is required for BINDING 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.wasJms destinationRef="batchJobSubmissionQueue"
messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' OR com_ibm_ws_batch_applicationName = 'BonusPayoutCDI'"
destinationType="javax.jms.Queue"
remoteServerAddress="host:7280:BootstrapBasicMessaging">
</properties.wasJms>
</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>
![[18.0.0.1 and later]](../ng_v18001plus.gif)
L'exemple suivant illustre l'exécuteur JMS par lots
qui est configuré avec un groupe d'opérations et ses configurations JMS
à l'aide du mode
IBM MQ.
<batchJmsExecutor activationSpecRef="batchActivationSpec"
queueRef="batchJobSubmissionQueue"/>
<operationGroup>GroupA</operationGroup>
</batchJmsExecutor>
<!-- 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>
- Installez votre application par lots sur le serveur. Pour plus d'informations, voir Déploiement d'applications dans Liberty.
![[17.0.0.3 and later]](../ng_v17003plus.gif)
Remarque : Pour retarder la livraison des messages de travaux, soumettez le travail en spécifiant un paramètre de travail de com_ibm_ws_batch_message_deliveryDelay défini sur le nombre de
millisecondes choisi pour retarder la livraison du message sur un serveur exécuteur.
Pour modifier la priorité du message de travail, soumettez le travail en spécifiant un paramètre de travail de
com_ibm_ws_batch_message_priority défini sur une priorité de message JMS valide (de 0 à 9). La spécification JMS définit la priorité de message par défaut sur '4', zéro correspondant à la
priorité la plus faible et neuf à la priorité la plus élevée.
Le redémarrage d'un travail ayant échoué utilise le même délai et la même priorité que le travail d'origine, à moins qu'une
valeur différente soit spécifiée en tant que paramètre de travail au moment du redémarrage.
La priorité est propagée aux messages pour les partitions à serveurs multiples, mais le délai de
livraison n'est pas propagé.