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
{