taskana/lib/taskana-cdi
arolfes 842113f85a Closes #2206: Wildfly migration from 15 to 25 2023-09-28 15:49:39 +02:00
..
src Closes #2206: Wildfly migration from 15 to 25 2023-09-28 15:49:39 +02:00
README.md Closes #2135 replace thorntail with arquillian test in taskana-cdi 2023-09-28 15:49:39 +02:00
pom.xml Closes #2206: Wildfly migration from 15 to 25 2023-09-28 15:49:39 +02:00

README.md

taskana-cdi

this module is for EJB deployments.

Testing procedure

  1. deploy wildfly server locally
  2. replace h2 with latest version
  3. start wildfly
  4. deploy ear
  5. test application

deploy wildfly server locally

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>

2. replace h2 with latest version

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>

3. start wildfly

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.

4. deploy ear

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;
  }