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
に設定する必要があります。
サーバー設定ファイルをバックアップします。
helloworld-mdb-propertysubstitution
クイックスタートの例では、スタンドアロンサーバーの完全なプロファイルが必要であるため、これはEAP_HOME/standalone/configuration/standalone-full.xml
ファイルになります。マネージドドメインでサーバーを実行している場合は、EAP_HOME/domain/configuration/domain.xml
ファイルになります。JBoss EAP のインストールディレクトリーへ移動し、フルプロファイルでサーバーを起動します。
$ EAP_HOME/bin/standalone.sh -c standalone-full.xml
注記Windows Server の場合は、
EAP_HOME\bin\standalone.bat
スクリプトを使用します。管理 CLI を起動します。
$ EAP_HOME/bin/jboss-cli.sh --connect
注記Windows Server の場合は、
EAP_HOME\bin\jboss-cli.bat
スクリプトを使用します。アノテーションプロパティーの置換を有効にするには、以下のコマンドを実行します。
/subsystem=ee:write-attribute(name=annotation-property-replacement,value=true)
以下の結果が表示されるはずです。
{"outcome" => "success"}
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. サーバー設定でのシステムプロパティーの定義
- 管理 CLI を起動します。
以下のコマンド構文を使用して、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)
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
クイックスタートを変更する方法の例になります。
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") })
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") })
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. -->
システムプロパティーの置換値を使用するように
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>
-
アプリケーションをデプロイします。アプリケーションは、
@Resource
と@ActivationConfigProperty
プロパティー値のシステムプロパティーで指定された値を使用するようになりました。