Author: rmannibucau
Date: Wed Oct 8 15:47:12 2014
New Revision: 1630150
URL: http://svn.apache.org/r1630150
Log:
TOMEE-1389 better CDI integration for app composer and tets enrichment
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java?rev=1630150&r1=1630149&r2=1630150&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
Wed Oct 8 15:47:12 2014
@@ -102,7 +102,7 @@ public class CdiScanner implements Scann
for (final EjbJarInfo ejbJar : appInfo.ejbJars) {
final BeansInfo beans = ejbJar.beans;
- if (beans == null) {
+ if (beans == null ||
"false".equalsIgnoreCase(ejbJar.properties.getProperty("openejb.cdi.activated")))
{
continue;
}
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java?rev=1630150&r1=1630149&r2=1630150&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
Wed Oct 8 15:47:12 2014
@@ -45,6 +45,7 @@ import org.apache.openejb.config.sys.Ope
import org.apache.openejb.core.LocalInitialContextFactory;
import org.apache.openejb.core.Operation;
import org.apache.openejb.core.ThreadContext;
+import org.apache.openejb.core.WebContext;
import org.apache.openejb.core.ivm.naming.InitContextFactory;
import org.apache.openejb.injection.FallbackPropertyInjector;
import org.apache.openejb.jee.Application;
@@ -334,10 +335,11 @@ public final class ApplicationComposers
ejbDeployment.setDeploymentId(testClass.getName());
final EjbModule ejbModule = new EjbModule(ejbJar, openejbJar);
+ ejbModule.getProperties().setProperty("openejb.cdi.activated",
"false");
final FinderFactory.OpenEJBAnnotationFinder finder = new
FinderFactory.OpenEJBAnnotationFinder(new ClassesArchive(ancestors(testClass)));
ejbModule.setFinder(finder);
if (finder.findMetaAnnotatedFields(Inject.class).size()
- + finder.findMetaAnnotatedMethods(Inject.class).size() >
0) { // activate cdi to avoid WARNINGs
+ + finder.findMetaAnnotatedMethods(Inject.class).size() >
0) { // "activate" cdi to avoid WARNINGs
ejbModule.setBeans(new Beans());
}
appModule.getEjbModules().add(ejbModule);
@@ -759,22 +761,7 @@ public final class ApplicationComposers
final BeanContext context =
containerSystem.getBeanContext(testClass.getName());
- final ThreadContext callContext = new ThreadContext(context, null,
Operation.INJECTION);
- final ThreadContext oldContext = ThreadContext.enter(callContext);
- try {
- final InjectionProcessor processor = new
InjectionProcessor(inputTestInstance, context.getInjections(),
context.getJndiContext());
-
- processor.createInstance();
- try {
- OWBInjector.inject(appContext.getBeanManager(),
inputTestInstance, null);
- } catch (final Throwable t) {
- // TODO handle this differently
- // this is temporary till the injector can be rewritten
- t.printStackTrace();
- }
- } finally {
- ThreadContext.exit(oldContext);
- }
+ enrich(inputTestInstance, context);
System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
InitContextFactory.class.getName());
@@ -805,6 +792,39 @@ public final class ApplicationComposers
testClassFinders.put(this, testClassFinder);
}
+ private void enrich(final Object inputTestInstance, final BeanContext
context) throws org.apache.openejb.OpenEJBException {
+ final ThreadContext callContext = new ThreadContext(context, null,
Operation.INJECTION);
+ final ThreadContext oldContext = ThreadContext.enter(callContext);
+ try {
+ final InjectionProcessor processor = new
InjectionProcessor(inputTestInstance, context.getInjections(),
context.getJndiContext());
+ processor.createInstance();
+
+ Throwable error = null;
+ try {
+ OWBInjector.inject(appContext.getBeanManager(),
inputTestInstance, null);
+ } catch (final Throwable t) {
+ error = t;
+ }
+ for (final WebContext web : appContext.getWebContexts()) {
+ try {
+
OWBInjector.inject(web.getWebBeansContext().getBeanManagerImpl(),
inputTestInstance, null);
+ // hourra, we enriched correctly the test then cleanup
error state and quit
+ error = null;
+ break;
+ } catch (final Throwable t) {
+ if (error == null) {
+ error = t;
+ } // else keep original one
+ }
+ }
+ if (error != null) {
+ error.printStackTrace();
+ }
+ } finally {
+ ThreadContext.exit(oldContext);
+ }
+ }
+
private Collection<File> findFiles(final Jars jarsAnnotation) {
if (jarsAnnotation == null) {
return null;