Arquillian을 시작하면서 JPA에서 JPA의 JTA와 함께 서버 특정 파일 (jboss-ds.xml
, glassfish-resources.xml
등)에 사용할 데이터 소스를 지정해야하지만 Java EE> 6에서는 가능해야한다는 것을 알게되었습니다. web.xml
(또는 ejb-jar.xml
, application.xml
또는 application-client.xml
)으로 지정하십시오. 예 :Arquillian의 web.xml 또는 다른 곳에서 이식 가능한 데이터 소스를 지정하는 방법은 무엇입니까?
<?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
으로 인해 실패합니다.
A MCVE는 https://github.com/krichter722/arquillian-data-source-in-web-xml입니다.
Arquillian은 유용 할 수있는 데이터 소스를 만드는 것처럼 보이지만, 테스트가 이미 통합에 매우 근접해 있으므로 프로덕션 환경의 정확한 유형을 테스트하고 싶습니다.