You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rm...@apache.org on 2020/03/20 10:17:19 UTC

[openwebbeans] branch master updated: OWB-1320 ensure CDI.current.* does not trigger an earger OWB init and fail instead when invalid

This is an automated email from the ASF dual-hosted git repository.

rmannibucau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openwebbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 1f79dc5  OWB-1320 ensure CDI.current.* does not trigger an earger OWB init and fail instead when invalid
1f79dc5 is described below

commit 1f79dc5ee9fa3e9675620fd2291b63094b4933c9
Author: Romain Manni-Bucau <rm...@gmail.com>
AuthorDate: Fri Mar 20 11:17:13 2020 +0100

    OWB-1320 ensure CDI.current.* does not trigger an earger OWB init and fail instead when invalid
---
 .../main/java/org/apache/webbeans/config/WebBeansFinder.java  |  7 ++++++-
 .../src/main/java/org/apache/webbeans/container/OwbCDI.java   | 11 +++++++++++
 .../org/apache/webbeans/corespi/DefaultSingletonService.java  |  6 +++++-
 .../org/apache/webbeans/container/OwbCDIProviderTest.java     |  6 ++++++
 4 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansFinder.java b/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansFinder.java
index 1f9bcc9..2cf6c35 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansFinder.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/config/WebBeansFinder.java
@@ -54,7 +54,12 @@ public final class WebBeansFinder
 
     public static WebBeansContext getSingletonInstance()
     {
-        return singletonService.get(WebBeansUtil.getCurrentClassLoader());
+        return singletonService.get(getCurrentKey());
+    }
+
+    public static ClassLoader getCurrentKey()
+    {
+        return WebBeansUtil.getCurrentClassLoader();
     }
 
     public static void clearInstances(Object key)
diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/container/OwbCDI.java b/webbeans-impl/src/main/java/org/apache/webbeans/container/OwbCDI.java
index 749e33f..6882bc0 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/container/OwbCDI.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/container/OwbCDI.java
@@ -19,8 +19,11 @@
 package org.apache.webbeans.container;
 
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.config.WebBeansFinder;
 import org.apache.webbeans.context.creational.CreationalContextImpl;
+import org.apache.webbeans.corespi.DefaultSingletonService;
 import org.apache.webbeans.inject.instance.InstanceImpl;
+import org.apache.webbeans.spi.SingletonService;
 
 import javax.enterprise.inject.Instance;
 import javax.enterprise.inject.spi.BeanManager;
@@ -33,6 +36,14 @@ public class OwbCDI extends CDI<Object>
 {
     private WebBeansContext getWebBeansContext()
     {
+        // DON'T: return WebBeansContext.currentInstance();, it can trigger an implicit start
+        final SingletonService<WebBeansContext> singletonService = WebBeansFinder.getSingletonService();
+        if (DefaultSingletonService.class.isInstance(singletonService)
+                && !DefaultSingletonService.class.cast(singletonService).exists(WebBeansFinder.getCurrentKey()))
+        {
+            throw new IllegalStateException("No CDI container started");
+        }
+        // else let's default
         return WebBeansContext.currentInstance();
     }
 
diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/DefaultSingletonService.java b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/DefaultSingletonService.java
index 6fe337c..f788e89 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/DefaultSingletonService.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/DefaultSingletonService.java
@@ -35,7 +35,7 @@ public class DefaultSingletonService implements SingletonService<WebBeansContext
     
     /**
      * Gets singleton instance for deployment.
-     * @return signelton instance for this deployment
+     * @return singleton instance for this deployment
      */
     @Override
     public WebBeansContext get(Object key)
@@ -104,4 +104,8 @@ public class DefaultSingletonService implements SingletonService<WebBeansContext
         }
     }
 
+    public boolean exists(final Object key)
+    {
+        return ClassLoader.class.isInstance(key) && singletonMap.containsKey(key);
+    }
 }
diff --git a/webbeans-impl/src/test/java/org/apache/webbeans/container/OwbCDIProviderTest.java b/webbeans-impl/src/test/java/org/apache/webbeans/container/OwbCDIProviderTest.java
index 5bb261a..1dc4d13 100644
--- a/webbeans-impl/src/test/java/org/apache/webbeans/container/OwbCDIProviderTest.java
+++ b/webbeans-impl/src/test/java/org/apache/webbeans/container/OwbCDIProviderTest.java
@@ -74,6 +74,12 @@ public class OwbCDIProviderTest extends AbstractUnitTest
         assertNotNull(bean);
     }
 
+    @Test(expected = IllegalStateException.class)
+    public void noImplicitStart()
+    {
+        CDI.current().getBeanManager();
+    }
+
     @ApplicationScoped
     public static class ABean
     {