this module is for EJB deployments.
- deploy wildfly server locally
- replace h2 with latest version
- start wildfly
- deploy ear
- test application
we extract the wildfly server into the target directory via maven configuration
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>${version.maven.dependency}</version>
<executions>
<execution>
<id>unpack-wildfly</id>
<phase>process-test-classes</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-dist</artifactId>
<version>${version.wildfly}</version>
<type>zip</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
.
.
.
</executions>
</plugin>
for our tests we need the latest h2 version, so we need to replace the h2 jar in wildfly.
this happens in 2 steps.
first extract the dependency into the correct directory
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>${version.maven.dependency}</version>
<executions>
.
.
.
<execution>
<id>copy-latest-h2-db-driver</id>
<phase>process-test-classes</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<outputDirectory>
${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/com/h2database/h2/main
</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
second step is to copy the src/test/resources/module.xml
to required directory
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>${version.maven.resources}</version>
<executions>
<execution>
<id>copy-h2-module-xml</id>
<phase>process-test-classes</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/wildfly-${version.wildfly}/modules/system/layers/base/com/h2database/h2/main
</outputDirectory>
<resources>
<resource>
<directory>src/test/resources</directory>
<includes>
<include>module.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
starting and stopping wildfly happens with arquillian
@RunWith(Arquillian.class)
public class TaskanaProducersTest {}
the file src/test/resources/arquillian.xml
contains additional server start settings. change vm settings here for remote debugging.
the file src/test/resources/int-test-standalone.xml
conatins the wildfly server config. Here are the datasources configured, for example.
create the ear deployment happens inside the testcase
@Deployment(testable = false)
public static Archive<?> createDeployment() throws Exception {
EnterpriseArchive deployment = ShrinkWrap.create(EnterpriseArchive.class, "taskana.ear");
File[] libs =
Maven.resolver()
.loadPomFromFile("pom.xml")
.importRuntimeAndTestDependencies()
.resolve()
.withTransitivity()
.asFile();
deployment.addAsLibraries(libs);
JavaArchive ejbModule = ShrinkWrap.create(JavaArchive.class, "taskana.jar");
ejbModule.addClasses(TaskanaProducers.class, TaskanaEjb.class);
ejbModule.addAsResource("taskana.properties");
deployment.addAsModule(ejbModule);
WebArchive webArchive =
ShrinkWrap.create(WebArchive.class, "taskana.war")
.addClasses(TaskanaCdiTestRestController.class, RestApplication.class)
.addAsWebInfResource("beans.xml")
.addAsWebInfResource("int-test-jboss-web.xml", "jboss-web.xml");
deployment.addAsModule(webArchive);
deployment.addAsManifestResource("beans.xml");
return deployment;
}