NPE when skipping cdi for ears

Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/e60f9234
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/e60f9234
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/e60f9234

Branch: refs/heads/master
Commit: e60f92340bdb5bef2d1c3c71bc9c4983f97e86a3
Parents: e677d4d
Author: Romain Manni-Bucau <[email protected]>
Authored: Tue Jun 16 18:17:38 2015 +0200
Committer: Romain Manni-Bucau <[email protected]>
Committed: Tue Jun 16 18:17:38 2015 +0200

----------------------------------------------------------------------
 .../java/org/apache/openejb/cdi/CdiPlugin.java  | 10 +++++-
 .../openejb/cdi/WebAppInjectionResolver.java    |  2 +-
 .../apache/openejb/cdi/WebappBeanManager.java   | 35 ++++++++++++++------
 3 files changed, 35 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/e60f9234/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
----------------------------------------------------------------------
diff --git 
a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java 
b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
index 440e25b..db39ccb 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
@@ -103,10 +103,18 @@ public class CdiPlugin extends AbstractOwbPlugin 
implements OpenWebBeansJavaEEPl
 
     public void setWebBeansContext(final WebBeansContext webBeansContext) {
         this.webBeansContext = webBeansContext;
+        if (webBeansContext == null) {
+            return;
+        }
         if (!WebappWebBeansContext.class.isInstance(webBeansContext)) {
             cacheProxies = new ConcurrentHashMap<Contextual<?>, Object>();
         } else { // share cache of proxies between the whole app otherwise 
hard to share an EJB between a webapp and the lib part of the app
-            cacheProxies = 
CdiPlugin.class.cast(WebappWebBeansContext.class.cast(webBeansContext).getParent().getPluginLoader().getEjbPlugin()).cacheProxies;
+            final WebBeansContext parent = 
WebappWebBeansContext.class.cast(webBeansContext).getParent();
+            if (parent != null) {
+                cacheProxies = 
CdiPlugin.class.cast(parent.getPluginLoader().getEjbPlugin()).cacheProxies;
+            } else {
+                cacheProxies = new ConcurrentHashMap<Contextual<?>, Object>();
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/e60f9234/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebAppInjectionResolver.java
----------------------------------------------------------------------
diff --git 
a/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebAppInjectionResolver.java
 
b/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebAppInjectionResolver.java
index 909ee6e..98c5a11 100644
--- 
a/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebAppInjectionResolver.java
+++ 
b/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebAppInjectionResolver.java
@@ -35,7 +35,7 @@ public class WebAppInjectionResolver extends 
InjectionResolver {
     @Override
     public Set<Bean<?>> implResolveByType(final boolean delegate, final Type 
injectionPointType, final Class<?> injectinPointClass, final Annotation... 
qualifiers) {
         final Set<Bean<?>> set = super.implResolveByType(delegate, 
injectionPointType, injectinPointClass, qualifiers);
-        if (set.isEmpty()) {
+        if (set.isEmpty() && context.getParent() != null) {
             return 
context.getParent().getBeanManagerImpl().getInjectionResolver().implResolveByType(delegate,
 injectionPointType, injectinPointClass, qualifiers);
         }
         return set;

http://git-wip-us.apache.org/repos/asf/tomee/blob/e60f9234/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
----------------------------------------------------------------------
diff --git 
a/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
 
b/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
index c6a3b52..eacfc5d 100644
--- 
a/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
+++ 
b/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
@@ -21,6 +21,7 @@ import org.apache.openejb.util.reflection.Reflections;
 import org.apache.webbeans.component.BuiltInOwbBean;
 import org.apache.webbeans.component.ExtensionBean;
 import org.apache.webbeans.component.OwbBean;
+import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.context.creational.CreationalContextImpl;
 import org.apache.webbeans.event.EventMetadataImpl;
@@ -68,7 +69,10 @@ public class WebappBeanManager extends BeanManagerImpl {
     public void fireEvent(final Object event, final EventMetadataImpl 
metadata, final boolean isLifecycleEvent) {
         getNotificationManager().fireEvent(event, metadata, isLifecycleEvent);
         if (isEvent(event)) {
-            getParentBm().getNotificationManager().fireEvent(event, metadata, 
isLifecycleEvent);
+            final BeanManagerImpl parentBm = getParentBm();
+            if (parentBm != null) {
+                parentBm.getNotificationManager().fireEvent(event, metadata, 
isLifecycleEvent);
+            }
         }
     }
 
@@ -90,7 +94,10 @@ public class WebappBeanManager extends BeanManagerImpl {
         set.addAll(getNotificationManager().resolveObservers(event, metadata, 
false));
 
         if (isEvent(event)) {
-            
set.addAll(getParentBm().getNotificationManager().resolveObservers(event, 
metadata, false));
+            final BeanManagerImpl parentBm = getParentBm();
+            if (parentBm != null) {
+                
set.addAll(parentBm.getNotificationManager().resolveObservers(event, metadata, 
false));
+            }
         } // else nothing since extensions are loaded by classloader so we 
already have it
 
         return set;
@@ -103,18 +110,22 @@ public class WebappBeanManager extends BeanManagerImpl {
             return null;
         }
 
+        final BeanManagerImpl parentBm = getParentBm();
         final Boolean existing = USE_PARENT_BM.get();
         if (existing != null && existing) { // shortcut the whole logic to 
keep the threadlocal set up correctly
-            return getParentBm().getInjectableReference(injectionPoint, ctx);
+            if (parentBm == null) {
+                return null;
+            }
+            return parentBm.getInjectableReference(injectionPoint, ctx);
         }
 
         // we can do it cause there is caching but we shouldn't - easy way to 
overide OWB actually
         final Bean<Object> injectedBean = 
(Bean<Object>)getInjectionResolver().getInjectionPointBean(injectionPoint);
         try {
-            if (injectedBean != null && injectedBean == 
getParentBm().getInjectionResolver().getInjectionPointBean(injectionPoint)) {
+            if (parentBm != null && injectedBean != null && injectedBean == 
parentBm.getInjectionResolver().getInjectionPointBean(injectionPoint)) {
                 USE_PARENT_BM.set(true);
                 try {
-                    return 
getParentBm().getInjectableReference(injectionPoint, ctx);
+                    return parentBm.getInjectableReference(injectionPoint, 
ctx);
                 } finally {
                     USE_PARENT_BM.remove();
                 }
@@ -268,7 +279,8 @@ public class WebappBeanManager extends BeanManagerImpl {
     }
 
     public BeanManagerImpl getParentBm() {
-        return webappCtx.getParent().getBeanManagerImpl();
+        final WebBeansContext parent = webappCtx.getParent();
+        return parent != null ? parent.getBeanManagerImpl() : null;
     }
 
     @Override
@@ -304,7 +316,7 @@ public class WebappBeanManager extends BeanManagerImpl {
     @Override
     public Bean<?> getPassivationCapableBean(final String id) {
         final Bean<?> bean = super.getPassivationCapableBean(id);
-        if (bean == null) {
+        if (bean == null && getParentBm() != null) {
             return getParentBm().getPassivationCapableBean(id);
         }
         return bean;
@@ -318,9 +330,12 @@ public class WebappBeanManager extends BeanManagerImpl {
 
     private Set<Bean<?>> mergeBeans() {
         final Set<Bean<?>> allBeans = new CopyOnWriteArraySet<>(); // override 
parent one with a "webapp" bean list
-        for (final Bean<?> bean : getParentBm().getBeans()) {
-            if (filter.accept(bean)) {
-                allBeans.add(bean);
+        final BeanManagerImpl parentBm = getParentBm();
+        if (parentBm != null) {
+            for (final Bean<?> bean : parentBm.getBeans()) {
+                if (filter.accept(bean)) {
+                    allBeans.add(bean);
+                }
             }
         }
         allBeans.addAll(super.getBeans());

Reply via email to