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/10/01 14:14:30 UTC

svn commit: r1392301 - in /openejb/trunk/openejb: arquillian/arquillian-common/ arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/ arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/...

Author: rmannibucau
Date: Mon Oct  1 12:14:29 2012
New Revision: 1392301

URL: http://svn.apache.org/viewvc?rev=1392301&view=rev
Log:
TOMEE-439 TOMEE-440 deployer for war (deploy in tomcat mode) + starting to get rid of arquillian enricher managing ourself injections (as in standalone)

Added:
    openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/
    openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java
    openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/mockito/
      - copied from r1392217, openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/mockito/
    openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/BeanDicovererInstaller.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TestClassDiscoverer.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEInjectionEnricher.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AdditionalBeanDiscoverer.java
Removed:
    openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/mockito/
Modified:
    openejb/trunk/openejb/arquillian/arquillian-common/pom.xml
    openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/mockito/MockitoEnricher.java
    openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
    openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-common/pom.xml
    openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/pom.xml
    openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEExtension.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-remote/pom.xml
    openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEEJBEnricherArchiveAppender.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEERemoteExtension.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/pom.xml
    openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappEJBEnricherArchiveAppender.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappExtension.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappRemoteExtension.java
    openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/resources/arquillian.xml
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
    openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
    openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/deployment/TomcatWebappDeployer.java

Modified: openejb/trunk/openejb/arquillian/arquillian-common/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-common/pom.xml?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-common/pom.xml (original)
+++ openejb/trunk/openejb/arquillian/arquillian-common/pom.xml Mon Oct  1 12:14:29 2012
@@ -32,6 +32,12 @@
 
   <dependencies>
     <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>openejb-core</artifactId>
+      <version>${openejb.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
       <groupId>org.jboss.arquillian.test</groupId>
       <artifactId>arquillian-test-spi</artifactId>
       <version>${version.arquillian}</version>

Added: openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java?rev=1392301&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java (added)
+++ openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/OpenEJBEnricher.java Mon Oct  1 12:14:29 2012
@@ -0,0 +1,73 @@
+/**
+ * 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.
+ */
+package org.apache.openejb.arquillian.common.enrichment;
+
+import org.apache.openejb.AppContext;
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.InjectionProcessor;
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.arquillian.common.mockito.MockitoEnricher;
+import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.inject.OWBInjector;
+
+import javax.enterprise.inject.spi.Bean;
+import java.util.Set;
+
+public final class OpenEJBEnricher {
+    private OpenEJBEnricher() {
+        // no-op
+    }
+
+    public static void enrich(final Object testInstance, final AppContext ctx) {
+        if (ctx == null) { // deployment exception
+            return;
+        }
+
+        // don't rely on arquillian since this enrichment should absolutely be done before the following ones
+        new MockitoEnricher().enrich(testInstance);
+
+        final BeanManagerImpl bm = ctx.getWebBeansContext().getBeanManagerImpl();
+        if (bm.isInUse()) {
+            try {
+                final Set<Bean<?>> beans = bm.getBeans(testInstance.getClass());
+                final Bean<?> bean = bm.resolve(beans);
+                OWBInjector.inject(bm, testInstance, bm.createCreationalContext(bean));
+            } catch (Throwable t) {
+                // ignored
+            }
+        }
+
+        final BeanContext context = SystemInstance.get().getComponent(ContainerSystem.class)
+                                            .getBeanContext(testInstance.getClass().getName());
+        if (context != null) {
+            ThreadContext callContext = new ThreadContext(context, null, Operation.INJECTION);
+            ThreadContext oldContext = ThreadContext.enter(callContext);
+            try {
+                final InjectionProcessor processor = new InjectionProcessor<Object>(testInstance, context.getInjections(), context.getJndiContext());
+                processor.createInstance();
+            } catch (OpenEJBException e) {
+                // ignored
+            } finally {
+                ThreadContext.exit(oldContext);
+            }
+        }
+    }
+}

Modified: openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/mockito/MockitoEnricher.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/mockito/MockitoEnricher.java?rev=1392301&r1=1392217&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/mockito/MockitoEnricher.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/mockito/MockitoEnricher.java Mon Oct  1 12:14:29 2012
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.openejb.arquillian.openejb.mockito;
+package org.apache.openejb.arquillian.common.mockito;
 
 import org.jboss.arquillian.test.spi.TestEnricher;
 

Modified: openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java Mon Oct  1 12:14:29 2012
@@ -84,7 +84,6 @@ public class OpenEJBDeployableContainer 
     // system
     private Assembler assembler;
     private InitialContext initialContext;
-    private ContainerSystem containerSystem;
     private ConfigurationFactory configurationFactory;
 
     // suite
@@ -105,10 +104,6 @@ public class OpenEJBDeployableContainer 
     private InstanceProducer<HttpSession> sessionProducer;
 
     @Inject
-    @ContainerScoped
-    private InstanceProducer<ContainerSystem> containerSystemProducer;
-
-    @Inject
     @SuiteScoped
     private InstanceProducer<ClassLoader> classLoader;
 
@@ -166,8 +161,6 @@ public class OpenEJBDeployableContainer 
         }
 
         assembler = SystemInstance.get().getComponent(Assembler.class);
-        containerSystem = SystemInstance.get().getComponent(ContainerSystem.class);
-        containerSystemProducer.set(containerSystem);
         configurationFactory = new ConfigurationFactory();
     }
 

Modified: openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java Mon Oct  1 12:14:29 2012
@@ -16,62 +16,21 @@
  */
 package org.apache.openejb.arquillian.openejb;
 
-import java.lang.reflect.Method;
-import java.util.Set;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
 import org.apache.openejb.AppContext;
-import org.apache.openejb.BeanContext;
-import org.apache.openejb.InjectionProcessor;
-import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.arquillian.openejb.mockito.MockitoEnricher;
-import org.apache.openejb.core.Operation;
-import org.apache.openejb.core.ThreadContext;
-import org.apache.openejb.spi.ContainerSystem;
-import org.apache.webbeans.inject.OWBInjector;
+import org.apache.openejb.arquillian.common.enrichment.OpenEJBEnricher;
 import org.jboss.arquillian.core.api.Instance;
 import org.jboss.arquillian.core.api.annotation.Inject;
 import org.jboss.arquillian.test.spi.TestEnricher;
 
+import java.lang.reflect.Method;
+
 public class OpenEJBInjectionEnricher implements TestEnricher {
     @Inject
     private Instance<AppContext> appContext;
 
-    @Inject
-    private Instance<ContainerSystem> containerSystem;
-
     @Override
     public void enrich(final Object testInstance) {
-        final AppContext ctx = appContext.get();
-        if (ctx == null) { // deployment exception
-            return;
-        }
-
-        // don't rely on arquillian since this enrichment should absolutely be done before the following ones
-        new MockitoEnricher().enrich(testInstance);
-
-        final BeanManager bm = ctx.getWebBeansContext().getBeanManagerImpl();
-        try {
-            final Set<Bean<?>> beans = bm.getBeans(testInstance.getClass());
-            final Bean<?> bean = bm.resolve(beans);
-            OWBInjector.inject(bm, testInstance, bm.createCreationalContext(bean));
-        } catch (Throwable t) {
-            // ignored
-        }
-
-        final BeanContext context = containerSystem.get().getBeanContext(testInstance.getClass().getName());
-        if (context != null) {
-            ThreadContext callContext = new ThreadContext(context, null, Operation.INJECTION);
-            ThreadContext oldContext = ThreadContext.enter(callContext);
-            try {
-                final InjectionProcessor processor = new InjectionProcessor<Object>(testInstance, context.getInjections(), context.getJndiContext());
-                processor.createInstance();
-            } catch (OpenEJBException e) {
-                // ignored
-            } finally {
-                ThreadContext.exit(oldContext);
-            }
-        }
+        OpenEJBEnricher.enrich(testInstance, appContext.get());
     }
 
     @Override

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-common/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-common/pom.xml?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-common/pom.xml (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-common/pom.xml Mon Oct  1 12:14:29 2012
@@ -30,6 +30,11 @@
   <name>OpenEJB :: Arquillian Adaptors Parent :: TomEE Common</name>
 
   <dependencies>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>arquillian-common</artifactId>
+      <version>${project.version}</version>
+    </dependency>
 
     <dependency>
       <groupId>org.jboss.arquillian.container</groupId>
@@ -45,12 +50,6 @@
     </dependency>
 
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
       <groupId>org.apache.openejb</groupId>
       <artifactId>javaee-api</artifactId>
       <version>${javaee-api.version}</version>
@@ -64,6 +63,24 @@
     </dependency>
 
     <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xbean</groupId>
+      <artifactId>xbean-finder-shaded</artifactId>
+      <version>3.11</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>openejb-jee</artifactId>
+      <version>${openejb.version}</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
       <groupId>org.apache.openejb</groupId>
       <artifactId>openejb-core</artifactId>
       <version>${openejb.version}</version>

Added: openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/BeanDicovererInstaller.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/BeanDicovererInstaller.java?rev=1392301&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/BeanDicovererInstaller.java (added)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/BeanDicovererInstaller.java Mon Oct  1 12:14:29 2012
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ */
+package org.apache.openejb.arquillian.common;
+
+import org.apache.openejb.config.AdditionalBeanDiscoverer;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.observer.Observes;
+import org.apache.openejb.observer.event.ObserverAdded;
+
+public class BeanDicovererInstaller {
+    public void install(@Observes final ObserverAdded added) {
+        if (added.getObserver() == this) {
+            SystemInstance.get().setComponent(AdditionalBeanDiscoverer.class, new TestClassDiscoverer());
+        }
+    }
+}

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/Setup.java Mon Oct  1 12:14:29 2012
@@ -21,6 +21,11 @@ import org.apache.openejb.loader.SystemI
 import org.apache.openejb.util.JarExtractor;
 import org.apache.tomee.util.QuickServerXmlParser;
 import org.jboss.arquillian.container.spi.client.container.LifecycleException;
+import org.jboss.shrinkwrap.api.ArchivePaths;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.exporter.ZipExporter;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -48,6 +53,7 @@ import java.util.logging.Logger;
  */
 public class Setup {
     private static final Logger LOGGER = Logger.getLogger(Setup.class.getName()); // JUL is used by arquillian so that's fine
+    public static final String TOMEE_BEAN_DISCOVERER_JAR = "lib/arquillian-tomee-bean-discoverer.jar";
 
     public static void exportProperties(final File openejbHome, final TomEEConfiguration c) {
         System.setProperty("java.naming.provider.url", "http://" + c.getHost() + ":" + c.getHttpPort() + "/tomee/ejb");
@@ -319,6 +325,19 @@ public class Setup {
         return f.getAbsolutePath().substring(base.getAbsolutePath().length() + 1);
     }
 
+    public static void installArquillianBeanDiscoverer(final File home) {
+        final File destination = new File(home, TOMEE_BEAN_DISCOVERER_JAR);
+        ShrinkWrap.create(JavaArchive.class, destination.getName())
+                .addClasses(BeanDicovererInstaller.class, TestClassDiscoverer.class)
+                .addAsManifestResource(new StringAsset(BeanDicovererInstaller.class.getName()), ArchivePaths.create("org.apache.openejb.extension"))
+                .as(ZipExporter.class).exportTo(destination, false);
+    }
+
+    public static void removeArquillianBeanDiscoverer(final File home) {
+        final File destination = new File(home, TOMEE_BEAN_DISCOVERER_JAR);
+        Files.delete(destination);
+    }
+
     private static class TrueFileFilter implements FileFilter {
         private static TrueFileFilter INSTANCE = null;
 

Added: openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TestClassDiscoverer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TestClassDiscoverer.java?rev=1392301&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TestClassDiscoverer.java (added)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TestClassDiscoverer.java Mon Oct  1 12:14:29 2012
@@ -0,0 +1,90 @@
+/*
+ * 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.
+ */
+package org.apache.openejb.arquillian.common;
+
+import org.apache.openejb.config.AdditionalBeanDiscoverer;
+import org.apache.openejb.config.AppModule;
+import org.apache.openejb.config.EjbModule;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.ManagedBean;
+import org.apache.openejb.jee.TransactionType;
+import org.apache.openejb.jee.oejb3.EjbDeployment;
+import org.apache.openejb.jee.oejb3.OpenejbJar;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class TestClassDiscoverer implements AdditionalBeanDiscoverer {
+    @Override
+    public AppModule discover(final AppModule module) {
+        final String name = findTestName(module.getFile(), module.getClassLoader());
+        if (name == null) {
+            return module;
+        }
+
+        final EjbJar ejbJar = new EjbJar();
+        final OpenejbJar openejbJar = new OpenejbJar();
+        final ManagedBean bean = ejbJar.addEnterpriseBean(new ManagedBean(name, name, true));
+        bean.setTransactionType(TransactionType.BEAN);
+        final EjbDeployment ejbDeployment = openejbJar.addEjbDeployment(bean);
+        ejbDeployment.setDeploymentId(name);
+        module.getEjbModules().add(new EjbModule(ejbJar, openejbJar));
+        return module;
+    }
+
+    private String findTestName(final File folder, final ClassLoader classLoader) {
+        InputStream is = null;
+
+        File dir = folder;
+
+        if (dir != null && (dir.getName().endsWith(".war") || dir.getName().endsWith(".ear"))) {
+            final File unpacked = new File(dir.getParentFile(), dir.getName().substring(0, dir.getName().length() - 4));
+            if (unpacked.exists()) {
+                dir = unpacked;
+            }
+        }
+
+        if (dir != null && dir.isDirectory()) {
+            final File info = new File(dir, "arquillian-tomee-info.txt");
+            if (info.exists()) {
+                try {
+                    is = new FileInputStream(info);
+                } catch (FileNotFoundException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+
+        if (is == null) {
+            is = classLoader.getResourceAsStream("/arquillian-tomee-info.txt");
+        }
+
+        if (is != null) {
+            try {
+                return org.apache.openejb.loader.IO.slurp(is);
+            } catch (IOException e) {
+                e.printStackTrace();
+            } finally {
+                org.apache.openejb.loader.IO.close(is);
+            }
+        }
+        return null;
+    }
+}

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java Mon Oct  1 12:14:29 2012
@@ -31,7 +31,13 @@ import org.jboss.arquillian.container.sp
 import org.jboss.arquillian.container.spi.client.protocol.metadata.HTTPContext;
 import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData;
 import org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet;
+import org.jboss.arquillian.core.api.Instance;
+import org.jboss.arquillian.core.api.annotation.Inject;
+import org.jboss.arquillian.test.spi.TestClass;
 import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ArchivePaths;
+import org.jboss.shrinkwrap.api.Assignable;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
 import org.jboss.shrinkwrap.api.exporter.ZipExporter;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
 import org.jboss.shrinkwrap.descriptor.api.Descriptor;
@@ -58,6 +64,9 @@ public abstract class TomEEContainer<Con
     protected Map<String, DeployedApp> moduleIds = new HashMap<String, DeployedApp>();
     private final Options options;
 
+    @Inject
+    private Instance<TestClass> testClass;
+
     protected TomEEContainer() {
         this.options = new Options(System.getProperties());
     }
@@ -268,7 +277,7 @@ public abstract class TomEEContainer<Con
                 LOGGER.warning("can't create " + file.getParent());
             }
 
-            archive.as(ZipExporter.class).exportTo(file, true);
+            archiveWithTestInfo(archive).as(ZipExporter.class).exportTo(file, true);
 
             final String fileName = file.getName();
             if (fileName.endsWith(".war")) { // ??
@@ -315,6 +324,10 @@ public abstract class TomEEContainer<Con
         }
     }
 
+    protected Assignable archiveWithTestInfo(final Archive<?> archive) {
+        return archive.add(new StringAsset(testClass.get().getJavaClass().getName()), ArchivePaths.create("arquillian-tomee-info.txt"));
+    }
+
     protected Deployer deployer() throws NamingException {
         return lookupDeployerWithRetry(5);
     }

Added: openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEInjectionEnricher.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEInjectionEnricher.java?rev=1392301&view=auto
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEInjectionEnricher.java (added)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEInjectionEnricher.java Mon Oct  1 12:14:29 2012
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ */
+package org.apache.openejb.arquillian.common;
+
+import org.apache.openejb.AppContext;
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.arquillian.common.enrichment.OpenEJBEnricher;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.jboss.arquillian.test.spi.TestEnricher;
+
+import java.lang.reflect.Method;
+
+public class TomEEInjectionEnricher implements TestEnricher {
+    @Override
+    public void enrich(final Object o) {
+        OpenEJBEnricher.enrich(o, getAppContext(o.getClass().getName()));
+    }
+
+    private AppContext getAppContext(final String className) {
+        final BeanContext context = SystemInstance.get().getComponent(ContainerSystem.class).getBeanContext(className);
+        if (context == null) {
+            return null;
+        }
+        return context.getModuleContext().getAppContext();
+    }
+
+    @Override
+    public Object[] resolve(final Method method) {
+        return new Object[method.getParameterTypes().length];
+    }
+}

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/pom.xml?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/pom.xml (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/pom.xml Mon Oct  1 12:14:29 2012
@@ -80,25 +80,6 @@
       <scope>test</scope>
     </dependency>
 
-
-    <dependency>
-      <groupId>org.jboss.arquillian.testenricher</groupId>
-      <artifactId>arquillian-testenricher-cdi</artifactId>
-      <version>${version.arquillian}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.jboss.arquillian.testenricher</groupId>
-      <artifactId>arquillian-testenricher-resource</artifactId>
-      <version>${version.arquillian}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.jboss.arquillian.testenricher</groupId>
-      <artifactId>arquillian-testenricher-ejb</artifactId>
-      <version>${version.arquillian}</version>
-    </dependency>
-
     <dependency>
       <groupId>org.jboss.shrinkwrap.descriptors</groupId>
       <artifactId>shrinkwrap-descriptors-impl-javaee</artifactId>

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainer.java Mon Oct  1 12:14:29 2012
@@ -16,10 +16,12 @@
  */
 package org.apache.openejb.arquillian.embedded;
 
-import org.apache.openejb.AppContext;
 import org.apache.openejb.arquillian.common.Files;
+import org.apache.openejb.arquillian.common.TestClassDiscoverer;
 import org.apache.openejb.arquillian.common.TomEEContainer;
 import org.apache.openejb.assembler.classic.AppInfo;
+import org.apache.openejb.config.AdditionalBeanDiscoverer;
+import org.apache.openejb.loader.SystemInstance;
 import org.apache.tomee.embedded.Configuration;
 import org.apache.tomee.embedded.Container;
 import org.jboss.arquillian.container.spi.client.container.DeploymentException;
@@ -28,29 +30,15 @@ import org.jboss.arquillian.container.sp
 import org.jboss.arquillian.container.spi.client.protocol.metadata.HTTPContext;
 import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData;
 import org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet;
-import org.jboss.arquillian.container.spi.context.annotation.ContainerScoped;
-import org.jboss.arquillian.container.spi.context.annotation.DeploymentScoped;
-import org.jboss.arquillian.core.api.InstanceProducer;
-import org.jboss.arquillian.core.api.annotation.Inject;
 import org.jboss.shrinkwrap.api.Archive;
 import org.jboss.shrinkwrap.api.exporter.ZipExporter;
 
-import javax.enterprise.inject.spi.BeanManager;
-import javax.naming.Context;
 import java.io.File;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 public class EmbeddedTomEEContainer extends TomEEContainer<EmbeddedTomEEConfiguration> {
 
-    @Inject
-    @ContainerScoped
-    private InstanceProducer<Context> contextInstance;
-
-    @Inject
-    @DeploymentScoped
-    private InstanceProducer<BeanManager> beanManagerInstance;
-
     private static final Map<Archive<?>, File> ARCHIVES = new ConcurrentHashMap<Archive<?>, File>();
 
     private Container container;
@@ -86,7 +74,7 @@ public class EmbeddedTomEEContainer exte
     public void start() throws LifecycleException {
         try {
             container.start();
-            contextInstance.set(container.getJndiContext());
+            SystemInstance.get().setComponent(AdditionalBeanDiscoverer.class, new TestClassDiscoverer());
         } catch (Exception e) {
             e.printStackTrace();
             throw new LifecycleException("Something went wrong", e);
@@ -114,9 +102,9 @@ public class EmbeddedTomEEContainer exte
             final String name = archive.getName();
             final File file = new File(tempDir, name);
             ARCHIVES.put(archive, file);
-        	archive.as(ZipExporter.class).exportTo(file, true);
+            archiveWithTestInfo(archive).as(ZipExporter.class).exportTo(file, true);
 
-            final AppContext appContext = container.deploy(name, file);
+            container.deploy(name, file);
             final AppInfo info = container.getInfo(name);
             final String context = getArchiveNameWithoutExtension(archive);
 
@@ -124,7 +112,6 @@ public class EmbeddedTomEEContainer exte
             httpContext.add(new Servlet("ArquillianServletRunner", "/" + context));
             addServlets(httpContext, info);
 
-            beanManagerInstance.set(appContext.getBeanManager());
             return new ProtocolMetaData().addContext(httpContext);
         } catch (Exception e) {
             e.printStackTrace();

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEExtension.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEExtension.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEExtension.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-embedded/src/main/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEExtension.java Mon Oct  1 12:14:29 2012
@@ -18,11 +18,13 @@
 package org.apache.openejb.arquillian.embedded;
 
 import org.apache.openejb.arquillian.common.ArquillianUtil;
+import org.apache.openejb.arquillian.common.TomEEInjectionEnricher;
 import org.apache.openejb.arquillian.common.deployment.DeploymentExceptionObserver;
 import org.apache.openejb.arquillian.common.deployment.DeploymentExceptionProvider;
 import org.apache.openejb.arquillian.transaction.OpenEJBTransactionProvider;
 import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
 import org.jboss.arquillian.core.spi.LoadableExtension;
+import org.jboss.arquillian.test.spi.TestEnricher;
 import org.jboss.arquillian.test.spi.enricher.resource.ResourceProvider;
 import org.jboss.arquillian.transaction.impl.client.TransactionExtension;
 import org.jboss.arquillian.transaction.impl.container.TransactionRemoteExtension;
@@ -36,6 +38,7 @@ public class EmbeddedTomEEExtension impl
         if (ArquillianUtil.isCurrentAdapter(ADAPTER)) {
             builder.service(DeployableContainer.class, EmbeddedTomEEContainer.class)
                 .observer(DeploymentExceptionObserver.class)
+                .service(TestEnricher.class, TomEEInjectionEnricher.class)
                 .service(TransactionProvider.class, OpenEJBTransactionProvider.class)
                 .service(ResourceProvider.class, DeploymentExceptionProvider.class);
 

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-remote/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-remote/pom.xml?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-remote/pom.xml (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-remote/pom.xml Mon Oct  1 12:14:29 2012
@@ -49,24 +49,6 @@
     </dependency>
 
     <dependency>
-      <groupId>org.jboss.arquillian.testenricher</groupId>
-      <artifactId>arquillian-testenricher-cdi</artifactId>
-      <version>${version.arquillian}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.jboss.arquillian.testenricher</groupId>
-      <artifactId>arquillian-testenricher-resource</artifactId>
-      <version>${version.arquillian}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.jboss.arquillian.testenricher</groupId>
-      <artifactId>arquillian-testenricher-ejb</artifactId>
-      <version>${version.arquillian}</version>
-    </dependency>
-
-    <dependency>
       <groupId>org.jboss.arquillian.junit</groupId>
       <artifactId>arquillian-junit-container</artifactId>
       <version>${version.arquillian}</version>

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEContainer.java Mon Oct  1 12:14:29 2012
@@ -41,6 +41,7 @@ public class RemoteTomEEContainer extend
 
     private RemoteServer container;
     private boolean shutdown = false;
+    private File openejbHome;
 
     @Override
     public void start() throws LifecycleException {
@@ -114,7 +115,7 @@ public class RemoteTomEEContainer extend
         Files.readable(workingDirectory);
         Files.writable(workingDirectory);
 
-        File openejbHome = Setup.findHome(workingDirectory);
+        openejbHome = Setup.findHome(workingDirectory);
 
         if (openejbHome == null) {
             openejbHome = Setup.downloadAndUnpack(workingDirectory, configuration.getArtifactName());
@@ -134,6 +135,7 @@ public class RemoteTomEEContainer extend
         Setup.synchronizeFolder(openejbHome, configuration.getLib(), "lib");
 
         Setup.exportProperties(openejbHome, configuration);
+        Setup.installArquillianBeanDiscoverer(openejbHome);
 
         if (configuration.isRemoveUnusedWebapps()) {
             Setup.removeUselessWebapps(openejbHome);
@@ -151,6 +153,7 @@ public class RemoteTomEEContainer extend
     public void stop() throws LifecycleException {
         // only stop the container if we started it
         if (shutdown) {
+            Setup.removeArquillianBeanDiscoverer(openejbHome);
             container.stop();
         }
     }

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEEJBEnricherArchiveAppender.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEEJBEnricherArchiveAppender.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEEJBEnricherArchiveAppender.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEEEJBEnricherArchiveAppender.java Mon Oct  1 12:14:29 2012
@@ -17,13 +17,14 @@
 
 package org.apache.tomee.arquillian.remote;
 
+import org.apache.openejb.arquillian.common.TomEEInjectionEnricher;
+import org.apache.openejb.arquillian.common.enrichment.OpenEJBEnricher;
+import org.apache.openejb.arquillian.common.mockito.MockitoEnricher;
 import org.apache.openejb.arquillian.transaction.OpenEJBTransactionProvider;
 import org.jboss.arquillian.container.test.spi.RemoteLoadableExtension;
 import org.jboss.arquillian.container.test.spi.client.deployment.AuxiliaryArchiveAppender;
 import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ArchivePaths;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.StringAsset;
 import org.jboss.shrinkwrap.api.spec.JavaArchive;
 
 public class RemoteTomEEEJBEnricherArchiveAppender implements AuxiliaryArchiveAppender {
@@ -31,6 +32,7 @@ public class RemoteTomEEEJBEnricherArchi
     public Archive<?> createAuxiliaryArchive() {
         return ShrinkWrap.create(JavaArchive.class, "arquillian-tomee-archive-appender.jar")
                 .addClasses(RemoteTomEEObserver.class, RemoteTomEERemoteExtension.class, OpenEJBTransactionProvider.class)
+                .addClasses(OpenEJBEnricher.class, TomEEInjectionEnricher.class, MockitoEnricher.class)
                 .addAsServiceProvider(RemoteLoadableExtension.class, RemoteTomEERemoteExtension.class);
     }
 }
\ No newline at end of file

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEERemoteExtension.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEERemoteExtension.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEERemoteExtension.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-remote/src/main/java/org/apache/tomee/arquillian/remote/RemoteTomEERemoteExtension.java Mon Oct  1 12:14:29 2012
@@ -17,8 +17,10 @@
 
 package org.apache.tomee.arquillian.remote;
 
+import org.apache.openejb.arquillian.common.TomEEInjectionEnricher;
 import org.apache.openejb.arquillian.transaction.OpenEJBTransactionProvider;
 import org.jboss.arquillian.container.test.spi.RemoteLoadableExtension;
+import org.jboss.arquillian.test.spi.TestEnricher;
 import org.jboss.arquillian.transaction.spi.provider.TransactionProvider;
 
 public class RemoteTomEERemoteExtension implements RemoteLoadableExtension {
@@ -26,6 +28,7 @@ public class RemoteTomEERemoteExtension 
     @Override
     public void register(ExtensionBuilder builder) {
         builder.observer(RemoteTomEEObserver.class)
+            .service(TestEnricher.class, TomEEInjectionEnricher.class)
             .service(TransactionProvider.class, OpenEJBTransactionProvider.class);
     }
 }

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/pom.xml?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/pom.xml (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/pom.xml Mon Oct  1 12:14:29 2012
@@ -49,24 +49,6 @@
     </dependency>
 
     <dependency>
-      <groupId>org.jboss.arquillian.testenricher</groupId>
-      <artifactId>arquillian-testenricher-cdi</artifactId>
-      <version>${version.arquillian}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.jboss.arquillian.testenricher</groupId>
-      <artifactId>arquillian-testenricher-resource</artifactId>
-      <version>${version.arquillian}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.jboss.arquillian.testenricher</groupId>
-      <artifactId>arquillian-testenricher-ejb</artifactId>
-      <version>${version.arquillian}</version>
-    </dependency>
-
-    <dependency>
       <groupId>org.apache.tomcat</groupId>
       <artifactId>tomcat-catalina</artifactId>
       <version>${tomcat.version}</version>

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java Mon Oct  1 12:14:29 2012
@@ -44,6 +44,7 @@ public class TomEEWebappContainer extend
 
     private RemoteServer container;
     private boolean shutdown = false;
+    private File openejbHome;
 
     @Override
     public void start() throws LifecycleException {
@@ -74,7 +75,7 @@ public class TomEEWebappContainer extend
             Files.readable(workingDirectory);
             Files.writable(workingDirectory);
 
-            File openejbHome = Setup.findHome(workingDirectory);
+            openejbHome = Setup.findHome(workingDirectory);
 
             if (openejbHome == null) {
 
@@ -124,6 +125,8 @@ public class TomEEWebappContainer extend
                 }
             }
 
+            Setup.installArquillianBeanDiscoverer(openejbHome);
+
             container = new RemoteServer();
             container.start();
         } catch (Exception e) {
@@ -177,6 +180,7 @@ public class TomEEWebappContainer extend
     public void stop() throws LifecycleException {
         // only stop the container if we started it
         if (shutdown) {
+            Setup.removeArquillianBeanDiscoverer(openejbHome);
             container.stop();
         }
     }

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappEJBEnricherArchiveAppender.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappEJBEnricherArchiveAppender.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappEJBEnricherArchiveAppender.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappEJBEnricherArchiveAppender.java Mon Oct  1 12:14:29 2012
@@ -17,13 +17,14 @@
 
 package org.apache.tomee.arquillian.webapp;
 
+import org.apache.openejb.arquillian.common.TomEEInjectionEnricher;
+import org.apache.openejb.arquillian.common.enrichment.OpenEJBEnricher;
+import org.apache.openejb.arquillian.common.mockito.MockitoEnricher;
 import org.apache.openejb.arquillian.transaction.OpenEJBTransactionProvider;
 import org.jboss.arquillian.container.test.spi.RemoteLoadableExtension;
 import org.jboss.arquillian.container.test.spi.client.deployment.AuxiliaryArchiveAppender;
 import org.jboss.shrinkwrap.api.Archive;
-import org.jboss.shrinkwrap.api.ArchivePaths;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.asset.StringAsset;
 import org.jboss.shrinkwrap.api.spec.JavaArchive;
 
 public class TomEEWebappEJBEnricherArchiveAppender implements AuxiliaryArchiveAppender {
@@ -31,6 +32,7 @@ public class TomEEWebappEJBEnricherArchi
     public Archive<?> createAuxiliaryArchive() {
         return ShrinkWrap.create(JavaArchive.class, "arquillian-tomee-archive-appender.jar")
                 .addClasses(TomEEWebappObserver.class, TomEEWebappRemoteExtension.class, OpenEJBTransactionProvider.class)
+                .addClasses(OpenEJBEnricher.class, TomEEInjectionEnricher.class, MockitoEnricher.class)
                 .addAsServiceProvider(RemoteLoadableExtension.class, TomEEWebappRemoteExtension.class);
     }
 }
\ No newline at end of file

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappExtension.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappExtension.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappExtension.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappExtension.java Mon Oct  1 12:14:29 2012
@@ -18,11 +18,13 @@
 package org.apache.tomee.arquillian.webapp;
 
 import org.apache.openejb.arquillian.common.ArquillianUtil;
+import org.apache.openejb.arquillian.common.TomEEInjectionEnricher;
 import org.apache.openejb.arquillian.common.deployment.DeploymentExceptionObserver;
 import org.apache.openejb.arquillian.common.deployment.DeploymentExceptionProvider;
 import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
 import org.jboss.arquillian.container.test.spi.client.deployment.AuxiliaryArchiveAppender;
 import org.jboss.arquillian.core.spi.LoadableExtension;
+import org.jboss.arquillian.test.spi.TestEnricher;
 import org.jboss.arquillian.test.spi.enricher.resource.ResourceProvider;
 
 public class TomEEWebappExtension implements LoadableExtension {
@@ -34,6 +36,7 @@ public class TomEEWebappExtension implem
             builder.service(DeployableContainer.class, TomEEWebappContainer.class)
                 .service(AuxiliaryArchiveAppender.class, TomEEWebappEJBEnricherArchiveAppender.class)
                 .observer(DeploymentExceptionObserver.class)
+                .service(TestEnricher.class, TomEEInjectionEnricher.class)
                 .service(ResourceProvider.class, DeploymentExceptionProvider.class);
         }
     }

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappRemoteExtension.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappRemoteExtension.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappRemoteExtension.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappRemoteExtension.java Mon Oct  1 12:14:29 2012
@@ -17,8 +17,10 @@
 
 package org.apache.tomee.arquillian.webapp;
 
+import org.apache.openejb.arquillian.common.TomEEInjectionEnricher;
 import org.apache.openejb.arquillian.transaction.OpenEJBTransactionProvider;
 import org.jboss.arquillian.container.test.spi.RemoteLoadableExtension;
+import org.jboss.arquillian.test.spi.TestEnricher;
 import org.jboss.arquillian.transaction.spi.provider.TransactionProvider;
 
 public class TomEEWebappRemoteExtension implements RemoteLoadableExtension {
@@ -26,6 +28,7 @@ public class TomEEWebappRemoteExtension 
     @Override
     public void register(ExtensionBuilder builder) {
         builder.observer(TomEEWebappObserver.class)
+            .service(TestEnricher.class, TomEEInjectionEnricher.class)
             .service(TransactionProvider.class, OpenEJBTransactionProvider.class);
     }
 }

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/resources/arquillian.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/resources/arquillian.xml?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/resources/arquillian.xml (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/test/resources/arquillian.xml Mon Oct  1 12:14:29 2012
@@ -28,7 +28,7 @@
             <property name="httpPort">-1</property>
             <property name="ajpPort">-1</property>
             <property name="stopPort">-1</property>
-            <property name="tomcatVersion">7.0.27</property>
+            <property name="tomcatVersion">7.0.30</property>
             <property name="version">${tomee.version}</property>
             <property name="dir">target/apache-tomee-remote</property>
             <property name="appWorkingDir">target/arquillian-test-working-dir</property>

Added: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AdditionalBeanDiscoverer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AdditionalBeanDiscoverer.java?rev=1392301&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AdditionalBeanDiscoverer.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AdditionalBeanDiscoverer.java Mon Oct  1 12:14:29 2012
@@ -0,0 +1,21 @@
+/*
+ * 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.
+ */
+package org.apache.openejb.config;
+
+public interface AdditionalBeanDiscoverer {
+    AppModule discover(AppModule module);
+}

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Mon Oct  1 12:14:29 2012
@@ -438,6 +438,10 @@ public class AnnotationDeployer implemen
                     removeModule();
                 }
             }
+            final AdditionalBeanDiscoverer discoverer = SystemInstance.get().getComponent(AdditionalBeanDiscoverer.class);
+            if (discoverer != null) {
+                appModule = discoverer.discover(appModule);
+            }
             return appModule;
         }
 

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/RemoteServer.java Mon Oct  1 12:14:29 2012
@@ -414,6 +414,7 @@ public class RemoteServer {
     }
 
     public void stop() {
+        Thread processKiller = null;
         if (!serverHasAlreadyBeenStarted) {
             try {
                 if (verbose) {
@@ -434,11 +435,21 @@ public class RemoteServer {
                 }
 
                 if (server != null) {
+                    processKiller = new ProcessKillerThread(server);
+                    processKiller.start();
                     server.waitFor();
+                    processKiller.interrupt();
                     server = null;
                 }
             } catch (Exception e) {
-                e.printStackTrace();
+                e.printStackTrace(System.err);
+                if (processKiller != null) {
+                    try {
+                        processKiller.join();
+                    } catch (InterruptedException e1) {
+                        processKiller.interrupt();
+                    }
+                }
             }
         }
     }
@@ -479,4 +490,31 @@ public class RemoteServer {
 
         return true;
     }
+
+    public static class ProcessKillerThread extends Thread {
+        private final Process process;
+
+        public ProcessKillerThread(final Process server) {
+            process = server;
+        }
+
+        @Override
+        public void run() {
+            try {
+                Thread.sleep(5000); // TODO: configure it
+                process.exitValue();
+            } catch (IllegalThreadStateException itse) {
+                // not yet terminated, kill
+                System.err.println("Killing process " + process + " because after 5mn it is still running");
+                process.destroy();
+                try {
+                    process.waitFor();
+                } catch (InterruptedException e) {
+                    // no-op
+                }
+            } catch (InterruptedException e) {
+                // no-op
+            }
+        }
+    }
 }

Modified: openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java (original)
+++ openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java Mon Oct  1 12:14:29 2012
@@ -409,9 +409,18 @@ public class TomcatWebAppBuilder impleme
                     standardContext.setDocBase(webApp.path);
                 }
                 if (standardContext.getDocBase() != null && standardContext.getDocBase().endsWith(".war")) {
+                    DeploymentLoader.unpack(new File(standardContext.getDocBase()));
+                    if (standardContext.getPath().endsWith(".war")) {
+                        standardContext.setPath(removeFirstSlashAndWar("/" + standardContext.getPath()));
+                        webApp.contextRoot = standardContext.getPath();
+                    }
                     standardContext.setDocBase(standardContext.getDocBase().substring(0, standardContext.getDocBase().length() - 4));
                 }
 
+                if (getContextInfo(webApp.host, webApp.contextRoot) != null) { // possible because of the previous renaming
+                    continue;
+                }
+
                 // add classloader which is an URLClassLoader created by openejb
                 // {@see Assembler}
                 //

Modified: openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/deployment/TomcatWebappDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/deployment/TomcatWebappDeployer.java?rev=1392301&r1=1392300&r2=1392301&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/deployment/TomcatWebappDeployer.java (original)
+++ openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/deployment/TomcatWebappDeployer.java Mon Oct  1 12:14:29 2012
@@ -17,6 +17,7 @@
  */
 package org.apache.tomee.catalina.deployment;
 
+import org.apache.openejb.OpenEJBRuntimeException;
 import org.apache.openejb.assembler.WebAppDeployer;
 import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.WebAppBuilder;
@@ -34,7 +35,7 @@ public class TomcatWebappDeployer implem
         try {
             tomcatWebAppBuilder.deployWebApps(fakeInfo(file, context), null);
         } catch (Exception e) {
-            throw new TomEERuntimeException(e);
+            throw new OpenEJBRuntimeException(e);
         }
         return tomcatWebAppBuilder.standaAloneWebAppInfo(file.getAbsolutePath());
     }