Spring Boot アプリケーションの JMS

Spring Boot アプリケーションで JMS を使用すると、 IBM® MQなどのメッセージング・プロバイダーを使用して、信頼性の高い非同期通信によってメッセージを送受信できます。

Spring Boot アプリケーションで JMS を使用するには、 Spring Boot アプリケーションで依存関係に JMS 成果物を追加して、必要な Java™ ライブラリーを使用可能にします。 例えば、Maven では次のようにします。
<dependency>
    <groupId>org.springframework.integration</groupId>
    <artifactId>spring-integration-jms</artifactId>
</dependency>
<dependency>
    <groupId>javax.jms</groupId> 
    <artifactId>javax.jms-api</artifactId>
    <scope>provided</scope>
</dependency>
または Gradle では、次のようにします。
implementation("org.springframework.integration:spring-integration-jms")
compileOnly("javax.jms:javax.jms-api")
JMS メッセージング・プロバイダーを使用してメッセージを送受信するには、 Java EE アプリケーションで JMS を使用する場合と同様に、Liberty server.xml で JMS 接続ファクトリーを定義できます。 この接続ファクトリーは、 JmsTemplate オブジェクトを使用し、以下のいずれかの方法で、リモート IBM MQ キュー・マネージャーを参照するために使用できます。
  1. @Bean 注釈付きの connectionFactory() メソッドでこの接続ファクトリーの JNDI 検索を実行して、この接続ファクトリーを返します。
  2. Spring アプリケーション・プロパティー内の spring.jms.jndi-name でこの接続ファクトリーを指定します。 その後、Spring Boot は、application.properties で指定された接続ファクトリーを使用して JmsTemplate を作成します。
注: オプション 2 では、 application.properties ファイル内から Spring アプリケーションを必要なキュー・マネージャーに接続するために必要なすべての接続ファクトリー属性を構成することもできます。 属性はすべて、 共通アプリケーション・プロパティーで定義されます。 ただし、この方法ではアプリケーションがそのキュー・マネージャーに直接結合されるため、JNDI を使用する方が柔軟性の高い方法です。

メッセージ駆動型 POJO (MDP) は、Spring Boot で着信メッセージを処理するために使用されます。 Spring Boot Configurationクラスでは @EnableJmsを使用して @JmsListenerメソッドの検出を有効にします。 @JMSListener 注釈は、着信メッセージを受信する JMS メッセージ・リスナーのターゲットとなるようにメソッドにマーク付けします。

これらの MDP で JCICS API を使用できるようにするには、Liberty の TaskExecutor を JmsListenerContainerFactory にバインドする必要があります。 そのためには、以下のようにします。
@Bean
public TaskExecutor taskExecutor()
{
    return new DefaultManagedTaskExecutor();
}

@Bean
public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory) 
{
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setTaskExecutor(taskExecutor());
    return factory;
}
注: これには、 jndi-1.0 および concurrent-1.0 Liberty フィーチャーを使用する必要があります。

Spring Boot @Transactional アノテーションを @JMSListener アノテーション付きメソッドで使用して、キューおよび CICS® UOW からのメッセージの受信が、同じコンテナー管理 JTA グローバル・トランザクションを使用して調整されることを示すこともできます。