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 <rmannibu...@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 {