You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/04/11 21:04:05 UTC

svn commit: r1324917 - in /openejb/trunk/openejb/itests: ./ failover-ejb/ failover/ openejb-itests-app/ openejb-itests-beans/ openejb-itests-client/ openejb-itests-interceptor-beans/ openejb-itests-servlets/ openejb-itests-web/ openejb-tomee-itest/ ope...

Author: rmannibucau
Date: Wed Apr 11 19:04:04 2012
New Revision: 1324917

URL: http://svn.apache.org/viewvc?rev=1324917&view=rev
Log:
adding openejb-tomee-itest

Added:
    openejb/trunk/openejb/itests/openejb-tomee-itest/
    openejb/trunk/openejb/itests/openejb-tomee-itest/pom.xml
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Artifact.java
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITRuntimeException.java
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITTomEERunner.java
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Repository.java
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Server.java
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ServerTweaker.java
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Servers.java
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/SimpleTweaker.java
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/
    openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/MultipleServerTest.java
Modified:
    openejb/trunk/openejb/itests/failover-ejb/pom.xml
    openejb/trunk/openejb/itests/failover/pom.xml
    openejb/trunk/openejb/itests/openejb-itests-app/pom.xml
    openejb/trunk/openejb/itests/openejb-itests-beans/pom.xml
    openejb/trunk/openejb/itests/openejb-itests-client/pom.xml
    openejb/trunk/openejb/itests/openejb-itests-interceptor-beans/pom.xml
    openejb/trunk/openejb/itests/openejb-itests-servlets/pom.xml
    openejb/trunk/openejb/itests/openejb-itests-web/pom.xml
    openejb/trunk/openejb/itests/pom.xml

Modified: openejb/trunk/openejb/itests/failover-ejb/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/failover-ejb/pom.xml?rev=1324917&r1=1324916&r2=1324917&view=diff
==============================================================================
--- openejb/trunk/openejb/itests/failover-ejb/pom.xml (original)
+++ openejb/trunk/openejb/itests/failover-ejb/pom.xml Wed Apr 11 19:04:04 2012
@@ -26,7 +26,7 @@
   <groupId>org.apache.openejb.itests</groupId>
   <artifactId>failover-ejb</artifactId>
   <packaging>jar</packaging>
-  <name>OpenEJB :: iTests Failover EJB</name>
+  <name>OpenEJB :: iTests :: Failover EJB</name>
   <dependencies>
     <dependency>
       <groupId>org.apache.openejb</groupId>

Modified: openejb/trunk/openejb/itests/failover/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/failover/pom.xml?rev=1324917&r1=1324916&r2=1324917&view=diff
==============================================================================
--- openejb/trunk/openejb/itests/failover/pom.xml (original)
+++ openejb/trunk/openejb/itests/failover/pom.xml Wed Apr 11 19:04:04 2012
@@ -26,7 +26,7 @@
   <groupId>org.apache.openejb.itests</groupId>
   <artifactId>failover</artifactId>
   <packaging>jar</packaging>
-  <name>OpenEJB :: iTests Failover</name>
+  <name>OpenEJB :: iTests :: Failover</name>
   <build>
     <plugins>
       <plugin>

Modified: openejb/trunk/openejb/itests/openejb-itests-app/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-itests-app/pom.xml?rev=1324917&r1=1324916&r2=1324917&view=diff
==============================================================================
--- openejb/trunk/openejb/itests/openejb-itests-app/pom.xml (original)
+++ openejb/trunk/openejb/itests/openejb-itests-app/pom.xml Wed Apr 11 19:04:04 2012
@@ -28,7 +28,7 @@
   <modelVersion>4.0.0</modelVersion>
   <artifactId>openejb-itests-app</artifactId>
   <packaging>jar</packaging>
-  <name>OpenEJB :: iTests App</name>
+  <name>OpenEJB :: iTests :: App</name>
   <build>
     <plugins>
       <plugin>

Modified: openejb/trunk/openejb/itests/openejb-itests-beans/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-itests-beans/pom.xml?rev=1324917&r1=1324916&r2=1324917&view=diff
==============================================================================
--- openejb/trunk/openejb/itests/openejb-itests-beans/pom.xml (original)
+++ openejb/trunk/openejb/itests/openejb-itests-beans/pom.xml Wed Apr 11 19:04:04 2012
@@ -25,7 +25,7 @@
   <modelVersion>4.0.0</modelVersion>
   <artifactId>openejb-itests-beans</artifactId>
   <packaging>jar</packaging>
-  <name>OpenEJB :: iTests Beans</name>
+  <name>OpenEJB :: iTests :: Beans</name>
   <dependencies>
     <dependency>
       <groupId>org.apache.openejb</groupId>

Modified: openejb/trunk/openejb/itests/openejb-itests-client/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-itests-client/pom.xml?rev=1324917&r1=1324916&r2=1324917&view=diff
==============================================================================
--- openejb/trunk/openejb/itests/openejb-itests-client/pom.xml (original)
+++ openejb/trunk/openejb/itests/openejb-itests-client/pom.xml Wed Apr 11 19:04:04 2012
@@ -28,7 +28,7 @@
   <modelVersion>4.0.0</modelVersion>
   <artifactId>openejb-itests-client</artifactId>
   <packaging>jar</packaging>
-  <name>OpenEJB :: iTests Client</name>
+  <name>OpenEJB :: iTests :: Client</name>
   <build>
     <resources>
       <resource>

Modified: openejb/trunk/openejb/itests/openejb-itests-interceptor-beans/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-itests-interceptor-beans/pom.xml?rev=1324917&r1=1324916&r2=1324917&view=diff
==============================================================================
--- openejb/trunk/openejb/itests/openejb-itests-interceptor-beans/pom.xml (original)
+++ openejb/trunk/openejb/itests/openejb-itests-interceptor-beans/pom.xml Wed Apr 11 19:04:04 2012
@@ -29,7 +29,7 @@
 
   <artifactId>openejb-itests-interceptor-beans</artifactId>
   <packaging>jar</packaging>
-  <name>OpenEJB :: iTests Interceptor Beans</name>
+  <name>OpenEJB :: iTests :: Interceptor Beans</name>
 
   <dependencies>
     <dependency>

Modified: openejb/trunk/openejb/itests/openejb-itests-servlets/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-itests-servlets/pom.xml?rev=1324917&r1=1324916&r2=1324917&view=diff
==============================================================================
--- openejb/trunk/openejb/itests/openejb-itests-servlets/pom.xml (original)
+++ openejb/trunk/openejb/itests/openejb-itests-servlets/pom.xml Wed Apr 11 19:04:04 2012
@@ -25,7 +25,7 @@
   <modelVersion>4.0.0</modelVersion>
   <artifactId>openejb-itests-servlets</artifactId>
   <packaging>jar</packaging>
-  <name>OpenEJB :: iTests Servlets</name>
+  <name>OpenEJB :: iTests :: Servlets</name>
   <dependencies>
     <dependency>
       <groupId>org.apache.openejb</groupId>

Modified: openejb/trunk/openejb/itests/openejb-itests-web/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-itests-web/pom.xml?rev=1324917&r1=1324916&r2=1324917&view=diff
==============================================================================
--- openejb/trunk/openejb/itests/openejb-itests-web/pom.xml (original)
+++ openejb/trunk/openejb/itests/openejb-itests-web/pom.xml Wed Apr 11 19:04:04 2012
@@ -28,7 +28,7 @@
   <modelVersion>4.0.0</modelVersion>
   <artifactId>openejb-itests-web</artifactId>
   <packaging>war</packaging>
-  <name>OpenEJB :: iTests Web</name>
+  <name>OpenEJB :: iTests :: Web</name>
   <dependencies>
     <dependency>
       <groupId>org.apache.openejb</groupId>

Added: openejb/trunk/openejb/itests/openejb-tomee-itest/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/pom.xml?rev=1324917&view=auto
==============================================================================
--- openejb/trunk/openejb/itests/openejb-tomee-itest/pom.xml (added)
+++ openejb/trunk/openejb/itests/openejb-tomee-itest/pom.xml Wed Apr 11 19:04:04 2012
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>itests</artifactId>
+    <groupId>org.apache.openejb</groupId>
+    <version>4.0.0-beta-3-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>openejb-tomee-itest</artifactId>
+  <name>OpenEJB :: iTests :: TomEE Helper</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>openejb-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>openejb-provisionning</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>arquillian-tomee-common</artifactId>
+      <version>1.0.0-beta-3-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>compile</scope>
+    </dependency>
+    <dependency> <!-- just to avoid bad dependency relationship in our build -->
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>apache-tomee</artifactId>
+      <version>1.0.0-beta-3-SNAPSHOT</version>
+      <type>zip</type>
+      <classifier>webprofile</classifier>
+    </dependency>
+  </dependencies>
+</project>

Added: openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Artifact.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Artifact.java?rev=1324917&view=auto
==============================================================================
--- openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Artifact.java (added)
+++ openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Artifact.java Wed Apr 11 19:04:04 2012
@@ -0,0 +1,17 @@
+package org.apache.openejb.itest.tomee;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Target({ TYPE })
+@Retention(RUNTIME)
+public @interface Artifact {
+    String groupId() default "org.apache.openejb";
+    String artifactId() default "apache-tomee";
+    String version() default "1.0.0-beta-3-SNAPSHOT";
+    String classifier() default "webprofile";
+    String type() default "zip";
+}

Added: openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITRuntimeException.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITRuntimeException.java?rev=1324917&view=auto
==============================================================================
--- openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITRuntimeException.java (added)
+++ openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITRuntimeException.java Wed Apr 11 19:04:04 2012
@@ -0,0 +1,7 @@
+package org.apache.openejb.itest.tomee;
+
+public class ITRuntimeException extends RuntimeException {
+    public ITRuntimeException(final Throwable e) {
+        super(e);
+    }
+}

Added: openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITTomEERunner.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITTomEERunner.java?rev=1324917&view=auto
==============================================================================
--- openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITTomEERunner.java (added)
+++ openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ITTomEERunner.java Wed Apr 11 19:04:04 2012
@@ -0,0 +1,199 @@
+package org.apache.openejb.itest.tomee;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.openejb.arquillian.common.Setup;
+import org.apache.openejb.arquillian.common.TomEEConfiguration;
+import org.apache.openejb.config.RemoteServer;
+import org.apache.openejb.loader.Files;
+import org.apache.openejb.loader.IO;
+import org.apache.openejb.loader.Zips;
+import org.apache.openejb.util.NetworkUtil;
+import org.junit.runners.BlockJUnit4ClassRunner;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.Statement;
+
+public class ITTomEERunner extends BlockJUnit4ClassRunner {
+    public static final String TOMEE_TEST_IT_WORKING_DIR = "tomee.test.it.working-dir";
+    public static final String TOMEE_TEST_IT_RETRIES = "tomee.test.it.retries";
+    public static final String HTTP_PROP_PREFIX = "tomee.it.";
+    public static final String HTTP_PROP_SUFFIX = ".http";
+
+    private static final String WORKING_DIR = System.getProperty(TOMEE_TEST_IT_WORKING_DIR, "target/it-working-dir");
+    private static final String OPENEJB_HOME = "openejb.home";
+    private static final String SERVER_SHUTDOWN_PORT = "server.shutdown.port";
+
+    private final List<ServerInfo> servers;
+    private final RemoteServer[] remoteServers;
+
+    public ITTomEERunner(final Class<?> klass) throws InitializationError {
+        super(klass);
+
+        servers = new ArrayList<ServerInfo>();
+
+        final Servers serversAnnotation = klass.getAnnotation(Servers.class);
+        if (serversAnnotation != null) {
+            for (Server server : serversAnnotation.value()) {
+                addServer(server);
+            }
+        }
+
+        final Server serverAnnotation = klass.getAnnotation(Server.class);
+        if (serverAnnotation != null) {
+            addServer(serverAnnotation);
+        }
+
+        remoteServers = new RemoteServer[servers.size()];
+    }
+
+    private void addServer(final Server server) throws InitializationError {
+        final ServerInfo info = new ServerInfo();
+
+        info.name = server.name();
+        if (info.name == null || info.name.isEmpty()) {
+            info.name = getTestClass().getJavaClass().getSimpleName();
+        }
+
+        info.configurationDir = server.configurationDir();
+        if (info.configurationDir == null || info.configurationDir.isEmpty()) {
+            info.configurationDir = info.name;
+        }
+
+        info.clean = server.cleanWebapp();
+        info.httpPort = server.http();
+        info.shutdownPort = server.shutdown();
+        info.ajpPort = server.ajp();
+
+        final Class<? extends  ServerTweaker> tweaker = server.tweaker();
+        try {
+            info.tweaker = tweaker.newInstance();
+        } catch (InstantiationException e) {
+            throw new InitializationError(e);
+        } catch (IllegalAccessException e) {
+            throw new InitializationError(e);
+        }
+
+        final Artifact art = server.artifact();
+        info.server = Repository.getArtifact(art.groupId(), art.artifactId(), art.version(), art.type(), art.classifier());
+
+        servers.add(info);
+    }
+
+    @Override
+    protected Statement withBeforeClasses(final Statement statement) {
+        return new BeforeClassStatement(super.withBeforeClasses(statement));
+    }
+
+    @Override
+    protected Statement withAfterClasses(final Statement statement) {
+        return new AfterClassStatement(super.withAfterClasses(statement));
+    }
+
+    private class BeforeClassStatement extends Statement {
+        private final Statement delegate;
+
+        public BeforeClassStatement(final Statement statement) {
+            delegate = statement;
+        }
+
+        @Override
+        public void evaluate() throws Throwable {
+            final String oldOpenEJBHome = System.getProperty(OPENEJB_HOME);
+            final String oldShutdownPort = System.getProperty(SERVER_SHUTDOWN_PORT);
+
+            int i = 0;
+            for (ServerInfo info : servers) {
+                final File tomee = new File(WORKING_DIR, info.name);
+                Files.mkdirs(tomee);
+                Zips.unzip(info.server, tomee, true);
+
+                final TomEEConfiguration config = new TomEEConfiguration();
+                if (info.httpPort <= 0) {
+                    info.httpPort = NetworkUtil.getNextAvailablePort();
+                }
+                config.setHttpPort(info.httpPort);
+
+                if (info.shutdownPort <= 0) {
+                    info.shutdownPort = info.httpPort + 1;
+                }
+                config.setStopPort(NetworkUtil.getNextAvailablePort());
+
+                if (info.ajpPort <= 0) {
+                    info.ajpPort = info.shutdownPort + 1;
+                }
+                config.setAjpPort(NetworkUtil.getNextAvailablePort());
+
+                Setup.updateServerXml(tomee, config, 8080, 8005, 8009);
+
+                if (info.clean) { // speed up a bit
+                    Setup.removeUselessWebapps(tomee);
+                }
+
+                final File conf = new File(info.configurationDir);
+                if (conf.exists() && conf.isDirectory()) {
+                    IO.copyDirectory(conf, new File(tomee, "conf"));
+                }
+
+                info.tweaker.tweak(tomee);
+
+                // start the server
+                System.setProperty(OPENEJB_HOME, tomee.getCanonicalPath());
+                System.setProperty(SERVER_SHUTDOWN_PORT, Integer.toString(config.getStopPort()));
+                remoteServers[i] = new RemoteServer(Integer.getInteger(TOMEE_TEST_IT_RETRIES, 100), true);
+                remoteServers[i].start();
+
+                System.setProperty(HTTP_PROP_PREFIX + info.name + HTTP_PROP_SUFFIX, Integer.toString(info.httpPort));
+
+                i++;
+            }
+            try {
+                delegate.evaluate();
+            } finally {
+                resetSystemProperty(OPENEJB_HOME, oldOpenEJBHome);
+                resetSystemProperty(SERVER_SHUTDOWN_PORT, oldShutdownPort);
+            }
+        }
+
+        private void resetSystemProperty(final String key, final String old) {
+            if (old != null) {
+                System.setProperty(key, old);
+            } else {
+                System.clearProperty(key);
+            }
+        }
+    }
+
+    private class AfterClassStatement extends Statement {
+        private final Statement delegate;
+
+        public AfterClassStatement(final Statement statement) {
+            delegate = statement;
+        }
+
+        @Override
+        public void evaluate() throws Throwable {
+            delegate.evaluate();
+
+            if (servers != null) {
+                for (RemoteServer server : remoteServers) {
+                    if (server != null) {
+                        server.stop();
+                    }
+                }
+            }
+            Files.delete(new File(WORKING_DIR));
+        }
+    }
+
+    private static class ServerInfo {
+        private String name;
+        private String configurationDir;
+        private int httpPort;
+        private int shutdownPort;
+        private int ajpPort;
+        private boolean clean;
+        private ServerTweaker tweaker;
+        private File server;
+    }
+}

Added: openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Repository.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Repository.java?rev=1324917&view=auto
==============================================================================
--- openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Repository.java (added)
+++ openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Repository.java Wed Apr 11 19:04:04 2012
@@ -0,0 +1,36 @@
+package org.apache.openejb.itest.tomee;
+
+import java.io.File;
+import org.apache.openejb.resolver.Resolver;
+
+import static org.apache.openejb.loader.ProvisioningUtil.OPENEJB_DEPLOYER_CACHE_FOLDER;
+
+public class Repository {
+    private static final Resolver RESOLVER = new Resolver();
+
+    public static File getArtifact(final String groupId, final String artifactId, final String version, final String type, final String classifier) {
+        final String oldCache = System.getProperty(OPENEJB_DEPLOYER_CACHE_FOLDER);
+        System.setProperty(OPENEJB_DEPLOYER_CACHE_FOLDER, System.getProperty("tomee.test.it.cache", "target/cache"));
+
+        final StringBuilder builder = new StringBuilder("mvn:")
+                .append(groupId).append(":").append(artifactId).append(":")
+                .append(version).append(":")
+                .append(type);
+
+        if (classifier != null) {
+            builder.append(":").append(classifier);
+        }
+
+        try {
+            return new File(RESOLVER.resolve(builder.toString()));
+        } catch (Exception e) {
+            throw new ITRuntimeException(e);
+        } finally {
+            if (oldCache == null) {
+                System.clearProperty(OPENEJB_DEPLOYER_CACHE_FOLDER);
+            } else {
+                System.setProperty(OPENEJB_DEPLOYER_CACHE_FOLDER, oldCache);
+            }
+        }
+    }
+}

Added: openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Server.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Server.java?rev=1324917&view=auto
==============================================================================
--- openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Server.java (added)
+++ openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Server.java Wed Apr 11 19:04:04 2012
@@ -0,0 +1,20 @@
+package org.apache.openejb.itest.tomee;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Target({ TYPE })
+@Retention(RUNTIME)
+public @interface Server {
+    String name() default ""; // name
+    String configurationDir() default "";
+    int http() default -1;
+    int shutdown() default -1;
+    int ajp() default -1;
+    Class<? extends ServerTweaker> tweaker() default SimpleTweaker.class;
+    boolean cleanWebapp() default true;
+    Artifact artifact() default @Artifact;
+}

Added: openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ServerTweaker.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ServerTweaker.java?rev=1324917&view=auto
==============================================================================
--- openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ServerTweaker.java (added)
+++ openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/ServerTweaker.java Wed Apr 11 19:04:04 2012
@@ -0,0 +1,7 @@
+package org.apache.openejb.itest.tomee;
+
+import java.io.File;
+
+public interface ServerTweaker {
+    void tweak(File home);
+}

Added: openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Servers.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Servers.java?rev=1324917&view=auto
==============================================================================
--- openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Servers.java (added)
+++ openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/Servers.java Wed Apr 11 19:04:04 2012
@@ -0,0 +1,13 @@
+package org.apache.openejb.itest.tomee;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Target({ TYPE })
+@Retention(RUNTIME)
+public @interface Servers {
+    Server[] value() default {};
+}

Added: openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/SimpleTweaker.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/SimpleTweaker.java?rev=1324917&view=auto
==============================================================================
--- openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/SimpleTweaker.java (added)
+++ openejb/trunk/openejb/itests/openejb-tomee-itest/src/main/java/org/apache/openejb/itest/tomee/SimpleTweaker.java Wed Apr 11 19:04:04 2012
@@ -0,0 +1,38 @@
+package org.apache.openejb.itest.tomee;
+
+import java.io.File;
+import java.io.IOException;
+import org.apache.openejb.loader.IO;
+
+public class SimpleTweaker implements ServerTweaker {
+    @Override
+    public void tweak(final File home) {
+        // no-op
+    }
+
+    protected void addLib(final File home, final String groupId, final String artifactId, final String version) {
+        final File jar = findJar(groupId, artifactId, version);
+        copy(jar, new File(home, "lib/" + jar.getName()));
+    }
+
+    protected void addWebapp(final File home, final String groupId, final String artifactId, final String version) {
+        final File war = findWebapp(groupId, artifactId, version);
+        copy(war, new File(home, "webapps/" + war.getName()));
+    }
+
+    protected File findJar(final String groupId, final String artifactId, final String version) {
+        return Repository.getArtifact(groupId, artifactId, version, "jar", null);
+    }
+
+    protected File findWebapp(final String groupId, final String artifactId, final String version) {
+        return Repository.getArtifact(groupId, artifactId, version, "war", null);
+    }
+
+    protected void copy(final File from, final File to) {
+        try {
+            IO.copy(from, to);
+        } catch (IOException e) {
+            throw new ITRuntimeException(e);
+        }
+    }
+}

Added: openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/MultipleServerTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/MultipleServerTest.java?rev=1324917&view=auto
==============================================================================
--- openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/MultipleServerTest.java (added)
+++ openejb/trunk/openejb/itests/openejb-tomee-itest/src/test/java/org/apache/openejb/itest/tomee/MultipleServerTest.java Wed Apr 11 19:04:04 2012
@@ -0,0 +1,30 @@
+package org.apache.openejb.itest.tomee;
+
+import java.net.URL;
+import org.apache.openejb.loader.IO;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.matchers.JUnitMatchers.containsString;
+
+@Servers({
+        @Server(name = "tomee1"),
+        @Server(name = "tomee2"),
+        @Server(name = "tomee3")
+})
+@RunWith(ITTomEERunner.class)
+public class MultipleServerTest {
+    @Test // any client test
+    public void checkServersAreOn() throws Exception {
+        for (int i = 1; i <= 3; i++) {
+            final URL url = new URL("http://localhost:" + System.getProperty("tomee.it.tomee" + i + ".http") + "/tomee");
+            final String str = IO.slurp(url);
+
+            assertNotNull(str);
+            assertThat(str, containsString("Welcome to Apache TomEE"));
+        }
+    }
+}
+

Modified: openejb/trunk/openejb/itests/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/itests/pom.xml?rev=1324917&r1=1324916&r2=1324917&view=diff
==============================================================================
--- openejb/trunk/openejb/itests/pom.xml (original)
+++ openejb/trunk/openejb/itests/pom.xml Wed Apr 11 19:04:04 2012
@@ -36,6 +36,7 @@
     <module>openejb-itests-interceptor-beans</module>
     <module>openejb-itests-app</module>
     <module>openejb-itests-web</module>
+    <module>openejb-tomee-itest</module>
     <module>failover</module>
     <module>failover-ejb</module>
   </modules>