From 97ddfea58e88d8aa03dfb71b90f58299fe918099 Mon Sep 17 00:00:00 2001 From: rmannibucau Date: Wed, 19 Oct 2016 21:40:01 +0200 Subject: [PATCH 1/2] ensuring CDI Bean are always the CDI context ones --- .../java/org/apache/cxf/cdi/CXFCdiServlet.java | 2 +- .../cxf/cdi/JAXRSCdiResourceExtension.java | 17 ++++++----------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/integration/cdi/src/main/java/org/apache/cxf/cdi/CXFCdiServlet.java b/integration/cdi/src/main/java/org/apache/cxf/cdi/CXFCdiServlet.java index 389f201a1c1..7a090e5e856 100644 --- a/integration/cdi/src/main/java/org/apache/cxf/cdi/CXFCdiServlet.java +++ b/integration/cdi/src/main/java/org/apache/cxf/cdi/CXFCdiServlet.java @@ -51,7 +51,7 @@ protected void loadBus(ServletConfig servletConfig) { final Set< Bean< ? > > candidates = beanManager.getBeans(CdiBusBean.CXF); if (!candidates.isEmpty()) { - final Bean< ? > candidate = candidates.iterator().next(); + final Bean< ? > candidate = beanManager.resolve(candidates); bus = (Bus)beanManager.getReference(candidate, Bus.class, beanManager.createCreationalContext(candidate)); diff --git a/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java b/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java index bb397c2afc1..d7325955cf7 100644 --- a/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java +++ b/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java @@ -54,7 +54,7 @@ * Apache CXF portable CDI extension to support initialization of JAX-RS resources. */ public class JAXRSCdiResourceExtension implements Extension { - private Bean< ? > busBean; + private boolean hasBus; private Bus bus; private final List< Bean< ? > > applicationBeans = new ArrayList< Bean< ? > >(); @@ -74,16 +74,13 @@ public void collect(@Observes final ProcessBean< T > event) { featureBeans.add((Bean< ? extends Feature >)event.getBean()); } else if (CdiBusBean.CXF.equals(event.getBean().getName()) && Bus.class.isAssignableFrom(event.getBean().getBeanClass())) { - busBean = event.getBean(); + hasBus = true; } } public void load(@Observes final AfterDeploymentValidation event, final BeanManager beanManager) { - bus = (Bus)beanManager.getReference( - busBean, - busBean.getBeanClass(), - beanManager.createCreationalContext(busBean) - ); + // no need of creational context, it only works for app scoped instances anyway + bus = (Bus)beanManager.getReference(beanManager.resolve(beanManager.getBeans(CdiBusBean.CXF)), Bus.class, null); for (final Bean< ? > application: applicationBeans) { final Application instance = (Application)beanManager.getReference( @@ -110,15 +107,13 @@ public void load(@Observes final AfterDeploymentValidation event, final BeanMana } public void injectBus(@Observes final AfterBeanDiscovery event, final BeanManager beanManager) { - if (busBean == null) { + if (!hasBus) { final AnnotatedType< ExtensionManagerBus > busAnnotatedType = beanManager.createAnnotatedType(ExtensionManagerBus.class); final InjectionTarget busInjectionTarget = beanManager.createInjectionTarget(busAnnotatedType); - - busBean = new CdiBusBean(busInjectionTarget); - event.addBean(busBean); + event.addBean(new CdiBusBean(busInjectionTarget)); } } From c23696e2a3552a12da0f0a85837e43fff8f5451b Mon Sep 17 00:00:00 2001 From: rmannibucau Date: Thu, 20 Oct 2016 08:23:17 +0200 Subject: [PATCH 2/2] dont use a null creational context --- .../java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java b/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java index d7325955cf7..0b1d926cbb5 100644 --- a/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java +++ b/integration/cdi/src/main/java/org/apache/cxf/cdi/JAXRSCdiResourceExtension.java @@ -80,7 +80,10 @@ public void collect(@Observes final ProcessBean< T > event) { public void load(@Observes final AfterDeploymentValidation event, final BeanManager beanManager) { // no need of creational context, it only works for app scoped instances anyway - bus = (Bus)beanManager.getReference(beanManager.resolve(beanManager.getBeans(CdiBusBean.CXF)), Bus.class, null); + final Bean busBean = beanManager.resolve(beanManager.getBeans(CdiBusBean.CXF)); + bus = (Bus)beanManager.getReference( + busBean, Bus.class, + beanManager.createCreationalContext(busBean)); for (final Bean< ? > application: applicationBeans) { final Application instance = (Application)beanManager.getReference(