From ee81ca808137b740897137e9a369368f8c5e3a73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Richard=20Op=C3=A1lka?= Date: Thu, 15 Nov 2018 21:35:20 +0100 Subject: [PATCH] [WFLY-11381] Refactoring WeldInterceptorBindingsService to use non deprecated ServiceBuilder methods. --- .../WeldComponentIntegrationProcessor.java | 8 ++- .../ejb/WeldInterceptorBindingsService.java | 72 +++++++++++++------ 2 files changed, 54 insertions(+), 26 deletions(-) diff --git a/weld/subsystem/src/main/java/org/jboss/as/weld/deployment/processors/WeldComponentIntegrationProcessor.java b/weld/subsystem/src/main/java/org/jboss/as/weld/deployment/processors/WeldComponentIntegrationProcessor.java index 3d9ba8e7d046..05b0aaa7a0ae 100644 --- a/weld/subsystem/src/main/java/org/jboss/as/weld/deployment/processors/WeldComponentIntegrationProcessor.java +++ b/weld/subsystem/src/main/java/org/jboss/as/weld/deployment/processors/WeldComponentIntegrationProcessor.java @@ -27,6 +27,7 @@ import java.util.HashSet; import java.util.ServiceLoader; import java.util.Set; +import java.util.function.Consumer; import java.util.function.Supplier; import javax.enterprise.inject.spi.InterceptionType; @@ -250,11 +251,12 @@ protected void run(Object instance) { } private static ServiceName addWeldInterceptorBindingService(final ServiceTarget target, final ComponentConfiguration configuration, final Class componentClass, final String beanName, final ServiceName weldServiceName, final ServiceName weldStartService, final String beanDeploymentArchiveId, final ComponentInterceptorSupport componentInterceptorSupport) { - final WeldInterceptorBindingsService weldInterceptorBindingsService = new WeldInterceptorBindingsService(beanDeploymentArchiveId, beanName, componentClass, componentInterceptorSupport); ServiceName bindingServiceName = configuration.getComponentDescription().getServiceName().append(WeldInterceptorBindingsService.SERVICE_NAME); - final ServiceBuilder sb = target.addService(bindingServiceName, weldInterceptorBindingsService); - sb.addDependency(weldServiceName, WeldBootstrapService.class, weldInterceptorBindingsService.getWeldContainer()); + final ServiceBuilder sb = target.addService(bindingServiceName); + final Consumer interceptorBindingsConsumer = sb.provides(bindingServiceName); + final Supplier weldContainerSupplier = sb.requires(weldServiceName); sb.requires(weldStartService); + sb.setInstance(new WeldInterceptorBindingsService(interceptorBindingsConsumer, weldContainerSupplier, beanDeploymentArchiveId, beanName, componentClass, componentInterceptorSupport)); sb.install(); return bindingServiceName; } diff --git a/weld/subsystem/src/main/java/org/jboss/as/weld/ejb/WeldInterceptorBindingsService.java b/weld/subsystem/src/main/java/org/jboss/as/weld/ejb/WeldInterceptorBindingsService.java index 84b1b387918d..3123c2c76869 100644 --- a/weld/subsystem/src/main/java/org/jboss/as/weld/ejb/WeldInterceptorBindingsService.java +++ b/weld/subsystem/src/main/java/org/jboss/as/weld/ejb/WeldInterceptorBindingsService.java @@ -1,13 +1,19 @@ package org.jboss.as.weld.ejb; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Supplier; + import org.jboss.as.weld.WeldBootstrapService; import org.jboss.as.weld.spi.ComponentInterceptorSupport; -import org.jboss.msc.service.Service; +import org.jboss.msc.Service; import org.jboss.msc.service.ServiceName; import org.jboss.msc.service.StartContext; import org.jboss.msc.service.StartException; import org.jboss.msc.service.StopContext; -import org.jboss.msc.value.InjectedValue; import org.jboss.weld.annotated.enhanced.EnhancedAnnotatedType; import org.jboss.weld.annotated.slim.SlimAnnotatedType; import org.jboss.weld.bean.interceptor.InterceptorBindingsAdapter; @@ -17,14 +23,18 @@ import org.jboss.weld.manager.BeanManagerImpl; import org.jboss.weld.resources.ClassTransformer; +import javax.enterprise.inject.spi.InterceptionType; +import javax.enterprise.inject.spi.Interceptor; + /** * @author Stuart Douglas * @author Jozef Hartinger + * @author Richard Opalka */ -public class WeldInterceptorBindingsService implements Service { +public class WeldInterceptorBindingsService implements Service { - private volatile InterceptorBindings interceptorBindings; - private final InjectedValue weldContainer = new InjectedValue(); + private final Consumer interceptorBindingsConsumer; + private final Supplier weldContainerSupplier; private final String beanArchiveId; private final String ejbName; private final Class componentClass; @@ -32,7 +42,12 @@ public class WeldInterceptorBindingsService implements Service componentClass, ComponentInterceptorSupport componentInterceptorSupport) { + public WeldInterceptorBindingsService(final Consumer interceptorBindingsConsumer, + final Supplier weldContainerSupplier, + final String beanArchiveId, final String ejbName, final Class componentClass, + final ComponentInterceptorSupport componentInterceptorSupport) { + this.interceptorBindingsConsumer = interceptorBindingsConsumer; + this.weldContainerSupplier = weldContainerSupplier; this.beanArchiveId = beanArchiveId; this.ejbName = ejbName; this.componentClass = componentClass; @@ -40,16 +55,22 @@ public WeldInterceptorBindingsService(String beanArchiveId, String ejbName, Clas } @Override - public void start(StartContext startContext) throws StartException { - BeanManagerImpl beanManager = this.weldContainer.getValue().getBeanManager(beanArchiveId); + public void start(final StartContext startContext) throws StartException { + BeanManagerImpl beanManager = weldContainerSupplier.get().getBeanManager(beanArchiveId); //this is not always called with the deployments TCCL set //which causes weld to blow up - interceptorBindings = getInterceptorBindings(this.ejbName, beanManager); + interceptorBindingsConsumer.accept(getInterceptorBindings(this.ejbName, beanManager)); } - protected InterceptorBindings getInterceptorBindings(String ejbName, final BeanManagerImpl manager) { + @Override + public void stop(final StopContext stopContext) { + interceptorBindingsConsumer.accept(null); + } + + private InterceptorBindings getInterceptorBindings(final String ejbName, final BeanManagerImpl manager) { + InterceptorBindings retVal = null; if (ejbName != null) { - return interceptorSupport.getInterceptorBindings(ejbName, manager); + retVal = interceptorSupport.getInterceptorBindings(ejbName, manager); } else { // This is a managed bean SlimAnnotatedType type = (SlimAnnotatedType) manager.createAnnotatedType(componentClass); @@ -59,24 +80,29 @@ protected InterceptorBindings getInterceptorBindings(String ejbName, final BeanM } InterceptionModel model = manager.getInterceptorModelRegistry().get(type); if (model != null) { - return new InterceptorBindingsAdapter(manager.getInterceptorModelRegistry().get(type)); + retVal = new InterceptorBindingsAdapter(manager.getInterceptorModelRegistry().get(type)); } } - return null; + return retVal != null ? retVal : NullInterceptorBindings.INSTANCE; } + private static final class NullInterceptorBindings implements InterceptorBindings { + private static final InterceptorBindings INSTANCE = new NullInterceptorBindings(); - @Override - public void stop(StopContext stopContext) { - this.interceptorBindings = null; - } + @Override + public Collection> getAllInterceptors() { + return Collections.emptyList(); + } - @Override - public InterceptorBindings getValue() throws IllegalStateException, IllegalArgumentException { - return interceptorBindings; - } + @Override + public List> getMethodInterceptors(final InterceptionType interceptionType, final Method method) { + return Collections.emptyList(); + } - public InjectedValue getWeldContainer() { - return weldContainer; + @Override + public List> getLifecycleInterceptors(final InterceptionType interceptionType) { + return Collections.emptyList(); + } } + }