/* * JBoss, Home of Professional Open Source * Copyright 2010, Red Hat Inc., and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.as.weld.deployment; import java.util.Collection; import java.util.Set; import org.jboss.as.server.deployment.DeploymentUnit; import org.jboss.weld.bootstrap.api.Service; import org.jboss.weld.bootstrap.spi.EEModuleDescriptor; import org.jboss.weld.util.collections.ImmutableSet; /** * A collection of Bean Deployment archives that share similar bean visibility. * <p/> * When the module is created all BDA's are given visibility to each other. They can then be given visibility to other bda's or * bean modules with one operation. * * @author Stuart Douglas * */ public class BeanDeploymentModule { private final Set<BeanDeploymentArchiveImpl> beanDeploymentArchives; private final EEModuleDescriptor moduleDescriptor; public BeanDeploymentModule(String moduleId, DeploymentUnit deploymentUnit, Collection<BeanDeploymentArchiveImpl> beanDeploymentArchives) { this.beanDeploymentArchives = ImmutableSet.copyOf(beanDeploymentArchives); for (BeanDeploymentArchiveImpl bda : beanDeploymentArchives) { bda.addBeanDeploymentArchives(beanDeploymentArchives); } this.moduleDescriptor = WeldEEModuleDescriptor.of(moduleId, deploymentUnit); if (moduleDescriptor != null) { addService(EEModuleDescriptor.class, moduleDescriptor); } } /** * Makes the {@link BeanDeploymentArchiveImpl} accessible to all bdas in the module * * @param archive The archive to make accessible */ public synchronized void addBeanDeploymentArchive(BeanDeploymentArchiveImpl archive) { for (BeanDeploymentArchiveImpl bda : beanDeploymentArchives) { bda.addBeanDeploymentArchive(archive); } } /** * Makes all {@link BeanDeploymentArchiveImpl}s in the given module accessible to all bdas in this module * * @param module The module to make accessible */ public synchronized void addBeanDeploymentModule(BeanDeploymentModule module) { for (BeanDeploymentArchiveImpl bda : beanDeploymentArchives) { bda.addBeanDeploymentArchives(module.beanDeploymentArchives); } } /** * Makes all {@link BeanDeploymentArchiveImpl}s in the given modules accessible to all bdas in this module * * @param modules The modules to make accessible */ public synchronized void addBeanDeploymentModules(Collection<BeanDeploymentModule> modules) { for (BeanDeploymentArchiveImpl bda : beanDeploymentArchives) { for (BeanDeploymentModule bdm : modules) { bda.addBeanDeploymentArchives(bdm.beanDeploymentArchives); } } } /** * Adds a service to all bean deployment archives in the module * @param clazz The service type * @param service The service * @param <S> The service type */ public synchronized <S extends Service> void addService(Class<S> clazz, S service) { for (BeanDeploymentArchiveImpl bda : beanDeploymentArchives) { bda.getServices().add(clazz,service); } } public Set<BeanDeploymentArchiveImpl> getBeanDeploymentArchives() { return beanDeploymentArchives; } public EEModuleDescriptor getModuleDescriptor() { return moduleDescriptor; } }