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>