一部のサーバーがバッチ・ディスパッチャーとして機能し、それ以外のサーバーがバッチ executor として機能するよう、バッチ環境をセットアップすることができます。バッチ・ディスパッチャーは、外部クライアントからの要求を受け入れ、それらの要求をバッチ executor で使用できるようにします。バッチ executor は、定義された能力に合致する要求を受け取って、それらの要求を実行します。バッチ・ディスパッチャーとバッチ executor は、Java Messaging Service (JMS) を使用して通信します。
始める前に
組み込みメッセージ・エンジンがどこでホストされるのかを決定してください。ホストできるのは、バッチ・ディスパッチ・サーバー、バッチ executor サーバー、または分離サーバーです。このサーバーが構成されてからでないと、
このタスクを実行することはできません。JMS 接続ファクトリーおよびアクティベーション・スペックは、
その構成内でメッセージング・エンジン・サーバーを参照します。メッセージング・エンジンを構成するには、次のようにします。
- wasJmsServer-1.0 フィーチャーを server.xml に追加します。
- messageEngine エレメントを追加することによってメッセージング・エンジンを定義します。バッチ・ディスパッチャーおよびバッチ executor のために使用されるキューを定義します。次の例は、
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>
このタスクについて
このタスクは、Liberty 組み込みメッセージング・プロバイダーを使用したバッチ・ディスパッチ・サーバーとバッチ executor の構成を支援します。
手順
Liberty 組み込みメッセージング・プロバイダーを使用するバッチ・ディスパッチャーおよびバッチ executor を構成するには、次のようにします。
- バッチ JMS ディスパッチャーを構成します。
- server.xml 内で wasJmsClient-2.0 フィーチャーをフィーチャー・マネージャーに追加することによって、JMS サポートを有効にします。
- バッチ・ディスパッチャーをホストするサーバー上で server.xml に batchJmsDispatcher エレメントを追加します。
<batchJmsDispatcher connectionFactoryRef={reference to a configured JMS connection factory}
queueRef={reference to a configured JMS queue} />
注: connectionFactoryRef 属性および queueRef 属性を指定しない場合、connectionFactoryRef のデフォルト値は batchConnectionFactory、queueRef のデフォルト値は batchJobSubmissionQueue です。batchJmsDispatcher エレメントを <batchJmsDispatcher/> と指定することができます。それでも、
server.xml ファイル内で、batchConnectionFactory JMS 接続ファクトリーおよび JMS batchJobSubmissionQueue キューを構成する必要はあります。
- 対応する JMS 接続ファクトリーおよび JMS キューをサーバー構成に追加します。これは、バッチ構成に特有のものではありません。 次の例は、バッチ JMS ディスパッチャー構成とその JMS 構成を示します。
注: remoteServerAddress 属性は、Liberty メッセージング・エンジンをホストするサーバーの host:port をポイントします。
<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>
注: 例に示されているように、jmsQueueConnectionFactory エレメントではなく、jmsConnectionFactory エレメントを参照していることを確認してください。jmsQueueConnectionFactory エレメントを使用した場合、機能しません。構成には jmsConnectionFactory エレメントと jmsQueue エレメントの両方を含め、jmsQueueConnectionFactory エレメントは含めないでください。
- バッチ JMS executor を構成します。
- server.xml 内で wasJmsClient-2.0 フィーチャーをフィーチャー・マネージャーに追加することによって、JMS サポートを有効にします。
- バッチ executor をホストするサーバー上で server.xml ファイルに batchJmsExecutor エレメントを追加します。
<batchJmsExecutor activationSpecRef={configured activation specification or batch executor}
queueRef={reference to the configured JMS queue} />
注: activationSpecRef 属性および queueRef 属性を指定しない場合、activationSpecRef のデフォルト値は batchActivationSpec、queueRef のデフォルト値は batchJobSubmissionQueue です。batchJmsExecutor エレメントを <batchJmsExecutor/> と指定することができます。それでも、
server.xml ファイル内で、batchActivationSpec の JMS アクティベーション・スペックと batchJobSubmissionQueue JMS キューを構成する必要はあります。
![[18.0.0.1 and later]](../ng_v18001plus.gif)
バッチ・グループ・セキュリティーを適用したい場合は、
server.xml ファイル内で
app-Security-2.0 フィーチャーをフィーチャー・マネージャーに追加することによって、
Liberty セキュリティーを有効にします。また、以下の例で示されているように、
batchJmsExecutor エレメントに
batchOperationGroupRef 属性を追加します。
<batchJmsExecutor activationSpecRef={configured activation specification or batch executor}
queueRef={reference to the configured JMS queue} />
- 対応する JMS アクティベーション・スペックおよび JMS キューをサーバー構成に追加します。これは、バッチ構成に特有のものではありません。
- オプション:
バッチ・グループ・セキュリティーを適用したい場合は、以下の例で示されているように、対応するオペレーション・グループ名スタンザを batchJmsExecutor エレメントに追加します。 <batchJmsExecutor activationSpecRef={configured activation specification or batch executor}
queueRef={reference to the configured JMS queue} >
<operationGroup>GroupA</operationGroup>
</batchJmsExecutor>
注: 前にリストされたグループ名をサポートするように、セキュリティー・レジストリーを構成する必要があります。
- アクティベーション・スペックに JMS メッセージ・セレクターを含めることによって、バッチ executor サーバーの能力を定義します。
- システム定義プロパティーに基づくフィルター操作:
バッチ executor がインバウンド・メッセージのフィルター操作に使用できる、バッチ JMS メッセージに関して使用可能なバッチ・ディスパッチャー・プロパティーのセットがあります。
- com_ibm_ws_batch_applicationName: ジョブ要求のバッチ・アプリケーションの名前
- com_ibm_ws_batch_moduleName: ジョブ要求のバッチ・アプリケーションのモジュール名
- com_ibm_ws_batch_componentName: ジョブ要求のバッチ・アプリケーションのコンポーネント名
注: executor がその executor で処理できるジョブのみを受け取ることを確実にするため、メッセージ・セレクターを指定する際に、最低限 com_ibm_ws_batch_applicationName プロパティーを指定することが推奨されています。
次の例は、executor がアプリケーション
SimpleBatchJob および
BonusPayout のジョブを受け入れるようにするための
messageSelector 属性を示します。
messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' OR com_ibm_ws_batch_applicationName = 'BonusPayout'">
次の例は、executor がアプリケーション
SimpleBatchJob のジョブを受け入れるようにするための
messageSelector 属性を示しています。
messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob'">
- ユーザー定義プロパティーに基づくフィルター操作:
バッチ・ディスパッチャーは、バッチ・ディスパッチャー要求メッセージに対する適切な JMS メッセージ・プロパティーに適合するすべてのジョブ・パラメーターを設定します。
これらのプロパティーは、メッセージ・セレクターにさらにフィルター操作を追加するためにメッセージ・セレクターが使用することもできます。
プロパティーの名前または ID は、JMS メッセージ・プロパティー制約に準拠している必要があります。例えば、
プロパティーは、文字と数字からなる長さ無制限の文字列であり、先頭は文字でなければなりません。文字とは、
メソッド Character.isJavaLetter が true を返す任意のキャラクターであり、「_」および「$」も含まれます。文字または数字とは、
メソッド Character.isJavaLetterOrDigit が true を返す任意のキャラクターです。JMS メッセージ・セレクターについて詳しくは、JMS Javadoc を参照してください。
次の例は、
com_ibm_ws_batch_applicationName プロパティーおよびジョブ・パラメーター
specialCapability を使用するメッセージ・セレクターの例です。
messageSelector="com_ibm_ws_batch_applicationName = 'SimpleBatchJob' AND specialCapability = 'superCapability'">
![[18.0.0.1 and later]](../ng_v18001plus.gif)
以下の例は、
IBM MQ バインディング・モードを使用した、オペレーション・グループを指定して構成されたバッチ JMS executor とその JMS 構成を示します。
<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)
以下の例は、
IBM MQ クライアント・モードを使用した、オペレーション・グループを指定して構成されたバッチ JMS executor とその JMS 構成を示します。
<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>
- バッチ・アプリケーションをサーバーにインストールします。詳しくは、Liberty でのアプリケーションのデプロイを参照してください。
![[17.0.0.3 and later]](../ng_v17003plus.gif)
注: ジョブ・メッセージの配信を遅らせるには、ジョブ・パラメーター com_ibm_ws_batch_message_deliveryDelay を指定してジョブを実行依頼します。このジョブ・パラメーターは、executor サーバーへのメッセージの配信を遅らせるミリ秒数に設定されます。
ジョブ・メッセージの優先順位を変更するには、ジョブ・パラメーター com_ibm_ws_batch_message_priority を指定してジョブを実行依頼します。このジョブ・パラメーターは、有効な JMS メッセージ優先順位 (0 から 9) に設定されます。JMS 仕様は、デフォルトのメッセージ優先順位を「4」として定義します。最も低い優先順位はゼロ、最も高い優先順位は 9 です。
失敗したジョブの再始動では、再始動時にジョブ・パラメーターとして別の値が指定されていない限り、元のジョブと同じ遅延と優先順位が使用されます。優先順位は、マルチサーバー・パーティションのメッセージに伝搬されますが、配信の遅延は伝搬されません。