我正在开始使用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;
}
这将避免重复。但是数据源不可用,例如,由于Caused by: com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: Invalid resource : jdbc/project1__pm
,GlassFish失败。
MCVE位于https://github.com/krichter722/arquillian-data-source-in-web-xml。
Arquillian似乎创建了一个可用的数据源,但我想测试我的生产环境的确切类型,因为这些测试已经非常接近集成。