Adam Bien's Weblog

Monday Nov 12, 2012

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!


Special Events: Java 8 with Java EE 7: "More Power with Less Code", 13th October, 2014 and Java EE 7: "Testing and Code Quality", 14th October, 2014

A book about rethinking Java EE Patterns

Comments:

Shouldn't the tomee-dependency be also test-scoped?

Posted by on November 12, 2012 at 01:08 PM CET #

@Rü,

it could, but I'm using the TomEE dependencies for regular compilation as well. Please also see: http://www.adam-bien.com/roller/abien/entry/trouble_with_crippled_java_ee

thanks!,

adam

Posted by Adam Bien on November 13, 2012 at 06:10 PM CET #

Post a Comment:
  • HTML Syntax: NOT allowed
realworldpatterns.com
...the last 150 posts
...the last 10 comments
Links
License