私はArquillianを使い始めましたが、サーバ固有のファイル(jboss-ds.xml
、glassfish-resources.xml
など)のJPAでJTAで使用するデータソースを指定する必要があることに気付きましたが、Java EE> 6では可能ですweb.xml
(またはejb-jar.xml
,application.xml
またはapplication-client.xml
)で指定します。web.xmlやArquillianのどこかでポータブルデータソースを指定する方法は?
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
[...]
<data-source>
<name>jdbc/project1</name>
<class-name>org.apache.derby.jdbc.EmbeddedDataSource</class-name>
<server-name>localhost</server-name>
<database-name>project1</database-name>
<user>project1</user>
<password>project1</password>
<property>
<name>connectionAttributes</name>
<value>create=true</value>
</property>
<transactional>true</transactional>
<isolation-level>TRANSACTION_READ_COMMITTED</isolation-level>
<initial-pool-size>2</initial-pool-size>
<max-pool-size>10</max-pool-size>
<min-pool-size>5</min-pool-size>
<max-statements>0</max-statements>
</data-source>
</web-app>
と、次のようにそれを使用する:
@Deployment
public static Archive<?> createDeployment() {
WebArchive retValue = ShrinkWrap.create(WebArchive.class)
.addClasses(MyManagedBean.class, SaveController.class, DefaultSaveController.class)
.setWebXML("web.xml")
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
Stream.of(Maven.resolver().loadPomFromFile("pom.xml").importRuntimeDependencies().resolve().withTransitivity().as(JavaArchive.class)).forEach(archive -> retValue.addAsLibrary(archive));
return retValue;
}
重複を避けることになります。ただし、データソースは利用できません。たとえばGlassFishはCaused by: com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Invalid resource : jdbc/project1__pm
のため失敗します。
MCVEはhttps://github.com/krichter722/arquillian-data-source-in-web-xmlにあります。
Arquillianは使用可能なデータソースを作成しているようですが、実際には既に統合に近いため、生産環境の正確なタイプをテストしたいと思います。