Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
   * 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
  * 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:
 import java.util.Map;
 import java.util.Set;
Abstract implementation of org.jboss.weld.bootstrap.spi.Deployment.

Thread safety: This class is thread safe, and does not require a happens before action between construction and usage

Stuart Douglas
 public class WeldDeployment implements Deployment {
     public static final String ADDITIONAL_CLASSES_BDA_SUFFIX = ".additionalClasses";
     public static final String BOOTSTRAP_CLASSLOADER_BDA_ID = "bootstrapBDA" + ;
     private final Set<Metadata<Extension>> extensions;
     private final ServiceRegistry serviceRegistry;

The top level module
     private final Module module;

All ModuleClassLoaders in the deployment
     private final Set<ClassLoadersubDeploymentClassLoaders;

Maps class names to bean archives. The spec does not allow for the same class to be deployed in multiple bean archives
     public WeldDeployment(Set<BeanDeploymentArchiveImplbeanDeploymentArchivesCollection<Metadata<Extension>> extensions,
             Module moduleSet<ClassLoadersubDeploymentClassLoaders) {
         this. = new HashSet<ClassLoader>(subDeploymentClassLoaders);
         this. = new HashSet<BeanDeploymentArchiveImpl>(beanDeploymentArchives);
         this. = new HashSet<Metadata<Extension>>(extensions);
         this. = new SimpleServiceRegistry();
         this. = module;
         // add static services
         this..add(ProxyServices.classnew ProxyServicesImpl(module));
         this..add(ResourceLoader.classnew WeldModuleResourceLoader(module));
        // set up the additional bean archives accessibility rules
        // and map class names to bean deployment archives
        for (BeanDeploymentArchiveImpl bda : beanDeploymentArchives) {
            for (String className : bda.getBeanClasses()) {
    } assembles a basic accessibility graph based on the deployment structure. Here, we complete the graph by examining classloader visibility. This allows additional accessibility edges caused e.g. by the Class-Path declaration in the manifest file, to be recognized.

    private void calculateAccessibilityGraph(Iterable<BeanDeploymentArchiveImplbeanDeploymentArchives) {
        for (BeanDeploymentArchiveImpl from : beanDeploymentArchives) {
            for (BeanDeploymentArchiveImpl target : beanDeploymentArchives) {
                if (from.isAccessible(target)) {

        return Collections.unmodifiableSet(new HashSet<BeanDeploymentArchive>());

        return Collections.unmodifiableSet();

    public ServiceRegistry getServices() {
        return ;

    public synchronized BeanDeploymentArchive loadBeanDeploymentArchive(Class<?> beanClass) {
        if (.containsKey(beanClass.getName())) {
            return .get(beanClass.getName());
         * We haven't found this class in a bean archive so apparently it was added by an extension and the class itself does
         * not come from a BDA. Before we create a new BDA, let's try to find an existing BDA that uses the same classloader
         * (and thus has the required accessibility to other BDAs)
            return .get(beanClass.getClassLoader());
         * No, there is no BDA for the class' classloader yet. Let's create one.
        return createAndRegisterAdditionalBeanDeploymentArchive(beanClass);
        Module module = Module.forClass(beanClass);
        String id = null;
        if (module == null) {
            id = ;
        } else {
            id = module.getIdentifier() + ;
        BeanDeploymentArchiveImpl newBda = new BeanDeploymentArchiveImpl(Collections.singleton(beanClass.getName()),
        // handle BDAs visible from the new BDA
        for (BeanDeploymentArchiveImpl bda : ) {
            if (newBda.isAccessible(bda)) {
        // handle visibility of the new BDA from other BDAs
        for (BeanDeploymentArchiveImpl bda : ) {
            if (bda.isAccessible(newBda)) {
        .put(beanClass.getName(), newBda);
        return newBda;
    public Module getModule() {
        return ;
        return Collections.unmodifiableSet();
    public synchronized <T extends Servicevoid addWeldService(Class<T> type, T service) {
New to GrepCode? Check out our FAQ X