展開にはいくつかのプロファイルが必要です。Maven POM で、プロファイル「dev」とプロパティ「theHost」を (localhost として) 定義しました。
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault> <!-- use dev profile by default -->
</activation>
<build>
</build>
<properties>
<theHost>localhost</theHost>
</properties>
</profile>
...
filterDeploymentDescriptor
ejb-jar.xml の値をフィルタリング (置換) するように指示するために、maven-ejb-plugin でアクティブにしました。
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.3</version>
<configuration>
<ejbVersion>3.1</ejbVersion>
--> <filterDeploymentDescriptor>true</filterDeploymentDescriptor>
</configuration>
</plugin
最後に、ejb-jar.xml を参照し${theHost}
て、@Resource 属性「host」の目的のプロファイル固有の値を取得します。
<session>
<ejb-name>MongoDao</ejb-name>
<ejb-class>com.coolcorp.MongoDao</ejb-class>
<session-type>Stateless</session-type>
<env-entry>
<env-entry-name>host</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>${theHost}</env-entry-value>
</env-entry>
...
これはすべて、通常の Maven ビルドでうまく機能します。しかし、GlassFish の Embedded Enterprise Bean Container [EJBContainer.createEJBContainer()] を使用して EJB 単体テストを実行すると、maven-ejb-plugin が filterDeploymentDescriptor=true を無視するようです。同じ「dev」プロファイルで maven を実行していますが、EJB には「localhost」ではなく「${theHost}」が表示されます。
mvn.bat -Pdev test
単体テストの実行時に置換が機能しない理由を知っている人はいますか? ejb-jar.xml のフィルタリングが行われるように、特に単体テスト用に定義しなければならないものはありますか? または、異なるプロファイルが存在する場合に EJB を単体テストするためのより良いアプローチはありますか?