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 e3315a6 [OWB-1365] enforce to create interceptor stack if validation is skipped e3315a6 is described below commit e3315a66ce71bf6fdbdac82566c97dc2bb7951d4 Author: Romain Manni-Bucau <rmannibu...@gmail.com> AuthorDate: Mon Jan 4 08:03:59 2021 +0100 [OWB-1365] enforce to create interceptor stack if validation is skipped --- .../org/apache/webbeans/config/BeansDeployer.java | 45 ++++++++++++++++++++++ .../webbeans/test/config/BeansDeployerTest.java | 25 +++++++++++- 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java b/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java index 5eaf2c3..576335f 100644 --- a/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java +++ b/webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java @@ -331,6 +331,51 @@ public class BeansDeployer validateNames(); } + else + { + webBeansContext.getBeanManagerImpl().getBeans().forEach(bean -> { + if (BuiltInOwbBean.class.isInstance(bean)) + { + Class<?> proxyable = BuiltInOwbBean.class.cast(bean).proxyableType(); + if (proxyable != null) + { + AbstractProducer producer = AbstractProducer.class.cast(OwbBean.class.cast(bean).getProducer()); + AnnotatedType<?> annotatedType = webBeansContext.getAnnotatedElementFactory() + .newAnnotatedType(proxyable); + producer.defineInterceptorStack(bean, annotatedType, webBeansContext); + } + } + else if (bean instanceof OwbBean && + !(bean instanceof Interceptor) && + !(bean instanceof Decorator)) + { + AbstractProducer producer = null; + OwbBean<?> owbBean = (OwbBean<?>) bean; + if (ManagedBean.class.isInstance(bean)) // in this case don't use producer which can be wrapped + { + producer = ManagedBean.class.cast(bean).getOriginalInjectionTarget(); + } + if (producer == null && owbBean.getProducer() instanceof AbstractProducer) + { + producer = (AbstractProducer) owbBean.getProducer(); + } + if (producer != null) + { + AnnotatedType<?> annotatedType; + if (owbBean instanceof InjectionTargetBean) + { + annotatedType = ((InjectionTargetBean<?>) owbBean).getAnnotatedType(); + } + else + { + annotatedType = webBeansContext.getAnnotatedElementFactory() + .newAnnotatedType(owbBean.getReturnType()); + } + producer.defineInterceptorStack(owbBean, annotatedType, webBeansContext); + } + } + }); + } if (webBeansContext.getNotificationManager().getObserverMethods().stream() .anyMatch(ObserverMethod::isAsync)) diff --git a/webbeans-impl/src/test/java/org/apache/webbeans/test/config/BeansDeployerTest.java b/webbeans-impl/src/test/java/org/apache/webbeans/test/config/BeansDeployerTest.java index eae8d86..f0b6b49 100644 --- a/webbeans-impl/src/test/java/org/apache/webbeans/test/config/BeansDeployerTest.java +++ b/webbeans-impl/src/test/java/org/apache/webbeans/test/config/BeansDeployerTest.java @@ -18,6 +18,7 @@ */ package org.apache.webbeans.test.config; +import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static java.util.logging.Level.FINE; import static org.junit.Assert.assertEquals; @@ -32,6 +33,7 @@ import java.util.logging.LogRecord; import java.util.logging.Logger; import javax.annotation.Priority; +import javax.enterprise.context.ApplicationScoped; import javax.interceptor.AroundInvoke; import javax.interceptor.Interceptor; import javax.interceptor.InvocationContext; @@ -49,6 +51,17 @@ public class BeansDeployerTest extends AbstractUnitTest public final TestName testName = new TestName(); @Test + public void skipValidations() + { + addConfiguration("org.apache.webbeans.spi.deployer.skipValidations", "true"); + startContainer(asList(TransactionalInterceptor.class, MyService.class), + singletonList(Thread.currentThread().getContextClassLoader() + .getResource(getClass().getName().replace('.', '/') + "/interceptorLogging/beans.xml") + .toExternalForm())); + assertEquals("tx", getInstance(MyService.class).tx()); + } + + @Test public void interceptorLogging() { final Logger logger = Logger.getLogger(BeansDeployer.class.getName()); @@ -106,6 +119,16 @@ public class BeansDeployerTest extends AbstractUnitTest " is already defined with priority 1000", record.getMessage()); } + @ApplicationScoped + public static class MyService + { + @Transactional + public String tx() + { + return "service"; + } + } + @Interceptor @Transactional @Priority(Interceptor.Priority.LIBRARY_BEFORE) @@ -114,7 +137,7 @@ public class BeansDeployerTest extends AbstractUnitTest @AroundInvoke public Object caller(final InvocationContext context) throws Exception { - return null; + return "tx"; } } }