Author: rmannibucau
Date: Thu Jan 10 23:51:29 2013
New Revision: 1431736

URL: http://svn.apache.org/viewvc?rev=1431736&view=rev
Log:
OPENEJB-1987 ability to inject basic cdi injections with startup deployment + 
ability to specify a list in a single package as value

Added:
    
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/archive/
    
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/archive/SimpleArchive.java
    
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/archive/SimpleArchive2.java
Removed:
    
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/EmptyArchive.java
Modified:
    
openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianUtil.java
    
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBInjectionEnricher.java
    
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/StartDeploymentTest.java
    
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/resources/arquillian.xml

Modified: 
openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianUtil.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianUtil.java?rev=1431736&r1=1431735&r2=1431736&view=diff
==============================================================================
--- 
openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianUtil.java
 (original)
+++ 
openejb/trunk/openejb/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianUtil.java
 Thu Jan 10 23:51:29 2013
@@ -54,31 +54,48 @@ public final class ArquillianUtil {
             final String toSplit = 
properties.getProperty(PREDEPLOYING_KEY).trim();
             final ClassLoader loader = 
Thread.currentThread().getContextClassLoader();
             for (String name : toSplit.split(",")) {
-                try {
-                    final Class<?> clazz = loader.loadClass(name);
-                    for (Method m : clazz.getMethods()) {
-                        final int modifiers = m.getModifiers();
-                        if (Object.class.equals(m.getDeclaringClass()) || 
!Archive.class.isAssignableFrom(m.getReturnType())
-                                || !Modifier.isStatic(modifiers) || 
!Modifier.isPublic(modifiers)) {
-                            continue;
-                        }
-
-                        for (Annotation a : m.getAnnotations()) {
-                            if 
("org.jboss.arquillian.container.test.api.Deployment".equals(a.annotationType().getName()))
 {
-                                final Archive<?> archive = (Archive<?>) 
m.invoke(null);
-                                list.add(archive);
-                                break;
-                            }
+                int bracket = name.indexOf(".[");
+                if (bracket >= 0) {
+                    int end = name.indexOf("]");
+                    if (end > bracket) {
+                        final String pkg = name.substring(0, bracket + 1);
+                        final String classes = name.substring(bracket + 2, 
end);
+                        for (String n : classes.split("\\|")) {
+                            addClass(list, loader, pkg + n);
                         }
+                        continue;
                     }
-                } catch (Exception e) {
-                    throw new OpenEJBRuntimeException(e);
                 }
+                addClass(list, loader, name);
             }
         }
         return list;
     }
 
+    private static void addClass(final Collection<Archive<?>> list, final 
ClassLoader loader, final String classname) {
+        final String name = classname.trim();
+        try {
+            final Class<?> clazz = loader.loadClass(name);
+            for (Method m : clazz.getMethods()) {
+                final int modifiers = m.getModifiers();
+                if (Object.class.equals(m.getDeclaringClass()) || 
!Archive.class.isAssignableFrom(m.getReturnType())
+                        || !Modifier.isStatic(modifiers) || 
!Modifier.isPublic(modifiers)) {
+                    continue;
+                }
+
+                for (Annotation a : m.getAnnotations()) {
+                    if 
("org.jboss.arquillian.container.test.api.Deployment".equals(a.annotationType().getName()))
 {
+                        final Archive<?> archive = (Archive<?>) m.invoke(null);
+                        list.add(archive);
+                        break;
+                    }
+                }
+            }
+        } catch (Exception e) {
+            throw new OpenEJBRuntimeException(e);
+        }
+    }
+
     public static void undeploy(DeployableContainer<?> container, final 
Collection<Archive<?>> containerArchives) {
         if (containerArchives != null) {
             for (Archive<?> a  : containerArchives) {

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=1431736&r1=1431735&r2=1431736&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
 Thu Jan 10 23:51:29 2013
@@ -18,11 +18,21 @@ package org.apache.openejb.arquillian.op
 
 import org.apache.openejb.AppContext;
 import org.apache.openejb.arquillian.common.enrichment.OpenEJBEnricher;
+import org.apache.openejb.arquillian.common.mockito.MockitoEnricher;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.apache.webbeans.inject.AbstractInjectable;
+import org.apache.webbeans.inject.OWBInjector;
 import org.jboss.arquillian.core.api.Instance;
 import org.jboss.arquillian.core.api.annotation.Inject;
 import org.jboss.arquillian.test.spi.TestEnricher;
 
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.InjectionTarget;
 import java.lang.reflect.Method;
+import java.util.List;
 
 public class OpenEJBInjectionEnricher implements TestEnricher {
     @Inject
@@ -30,7 +40,32 @@ public class OpenEJBInjectionEnricher im
 
     @Override
     public void enrich(final Object testInstance) {
-        OpenEJBEnricher.enrich(testInstance, appContext.get());
+        final AppContext context = appContext.get();
+        if (context != null) {
+            OpenEJBEnricher.enrich(testInstance, context);
+        } else { // try to enrich with all for deployment at startup feature - 
only once context can be used in a class
+            new MockitoEnricher().enrich(testInstance);
+
+            final List<AppContext> appContexts = 
SystemInstance.get().getComponent(ContainerSystem.class).getAppContexts();
+            final Class<?> clazz = testInstance.getClass();
+            for (final AppContext appContext : appContexts) {
+                try {
+                    final BeanManager bm = 
appContext.getWebBeansContext().getBeanManagerImpl();
+                    final AnnotatedType<?> at = bm.createAnnotatedType(clazz);
+                    final InjectionTarget<Object> it = 
(InjectionTarget<Object>) bm.createInjectionTarget(at);
+                    final CreationalContext<Object> cc = 
bm.createCreationalContext(null);
+                    
AbstractInjectable.instanceUnderInjection.set(testInstance);
+                    try {
+                        OWBInjector.inject(bm, testInstance, cc);
+                    } finally {
+                        AbstractInjectable.instanceUnderInjection.remove();
+                    }
+                    cc.release();
+                } catch (Exception e) {
+                    // no-op
+                }
+            }
+        }
     }
 
     @Override

Modified: 
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/StartDeploymentTest.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/StartDeploymentTest.java?rev=1431736&r1=1431735&r2=1431736&view=diff
==============================================================================
--- 
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/StartDeploymentTest.java
 (original)
+++ 
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/StartDeploymentTest.java
 Thu Jan 10 23:51:29 2013
@@ -16,16 +16,38 @@
  */
 package org.apache.openejb.arquillian.openejb;
 
+import org.apache.openejb.arquillian.openejb.archive.SimpleArchive;
+import org.apache.openejb.arquillian.openejb.archive.SimpleArchive2;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
 import org.jboss.arquillian.junit.Arquillian;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import javax.inject.Inject;
+
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 @RunWith(Arquillian.class)
 public class StartDeploymentTest {
+    @Inject
+    private SimpleArchive2.AnotherSingleton bean;
+
+    @Test
+    public void deployment() {
+        final ContainerSystem containerSystem = 
SystemInstance.get().getComponent(ContainerSystem.class);
+        assertNotNull(containerSystem.getAppContext("start"));
+        assertNotNull(containerSystem.getAppContext("start2"));
+    }
+
     @Test
     public void checkItIsStarted() {
-        assertTrue(EmptyArchive.OkFilter.ok);
+        assertTrue(SimpleArchive.ASingleton.ok);
+    }
+
+    @Test
+    public void injections() {
+        assertNotNull(bean);
     }
 }

Added: 
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/archive/SimpleArchive.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/archive/SimpleArchive.java?rev=1431736&view=auto
==============================================================================
--- 
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/archive/SimpleArchive.java
 (added)
+++ 
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/archive/SimpleArchive.java
 Thu Jan 10 23:51:29 2013
@@ -0,0 +1,50 @@
+/**
+ * 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.openejb.archive;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+
+import javax.annotation.PostConstruct;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+
+public final class SimpleArchive {
+    private SimpleArchive() {
+        // no-op
+    }
+
+    @Deployment
+    public static WebArchive war() {
+        return ShrinkWrap.create(WebArchive.class, "start.war")
+                .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
+                .addClass(ASingleton.class);
+    }
+
+    @Startup
+    @Singleton
+    public static class ASingleton {
+        public static boolean ok = false;
+
+        @PostConstruct
+        public void init() {
+            ok = true;
+        }
+    }
+}

Added: 
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/archive/SimpleArchive2.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/archive/SimpleArchive2.java?rev=1431736&view=auto
==============================================================================
--- 
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/archive/SimpleArchive2.java
 (added)
+++ 
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/java/org/apache/openejb/arquillian/openejb/archive/SimpleArchive2.java
 Thu Jan 10 23:51:29 2013
@@ -0,0 +1,40 @@
+/**
+ * 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.openejb.archive;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.EmptyAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+
+import javax.ejb.Singleton;
+
+public final class SimpleArchive2 {
+    private SimpleArchive2() {
+        // no-op
+    }
+
+    @Deployment
+    public static WebArchive war() {
+        return ShrinkWrap.create(WebArchive.class, "start2.war")
+                .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
+                .addClass(AnotherSingleton.class);
+    }
+
+    @Singleton
+    public static class AnotherSingleton {}
+}

Modified: 
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/resources/arquillian.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/resources/arquillian.xml?rev=1431736&r1=1431735&r2=1431736&view=diff
==============================================================================
--- 
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/resources/arquillian.xml
 (original)
+++ 
openejb/trunk/openejb/arquillian/arquillian-openejb-embedded-4/src/test/resources/arquillian.xml
 Thu Jan 10 23:51:29 2013
@@ -30,7 +30,7 @@
         java\:global/db.JdbcUrl = jdbc:hsqldb:mem:global
 
         # to check startup deployment
-        openejb.arquillian.predeploy-archives = 
org.apache.openejb.arquillian.openejb.EmptyArchive
+        openejb.arquillian.predeploy-archives = 
org.apache.openejb.arquillian.openejb.archive.[SimpleArchive|SimpleArchive2]
       </property>
     </configuration>
   </container>


Reply via email to