31.6. IBM MQ リソースアダプターのデプロイ
IBM MQ について
IBM MQ は、IBM のメッセージ指向ミドルウェア (MOM) 製品で、分散システム上のアプリケーションが互いに通信できるようにします。これは、メッセージとメッセージキューを使用して実行できます。IBM MQ は、メッセージキューにメッセージを配信し、メッセージチャネルを使用してデータを他のキューマネージャーへ転送します。IBM MQ の詳細は、IBM の製品 Web サイトの IBM MQ を参照してください。
概要
IBM MQ は、JBoss EAP 7.3 の外部 JMS プロバイダーとして設定できます。このセクションでは、JBoss EAP で IBM MQ リソースアダプターをデプロイして設定する手順を説明します。このデプロイメントと設定は、管理 CLI ツールまたは Web ベースの管理コンソールを使用して実行できます。IBM MQ のサポートされる設定に関する最新情報は、JBoss EAP supported configurations を参照してください。
設定の変更を有効にするには、IBM MQ リソースアダプターの設定後にシステムを再起動する必要があります。
前提条件
作業を開始する前に、IBM MQ リソースアダプターのバージョンを検証し、その設定プロパティーを理解する必要があります。
-
IBM MQ リソースアダプターは、
wmq.jmsra.rar
というリソースアーカイブ (RAR) ファイルとして提供されます。wmq.jmsra.rar
ファイルは、/opt/mqm/java/lib/jca/wmq.jmsra.rar
から取得できます。JBoss EAP の各リリースでサポートされる特定のバージョンに関する詳細は、JBoss EAP supported configurations を参照してください。 以下の IBM MQ 設定値を知っている必要があります。これらの値については、IBM MQ 製品のドキュメントを参照してください。
- MQ_QUEUE_MANAGER: IBM MQ キューマネージャーの名前
- MQ_HOST_NAME: IBM MQ キューマネージャーへの接続に使用されるホスト名
- MQ_CHANNEL_NAME: IBM MQ キューマネージャーへの接続に使用されるサーバーチャネル
- MQ_QUEUE_NAME: 宛先キューの名前
- MQ_TOPIC_NAME: 宛先トピックの名前
- MQ_PORT: IBM MQ キューマネージャーへの接続に使用されるポート
- MQ_CLIENT: トランスポートタイプ
送信接続の場合は、以下の設定値も理解している必要があります。
- MQ_CONNECTIONFACTORY_NAME: リモートシステムへの接続を提供する接続ファクトリーインスタンスの名前
手順
以下は、IBM のデフォルト設定であり、変更される可能性があります。詳細は IBM MQ のドキュメントを参照してください。
-
まず、
wmq.jmsra.rar
ファイルをEAP_HOME/standalone/deployments/
ディレクトリーにコピーして、リソースアダプターを手動でデプロイします。 次に、管理 CLI を使用してリソースアダプターを追加し、設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:add(archive=wmq.jmsra.rar, transaction-support=XATransaction)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:add(archive=wmq.jmsra.rar, transaction-support=XATransaction)
transaction-support
要素がXATransaction
に設定されたことに注意してください。トランザクションを使用する場合は、以下の例にあるように、XA リカバリーデータソースのセキュリティードメインを提供してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow /subsystem=resource-adapters/resource-adapter=test/connection-definitions=test:write-attribute(name=recovery-security-domain,value=myDomain)
/subsystem=resource-adapters/resource-adapter=test/connection-definitions=test:write-attribute(name=recovery-security-domain,value=myDomain)
XA リカバリーに関する詳細は、JBoss EAP 設定ガイドの XA リカバリーの設定 を参照してください。
トランザクション以外のデプロイメントの場合は、
transaction-support
の値をNoTransaction
に変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:add(archive=wmq.jmsra.rar, transaction-support=NoTransaction)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:add(archive=wmq.jmsra.rar, transaction-support=NoTransaction)
リソースアダプターが作成されたので、必要な設定要素を追加できます。
キューの
admin-object
を追加し、そのプロパティーを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao:add(class-name=com.ibm.mq.connector.outbound.MQQueueProxy, jndi-name=java:jboss/MQ_QUEUE_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao/config-properties=baseQueueName:add(value=MQ_QUEUE_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao/config-properties=baseQueueManagerName:add(value=MQ_QUEUE_MANAGER)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao:add(class-name=com.ibm.mq.connector.outbound.MQQueueProxy, jndi-name=java:jboss/MQ_QUEUE_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao/config-properties=baseQueueName:add(value=MQ_QUEUE_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=queue-ao/config-properties=baseQueueManagerName:add(value=MQ_QUEUE_MANAGER)
トピックの
admin-object
を追加し、そのプロパティーを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao:add(class-name=com.ibm.mq.connector.outbound.MQTopicProxy, jndi-name=java:jboss/MQ_TOPIC_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao/config-properties=baseTopicName:add(value=MQ_TOPIC_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao/config-properties=brokerPubQueueManager:add(value=MQ_QUEUE_MANAGER)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao:add(class-name=com.ibm.mq.connector.outbound.MQTopicProxy, jndi-name=java:jboss/MQ_TOPIC_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao/config-properties=baseTopicName:add(value=MQ_TOPIC_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/admin-objects=topic-ao/config-properties=brokerPubQueueManager:add(value=MQ_QUEUE_MANAGER)
管理接続ファクトリーの接続定義を追加し、そのプロパティーを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/connection-definitions=mq-cd:add(class-name=com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl, jndi-name=java:jboss/MQ_CONNECTIONFACTORY_NAME, tracking=false) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/connection-definitions=mq-cd/config-properties=hostName:add(value=MQ_HOST_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/connection-definitions=mq-cd/config-properties=port:add(value=MQ_PORT) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/connection-definitions=mq-cd/config-properties=channel:add(value=MQ_CHANNEL_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/connection-definitions=mq-cd/config-properties=transportType:add(value=MQ_CLIENT) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/connection-definitions=mq-cd/config-properties=queueManager:add(value=MQ_QUEUE_MANAGER)
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/connection-definitions=mq-cd:add(class-name=com.ibm.mq.connector.outbound.ManagedConnectionFactoryImpl, jndi-name=java:jboss/MQ_CONNECTIONFACTORY_NAME, tracking=false) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/connection-definitions=mq-cd/config-properties=hostName:add(value=MQ_HOST_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/connection-definitions=mq-cd/config-properties=port:add(value=MQ_PORT) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/connection-definitions=mq-cd/config-properties=channel:add(value=MQ_CHANNEL_NAME) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/connection-definitions=mq-cd/config-properties=transportType:add(value=MQ_CLIENT) /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar/connection-definitions=mq-cd/config-properties=queueManager:add(value=MQ_QUEUE_MANAGER)
JBoss EAP の EJB3 メッセージングシステムでデフォルトのプロバイダーを JBoss EAP 7 メッセージングから IBM MQ に変更する場合は、以下のように管理 CLI を使用して
ejb3
サブシステムを変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow /subsystem=ejb3:write-attribute(name=default-resource-adapter-name,value=wmq.jmsra.rar)
/subsystem=ejb3:write-attribute(name=default-resource-adapter-name,value=wmq.jmsra.rar)
以下のように、MDB コードに
@ActivationConfigProperty
アノテーションと@ResourceAdapter
アノテーションを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow @MessageDriven(name="IbmMqMdb", activationConfig = { @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "false"), @ActivationConfigProperty(propertyName = "hostName", propertyValue = "MQ_HOST_NAME"), @ActivationConfigProperty(propertyName = "port", propertyValue = "MQ_PORT"), @ActivationConfigProperty(propertyName = "channel", propertyValue = "MQ_CHANNEL_NAME"), @ActivationConfigProperty(propertyName = "queueManager", propertyValue = "MQ_QUEUE_MANAGER"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "MQ_QUEUE_NAME"), @ActivationConfigProperty(propertyName = "transportType", propertyValue = "MQ_CLIENT") }) @ResourceAdapter(value = "wmq.jmsra-VERSION.rar") @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public class IbmMqMdb implements MessageListener { }
@MessageDriven(name="IbmMqMdb", activationConfig = { @ActivationConfigProperty(propertyName = "destinationType",propertyValue = "javax.jms.Queue"), @ActivationConfigProperty(propertyName = "useJNDI", propertyValue = "false"), @ActivationConfigProperty(propertyName = "hostName", propertyValue = "MQ_HOST_NAME"), @ActivationConfigProperty(propertyName = "port", propertyValue = "MQ_PORT"), @ActivationConfigProperty(propertyName = "channel", propertyValue = "MQ_CHANNEL_NAME"), @ActivationConfigProperty(propertyName = "queueManager", propertyValue = "MQ_QUEUE_MANAGER"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "MQ_QUEUE_NAME"), @ActivationConfigProperty(propertyName = "transportType", propertyValue = "MQ_CLIENT") }) @ResourceAdapter(value = "wmq.jmsra-VERSION.rar") @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public class IbmMqMdb implements MessageListener { }
@ResourceAdapter
値の VERSION は、RAR の名前に含まれる実際のバージョンに置き換えてください。リソースアダプターをアクティベートします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:activate()
/subsystem=resource-adapters/resource-adapter=wmq.jmsra.rar:activate()
31.6.1. IBM MQ リソースアダプターの制限と既知の問題
以下の表に、IBM MQ リソースアダプターの既知の問題をまとめています。バージョン列のチェックマーク (✔
) は、そのバージョンのリソースアダプターに問題があることを示しています。
JIRA | 問題の説明 | IBM MQ 8 | IBM MQ 9 |
---|---|---|---|
IBM MQ リソースアダプターは、 | ✔ | ✔ | |
以下の制限は、IBM MQ のメッセージプロパティー名に適用されます。
リソースアダプターの各バージョンに対するメッセージプロパティー名の制限の完全なリストは、IBM Knowledge Center の Web サイトの IBM MQ バージョン 8.0 のプロパティー名の制限 と IBM MQ バージョン 9.0 のプロパティー名の制限 を参照してください。 | ✔ | ✔ | |
@ActivationConfigProperty(propertyName = "destination", propertyValue = "QUEUE")
| ✔ | ✔ | |
IBM MQ リソースアダプターを使用して @JMSConnectionFactoryDefinition( name = "java:/jms/WMQConnectionFactory", interfaceName = "javax.jms.ConnectionFactory", resourceAdapter = "wmq.jmsra", properties = { "channel=<channel>", "hostName=<hostname_wmq_broker>", "transportType=<transport_type>", "queueManager=<queue_manager>" } )
| ✔ | ✔ | |
IBM MQ リソースアダプターは、接続開始前からキューとトピックからメッセージを読み取ることができます。これは、接続開始前にコンシューマーがメッセージを消費できることを意味します。この問題を回避するには、 | ✔ | ✔ | |
以下のコード例では、 @Inject @JMSConnectionFactory("jms/CF") @JMSPasswordCredential(userName="myusername", password="mypassword") @JMSSessionMode(JMSContext.DUPS_OK_ACKNOWLEDGE) transient JMSContext context3;
| ✔ | ✔ | |
JMS 仕様によると、 | ✔ | ✔ | |
| ✔ | ✔ | |
| ✔ | ✔ | |
無効な認証情報が使用されると、IBM MQ リソースアダプターは、 WARN [org.jboss.jca.core.connectionmanager.pool.strategy.PoolByCri] (EJB default - 7) IJ000604: Throwable while attempting to get a new connection: null: com.ibm.mq.connector.DetailedResourceException: MQJCA1011: Failed to allocate a JMS connection., error code: MQJCA1011 An internal error caused an attempt to allocate a connection to fail. See the linked exception for details of the failure.
以下は、この問題を引き起こす可能性があるコードの例です。 QueueConnection qc = queueConnectionFactory.createQueueConnection("invalidUserName", "invalidPassword");
| ✔ | ✔ | |
SVR-ERROR: Expected JMSException, received com.ibm.mq.connector.outbound.MQQueueProxy cannot be cast to com.ibm.mq.jms.MQDestination
これは、キューまたはトピックルックアップで使用される JNDI 名が | ✔ | ✔ | |
| ✔ | ✔ | |
| ✔ | ✔ | |
接続を閉じた直後に、同じ ERROR [io.undertow.request] (default task-1) UT005023: Exception handling request to /jmsServlet-1.0-SNAPSHOT/: com.ibm.msg.client.jms.DetailedJMSRuntimeException: MQJCA0002: An exception occurred in the IBM MQ layer. See the linked exception for details. A call to IBM MQ classes for Java(tm) caused an exception to be thrown.
この問題は、同じ | ✔ | ✔ | |
コンテナー管理トランザクション (CMT) において、ステートフルセッション Bean がトピックにメッセージを送信しようとすると、メッセージ送信が失敗し、以下のメッセージが示されます。 SVR-ERROR: com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ2007: Failed to send a message to destination 'MDB_NAME TOPIC_NAME'
スタックトレースは、以下の例外によって発生したことを示しています。 com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2072' ('MQRC_SYNCPOINT_NOT_AVAILABLE')
| ✔ | ✔ | |
IBM MQ v9.0.0.4 リソースアダプター WARN [org.jboss.as.connector.deployers.RADeployer] (MSC service thread 1-8) IJ020017: Invalid archive: file:/<path-to-jboss>/jboss-eap-7.3/standalone/tmp/vfs/temp/tempa02bdd5ee254e590/content-135e13d4f38704fc/contents/
IBM MQ v9.0.0.4 リソースアダプターは、JBoss EAP 7.3 の Jakarta Messaging プロバイダーテストの一部としてテストされています。この警告メッセージを無視するか、 /subsystem=jca/archive-validation=archive-validation:write-attribute(name=enabled, value=false)
| ✔ | ✔ |