4.6. アプリケーションで Jakarta Enterprise Beans および MDB プロパティーの置換を有効にする

Red Hat JBoss Enterprise Application Platform では、@ActivationConfigProperty および @Resource アノテーションを使用して Jakarta Enterprise Beans および MDB でプロパティー置換を有効にできます。プロパティーの置換には、以下の設定およびコードの変更が必要です。

  • JBoss EAP サーバー設定ファイルでプロパティー置換を有効にする必要があります。
  • JBoss EAP サーバーの起動時に システムプロパティーをサーバー設定ファイルに定義するか、引数として渡す必要があります。
  • 置換変数を使用するように アプリケーションコードを変更する 必要があります。

以下の例は、プロパティー置換を使用するために JBoss EAP に同梱される helloworld-mdb クイックスタートを変更する方法を示しています。完全な作業例は、helloworld-mdb-propertysubstitution クイックスタートを参照してください。

4.6.1. プロパティー置換を有効にするようにサーバーを設定

JBoss EAP サーバーでプロパティーの置換を有効にするには、サーバー設定の ee サブシステムの annotation-property-replacement 属性を true に設定する必要があります。

  1. サーバー設定ファイルをバックアップします。

    helloworld-mdb-propertysubstitution クイックスタートの例では、スタンドアロンサーバーの完全なプロファイルが必要であるため、これは EAP_HOME/standalone/configuration/standalone-full.xml ファイルになります。マネージドドメインでサーバーを実行している場合は、EAP_HOME/domain/configuration/domain.xml ファイルになります。

  2. JBoss EAP のインストールディレクトリーへ移動し、フルプロファイルでサーバーを起動します。

    $ EAP_HOME/bin/standalone.sh -c standalone-full.xml
    注記

    Windows Server の場合は、EAP_HOME\bin\standalone.bat スクリプトを使用します。

  3. 管理 CLI を起動します。

    $ EAP_HOME/bin/jboss-cli.sh --connect
    注記

    Windows Server の場合は、EAP_HOME\bin\jboss-cli.bat スクリプトを使用します。

  4. アノテーションプロパティーの置換を有効にするには、以下のコマンドを実行します。

    /subsystem=ee:write-attribute(name=annotation-property-replacement,value=true)

    以下の結果が表示されるはずです。

    {"outcome" => "success"}
  5. JBoss EAP サーバー設定ファイルへの変更を確認します。ee サブシステムには以下の XML が含まれるはずです。

    ee サブシステムの設定例

    <subsystem xmlns="urn:jboss:domain:ee:4.0">
      ...
      <annotation-property-replacement>true</annotation-property-replacement>
      ...
    </subsystem>

4.6.2. システムプロパティーの定義

サーバー設定ファイルでシステムプロパティーを指定するか、JBoss EAP サーバーの起動時にコマンドラインの引数としてプロパティーを渡すことができます。サーバー設定ファイルで定義されたシステムプロパティーは、サーバーの起動時にコマンドラインに渡されるプロパティーよりも優先されます。

4.6.2.1. サーバー設定でのシステムプロパティーの定義

  1. 管理 CLI を起動します。
  2. 以下のコマンド構文を使用して、JBoss EAP サーバーのシステムプロパティーを設定します。

    システムプロパティーを追加する構文

    /system-property=PROPERTY_NAME:add(value=PROPERTY_VALUE)

    以下のシステムプロパティーは、helloworld-mdb-propertysubstitution クイックスタートに設定されています。

    システムプロパティーを追加するコマンドの例

    /system-property=property.helloworldmdb.queue:add(value=java:/queue/HELLOWORLDMDBPropQueue)
    /system-property=property.helloworldmdb.topic:add(value=java:/topic/HELLOWORLDMDBPropTopic)
    /system-property=property.connection.factory:add(value=java:/ConnectionFactory)

  3. JBoss EAP サーバー設定ファイルへの変更を確認します。以下のシステムプロパティーは、<extensions> の後に表示されるはずです。

    システムプロパティーの設定例

    <system-properties>
        <property name="property.helloworldmdb.queue" value="java:/queue/HELLOWORLDMDBPropQueue"/>
        <property name="property.helloworldmdb.topic" value="java:/topic/HELLOWORLDMDBPropTopic"/>
        <property name="property.connection.factory" value="java:/ConnectionFactory"/>
    </system-properties>

4.6.2.2. サーバー起動時にシステムプロパティーを引数として渡す

必要に応じて、-DPROPERTY_NAME=PROPERTY_VALUE の形式で JBoss EAP サーバーを起動したときに、コマンドラインで引数を渡すことができます。以下は、前のセクションで定義されたシステムプロパティーの引数を渡す方法の例になります。

サーバー起動コマンドによりシステムプロパティーを渡す例

$ EAP_HOME/bin/standalone.sh -c standalone-full.xml  -Dproperty.helloworldmdb.queue=java:/queue/HELLOWORLDMDBPropQueue  -Dproperty.helloworldmdb.topic=java:/topic/HELLOWORLDMDBPropTopic  -Dproperty.connection.factory=java:/ConnectionFactory

4.6.3. システムプロパティーの置換を使用するようアプリケーションコードを変更します。

ハードコーディングされた @ActivationConfigProperty および @Resource アノテーションの値を、新たに定義したシステムプロパティーの置換値に置き換えます。以下は、新たに定義したシステムプロパティーの置換を使用するように helloworld-mdb クイックスタートを変更する方法の例になります。

  1. HelloWorldQueueMDB クラスの @ActivationConfigProperty destination プロパティー値を変更して、システムプロパティーの置換を使用します。@MessageDriven アノテーションは以下のようになります。

    HelloWorldQueueMDB コードの例

    @MessageDriven(name = "HelloWorldQueueMDB", activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "${property.helloworldmdb.queue}"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })

  2. HelloWorldTopicMDB クラスの @ActivationConfigProperty destination プロパティー値を変更して、システムプロパティーの置換を使用します。@MessageDriven アノテーションは以下のようになります。

    HelloWorldTopicMDB コードの例

    @MessageDriven(name = "HelloWorldQTopicMDB", activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "${property.helloworldmdb.topic}"),
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") })

  3. HelloWorldMDBServletClient クラスの @Resource アノテーションを変更して、システムプロパティーの置換を使用します。コードは以下のようになります。

    HelloWorldMDBServletClient コードの例

    /**
     * Definition of the two Jakarta Messaging Service destinations used by the quickstart
     * (one queue and one topic).
     */
     @JMSDestinationDefinitions(
         value = {
             @JMSDestinationDefinition(
                 name = "java:/${property.helloworldmdb.queue}",
                 interfaceName = "javax.jms.Queue",
                 destinationName = "HelloWorldMDBQueue"
             ),
             @JMSDestinationDefinition(
                 name = "java:/${property.helloworldmdb.topic}",
                 interfaceName = "javax.jms.Topic",
                 destinationName = "HelloWorldMDBTopic"
             )
         })
    /**
     * <p>
     * A simple servlet 3 as client that sends several messages to a queue or a topic.
     * </p>
     *
     * <p>
     * The servlet is registered and mapped to /HelloWorldMDBServletClient using the {@linkplain WebServlet
     * @HttpServlet}.
     * </p>
     *
     * @author Serge Pagop (spagop@redhat.com)
     *
     */
    @WebServlet("/HelloWorldMDBServletClient")
    public class HelloWorldMDBServletClient extends HttpServlet {
    
        private static final long serialVersionUID = -8314035702649252239L;
    
        private static final int MSG_COUNT = 5;
    
        @Inject
        private JMSContext context;
    
        @Resource(lookup = "${property.helloworldmdb.queue}")
        private Queue queue;
    
        @Resource(lookup = "${property.helloworldmdb.topic}")
        private Topic topic;
    
      <!-- Remainder of code can be found in the `helloworld-mdb-propertysubstitution` quickstart. -->

  4. システムプロパティーの置換値を使用するように activemq-jms.xml ファイルを変更します。

    .activemq-jms.xml ファイルの例

    <?xml version="1.0" encoding="UTF-8"?>
    <messaging-deployment xmlns="urn:jboss:messaging-activemq-deployment:1.0">
        <server>
             <jms-destinations>
                <jms-queue name="HELLOWORLDMDBQueue">
                    <entry name="${property.helloworldmdb.queue}"/>
                </jms-queue>
                <jms-topic name="HELLOWORLDMDBTopic">
                    <entry name="${property.helloworldmdb.topic}"/>
                </jms-topic>
            </jms-destinations>
        </server>
    </messaging-deployment>

  5. アプリケーションをデプロイします。アプリケーションは、@Resource@ActivationConfigProperty プロパティー値のシステムプロパティーで指定された値を使用するようになりました。