Skip to content

Commit

Permalink
WELD-1909 Move more code into the EJB module
Browse files Browse the repository at this point in the history
  • Loading branch information
jharting committed Apr 13, 2015
1 parent cc462d0 commit b2ca4d6
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 27 deletions.
19 changes: 1 addition & 18 deletions impl/src/main/java/org/jboss/weld/bootstrap/BeanDeployer.java
Expand Up @@ -38,15 +38,10 @@
import org.jboss.weld.bean.AbstractBean;
import org.jboss.weld.bean.AbstractClassBean;
import org.jboss.weld.bean.RIBean;
import org.jboss.weld.bean.interceptor.InterceptorBindingsAdapter;
import org.jboss.weld.bootstrap.api.ServiceRegistry;
import org.jboss.weld.bootstrap.enablement.GlobalEnablementBuilder;
import org.jboss.weld.bootstrap.events.ProcessAnnotatedTypeImpl;
import org.jboss.weld.ejb.EjbDescriptors;
import org.jboss.weld.ejb.InternalEjbDescriptor;
import org.jboss.weld.ejb.spi.EjbServices;
import org.jboss.weld.injection.producer.InterceptionModelInitializer;
import org.jboss.weld.interceptor.spi.model.InterceptionModel;
import org.jboss.weld.logging.BootstrapLogger;
import org.jboss.weld.manager.BeanManagerImpl;
import org.jboss.weld.resources.spi.ClassFileServices;
Expand Down Expand Up @@ -321,19 +316,7 @@ public void doAfterBeanDiscovery(List<? extends Bean<?>> beanList) {
}

public void registerCdiInterceptorsForMessageDrivenBeans() {
EjbServices ejbServices = getManager().getServices().get(EjbServices.class);
for (InternalEjbDescriptor<?> descriptor : getEnvironment().getEjbDescriptors()) {
if (descriptor.isMessageDriven()) {
EnhancedAnnotatedType<?> type = classTransformer.getEnhancedAnnotatedType(descriptor.getBeanClass(), getManager().getId());
if (!getManager().getInterceptorModelRegistry().containsKey(type.slim())) {
InterceptionModelInitializer.of(getManager(), type, null).init();
}
InterceptionModel model = getManager().getInterceptorModelRegistry().get(type.slim());
if (model != null) {
ejbServices.registerInterceptors(descriptor, new InterceptorBindingsAdapter(model));
}
}
}
ejbSupport.registerCdiInterceptorsForMessageDrivenBeans(getEnvironment(), getManager());
}

public ResourceLoader getResourceLoader() {
Expand Down
Expand Up @@ -52,7 +52,6 @@
import org.jboss.weld.bootstrap.spi.Metadata;
import org.jboss.weld.config.WeldConfiguration;
import org.jboss.weld.ejb.EjbDescriptors;
import org.jboss.weld.ejb.spi.EjbServices;
import org.jboss.weld.injection.producer.InjectionTargetService;
import org.jboss.weld.interceptor.builder.InterceptorsApiAbstraction;
import org.jboss.weld.logging.BootstrapLogger;
Expand Down Expand Up @@ -109,13 +108,8 @@ public BeanDeployment(BeanDeploymentArchive beanDeploymentArchive, BeanManagerIm
services.add(AnnotationApiAbstraction.class, new AnnotationApiAbstraction(resourceLoader));
this.beanManager = BeanManagerImpl.newManager(deploymentManager, beanDeploymentArchive.getId(), services);
services.add(InjectionTargetService.class, new InjectionTargetService(beanManager));
if (beanManager.getServices().contains(EjbServices.class)) {
// Must populate EJB cache first, as we need it to detect whether a
// bean is an EJB!
ejbDescriptors.addAll(beanDeploymentArchive.getEjbs());
}

services.get(WeldModules.class).postBeanArchiveServiceRegistration(services, beanManager);
services.get(WeldModules.class).postBeanArchiveServiceRegistration(services, beanManager, beanDeploymentArchive);
services.addIfAbsent(EjbSupport.class, EjbSupport.NOOP_IMPLEMENTATION);

if (services.get(WeldConfiguration.class).getBooleanProperty(CONCURRENT_DEPLOYMENT) && services.contains(ExecutorServices.class)) {
Expand Down
12 changes: 12 additions & 0 deletions impl/src/main/java/org/jboss/weld/module/EjbSupport.java
Expand Up @@ -28,6 +28,7 @@
import org.jboss.weld.bootstrap.BeanDeployerEnvironment;
import org.jboss.weld.bootstrap.api.Service;
import org.jboss.weld.ejb.InternalEjbDescriptor;
import org.jboss.weld.ejb.spi.EjbServices;
import org.jboss.weld.injection.producer.BasicInjectionTarget;
import org.jboss.weld.manager.BeanManagerImpl;
import org.jboss.weld.util.collections.SetMultimap;
Expand Down Expand Up @@ -89,6 +90,13 @@ public interface EjbSupport extends Service {
*/
Class<? extends Annotation> getTimeoutAnnotation();

/**
* Initializes interception model for MDBs and propagates them to {@link EjbServices#registerInterceptors(org.jboss.weld.ejb.spi.EjbDescriptor, org.jboss.weld.ejb.spi.InterceptorBindings)}
* @param environment
* @param manager
*/
void registerCdiInterceptorsForMessageDrivenBeans(BeanDeployerEnvironment environment, BeanManagerImpl manager);

EjbSupport NOOP_IMPLEMENTATION = new EjbSupport() {

@Override
Expand Down Expand Up @@ -127,5 +135,9 @@ public void createNewSessionBeans(BeanDeployerEnvironment environment, BeanManag
public Class<? extends Annotation> getTimeoutAnnotation() {
return null;
}

@Override
public void registerCdiInterceptorsForMessageDrivenBeans(BeanDeployerEnvironment environment, BeanManagerImpl manager) {
}
};
}
6 changes: 6 additions & 0 deletions impl/src/main/java/org/jboss/weld/module/WeldModule.java
Expand Up @@ -126,6 +126,12 @@ interface PostBeanArchiveServiceRegistrationContext {
* @return bean manager
*/
BeanManagerImpl getBeanManager();

/**
* Returns the {@link BeanDeploymentArchive} the services are associated with
* @return the bean deployment archive
*/
BeanDeploymentArchive getBeanDeploymentArchive();
}

/**
Expand Down
7 changes: 6 additions & 1 deletion impl/src/main/java/org/jboss/weld/module/WeldModules.java
Expand Up @@ -109,7 +109,7 @@ public void addContext(ContextHolder<? extends Context> context) {
}
}

public void postBeanArchiveServiceRegistration(final ServiceRegistry services, final BeanManagerImpl manager) {
public void postBeanArchiveServiceRegistration(final ServiceRegistry services, final BeanManagerImpl manager, final BeanDeploymentArchive archive) {
final PostBeanArchiveServiceRegistrationContext ctx = new PostBeanArchiveServiceRegistrationContext() {

@Override
Expand All @@ -121,6 +121,11 @@ public ServiceRegistry getServices() {
public BeanManagerImpl getBeanManager() {
return manager;
}

@Override
public BeanDeploymentArchive getBeanDeploymentArchive() {
return archive;
}
};
for (WeldModule module : modules) {
module.postBeanArchiveServiceRegistration(ctx);
Expand Down
25 changes: 25 additions & 0 deletions modules/ejb/src/main/java/org/jboss/weld/ejb/EjbSupportImpl.java
Expand Up @@ -27,11 +27,15 @@
import org.jboss.weld.annotated.slim.SlimAnnotatedType;
import org.jboss.weld.annotated.slim.SlimAnnotatedTypeStore;
import org.jboss.weld.bean.SessionBean;
import org.jboss.weld.bean.interceptor.InterceptorBindingsAdapter;
import org.jboss.weld.bootstrap.BeanDeployerEnvironment;
import org.jboss.weld.ejb.spi.EjbServices;
import org.jboss.weld.injection.producer.AbstractInstantiator;
import org.jboss.weld.injection.producer.BasicInjectionTarget;
import org.jboss.weld.injection.producer.DefaultInstantiator;
import org.jboss.weld.injection.producer.InterceptionModelInitializer;
import org.jboss.weld.injection.producer.SubclassedComponentInstantiator;
import org.jboss.weld.interceptor.spi.model.InterceptionModel;
import org.jboss.weld.manager.BeanManagerImpl;
import org.jboss.weld.module.EjbSupport;
import org.jboss.weld.resources.ClassTransformer;
Expand All @@ -41,6 +45,12 @@

class EjbSupportImpl implements EjbSupport {

private final EjbServices ejbServices;

EjbSupportImpl(EjbServices ejbServices) {
this.ejbServices = ejbServices;
}

@Override
public void cleanup() {
}
Expand Down Expand Up @@ -124,4 +134,19 @@ private <T> SessionBean<T> createNewSessionBean(EnhancedAnnotatedType<?> type, I
public Class<? extends Annotation> getTimeoutAnnotation() {
return Timeout.class;
}

public void registerCdiInterceptorsForMessageDrivenBeans(BeanDeployerEnvironment environment, BeanManagerImpl manager) {
for (InternalEjbDescriptor<?> descriptor : environment.getEjbDescriptors()) {
if (descriptor.isMessageDriven()) {
EnhancedAnnotatedType<?> type = manager.getServices().getRequired(ClassTransformer.class).getEnhancedAnnotatedType(descriptor.getBeanClass(), manager.getId());
if (!manager.getInterceptorModelRegistry().containsKey(type.slim())) {
InterceptionModelInitializer.of(manager, type, null).init();
}
InterceptionModel model = manager.getInterceptorModelRegistry().get(type.slim());
if (model != null) {
ejbServices.registerInterceptors(descriptor, new InterceptorBindingsAdapter(model));
}
}
}
}
}
Expand Up @@ -20,6 +20,7 @@
import org.jboss.weld.context.ejb.EjbLiteral;
import org.jboss.weld.context.ejb.EjbRequestContext;
import org.jboss.weld.context.ejb.EjbRequestContextImpl;
import org.jboss.weld.ejb.spi.EjbServices;
import org.jboss.weld.injection.ResourceInjectionFactory;
import org.jboss.weld.module.EjbSupport;
import org.jboss.weld.module.WeldModule;
Expand Down Expand Up @@ -52,7 +53,13 @@ public void postContextRegistration(PostContextRegistrationContext ctx) {

@Override
public void postBeanArchiveServiceRegistration(PostBeanArchiveServiceRegistrationContext ctx) {
ctx.getServices().add(EjbSupport.class, new EjbSupportImpl());
final EjbServices ejbServices = ctx.getServices().get(EjbServices.class);
if (ejbServices != null) {
// Must populate EJB cache first, as we need it to detect whether a
// bean is an EJB!
ctx.getServices().getRequired(EjbDescriptors.class).addAll(ctx.getBeanDeploymentArchive().getEjbs());
ctx.getServices().add(EjbSupport.class, new EjbSupportImpl(ejbServices));
}
}

@Override
Expand Down

0 comments on commit b2ca4d6

Please sign in to comment.