adam bien's blog

TomEE Maven Alien--Sample Project For Maven 3, Arquillian and TomEE 📎

Lets assume you would like to integration test the following EJB within TomEE (a Tomcat on stereoids which makes lots of your boilerplate superfluous) with Arquillian:


@Stateless
public class HelloBoundary {
    
    public String hello(){
        return "Good Morning: " + new Date();
    }
}

Arquillian test code is server agnostic; the archive is created, deployed and the EJB HelloBoundary is available for injection:


import javax.inject.Inject;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ArchivePaths;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.runner.RunWith;

@RunWith(Arquillian.class)
public class HelloBoundaryIT {
    
    @Inject
    HelloBoundary cut;
    
    @Deployment
    public static WebArchive deploy(){
        return ShrinkWrap.create(WebArchive.class).
                addClasses(HelloBoundary.class).
                addAsWebInfResource(EmptyAsset.INSTANCE,
                ArchivePaths.create("beans.xml"));
    }
   
    @Test
    public void injection() {
        assertNotNull(cut);
        assertNotNull(cut.hello());
        assertTrue(cut.hello().startsWith("Good"));
    }
}


Usually Java EE 6 projects are packaged as WARs. The only interesting part of the POM are the TomEE and Arquillian dependencies:


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.jboss.arquillian</groupId>
                <artifactId>arquillian-bom</artifactId>
                <version>1.0.3.Final</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.jboss.arquillian.junit</groupId>
            <artifactId>arquillian-junit-container</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.openejb</groupId>
            <artifactId>apache-tomee</artifactId>
            <version>1.5.0</version>
            <classifier>plus</classifier>
            <type>zip</type>
        </dependency>        
        <dependency>
            <groupId>org.apache.openejb</groupId>
            <artifactId>arquillian-tomee-embedded</artifactId>
            <version>1.5.0</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>
    </dependencies>


The project tomee-alien was checked in into http://kenai.com/projects/javaee-patterns

[In the "Real World Java EE Patterns--Rethinking Best Practices" book (Second Iteration, "Green Book"), Arquillian was used for integration testing of Java EE-infrastructure dependent code.]

See you at Java EE Workshops at MUC Airport!