JBoss Embedded AS | Full ClassPath via Maven

Introduction

Maven allows us to skip a lot of the manual steps involved in both installing the Application Server and setting up the environment.  These instructions are largely ported from the EmbeddedAS examples (http://anonsvn.jboss.org/repos/jbossas/projects/embedded/examples/trunk/pom.xml).  Here we make all of the AS libraries available upon the Application ClassPath, such that they may be used directly in tests.

 

Configure Environment
Set a System Property

It's useful to set $JBOSS_HOME upfront for use elsewhere in the POM

<properties>
    <!-- JBOSS_HOME (We'll unpack into here -->
    <JBOSS_HOME>${project.build.directory}/jboss-${version.org.jboss.jbossas}</JBOSS_HOME>
    <!-- The target version of AS to be used -->
    <version.org.jboss.jbossas>6.0.0.20100429-M3</version.org.jboss.jbossas>
</properties>

 

Dependency Declaration

For use in tests, we'll pull in all dependencies used by the Application Server in this one declaration.  Maven will transitively fetch everything into the local repository (may take some time on first launch) and set up the ClassPaths accordingly.

<dependencies>
  <dependency>
    <groupId>org.jboss.jbossas</groupId>
    <artifactId>jboss-as-depchain</artifactId>
    <version>${version.org.jboss.jbossas}</version>
    <type>pom</type>
  </dependency>
  ...
</dependency>


<!--
We also need to place the AS depchain into 
the "dependencyManagement" section in import scope
so that Maven respects the "exclusion" elements
configured
-->
<dependencyManagement>
  <dependencies>

    <!-- org.jboss.jbossas -->
    <dependency>
      <groupId>org.jboss.jbossas</groupId>
      <artifactId>jboss-as-depchain</artifactId>
      <version>${version.org.jboss.jbossas}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
 </dependencies>

</dependencyManagement>

 

Automatically Download JBossAS

So that we don't have to manually download and install the Application Server, we can leverage the dependency plugin to do this for us, placing into a transient location which we'll use as our JBOSS_HOME during testing.

<!-- Get AS and put into "target" -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <executions>
    <execution>
      <id>unpack</id>
      <phase>pre-integration-test</phase> <!-- So run before testing -->
      <goals>
        <goal>unpack</goal>
      </goals>
      <configuration>
        <artifactItems>
          <artifactItem>
            <groupId>org.jboss.jbossas</groupId>
            <artifactId>jboss-as-distribution</artifactId>
            <version>${version.org.jboss.jbossas}</version>
            <type>zip</type>
            <overWrite>false</overWrite>
            <outputDirectory>${project.build.directory}</outputDirectory>
          </artifactItem>
        </artifactItems>
      </configuration>
    </execution>
  </executions>
</plugin>

 

Configure Surefire

Setup the test environment to specify JBOSS_HOME to the location unpacked via the dependency plugin, and pass in some parameters to bump the available permanent generation and heap sizes.

<plugin>
  <artifactId>maven-surefire-plugin</artifactId>
  <executions>
    <execution>
      <id>integration-test</id>
      <phase>integration-test</phase>
      <goals>
        <goal>test</goal>
      </goals>
      <configuration>
        <additionalClasspathElements>
          <additionalClasspathElement>${JBOSS_HOME}/client/jbossws-native-client.jar</additionalClasspathElement>
        </additionalClasspathElements>

        <redirectTestOutputToFile>true</redirectTestOutputToFile>
        <trimStackTrace>false</trimStackTrace>
        <printSummary>true</printSummary>
        <includes>
          <include>**/*IntegrationTest.java</include>
        </includes>
        <forkMode>always</forkMode>
        <!--
          MaxPermSize Required to bump the space for relective
          data like classes, methods, etc. EMB-41, EMB-74. Endorsed
          required for things like WS support (EMB-61)
        -->
        <argLine>-Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Djava.endorsed.dirs=${JBOSS_HOME}/lib/endorsed -Djboss.home=${JBOSS_HOME} -Djboss.boot.server.log.dir=${JBOSS_HOME}</argLine>
      </configuration>
    </execution>
  </executions>
</plugin>