[jboss-cvs] JBossAS SVN: r106875 - in projects/weld-int/branches/Deployment_WELDINT-1/deployer/src: test/java/org/jboss/test/deployers/test and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jul 19 23:47:07 EDT 2010


Author: flavia.rainone at jboss.com
Date: 2010-07-19 23:47:07 -0400 (Mon, 19 Jul 2010)
New Revision: 106875

Added:
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveLifecycleListener.java
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/AbstractSingleArchiveTest.java
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/LoadBeanDeploymentArchiveTestCase.java
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/resources/org/jboss/test/deployers/test/LoadBeanDeploymentArchiveTestCase.xml
Removed:
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/BDALifecycleListener.java
Modified:
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/Archive.java
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveCollection.java
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveToClasspath.java
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/Classpath.java
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ClasspathFactory.java
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ClasspathImpl.java
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/DeploymentImpl.java
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/NoDuplicatesClasspath.java
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/SecurityActions.java
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/AbstractEnvironmentTest.java
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/ArchiveEnvironmentTestCase.java
   projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/DeploymentEnvironmentTestCase.java
Log:
[WELDINT-1] Fix
- clean up of the Archive/BDA structure created by the deployers
- loadBeanDeploymentArchive implementation
Implement the LoadBeanDeploymentArchiveTestCase.

Modified: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/Archive.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/Archive.java	2010-07-20 02:09:55 UTC (rev 106874)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/Archive.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -67,7 +67,7 @@
    private final Collection<EjbDescriptor<?>> ejbs;
 
    // the list of all bdaLifecycleListeners
-   private final Collection<BDALifecycleListener> bdaLifecycleListeners;
+   private final Collection<ArchiveLifecycleListener> lifecycleListeners;
 
    /**
     * Constructor. Can only be called by ArchiveFactory.
@@ -79,7 +79,7 @@
     */
    public Archive(ArchiveInfo archiveInfo, Collection<EjbDescriptor<?>> ejbs)
    {
-      this.bdaLifecycleListeners = new ArrayList<BDALifecycleListener>();
+      this.lifecycleListeners = new ArrayList<ArchiveLifecycleListener>();
       this.classes = archiveInfo.getEnvironment().getWeldClasses();
       this.xmlURLs = archiveInfo.getEnvironment().getWeldXml();
       this.classLoader = archiveInfo.getClassLoader();
@@ -110,6 +110,26 @@
    }
    
    /**
+    * Indicates whether {@code beanClass} is visible to this BDA
+    * @param   beanClass the beanClass
+    * @return  {@code true} if {@code beanClass} is visible to this BDA
+    */
+   public boolean isClassVisible(Class<?> beanClass)
+   {
+      Class<?> loadedClass = null;
+      try
+      {
+         loadedClass = this.getClassLoader().loadClass(beanClass.getName());
+      }
+      catch (ClassNotFoundException e)
+      {
+         return false;
+      }
+      return loadedClass == beanClass;
+   }
+   
+   
+   /**
     * Adds a class to this archive.
     * 
     * @param beanClass a class whose ClassLoader is associated with this archive
@@ -173,8 +193,8 @@
    }
 
    /**
-    * Creates the BeanDeploymentArchive that corresponds to this archive. This method never
-    * returns duplicates.
+    * Creates the BeanDeploymentArchive that corresponds to this archive. This method
+    * never returns duplicates.
     * 
     * @return the BeanDeploymentArchive representing this archive. If this bda has not
     *         been created, it is created and returned
@@ -184,24 +204,26 @@
       if (bda == null)
       {
          bda = new BeanDeploymentArchiveImpl(classLoader.toString(), this);
-         for (BDALifecycleListener listener: bdaLifecycleListeners)
+         for (ArchiveLifecycleListener listener: lifecycleListeners)
          {
-            listener.bdaCreated(bda);
+            // notifies the listener that this archive became visible as a BDA
+            listener.archiveVisible(this, bda);
          }
       }
       return bda;
    }
 
    /**
-    * Adds a BDALifecycleListener. When called prior to BDA creation, this listener will
-    * be notified of the BDA creation. The listener will also be notified when the bda is
+    * Adds an ArchiveLifecycleListener. When called prior to BDA creation, this listener
+    * will be notified when this archive becomes visible through the BDA view. The
+    * listener will also be notified when this archive (and its BDA, if available) is
     * destroyed (undeployment)
     * 
-    * @param listener a BDALifecycleListener
+    * @param listener an ArchiveLifecycleListener
     */
-   public void addBDALifecycleListener(BDALifecycleListener listener)
+   public void addLifecycleListener(ArchiveLifecycleListener listener)
    {
-      this.bdaLifecycleListeners.add(listener);
+      this.lifecycleListeners.add(listener);
    }
 
    /**
@@ -219,12 +241,9 @@
     */
    public void undeploy()
    {
-      if (bda != null)
+      for (ArchiveLifecycleListener listener: lifecycleListeners)
       {
-         for (BDALifecycleListener listener: bdaLifecycleListeners)
-         {
-            listener.bdaDestroyed(bda);
-         }
+         listener.archiveDestroyed(this);
       }
    }
 

Modified: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveCollection.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveCollection.java	2010-07-20 02:09:55 UTC (rev 106874)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveCollection.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -35,7 +35,7 @@
  * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
  * @version $Revision$
  */
-class ArchiveCollection implements BDALifecycleListener, Iterable<Archive>
+class ArchiveCollection implements ArchiveLifecycleListener, Iterable<Archive>
 {
    // the archives collection
    protected Collection<Archive> archives = new ArrayList<Archive>();
@@ -51,7 +51,7 @@
    public synchronized void add(Archive archive)
    {
       archives.add(archive);
-      archive.addBDALifecycleListener(this);
+      archive.addLifecycleListener(this);
    }
 
    /**
@@ -74,7 +74,7 @@
       return this.bdas;
    }
 
-   public synchronized void bdaCreated(BeanDeploymentArchiveImpl bda)
+   public synchronized void archiveVisible(Archive archive, BeanDeploymentArchive bda)
    {
       synchronized(bdas)
       {
@@ -82,12 +82,16 @@
       }
    }
 
-   public synchronized void bdaDestroyed(BeanDeploymentArchiveImpl bda)
+   public synchronized void archiveDestroyed(Archive archive)
    {
       synchronized(bdas)
       {
-         archives.remove(bda.getArchive());
-         bdas.remove(bda);
+         archives.remove(archive);
+         BeanDeploymentArchive bda = archive.getBeanDeploymentArchive();
+         if (bda != null)
+         {
+            bdas.remove(bda);
+         }
       }
    }
 }

Copied: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveLifecycleListener.java (from rev 106548, projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/BDALifecycleListener.java)
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveLifecycleListener.java	                        (rev 0)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveLifecycleListener.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -0,0 +1,51 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.weld.integration.deployer.env.bda;
+
+import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
+
+
+/**
+ * Observes the lifecyle of a BeanDeploymentArchive.
+ * 
+ * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @version $Revision: 1.1 
+ * @see Archive#addLifecycleListener(BDALifecycleListener)
+ */
+interface ArchiveLifecycleListener
+{
+   /**
+    * Notifies this listener that an Archive is visible to Weld classes in the form of
+    * a BDA.
+    * 
+    * @param archive the archive whose corresponding BDA was created
+    * @param bda     a Weld spi view that represents {@code archive}
+    */
+   public void archiveVisible(Archive archive, BeanDeploymentArchive bda);
+   
+   /**
+    * Notifies that {@code archive} is being destroyed.
+    * 
+    * @param archive the archive
+    */
+   public void archiveDestroyed(Archive archive);
+}

Modified: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveToClasspath.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveToClasspath.java	2010-07-20 02:09:55 UTC (rev 106874)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveToClasspath.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -35,7 +35,7 @@
  * @version $Revision$
  * @see Classpath
  */
-class ArchiveToClasspath implements Classpath, BDALifecycleListener
+class ArchiveToClasspath implements Classpath, ArchiveLifecycleListener
 {
    // the archive
    private Archive archive;
@@ -65,6 +65,11 @@
    {
       return archives.iterator();
    }
+   
+   public Classpath getClasspath()
+   {
+      return archive.getClasspath();
+   }
 
    public Collection<BeanDeploymentArchive> getBDAs(BeanDeploymentArchive bda)
    {
@@ -75,13 +80,13 @@
       return this.bda;
    }
 
-   public void bdaCreated(BeanDeploymentArchiveImpl bda)
+   public void archiveVisible(Archive archive, BeanDeploymentArchive bda)
    {
       this.bda = new ArrayList<BeanDeploymentArchive>();
       this.bda.add(bda);
    }
 
-   public void bdaDestroyed(BeanDeploymentArchiveImpl bda)
+   public void archiveDestroyed(Archive archive)
    {
       // do nothing, as this instance is also being destroyed
    }

Deleted: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/BDALifecycleListener.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/BDALifecycleListener.java	2010-07-20 02:09:55 UTC (rev 106874)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/BDALifecycleListener.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -1,48 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file 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.weld.integration.deployer.env.bda;
-
-import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
-
-/**
- * Observes the lifecyle of a BeanDeploymentArchive.
- * 
- * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
- * @version $Revision: 1.1 
- * @see Archive#addBDALifecycleListener(BDALifecycleListener)
- */
-interface BDALifecycleListener
-{
-   /**
-    * Notifies that {@code bda} has been created.
-    * 
-    * @param bda the BeanDeploymentArchive
-    */
-   public void bdaCreated(BeanDeploymentArchiveImpl bda);
-   
-   /**
-    * Notifies that {@code bda} is being destroyed.
-    * 
-    * @param bda the BeanDeploymentArchive
-    */
-   public void bdaDestroyed(BeanDeploymentArchiveImpl bda);
-}

Modified: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/Classpath.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/Classpath.java	2010-07-20 02:09:55 UTC (rev 106874)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/Classpath.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -57,6 +57,13 @@
     * @return an iterator for iterating over all archives that are part of this classpath
     */
    Iterator<Archive> iterator();
+   
+   /**
+    * Returns the parent classpath of this classpath.
+    * 
+    * @return the parent classpath of this classpath 
+    */
+   Classpath getClasspath();
 
    /**
     * Returns the collection of all BeanDeploymentArchive instances reachable from 

Modified: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ClasspathFactory.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ClasspathFactory.java	2010-07-20 02:09:55 UTC (rev 106874)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ClasspathFactory.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -55,6 +55,8 @@
    // the default classpath, corresponds to DefaultDomain
    public static final Classpath DEFAULT = new  ClasspathImpl("DefaultDomain");
    
+   private static final ClassLoaderDomain DEFAULT_DOMAIN = ClassLoaderSystem.getInstance().getDefaultDomain();
+   
    // the ClassLoaderSystem
    private final ClassLoaderSystem system;
 
@@ -88,7 +90,7 @@
    // FIXME: remove classLoader parameter!
    private Classpath getClasspath(ClassLoader cl, Loader domain)
    {
-      if (domain == null)
+      if (domain == null || domain == DEFAULT_DOMAIN)
       {
          return DEFAULT;
       }

Modified: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ClasspathImpl.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ClasspathImpl.java	2010-07-20 02:09:55 UTC (rev 106874)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ClasspathImpl.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -35,7 +35,7 @@
  * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
  * @version $Revision$
  */
-class ClasspathImpl implements Classpath, BDALifecycleListener
+class ClasspathImpl implements Classpath, ArchiveLifecycleListener
 {
    private Collection<Archive> archives = new ArrayList<Archive>();
    private Classpath classpath;
@@ -77,13 +77,18 @@
    public void addArchive(Archive archive)
    {
       archives.add(archive);
-      archive.addBDALifecycleListener(this);
+      archive.addLifecycleListener(this);
    }
 
    public Iterator<Archive> iterator()
    {
       return archives.iterator();
    }
+   
+   public Classpath getClasspath()
+   {
+      return this.classpath;
+   }
 
    public Collection<BeanDeploymentArchive> getBDAs(BeanDeploymentArchive bda)
    {
@@ -122,13 +127,13 @@
       return bdas;
    }
 
-   public void bdaCreated(BeanDeploymentArchiveImpl bda)
+   public void archiveVisible(Archive archive, BeanDeploymentArchive bda)
    {
       // do nothing, as this classpath impl doesn't keep track of bdas created
    }
 
-   public void bdaDestroyed(BeanDeploymentArchiveImpl bda)
+   public void archiveDestroyed(Archive archive)
    {
-      archives.remove(bda.getArchive());
+      archives.remove(archive);
    }
 }

Modified: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/DeploymentImpl.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/DeploymentImpl.java	2010-07-20 02:09:55 UTC (rev 106874)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/DeploymentImpl.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -21,6 +21,7 @@
  */
 package org.jboss.weld.integration.deployer.env.bda;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -48,6 +49,10 @@
    // the services provided by this deployment
    private final ServiceRegistry services;
 
+   // a collection of all archives that have been loaded by this DeploymentImpl, i.e.
+   // created for the purpose of serving loadBeanDeploymentArchive
+   private Collection<Archive> loadedArchives;
+
    /**
     * Constructor.
     * 
@@ -94,12 +99,26 @@
       Archive archive = findArchive(beanClass, archives, searchedArchives, searchedClasspaths);
       if (archive == null)
       {
-         throw new IllegalArgumentException("Bean class " + beanClass + " is not reachable from deployment " + this);
+         boolean reachable = false;
+         for (Archive searchedArchive: searchedArchives)
+         {
+            if (searchedArchive.isClassVisible(beanClass))
+            {
+               reachable = true;
+               break;
+            }
+         }
+         if (!reachable)
+            throw new IllegalArgumentException("Bean class " + beanClass + " is not reachable from deployment " + this);
+         ArchiveInfo archiveInfo = new ArchiveInfo(SecurityActions.getClassLoader(beanClass));
+         archive = ArchiveFactory.createArchive(archiveInfo, new ArrayList<EjbDescriptor<?>>());
+         if (loadedArchives == null)
+         {
+            loadedArchives = new ArrayList<Archive>();
+         }
+         loadedArchives.add(archive);
       }
-      if (!archive.containsClass(beanClass))
-      {
-         archive.addClass(beanClass);
-      }
+      archive.addClass(beanClass);
       return archive.createBeanDeploymentArchive();
    }
    
@@ -111,6 +130,14 @@
          iterator.remove();
          archive.undeploy();
       }
+      if (loadedArchives != null)
+      {
+         for (Archive archive: loadedArchives)
+         {
+            // FIXME this does not work ok
+            archive.undeploy();
+         }
+      }
    }
    
    public String toString()
@@ -133,20 +160,34 @@
                else
                {
                   searchedArchives.add(archive);
-                  Classpath classpath = archive.getClasspath();
-                  if (!searchedClasspaths.contains(classpath))
+                  Archive found = searchThroughClasspath(archive.getClasspath(), beanClass, searchedArchives, searchedClasspaths);
+                  if (found != null)
                   {
-                     searchedClasspaths.add(classpath);
-                     Archive found = findArchive(beanClass, classpath, searchedArchives, searchedClasspaths);
-                     if (found != null)
-                     {
-                        return found;
-                     }
+                     return found;
                   }
                }
             }
          }
       }
-      throw new IllegalArgumentException("Bean class " + beanClass + " is not in " + this + " classpath");
+      return null;
    }
+   
+   private Archive searchThroughClasspath(Classpath classpath, Class<?> beanClass, Collection<Archive> searchedArchives, Collection<Classpath> searchedClasspaths)
+   {
+      if (!searchedClasspaths.contains(classpath))
+      {
+         searchedClasspaths.add(classpath);
+         Archive found = findArchive(beanClass, classpath, searchedArchives, searchedClasspaths);
+         if (found != null)
+         {
+            return found;
+         }
+         Classpath parentClasspath = classpath.getClasspath();
+         if (parentClasspath != null)
+         {
+            return searchThroughClasspath(classpath.getClasspath(), beanClass, searchedArchives, searchedClasspaths);
+         }
+      }
+      return null;
+   }
 }

Modified: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/NoDuplicatesClasspath.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/NoDuplicatesClasspath.java	2010-07-20 02:09:55 UTC (rev 106874)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/NoDuplicatesClasspath.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -89,6 +89,11 @@
       add(archive);
    }
 
+   public Classpath getClasspath()
+   {
+      return this.classpath;
+   }
+
    public Collection<BeanDeploymentArchive> getBDAs(BeanDeploymentArchive bda)
    {
       // if reference is null, it means that no BDA is contained in this classpath
@@ -109,7 +114,7 @@
    }
 
    @Override
-   public void bdaCreated(BeanDeploymentArchiveImpl bda)
+   public void archiveVisible(Archive archive, BeanDeploymentArchive bda)
    {
       synchronized(bdas)
       {
@@ -121,36 +126,39 @@
          else
          {
             //only add to BDAs collection the BDAs that are not reference
-            super.bdaCreated(bda);
+            super.archiveVisible(archive, bda);
          }
       }
    }
    
    @Override
-   public void bdaDestroyed(BeanDeploymentArchiveImpl bda)
+   public void archiveDestroyed(Archive archive)
    {
-      synchronized(bdas)
+      BeanDeploymentArchive bda = archive.getBeanDeploymentArchive();
+      if (bda != null)
       {
-         if (reference == bda)
+         synchronized(bdas)
          {
-            reference = null;
-            referenceCollection.clear();
-            if (!bdas.isEmpty())
+            if (reference == bda)
             {
-               Iterator<BeanDeploymentArchive> iterator = bdas.iterator();
-               reference = iterator.next();
-               iterator.remove();
-               referenceCollection.add(reference);
+               reference = null;
+               referenceCollection.clear();
+               if (!bdas.isEmpty())
+               {
+                  Iterator<BeanDeploymentArchive> iterator = bdas.iterator();
+                  reference = iterator.next();
+                  iterator.remove();
+                  referenceCollection.add(reference);
+               }
             }
+            else
+            {
+               super.archiveDestroyed(archive);
+            }
          }
-         else
-         {
-            super.bdaDestroyed(bda);
-         }
       }
       synchronized(this)
       {
-         Archive archive = ((BeanDeploymentArchiveImpl) bda).getArchive();
          archives.remove(archive);
       }
    }

Modified: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/SecurityActions.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/SecurityActions.java	2010-07-20 02:09:55 UTC (rev 106874)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/SecurityActions.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -70,6 +70,17 @@
          throw new RuntimeException(e);
       }
    }
+
+   public static ClassLoader getClassLoader(final Class<?> clazz)
+   {
+      return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
+      {
+         public ClassLoader run()
+         {
+            return clazz.getClassLoader();
+         }
+      });
+   }
    
    public static Module getModuleForClassLoader(final ClassLoader classLoader)
    {

Modified: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/AbstractEnvironmentTest.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/AbstractEnvironmentTest.java	2010-07-20 02:09:55 UTC (rev 106874)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/AbstractEnvironmentTest.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -27,26 +27,15 @@
 import java.util.Iterator;
 import java.util.Set;
 
-import junit.framework.Test;
-
-import org.jboss.deployers.structure.spi.DeploymentUnit;
 import org.jboss.shrinkwrap.api.ShrinkWrap;
 import org.jboss.shrinkwrap.api.container.LibraryContainer;
-import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
 import org.jboss.shrinkwrap.api.spec.JavaArchive;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
 import org.jboss.test.deployers.support.MockArchiveManifest;
 import org.jboss.test.deployers.support.crm.CrmWebBean;
-import org.jboss.test.deployers.support.ejb.BusinessInterface;
-import org.jboss.test.deployers.support.ejb.MySLSBean;
-import org.jboss.test.deployers.support.ext.ExternalWebBean;
 import org.jboss.test.deployers.support.jar.PlainJavaBean;
-import org.jboss.test.deployers.support.jsf.NotWBJsfBean;
 import org.jboss.test.deployers.support.ui.UIWebBean;
-import org.jboss.test.deployers.support.util.SomeUtil;
 import org.jboss.test.deployers.support.web.ServletWebBean;
-import org.jboss.vfs.VirtualFile;
-import org.jboss.wsf.spi.metadata.j2ee.SLSBMetaData;
 
 /**
  * Abstract Environment test case.
@@ -65,380 +54,6 @@
       super(name);
    }
 
-   public static Test suite()
-   {
-      return suite(AbstractEnvironmentTest.class);
-   }
-
-   protected DeploymentUnit unit;
-
-   public void tearDown() throws Exception
-   {
-      undeploy(unit);
-      super.tearDown();
-   }
-   
-   public void testEjbJar() throws Exception
-   {
-      JavaArchive ejbJar = createEjbJar(true);
-      unit = assertDeploy(ejbJar);
-
-      E environment = assertSingleEnvironment(EJB_JAR_NAME);
-      assertExpectedClasses(environment, PlainJavaBean.class);
-      assertExpectedResources(environment, "ejb.jar");
-   }
-
-   public void testEjbJarWithoutXml() throws Exception
-   {
-      JavaArchive ejbJar = createEjbJar(false);
-      unit = assertDeploy(ejbJar);
-      
-      assertEmptyEnvironment();
-   }
-
-   public void testEjbJarInEar() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create(EAR_NAME, EnterpriseArchive.class);
-      JavaArchive ejbJar = createEjbJar(true);
-      ear.addModule(ejbJar);
-      MockArchiveManifest.addManifest(ear);
-      unit = assertDeploy(ear);
-      
-      E environment = assertSingleEnvironment(EAR_NAME);
-      assertExpectedClasses(environment, PlainJavaBean.class);
-      assertExpectedResources(environment, unit.getSimpleName() + "/ejb.jar");
-   }
-
-   public void testEjbJarWithoutXmlInEar() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create(EAR_NAME, EnterpriseArchive.class);
-      JavaArchive ejbJar = createEjbJar(false);
-      ear.addModule(ejbJar);
-      MockArchiveManifest.addManifest(ear);
-      unit = assertDeploy(ear);
-      
-      assertEmptyEnvironment();
-   }
-
-   public void testEjbJarsInEar() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create(EAR_NAME, EnterpriseArchive.class);
-      JavaArchive ejbJar1 = createEjbJar("ejbJar1.jar", true, PlainJavaBean.class);
-      ear.addModule(ejbJar1);
-      JavaArchive ejbJar2 = createEjbJar("ejbJar2.jar", true, MySLSBean.class, SLSBMetaData.class);
-      ear.addModule(ejbJar2);
-      MockArchiveManifest.addManifest(ear);
-      unit = assertDeploy(ear);
-      
-      E environment = assertSingleEnvironment(EAR_NAME);
-      assertExpectedClasses(environment, PlainJavaBean.class, MySLSBean.class,
-               SLSBMetaData.class);
-      assertExpectedResources(environment, EAR_NAME + "/ejbJar1.jar",
-               EAR_NAME + "/ejbJar2.jar");
-   }
-
-   public void testMixedEjbJarsInEar() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create(EAR_NAME, EnterpriseArchive.class);
-      JavaArchive ejbJar1 = createEjbJar("ejbJar1.jar", false, PlainJavaBean.class);
-      ear.addModule(ejbJar1);
-      JavaArchive ejbJar2 = createEjbJar("ejbJar2.jar", true, MySLSBean.class, SLSBMetaData.class);
-      ear.addModule(ejbJar2);
-      MockArchiveManifest.addManifest(ear);
-      unit = assertDeploy(ear);
-      
-      E environment = assertSingleEnvironment(EAR_NAME);
-      assertExpectedClasses(environment, MySLSBean.class, SLSBMetaData.class);
-      assertExpectedResources(environment, "simple.ear/ejbJar2.jar");
-   }
-
-   public void testEjbJarsWithoutXmlInEar() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create(EAR_NAME, EnterpriseArchive.class);
-      JavaArchive ejbJar1 = createEjbJar("ejbJar1.jar", false, PlainJavaBean.class);
-      ear.addModule(ejbJar1);
-      JavaArchive ejbJar2 = createEjbJar("ejbJar2.jar", false, MySLSBean.class, SLSBMetaData.class);
-      ear.addModule(ejbJar2);
-      MockArchiveManifest.addManifest(ear);
-      unit = assertDeploy(ear);
-      
-      assertEmptyEnvironment();
-   }
-
-   public void testWar() throws Exception
-   {
-      WebArchive war = createWar(true);
-      unit = assertDeploy(war);
-      
-      E environment = assertSingleEnvironment(WAR_NAME);
-      assertExpectedClasses(environment, ServletWebBean.class);
-      assertExpectedWarResources(environment, unit.getSimpleName(), true);
-   }
-
-   public void testWarWithLib() throws Exception
-   {
-      WebArchive war = createWarWithLib(true, true);
-      unit = assertDeploy(war);
-      
-      E environment = assertSingleEnvironment(WAR_NAME);
-      assertExpectedClasses(environment, ServletWebBean.class, UIWebBean.class);
-      assertExpectedWarResources(environment, unit.getSimpleName(), true, "lib.jar");
-   }
-
-   public void testWarWithLibs() throws Exception
-   {
-      WebArchive war = createWarWithLibs(true, true, true);
-      unit = assertDeploy(war);
-      
-      E environment = assertSingleEnvironment(WAR_NAME);
-      assertExpectedClasses(environment, ServletWebBean.class, UIWebBean.class, CrmWebBean.class);
-      assertExpectedWarResources(environment, unit.getSimpleName(), true, "lib1.jar", "lib2.jar");
-   }
-
-   public void testWarWithLibWithoutXml() throws Exception
-   {
-      WebArchive war = createWarWithLib(true, false);
-      unit = assertDeploy(war);
-      
-      E environment = assertSingleEnvironment(WAR_NAME);
-      assertExpectedClasses(environment, ServletWebBean.class);
-      assertExpectedWarResources(environment, unit.getSimpleName(), true);
-   }
-
-   public void testWarWithLibsWithoutXml() throws Exception
-   {
-      WebArchive war = createWarWithLibs(true, false, false);
-      unit = assertDeploy(war);
-      
-      E environment = assertSingleEnvironment(WAR_NAME);
-      assertExpectedClasses(environment, ServletWebBean.class);
-      assertExpectedWarResources(environment, unit.getSimpleName(), true);
-   }
-
-   public void testWarWithMixedLibs() throws Exception
-   {
-      WebArchive war = createWarWithLibs(true, true, false);
-      unit = assertDeploy(war);
-      
-      E environment = assertSingleEnvironment(WAR_NAME);
-      assertExpectedClasses(environment, ServletWebBean.class, UIWebBean.class);
-      assertExpectedWarResources(environment, unit.getSimpleName(), true, "lib1.jar");
-   }
-
-   public void testWarWithoutXmlWithLib() throws Exception
-   {
-      WebArchive war = createWarWithLib(false, true);
-      unit = assertDeploy(war);
-      
-      E environment = assertSingleEnvironment(WAR_NAME);
-      assertExpectedClasses(environment, UIWebBean.class);
-      assertExpectedWarResources(environment, unit.getSimpleName(), false, "lib.jar");
-   }
-
-   public void testWarWithoutXmlWithLibs() throws Exception
-   {
-      WebArchive war = createWarWithLibs(false, true, true);
-      unit = assertDeploy(war);
-      
-      E environment = assertSingleEnvironment(WAR_NAME);
-      assertExpectedClasses(environment, UIWebBean.class, CrmWebBean.class);
-      assertExpectedWarResources(environment, unit.getSimpleName(), false, "lib1.jar", "lib2.jar");
-   }
-
-   public void testWarWithoutXmlWithLibWithoutXml() throws Exception
-   {
-      WebArchive war = createWarWithLib(false, false);
-      unit = assertDeploy(war);
-      
-      assertEmptyEnvironment();
-   }
-
-   public void testWarWithoutXmlWithMixedLibs() throws Exception
-   {
-      WebArchive war = createWarWithLibs(false, true, false);
-      unit = assertDeploy(war);
-      
-      E environment = assertSingleEnvironment(WAR_NAME);
-      assertExpectedClasses(environment, UIWebBean.class);
-      assertExpectedWarResources(environment, unit.getSimpleName(), false, "lib1.jar");
-   }
-
-   public void testWarWithoutXmlWithLibsWithoutXml() throws Exception
-   {
-      WebArchive war = createWarWithLibs(false, false, false);
-      unit = assertDeploy(war);
-      
-      assertEmptyEnvironment();
-   }
-
-   public void testWarWithoutXml() throws Exception
-   {
-      WebArchive war = createWar(false);
-      unit = assertDeploy(war);
-      
-      assertEmptyEnvironment();
-   }
-
-   public void testWarInEar() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
-      WebArchive war = createWar(true);
-      ear.addModule(war);
-      MockArchiveManifest.addManifest(ear);
-      unit = assertDeploy(ear);
-      
-      E environment = assertSingleEnvironment("warinear.ear/simple.war");
-      assertExpectedClasses(environment, ServletWebBean.class);
-      assertExpectedWarResources(environment, "warinear.ear/simple.war", true);
-   }
-
-   public void testWarsInEar() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
-      WebArchive war = createWar("simple1.war", true, ServletWebBean.class);
-      ear.addModule(war);
-      war = createWar("simple2.war", true, NotWBJsfBean.class);
-      ear.addModule(war);
-      MockArchiveManifest.addManifest(ear);
-      unit = assertDeploy(ear);
-      
-      assertWarsInEar();
-   }
-
-   protected abstract void assertWarsInEar();
-
-   public void testMixedWarsInEar() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
-      WebArchive war = createWar("simple1.war", true, ServletWebBean.class);
-      ear.addModule(war);
-      war = createWar("simple2.war", false, NotWBJsfBean.class);
-      ear.addModule(war);
-      MockArchiveManifest.addManifest(ear);
-      unit = assertDeploy(ear);
-      
-      E environment = assertSingleEnvironment("warinear.ear/simple1.war");
-      assertExpectedClasses(environment, ServletWebBean.class);
-      assertExpectedWarResources(environment, "warinear.ear/simple1.war", true);
-   }
-
-   public void testWarsWithoutXmlInEar() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
-      WebArchive war = createWar("simple1.war", false, ServletWebBean.class);
-      ear.addModule(war);
-      war = createWar("simple2.war", false, NotWBJsfBean.class);
-      ear.addModule(war);
-      MockArchiveManifest.addManifest(ear);
-      unit = assertDeploy(ear);
-      
-      assertEmptyEnvironment();
-   }
-
-   public void testWarWithLibInEar() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
-      WebArchive war = createWarWithLib(true, true);
-      ear.addModule(war);
-      MockArchiveManifest.addManifest(ear);
-      unit = assertDeploy(ear);
-      
-      E environment = assertSingleEnvironment("warinear.ear/" + WAR_NAME);
-      assertExpectedClasses(environment, ServletWebBean.class, UIWebBean.class);
-      assertExpectedWarResources(environment, "warinear.ear/" + WAR_NAME, true, "lib.jar");
-   }
-
-   public void testWarWithLibWithoutXmlInEar() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
-      WebArchive war = createWarWithLib(true, false);
-      ear.addModule(war);
-      MockArchiveManifest.addManifest(ear);
-      unit = assertDeploy(ear);
-      
-      E environment = assertSingleEnvironment("warinear.ear/" + WAR_NAME);
-      assertExpectedClasses(environment, ServletWebBean.class);
-      assertExpectedWarResources(environment, "warinear.ear/" + WAR_NAME, true);
-   }
-
-   public void testWarWithoutXmlWithLibWithoutXmlInEar() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
-      WebArchive war = createWarWithLib(false, false);
-      ear.addModule(war);
-      MockArchiveManifest.addManifest(ear);
-      unit = assertDeploy(ear);
-      
-      assertEmptyEnvironment();
-   }
-
-   public void testWarWithoutXmlWithLibInEar() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
-      WebArchive war = createWarWithLib(false, true);
-      ear.addModule(war);
-      MockArchiveManifest.addManifest(ear);
-      unit = assertDeploy(ear);
-      
-      E environment = assertSingleEnvironment("warinear.ear/" + WAR_NAME);
-      assertExpectedClasses(environment, UIWebBean.class);
-      assertExpectedWarResources(environment, "warinear.ear/" + WAR_NAME, false, "lib.jar");
-   }
-
-   public void testBasicEar() throws Exception
-   {
-      VirtualFile ear = createBasicEar();
-      unit = assertDeploy(ear);
-
-      assertBasicEar();
-   }
-
-   protected abstract void assertBasicEar();
-
-   public void testBasicEarFullCDI() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create("top-level.ear", EnterpriseArchive.class);
-      createLib(ear, "util.jar", true, SomeUtil.class);
-      createLib(ear, "ext.jar", true, ExternalWebBean.class);
-      JavaArchive ejbJar = createEjbJar("simple.jar", true, PlainJavaBean.class);
-      ear.addModule(ejbJar);
-      ejbJar = createEjbJar("ejbs.jar", true, MySLSBean.class, BusinessInterface.class);
-      ear.addModule(ejbJar);
-      WebArchive war = createWar("simple.war", true, ServletWebBean.class);
-      createLib(war, "ui.jar", true, UIWebBean.class);
-      ear.addModule(war);
-      war = createWar("crm.war", true, NotWBJsfBean.class);
-      createLib(war, "crm.jar", true, CrmWebBean.class);
-      ear.addModule(war);
-      unit = assertDeploy(ear);
-      
-      assertBasicEarFullCDI();
-   }
-
-   protected abstract void assertBasicEarFullCDI();
-
-   public void testBasicEarWithoutXml() throws Exception
-   {
-      EnterpriseArchive ear = ShrinkWrap.create("simple.ear", EnterpriseArchive.class);
-      createLib(ear, "util.jar", false, SomeUtil.class);
-      createLib(ear, "ext.jar", false, ExternalWebBean.class);
-      JavaArchive ejbJar = createEjbJar("simple.jar", false, PlainJavaBean.class);
-      ear.addModule(ejbJar);
-      ejbJar = createEjbJar("ejbs.jar", false, MySLSBean.class, BusinessInterface.class);
-      ear.addModule(ejbJar);
-      WebArchive war = createWar("simple.war", false, ServletWebBean.class);
-      createLib(war, "ui.jar", false, UIWebBean.class);
-      ear.addModule(war);
-      war = createWar("crm.war", false, NotWBJsfBean.class);
-      createLib(war, "crm.jar", false, CrmWebBean.class);
-      ear.addModule(war);
-      unit = assertDeploy(ear);
-
-      assertBasicEarWithoutXml();
-   }
-
-   protected abstract void assertBasicEarWithoutXml();
-
    private static void addExpectedResource(Set<String> expected, String unit)
    {
       addExpectedResource(expected, unit, "/META-INF/beans.xml");
@@ -522,13 +137,12 @@
       assertExpectedResources(environment, expected);
    }
 
-   // TODO extract these methods for Deployment.loadBeanDeploymentArchive tests
-   private JavaArchive createEjbJar(boolean jarCDI)
+   protected JavaArchive createEjbJar(boolean jarCDI)
    {
       return createEjbJar(EJB_JAR_NAME, jarCDI, PlainJavaBean.class);
    }
    
-   private JavaArchive createEjbJar(String jarName, boolean jarCDI, Class<?>... classes)
+   protected JavaArchive createEjbJar(String jarName, boolean jarCDI, Class<?>... classes)
    {
       JavaArchive ejbJar = ShrinkWrap.create(jarName, JavaArchive.class);
       for (Class<?> clazz: classes)
@@ -539,12 +153,12 @@
       return ejbJar;
    }
 
-   private WebArchive createWar(boolean warCDI)
+   protected WebArchive createWar(boolean warCDI)
    {
       return createWar(WAR_NAME, warCDI, ServletWebBean.class);
    }
 
-   private WebArchive createWar(String warName, boolean warCDI, Class<?>... classes)
+   protected WebArchive createWar(String warName, boolean warCDI, Class<?>... classes)
    {
       WebArchive war = ShrinkWrap.create(warName, WebArchive.class);
       for (Class<?> clazz: classes)
@@ -555,14 +169,14 @@
       return war;
    }
 
-   private WebArchive createWarWithLib(boolean warCDI, boolean libCDI)
+   protected WebArchive createWarWithLib(boolean warCDI, boolean libCDI)
    {
       WebArchive war = createWar(warCDI);
       createLib(war, "lib.jar", libCDI, UIWebBean.class);
       return war;
    }
 
-   private WebArchive createWarWithLibs(boolean warCDI, boolean lib1CDI, boolean lib2CDI)
+   protected WebArchive createWarWithLibs(boolean warCDI, boolean lib1CDI, boolean lib2CDI)
    {
       WebArchive war = createWar(warCDI);
       createLib(war, "lib1.jar", lib1CDI, UIWebBean.class);
@@ -570,7 +184,7 @@
       return war;
    }
 
-   private void createLib(LibraryContainer<?> archive, String libName, boolean cdi, Class<?>... classes)
+   protected void createLib(LibraryContainer<?> archive, String libName, boolean cdi, Class<?>... classes)
    {
       JavaArchive lib = ShrinkWrap.create(libName, JavaArchive.class);
       if (cdi)
@@ -585,19 +199,6 @@
    }
 
    /**
-    * Asserts that there is only one environment resultant from the deployment.
-    * 
-    * @param name the name of the environment
-    * @return     the environment
-    */
-   protected abstract E assertSingleEnvironment(String name);
-   
-   /**
-    * Asserts that there is no environment resultant from the deployment.
-    */
-   protected abstract void assertEmptyEnvironment();
-
-   /**
     * Returns the classes recorded in the environment.
     * 
     * @param environment the environment

Added: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/AbstractSingleArchiveTest.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/AbstractSingleArchiveTest.java	                        (rev 0)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/AbstractSingleArchiveTest.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -0,0 +1,431 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.test.deployers.test;
+
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.test.deployers.support.MockArchiveManifest;
+import org.jboss.test.deployers.support.crm.CrmWebBean;
+import org.jboss.test.deployers.support.ejb.BusinessInterface;
+import org.jboss.test.deployers.support.ejb.MySLSBean;
+import org.jboss.test.deployers.support.ext.ExternalWebBean;
+import org.jboss.test.deployers.support.jar.PlainJavaBean;
+import org.jboss.test.deployers.support.jsf.NotWBJsfBean;
+import org.jboss.test.deployers.support.ui.UIWebBean;
+import org.jboss.test.deployers.support.util.SomeUtil;
+import org.jboss.test.deployers.support.web.ServletWebBean;
+import org.jboss.vfs.VirtualFile;
+
+/**
+ * Abstract test case that contains scenarios involving the deployment of a single archive.
+ * This test does not contain test scenarios that assert the behaviour when more than one
+ * archive is deployed at the same time.
+ *
+ * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @param E the type of environment this test applies to
+ */
+public abstract class AbstractSingleArchiveTest<E> extends AbstractEnvironmentTest<E>
+{
+   public AbstractSingleArchiveTest(String name)
+   {
+      super(name);
+   }
+
+   protected DeploymentUnit unit;
+
+   public void testEjbJar() throws Exception
+   {
+      JavaArchive ejbJar = createEjbJar(true);
+      unit = assertDeploy(ejbJar);
+
+      E environment = assertSingleEnvironment(EJB_JAR_NAME);
+      assertExpectedClasses(environment, PlainJavaBean.class);
+      assertExpectedResources(environment, "ejb.jar");
+   }
+
+   public void testEjbJarWithoutXml() throws Exception
+   {
+      JavaArchive ejbJar = createEjbJar(false);
+      unit = assertDeploy(ejbJar);
+      
+      assertEmptyEnvironment();
+   }
+
+   public void testEjbJarInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create(EAR_NAME, EnterpriseArchive.class);
+      JavaArchive ejbJar = createEjbJar(true);
+      ear.addModule(ejbJar);
+      MockArchiveManifest.addManifest(ear);
+      unit = assertDeploy(ear);
+      
+      E environment = assertSingleEnvironment(EAR_NAME);
+      assertExpectedClasses(environment, PlainJavaBean.class);
+      assertExpectedResources(environment, unit.getSimpleName() + "/ejb.jar");
+   }
+
+   public void testEjbJarWithoutXmlInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create(EAR_NAME, EnterpriseArchive.class);
+      JavaArchive ejbJar = createEjbJar(false);
+      ear.addModule(ejbJar);
+      MockArchiveManifest.addManifest(ear);
+      unit = assertDeploy(ear);
+      
+      assertEmptyEnvironment();
+   }
+
+   public void testEjbJarsInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create(EAR_NAME, EnterpriseArchive.class);
+      JavaArchive ejbJar1 = createEjbJar("ejbJar1.jar", true, PlainJavaBean.class);
+      ear.addModule(ejbJar1);
+      JavaArchive ejbJar2 = createEjbJar("ejbJar2.jar", true, MySLSBean.class, BusinessInterface.class);
+      ear.addModule(ejbJar2);
+      MockArchiveManifest.addManifest(ear);
+      unit = assertDeploy(ear);
+      
+      E environment = assertSingleEnvironment(EAR_NAME);
+      assertExpectedClasses(environment, PlainJavaBean.class, MySLSBean.class,
+               BusinessInterface.class);
+      assertExpectedResources(environment, EAR_NAME + "/ejbJar1.jar",
+               EAR_NAME + "/ejbJar2.jar");
+   }
+
+   public void testMixedEjbJarsInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create(EAR_NAME, EnterpriseArchive.class);
+      JavaArchive ejbJar1 = createEjbJar("ejbJar1.jar", false, PlainJavaBean.class);
+      ear.addModule(ejbJar1);
+      JavaArchive ejbJar2 = createEjbJar("ejbJar2.jar", true, MySLSBean.class, BusinessInterface.class);
+      ear.addModule(ejbJar2);
+      MockArchiveManifest.addManifest(ear);
+      unit = assertDeploy(ear);
+      
+      E environment = assertSingleEnvironment(EAR_NAME);
+      assertExpectedClasses(environment, MySLSBean.class, BusinessInterface.class);
+      assertExpectedResources(environment, "simple.ear/ejbJar2.jar");
+   }
+
+   public void testEjbJarsWithoutXmlInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create(EAR_NAME, EnterpriseArchive.class);
+      JavaArchive ejbJar1 = createEjbJar("ejbJar1.jar", false, PlainJavaBean.class);
+      ear.addModule(ejbJar1);
+      JavaArchive ejbJar2 = createEjbJar("ejbJar2.jar", false, MySLSBean.class, BusinessInterface.class);
+      ear.addModule(ejbJar2);
+      MockArchiveManifest.addManifest(ear);
+      unit = assertDeploy(ear);
+      
+      assertEmptyEnvironment();
+   }
+
+   public void testWar() throws Exception
+   {
+      WebArchive war = createWar(true);
+      unit = assertDeploy(war);
+      
+      E environment = assertSingleEnvironment(WAR_NAME);
+      assertExpectedClasses(environment, ServletWebBean.class);
+      assertExpectedWarResources(environment, unit.getSimpleName(), true);
+   }
+
+   public void testWarWithLib() throws Exception
+   {
+      WebArchive war = createWarWithLib(true, true);
+      unit = assertDeploy(war);
+      
+      E environment = assertSingleEnvironment(WAR_NAME);
+      assertExpectedClasses(environment, ServletWebBean.class, UIWebBean.class);
+      assertExpectedWarResources(environment, unit.getSimpleName(), true, "lib.jar");
+   }
+
+   public void testWarWithLibs() throws Exception
+   {
+      WebArchive war = createWarWithLibs(true, true, true);
+      unit = assertDeploy(war);
+      
+      E environment = assertSingleEnvironment(WAR_NAME);
+      assertExpectedClasses(environment, ServletWebBean.class, UIWebBean.class, CrmWebBean.class);
+      assertExpectedWarResources(environment, unit.getSimpleName(), true, "lib1.jar", "lib2.jar");
+   }
+
+   public void testWarWithLibWithoutXml() throws Exception
+   {
+      WebArchive war = createWarWithLib(true, false);
+      unit = assertDeploy(war);
+      
+      E environment = assertSingleEnvironment(WAR_NAME);
+      assertExpectedClasses(environment, ServletWebBean.class);
+      assertExpectedWarResources(environment, unit.getSimpleName(), true);
+   }
+
+   public void testWarWithLibsWithoutXml() throws Exception
+   {
+      WebArchive war = createWarWithLibs(true, false, false);
+      unit = assertDeploy(war);
+      
+      E environment = assertSingleEnvironment(WAR_NAME);
+      assertExpectedClasses(environment, ServletWebBean.class);
+      assertExpectedWarResources(environment, unit.getSimpleName(), true);
+   }
+
+   public void testWarWithMixedLibs() throws Exception
+   {
+      WebArchive war = createWarWithLibs(true, true, false);
+      unit = assertDeploy(war);
+      
+      E environment = assertSingleEnvironment(WAR_NAME);
+      assertExpectedClasses(environment, ServletWebBean.class, UIWebBean.class);
+      assertExpectedWarResources(environment, unit.getSimpleName(), true, "lib1.jar");
+   }
+
+   public void testWarWithoutXmlWithLib() throws Exception
+   {
+      WebArchive war = createWarWithLib(false, true);
+      unit = assertDeploy(war);
+      
+      E environment = assertSingleEnvironment(WAR_NAME);
+      assertExpectedClasses(environment, UIWebBean.class);
+      assertExpectedWarResources(environment, unit.getSimpleName(), false, "lib.jar");
+   }
+
+   public void testWarWithoutXmlWithLibs() throws Exception
+   {
+      WebArchive war = createWarWithLibs(false, true, true);
+      unit = assertDeploy(war);
+      
+      E environment = assertSingleEnvironment(WAR_NAME);
+      assertExpectedClasses(environment, UIWebBean.class, CrmWebBean.class);
+      assertExpectedWarResources(environment, unit.getSimpleName(), false, "lib1.jar", "lib2.jar");
+   }
+
+   public void testWarWithoutXmlWithLibWithoutXml() throws Exception
+   {
+      WebArchive war = createWarWithLib(false, false);
+      unit = assertDeploy(war);
+      
+      assertEmptyEnvironment();
+   }
+
+   public void testWarWithoutXmlWithMixedLibs() throws Exception
+   {
+      WebArchive war = createWarWithLibs(false, true, false);
+      unit = assertDeploy(war);
+      
+      E environment = assertSingleEnvironment(WAR_NAME);
+      assertExpectedClasses(environment, UIWebBean.class);
+      assertExpectedWarResources(environment, unit.getSimpleName(), false, "lib1.jar");
+   }
+
+   public void testWarWithoutXmlWithLibsWithoutXml() throws Exception
+   {
+      WebArchive war = createWarWithLibs(false, false, false);
+      unit = assertDeploy(war);
+      
+      assertEmptyEnvironment();
+   }
+
+   public void testWarWithoutXml() throws Exception
+   {
+      WebArchive war = createWar(false);
+      unit = assertDeploy(war);
+      
+      assertEmptyEnvironment();
+   }
+
+   public void testWarInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
+      WebArchive war = createWar(true);
+      ear.addModule(war);
+      MockArchiveManifest.addManifest(ear);
+      unit = assertDeploy(ear);
+      
+      E environment = assertSingleEnvironment("warinear.ear/simple.war");
+      assertExpectedClasses(environment, ServletWebBean.class);
+      assertExpectedWarResources(environment, "warinear.ear/simple.war", true);
+   }
+
+   public void testWarsInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
+      WebArchive war = createWar("simple1.war", true, ServletWebBean.class);
+      ear.addModule(war);
+      war = createWar("simple2.war", true, NotWBJsfBean.class);
+      ear.addModule(war);
+      MockArchiveManifest.addManifest(ear);
+      unit = assertDeploy(ear);
+      
+      assertWarsInEar();
+   }
+
+   protected abstract void assertWarsInEar();
+
+   public void testMixedWarsInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
+      WebArchive war = createWar("simple1.war", true, ServletWebBean.class);
+      ear.addModule(war);
+      war = createWar("simple2.war", false, NotWBJsfBean.class);
+      ear.addModule(war);
+      MockArchiveManifest.addManifest(ear);
+      unit = assertDeploy(ear);
+      
+      E environment = assertSingleEnvironment("warinear.ear/simple1.war");
+      assertExpectedClasses(environment, ServletWebBean.class);
+      assertExpectedWarResources(environment, "warinear.ear/simple1.war", true);
+   }
+
+   public void testWarsWithoutXmlInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
+      WebArchive war = createWar("simple1.war", false, ServletWebBean.class);
+      ear.addModule(war);
+      war = createWar("simple2.war", false, NotWBJsfBean.class);
+      ear.addModule(war);
+      MockArchiveManifest.addManifest(ear);
+      unit = assertDeploy(ear);
+      
+      assertEmptyEnvironment();
+   }
+
+   public void testWarWithLibInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
+      WebArchive war = createWarWithLib(true, true);
+      ear.addModule(war);
+      MockArchiveManifest.addManifest(ear);
+      unit = assertDeploy(ear);
+      
+      E environment = assertSingleEnvironment("warinear.ear/" + WAR_NAME);
+      assertExpectedClasses(environment, ServletWebBean.class, UIWebBean.class);
+      assertExpectedWarResources(environment, "warinear.ear/" + WAR_NAME, true, "lib.jar");
+   }
+
+   public void testWarWithLibWithoutXmlInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
+      WebArchive war = createWarWithLib(true, false);
+      ear.addModule(war);
+      MockArchiveManifest.addManifest(ear);
+      unit = assertDeploy(ear);
+      
+      E environment = assertSingleEnvironment("warinear.ear/" + WAR_NAME);
+      assertExpectedClasses(environment, ServletWebBean.class);
+      assertExpectedWarResources(environment, "warinear.ear/" + WAR_NAME, true);
+   }
+
+   public void testWarWithoutXmlWithLibWithoutXmlInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
+      WebArchive war = createWarWithLib(false, false);
+      ear.addModule(war);
+      MockArchiveManifest.addManifest(ear);
+      unit = assertDeploy(ear);
+      
+      assertEmptyEnvironment();
+   }
+
+   public void testWarWithoutXmlWithLibInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
+      WebArchive war = createWarWithLib(false, true);
+      ear.addModule(war);
+      MockArchiveManifest.addManifest(ear);
+      unit = assertDeploy(ear);
+      
+      E environment = assertSingleEnvironment("warinear.ear/" + WAR_NAME);
+      assertExpectedClasses(environment, UIWebBean.class);
+      assertExpectedWarResources(environment, "warinear.ear/" + WAR_NAME, false, "lib.jar");
+   }
+
+   public void testBasicEar() throws Exception
+   {
+      VirtualFile ear = createBasicEar();
+      unit = assertDeploy(ear);
+
+      assertBasicEar();
+   }
+
+   protected abstract void assertBasicEar();
+
+   public void testBasicEarFullCDI() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create("top-level.ear", EnterpriseArchive.class);
+      createLib(ear, "util.jar", true, SomeUtil.class);
+      createLib(ear, "ext.jar", true, ExternalWebBean.class);
+      JavaArchive ejbJar = createEjbJar("simple.jar", true, PlainJavaBean.class);
+      ear.addModule(ejbJar);
+      ejbJar = createEjbJar("ejbs.jar", true, MySLSBean.class, BusinessInterface.class);
+      ear.addModule(ejbJar);
+      WebArchive war = createWar("simple.war", true, ServletWebBean.class);
+      createLib(war, "ui.jar", true, UIWebBean.class);
+      ear.addModule(war);
+      war = createWar("crm.war", true, NotWBJsfBean.class);
+      createLib(war, "crm.jar", true, CrmWebBean.class);
+      ear.addModule(war);
+      unit = assertDeploy(ear);
+      
+      assertBasicEarFullCDI();
+   }
+
+   protected abstract void assertBasicEarFullCDI();
+
+   public void testBasicEarWithoutXml() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create("simple.ear", EnterpriseArchive.class);
+      createLib(ear, "util.jar", false, SomeUtil.class);
+      createLib(ear, "ext.jar", false, ExternalWebBean.class);
+      JavaArchive ejbJar = createEjbJar("simple.jar", false, PlainJavaBean.class);
+      ear.addModule(ejbJar);
+      ejbJar = createEjbJar("ejbs.jar", false, MySLSBean.class, BusinessInterface.class);
+      ear.addModule(ejbJar);
+      WebArchive war = createWar("simple.war", false, ServletWebBean.class);
+      createLib(war, "ui.jar", false, UIWebBean.class);
+      ear.addModule(war);
+      war = createWar("crm.war", false, NotWBJsfBean.class);
+      createLib(war, "crm.jar", false, CrmWebBean.class);
+      ear.addModule(war);
+      unit = assertDeploy(ear);
+
+      assertBasicEarWithoutXml();
+   }
+
+   protected abstract void assertBasicEarWithoutXml();
+
+   /**
+    * Asserts that there is no environment resultant from the deployment.
+    */
+   protected abstract void assertEmptyEnvironment();
+
+   /**
+    * Asserts that there is only one environment resultant from the deployment.
+    * 
+    * @param name the name of the environment
+    * @return     the environment
+    */
+   protected abstract E assertSingleEnvironment(String name);
+}


Property changes on: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/AbstractSingleArchiveTest.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Modified: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/ArchiveEnvironmentTestCase.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/ArchiveEnvironmentTestCase.java	2010-07-20 02:09:55 UTC (rev 106874)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/ArchiveEnvironmentTestCase.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -46,7 +46,7 @@
  * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
  * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
  */
-public class ArchiveEnvironmentTestCase extends AbstractEnvironmentTest<WeldDiscoveryEnvironment>
+public class ArchiveEnvironmentTestCase extends AbstractSingleArchiveTest<WeldDiscoveryEnvironment>
 {
    public ArchiveEnvironmentTestCase(String name)
    {

Modified: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/DeploymentEnvironmentTestCase.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/DeploymentEnvironmentTestCase.java	2010-07-20 02:09:55 UTC (rev 106874)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/DeploymentEnvironmentTestCase.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -54,7 +54,7 @@
  * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
  * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
  */
-public class DeploymentEnvironmentTestCase extends AbstractEnvironmentTest<BeanDeploymentArchive>
+public class DeploymentEnvironmentTestCase extends AbstractSingleArchiveTest<BeanDeploymentArchive>
 {
    public DeploymentEnvironmentTestCase(String name)
    {

Added: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/LoadBeanDeploymentArchiveTestCase.java
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/LoadBeanDeploymentArchiveTestCase.java	                        (rev 0)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/LoadBeanDeploymentArchiveTestCase.java	2010-07-20 03:47:07 UTC (rev 106875)
@@ -0,0 +1,907 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file 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.test.deployers.test;
+
+import java.net.URL;
+import java.util.Collection;
+import java.util.Iterator;
+
+import junit.framework.Test;
+
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.test.deployers.support.CheckableBootstrap;
+import org.jboss.test.deployers.support.MockArchiveManifest;
+import org.jboss.test.deployers.support.MockEjbServices;
+import org.jboss.test.deployers.support.MockEmptyEjbServices;
+import org.jboss.test.deployers.support.MockTransactionServices;
+import org.jboss.test.deployers.support.MockWeldBootstrap;
+import org.jboss.test.deployers.support.WeldDEWrapper;
+import org.jboss.test.deployers.support.crm.CrmWebBean;
+import org.jboss.test.deployers.support.ejb.BusinessInterface;
+import org.jboss.test.deployers.support.ejb.MySLSBean;
+import org.jboss.test.deployers.support.ext.ExternalWebBean;
+import org.jboss.test.deployers.support.jar.PlainJavaBean;
+import org.jboss.test.deployers.support.jsf.NotWBJsfBean;
+import org.jboss.test.deployers.support.ui.UIWebBean;
+import org.jboss.test.deployers.support.util.SomeUtil;
+import org.jboss.test.deployers.support.web.ServletWebBean;
+import org.jboss.test.deployers.vfs.classloader.support.a.A;
+import org.jboss.test.deployers.vfs.classloader.support.b.B;
+import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
+import org.jboss.weld.bootstrap.spi.Deployment;
+import org.jboss.weld.integration.deployer.DeployersUtils;
+
+/**
+ * Deployment.loadBeanDeploymentArchive test case.
+ *
+ * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
+ */
+public class LoadBeanDeploymentArchiveTestCase extends AbstractEnvironmentTest<BeanDeploymentArchive>
+{
+   public LoadBeanDeploymentArchiveTestCase(String name)
+   {
+      super(name);
+   }
+
+   public static Test suite()
+   {
+      return suite(LoadBeanDeploymentArchiveTestCase.class);
+   }
+
+   public void setUp() throws Exception
+   {
+      super.setUp();
+      JavaArchive mockJar = ShrinkWrap.create("mock.jar", JavaArchive.class);
+      mockJar.addClass(CheckableBootstrap.class);
+      mockJar.addClass(MockEjbServices.class);
+      mockJar.addClass(MockEmptyEjbServices.class);
+      mockJar.addClass(MockTransactionServices.class);
+      mockJar.addClass(MockWeldBootstrap.class);
+      mockJar.addClass(WeldDEWrapper.class);
+      assertDeploy(mockJar);
+   }
+
+   public void testEjbJars() throws Exception
+   {
+      // ejb1.jar
+      JavaArchive ejbJar1 = createEjbJar("ejb1.jar", true, PlainJavaBean.class);
+      DeploymentUnit unit = assertDeploy(ejbJar1);
+      Class<?> plainJavaBeanClass = getClass(PlainJavaBean.class, unit);
+      Deployment deployment1 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+      // ejb2.jar
+      JavaArchive ejbJar2 = createEjbJar("ejb2.jar", true,  MySLSBean.class, BusinessInterface.class);
+      unit = assertDeploy(ejbJar2);
+      Class<?> mySLSBeanClass = getClass(MySLSBean.class, unit);
+      Class<?> businessInterface = getClass(BusinessInterface.class, unit);
+      Deployment deployment2 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+      
+      assertNotSame(deployment1, deployment2);
+      
+      BeanDeploymentArchive bda1 = deployment1.getBeanDeploymentArchives().iterator().next();
+      BeanDeploymentArchive bda2 = deployment2.getBeanDeploymentArchives().iterator().next();
+      // double invocation should yield the same result
+      assertSame(bda1, deployment1.loadBeanDeploymentArchive(plainJavaBeanClass));
+      assertSame(bda1, deployment1.loadBeanDeploymentArchive(plainJavaBeanClass));
+      
+      assertSame(bda2, deployment1.loadBeanDeploymentArchive(mySLSBeanClass));
+      assertSame(bda2, deployment1.loadBeanDeploymentArchive(businessInterface));
+      assertSame(bda2, deployment1.loadBeanDeploymentArchive(mySLSBeanClass));
+      assertSame(bda2, deployment1.loadBeanDeploymentArchive(businessInterface));
+      
+      assertSame(bda1, deployment2.loadBeanDeploymentArchive(plainJavaBeanClass));
+      assertSame(bda1, deployment2.loadBeanDeploymentArchive(plainJavaBeanClass));
+      assertSame(bda2, deployment2.loadBeanDeploymentArchive(mySLSBeanClass));
+      assertSame(bda2, deployment2.loadBeanDeploymentArchive(mySLSBeanClass));
+      assertSame(bda2, deployment2.loadBeanDeploymentArchive(businessInterface));
+      assertSame(bda2, deployment2.loadBeanDeploymentArchive(businessInterface));
+   }
+
+   public void testMixedEjbJars() throws Exception
+   {
+      // ejb1.jar
+      JavaArchive ejbJar1 = createEjbJar("ejb1.jar", true, PlainJavaBean.class);
+      DeploymentUnit unit = assertDeploy(ejbJar1);
+      Class<?> plainJavaBeanClass = getClass(PlainJavaBean.class, unit);
+      Deployment deployment1 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+      // ejb2.jar
+      JavaArchive ejbJar2 = createEjbJar("ejb2.jar", false,  MySLSBean.class, BusinessInterface.class);
+      unit = assertDeploy(ejbJar2);
+      ClassLoader classLoader2 = unit.getClassLoader();
+      Class<?> mySLSBeanClass = classLoader2.loadClass(MySLSBean.class.getName());
+      Class<?> businessInterface = classLoader2.loadClass(BusinessInterface.class.getName());
+      
+      BeanDeploymentArchive bda1 = deployment1.getBeanDeploymentArchives().iterator().next();
+      assertSame(bda1, deployment1.loadBeanDeploymentArchive(plainJavaBeanClass));
+      // creation of bda2 on demand
+      BeanDeploymentArchive bda2 = deployment1.loadBeanDeploymentArchive(mySLSBeanClass);
+      assertBDAId(bda2, "ejb2.jar");
+      assertExpectedClasses(bda2, MySLSBean.class);
+      assertExpectedResources(bda2);
+      // double invocation
+      assertSame(bda2, deployment1.loadBeanDeploymentArchive(mySLSBeanClass));
+      assertBDAId(bda2, "ejb2.jar");
+      assertExpectedClasses(bda2, MySLSBean.class);
+      assertExpectedResources(bda2);
+      // inclusion of BusinessInterface
+      assertSame(bda2, deployment1.loadBeanDeploymentArchive(businessInterface));
+      assertBDAId(bda2, "ejb2.jar");
+      assertExpectedClasses(bda2, MySLSBean.class, BusinessInterface.class);
+      assertExpectedResources(bda2);
+      // double invocation
+      assertSame(bda2, deployment1.loadBeanDeploymentArchive(businessInterface));
+      assertBDAId(bda2, "ejb2.jar");
+      assertExpectedClasses(bda2, MySLSBean.class, BusinessInterface.class);
+      assertExpectedResources(bda2);
+   }
+
+   public void testEjbJarsInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create(EAR_NAME, EnterpriseArchive.class);
+      JavaArchive ejbJar1 = createEjbJar("ejbJar1.jar", true, PlainJavaBean.class);
+      ear.addModule(ejbJar1);
+      JavaArchive ejbJar2 = createEjbJar("ejbJar2.jar", true, MySLSBean.class, BusinessInterface.class);
+      ear.addModule(ejbJar2);
+      MockArchiveManifest.addManifest(ear);
+      DeploymentUnit unit = assertDeploy(ear);
+      Class<?> plainJavaBeanClass = getClass(PlainJavaBean.class, unit);
+      Class<?> mySLSBeanClass = getClass(MySLSBean.class, unit);
+      Class<?> businessInterface = getClass(BusinessInterface.class, unit);
+      
+      Deployment deployment = (Deployment) getBean(Deployment.class);
+      BeanDeploymentArchive bda = deployment.loadBeanDeploymentArchive(plainJavaBeanClass);
+      assertBDAId(bda, EAR_NAME);
+      assertExpectedClasses(bda, PlainJavaBean.class, MySLSBean.class, BusinessInterface.class);
+      assertSame(bda, deployment.loadBeanDeploymentArchive(mySLSBeanClass));
+      assertSame(bda, deployment.loadBeanDeploymentArchive(businessInterface));
+   }
+   
+   
+   public void testMixedEjbJarsInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create(EAR_NAME, EnterpriseArchive.class);
+      JavaArchive ejbJar1 = createEjbJar("ejbJar1.jar", true, PlainJavaBean.class);
+      ear.addModule(ejbJar1);
+      JavaArchive ejbJar2 = createEjbJar("ejbJar2.jar", false, MySLSBean.class, BusinessInterface.class);
+      ear.addModule(ejbJar2);
+      MockArchiveManifest.addManifest(ear);
+      DeploymentUnit unit = assertDeploy(ear);
+      Class<?> plainJavaBeanClass = getClass(PlainJavaBean.class, unit);
+      Class<?> mySLSBeanClass = getClass(MySLSBean.class, unit);
+      Class<?> businessInterface = getClass(BusinessInterface.class, unit);
+      
+      Deployment deployment = (Deployment) getBean(Deployment.class);
+      BeanDeploymentArchive bda = deployment.loadBeanDeploymentArchive(plainJavaBeanClass);
+      assertBDAId(bda, EAR_NAME);
+      assertExpectedClasses(bda, PlainJavaBean.class);
+      assertSame(bda, deployment.loadBeanDeploymentArchive(mySLSBeanClass));
+      assertBDAId(bda, EAR_NAME);
+      assertExpectedClasses(bda, PlainJavaBean.class, MySLSBean.class);
+      // make sure double invocation does not affect the bda contents
+      assertSame(bda, deployment.loadBeanDeploymentArchive(mySLSBeanClass));
+      assertBDAId(bda, EAR_NAME);
+      assertExpectedClasses(bda, PlainJavaBean.class, MySLSBean.class);
+      assertSame(bda, deployment.loadBeanDeploymentArchive(businessInterface));
+      assertSame(bda, deployment.loadBeanDeploymentArchive(mySLSBeanClass));
+      assertBDAId(bda, EAR_NAME);
+      assertExpectedClasses(bda, PlainJavaBean.class, MySLSBean.class, BusinessInterface.class);
+   }
+   
+   public void testEjbJarsInEars() throws Exception
+   {
+      // simple1.ear
+      EnterpriseArchive ear1 = ShrinkWrap.create("simple1.ear", EnterpriseArchive.class);
+      JavaArchive ejbJar1 = createEjbJar("ejbJar1.jar", true, PlainJavaBean.class);
+      ear1.addModule(ejbJar1);
+      MockArchiveManifest.addManifest(ear1);
+      DeploymentUnit unit = assertDeploy(ear1);
+      Class<?> plainJavaBeanClass = getClass(PlainJavaBean.class, unit);
+      Deployment deployment1 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+      // simple2.ear
+      EnterpriseArchive ear2 = ShrinkWrap.create("simple2.ear", EnterpriseArchive.class);
+      JavaArchive ejbJar2 = createEjbJar("ejbJar2.jar", true, MySLSBean.class, BusinessInterface.class);
+      ear2.addModule(ejbJar2);
+      MockArchiveManifest.addManifest(ear2);
+      unit = assertDeploy(ear2);
+      Class<?> mySLSBeanClass = getClass(MySLSBean.class, unit);
+      Class<?> businessInterface = getClass(BusinessInterface.class, unit);
+      Deployment deployment2 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+      
+      BeanDeploymentArchive bda1 = deployment1.getBeanDeploymentArchives().iterator().next();
+      BeanDeploymentArchive bda2 = deployment2.getBeanDeploymentArchives().iterator().next();
+      // double invocation should yield the same result
+      assertSame(bda1, deployment1.loadBeanDeploymentArchive(plainJavaBeanClass));
+      assertSame(bda1, deployment1.loadBeanDeploymentArchive(plainJavaBeanClass));
+      
+      assertSame(bda2, deployment1.loadBeanDeploymentArchive(mySLSBeanClass));
+      assertSame(bda2, deployment1.loadBeanDeploymentArchive(businessInterface));
+      assertSame(bda2, deployment1.loadBeanDeploymentArchive(mySLSBeanClass));
+      assertSame(bda2, deployment1.loadBeanDeploymentArchive(businessInterface));
+      
+      assertSame(bda1, deployment2.loadBeanDeploymentArchive(plainJavaBeanClass));
+      assertSame(bda1, deployment2.loadBeanDeploymentArchive(plainJavaBeanClass));
+      assertSame(bda2, deployment2.loadBeanDeploymentArchive(mySLSBeanClass));
+      assertSame(bda2, deployment2.loadBeanDeploymentArchive(mySLSBeanClass));
+      assertSame(bda2, deployment2.loadBeanDeploymentArchive(businessInterface));
+      assertSame(bda2, deployment2.loadBeanDeploymentArchive(businessInterface));
+   }
+   
+   
+   public void testMixedEjbJarsInEars() throws Exception
+   {
+      // simple1.ear
+      EnterpriseArchive ear1 = ShrinkWrap.create("simple1.ear", EnterpriseArchive.class);
+      JavaArchive ejbJar1 = createEjbJar("ejbJar1.jar", false, PlainJavaBean.class);
+      ear1.addModule(ejbJar1);
+      MockArchiveManifest.addManifest(ear1);
+      DeploymentUnit unit = assertDeploy(ear1);
+      Class<?> plainJavaBeanClass = getClass(PlainJavaBean.class, unit);
+
+      // simple2.ear
+      EnterpriseArchive ear2 = ShrinkWrap.create("simple2.ear", EnterpriseArchive.class);
+      JavaArchive ejbJar2 = createEjbJar("ejbJar2.jar", true, MySLSBean.class, BusinessInterface.class);
+      ear2.addModule(ejbJar2);
+      MockArchiveManifest.addManifest(ear2);
+      unit = assertDeploy(ear2);
+      Class<?> mySLSBeanClass = getClass(MySLSBean.class, unit);
+      Class<?> businessInterface = getClass(BusinessInterface.class, unit);
+      Deployment deployment2 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+      
+      BeanDeploymentArchive bda2 = deployment2.getBeanDeploymentArchives().iterator().next();
+      // contents of BDA2
+      assertBDAId(bda2, "simple2.ear");
+      assertExpectedClasses(bda2, MySLSBean.class, BusinessInterface.class);
+      // call loadBDA
+      assertSame(bda2, deployment2.loadBeanDeploymentArchive(mySLSBeanClass));
+      assertSame(bda2, deployment2.loadBeanDeploymentArchive(businessInterface));
+      // make sure that loadBDA did not change the contents of BDA2
+      assertBDAId(bda2, "simple2.ear");
+      assertExpectedClasses(bda2, MySLSBean.class, BusinessInterface.class);
+      
+      // creation of bda1 on demand
+      BeanDeploymentArchive bda1 = deployment2.loadBeanDeploymentArchive(plainJavaBeanClass);
+      assertBDAId(bda1, "simple1.ear");
+      assertExpectedClasses(bda1, PlainJavaBean.class);
+      assertExpectedResources(bda1);
+      // double invocation
+      assertSame(bda1, deployment2.loadBeanDeploymentArchive(plainJavaBeanClass));
+      assertBDAId(bda1, "simple1.ear");
+      assertExpectedClasses(bda1, PlainJavaBean.class);
+      assertExpectedResources(bda1);
+   }
+   
+   public void testWars() throws Exception
+   {
+      WebArchive war1 = createWar("simple1.war", true, ServletWebBean.class);
+      DeploymentUnit unit = assertDeploy(war1);
+      Class<?> servletWebBeanClass = getClass(ServletWebBean.class, unit);
+      Deployment deployment1 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+
+      WebArchive war2 = createWar("simple2.war", true, NotWBJsfBean.class);
+      unit = assertDeploy(war2);
+      Class<?> notWBJsfBeanClass = getClass(NotWBJsfBean.class, unit);
+      Deployment deployment2 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+
+      assertCannotLoadBDA(deployment1, notWBJsfBeanClass);
+      assertCannotLoadBDA(deployment2, servletWebBeanClass);
+      
+      BeanDeploymentArchive bda1 = deployment1.getBeanDeploymentArchives().iterator().next();
+      assertBDAId(bda1, "simple1.war");
+      assertExpectedClasses(bda1, ServletWebBean.class);
+      assertSame(bda1, deployment1.loadBeanDeploymentArchive(servletWebBeanClass));
+      // make sure loadBDA didn't change the bda structure
+      assertBDAId(bda1, "simple1.war");
+      assertExpectedClasses(bda1, ServletWebBean.class);
+      
+      BeanDeploymentArchive bda2 = deployment2.getBeanDeploymentArchives().iterator().next();
+      assertBDAId(bda2, "simple2.war");
+      assertExpectedClasses(bda2, NotWBJsfBean.class);
+      assertSame(bda2, deployment2.loadBeanDeploymentArchive(notWBJsfBeanClass));
+      // make sure loadBDA didn't change the bda structure
+      assertBDAId(bda2, "simple2.war");
+      assertExpectedClasses(bda2, NotWBJsfBean.class);
+   }
+   
+   public void testMixedWars() throws Exception
+   {
+      WebArchive war1 = createWar("simple1.war", true, ServletWebBean.class);
+      DeploymentUnit unit = assertDeploy(war1);
+      Deployment deployment1 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+
+      WebArchive war2 = createWar("simple2.war", false, NotWBJsfBean.class);
+      unit = assertDeploy(war2);
+      Class<?> notWBJsfBeanClass = getClass(NotWBJsfBean.class, unit);
+
+      assertCannotLoadBDA(deployment1, notWBJsfBeanClass);
+   }
+   
+   public void testWarWithLib() throws Exception
+   {
+      WebArchive war = createWarWithLib(true, true);
+      DeploymentUnit unit = assertDeploy(war);
+      Class<?> servletWebBeanClass = getClass(ServletWebBean.class, unit);
+      Class<?> uiWebBeanClass = getClass(UIWebBean.class, unit);
+      Deployment deployment = (Deployment) getBean(Deployment.class);
+      
+      BeanDeploymentArchive bda = deployment.getBeanDeploymentArchives().iterator().next();
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class, UIWebBean.class);
+      assertSame(bda, deployment.loadBeanDeploymentArchive(servletWebBeanClass));
+      assertSame(bda, deployment.loadBeanDeploymentArchive(uiWebBeanClass));
+      // make sure bda is unchanged
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class, UIWebBean.class);
+   }
+   
+   public void testWarWithLibWithoutXml() throws Exception
+   {
+      WebArchive war = createWarWithLib(true, false);
+      DeploymentUnit unit = assertDeploy(war);
+      Class<?> servletWebBeanClass = getClass(ServletWebBean.class, unit);
+      Class<?> uiWebBeanClass = getClass(UIWebBean.class, unit);
+      Deployment deployment = (Deployment) getBean(Deployment.class);
+      
+      BeanDeploymentArchive bda = deployment.getBeanDeploymentArchives().iterator().next();
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class);
+      assertSame(bda, deployment.loadBeanDeploymentArchive(servletWebBeanClass));
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class);
+      assertSame(bda, deployment.loadBeanDeploymentArchive(uiWebBeanClass));
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class, UIWebBean.class);
+      // duplicate call makes no difference in the bda contents
+      assertSame(bda, deployment.loadBeanDeploymentArchive(uiWebBeanClass));
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class, UIWebBean.class);
+   }
+   
+   public void testWarWithoutXmlWithLib() throws Exception
+   {
+      WebArchive war = createWarWithLib(false, true);
+      DeploymentUnit unit = assertDeploy(war);
+      Class<?> servletWebBeanClass = getClass(ServletWebBean.class, unit);
+      Class<?> uiWebBeanClass = getClass(UIWebBean.class, unit);
+      Deployment deployment = (Deployment) getBean(Deployment.class);
+      
+      BeanDeploymentArchive bda = deployment.getBeanDeploymentArchives().iterator().next();
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, UIWebBean.class);
+      assertSame(bda, deployment.loadBeanDeploymentArchive(servletWebBeanClass));
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class, UIWebBean.class);
+      // duplicate call makes no difference in the bda contents
+      assertSame(bda, deployment.loadBeanDeploymentArchive(servletWebBeanClass));
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class, UIWebBean.class);
+      assertSame(bda, deployment.loadBeanDeploymentArchive(uiWebBeanClass));
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class, UIWebBean.class);
+   }
+   
+   public void testWarWithMixedLibs() throws Exception
+   {
+      WebArchive war = createWarWithLibs(true, true, false);
+      DeploymentUnit unit = assertDeploy(war);
+      Class<?> servletWebBeanClass = getClass(ServletWebBean.class, unit);
+      Class<?> uiWebBeanClass = getClass(UIWebBean.class, unit);
+      Class<?> crmWebBeanClass = getClass(CrmWebBean.class, unit);
+      Deployment deployment = (Deployment) getBean(Deployment.class);
+      
+      BeanDeploymentArchive bda = deployment.getBeanDeploymentArchives().iterator().next();
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class, UIWebBean.class);
+      assertSame(bda, deployment.loadBeanDeploymentArchive(servletWebBeanClass));
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class, UIWebBean.class);
+      assertSame(bda, deployment.loadBeanDeploymentArchive(uiWebBeanClass));
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class, UIWebBean.class);
+      assertSame(bda, deployment.loadBeanDeploymentArchive(crmWebBeanClass));
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class, UIWebBean.class, CrmWebBean.class);
+      // duplicate call makes no difference in the bda contents
+      assertSame(bda, deployment.loadBeanDeploymentArchive(crmWebBeanClass));
+      assertBDAId(bda, WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class, UIWebBean.class, CrmWebBean.class);
+   }
+   
+
+   public void testWarInEars() throws Exception
+   {
+      EnterpriseArchive ear1 = ShrinkWrap.create("warinear1.ear", EnterpriseArchive.class);
+      WebArchive war1 = createWar(true);
+      ear1.addModule(war1);
+      MockArchiveManifest.addManifest(ear1);
+      DeploymentUnit unit = assertDeploy(ear1);
+      Class<?> servletWebBeanClass = getClass(ServletWebBean.class, unit.getChildren().iterator().next());
+      Deployment deployment1 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+      
+      EnterpriseArchive ear2 = ShrinkWrap.create("warinear2.ear", EnterpriseArchive.class);
+      WebArchive war2 = createWar(WAR_NAME, true, NotWBJsfBean.class);
+      ear2.addModule(war2);
+      MockArchiveManifest.addManifest(ear2);
+      unit = assertDeploy(ear2);
+      Class<?> notWBJsfBeanClass = getClass(NotWBJsfBean.class, unit.getChildren().iterator().next());
+      Deployment deployment2 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+      
+      assertCannotLoadBDA(deployment1, notWBJsfBeanClass);
+      assertCannotLoadBDA(deployment2, servletWebBeanClass);
+   }
+
+   public void testWarsInEar() throws Exception
+   {
+      EnterpriseArchive ear = ShrinkWrap.create("warinear.ear", EnterpriseArchive.class);
+      WebArchive war1 = createWar("simple1.war", true, ServletWebBean.class);
+      ear.addModule(war1);
+      WebArchive war2 = createWar("simple2.war", true, NotWBJsfBean.class);
+      ear.addModule(war2);
+      MockArchiveManifest.addManifest(ear);
+      DeploymentUnit unit = assertDeploy(ear);
+      Iterator<DeploymentUnit> iterator = unit.getChildren().iterator();
+      DeploymentUnit unit1 = iterator.next();
+      DeploymentUnit unit2 = iterator.next();
+      if (unit2.getName().contains("simple1.war"))
+      {
+         DeploymentUnit temp = unit2;
+         unit2 = unit1;
+         unit1 = temp;
+      }
+      Class<?> servletWebBeanClass = getClass(ServletWebBean.class, unit1);
+      Class<?> notWBJsfBeanClass = getClass(NotWBJsfBean.class, unit2);
+      Deployment deployment = (Deployment) getBean(Deployment.class);
+      
+      BeanDeploymentArchive bda1 = deployment.loadBeanDeploymentArchive(servletWebBeanClass);
+      assertBDAId(bda1, "warinear.ear/simple1.war");
+      assertExpectedClasses(bda1, ServletWebBean.class);
+      
+      BeanDeploymentArchive bda2 = deployment.loadBeanDeploymentArchive(notWBJsfBeanClass);
+      assertBDAId(bda2, "warinear.ear/simple2.war");
+      assertExpectedClasses(bda2, NotWBJsfBean.class);
+   }
+   
+   public void testEjbJar_War() throws Exception
+   {
+      // ejb.jar
+      JavaArchive ejbJar = createEjbJar(true);
+      DeploymentUnit unit = assertDeploy(ejbJar);
+      Class<?> plainJavaBeanClass = getClass(PlainJavaBean.class, unit);
+      Deployment deployment1 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+      // simple.war
+      WebArchive war = createWar(true);
+      unit = assertDeploy(war);
+      Class<?> servletWebBeanClass = getClass(ServletWebBean.class, unit);
+      Deployment deployment2 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+      
+      assertCannotLoadBDA(deployment1, servletWebBeanClass);
+      
+      BeanDeploymentArchive bda = deployment1.getBeanDeploymentArchives().iterator().next();
+      assertBDAId(bda, EJB_JAR_NAME);
+      assertExpectedClasses(bda, PlainJavaBean.class);
+      assertSame(bda, deployment2.loadBeanDeploymentArchive(plainJavaBeanClass));
+      // make sure bda contents are unchanged
+      assertBDAId(bda, EJB_JAR_NAME);
+      assertExpectedClasses(bda, PlainJavaBean.class);
+   }
+   
+   public void testEjbJarAndWarInEar() throws Exception
+   {
+      // ejb.jar
+      EnterpriseArchive ear = ShrinkWrap.create(EAR_NAME, EnterpriseArchive.class);
+      JavaArchive ejbJar = createEjbJar(true);
+      ear.addModule(ejbJar);
+      // simple.war
+      WebArchive war = createWar(true);
+      ear.addModule(war);
+      MockArchiveManifest.addManifest(ear);
+      DeploymentUnit unit = assertDeploy(ear);
+      Class<?> plainJavaBeanClass = getClass(PlainJavaBean.class, unit);
+      Iterator<DeploymentUnit> iterator = unit.getChildren().iterator();
+      DeploymentUnit warUnit = null;
+      do
+      {
+         warUnit = iterator.next();
+      } while (!warUnit.getName().contains(WAR_NAME));
+      
+      Class<?> servletWebBeanClass = getClass(ServletWebBean.class, warUnit);
+      Deployment deployment = (Deployment) getBean(Deployment.class);
+      
+      
+      BeanDeploymentArchive bda = deployment.loadBeanDeploymentArchive(plainJavaBeanClass);
+      assertBDAId(bda, EAR_NAME);
+      assertExpectedClasses(bda, PlainJavaBean.class);
+      
+      bda = deployment.loadBeanDeploymentArchive(servletWebBeanClass);
+      assertBDAId(bda, EAR_NAME + "/" + WAR_NAME);
+      assertExpectedClasses(bda, ServletWebBean.class);
+   }
+   
+   public void testEjbJarInEar_War() throws Exception
+   {
+      // ejb.jar
+      EnterpriseArchive ear = ShrinkWrap.create(EAR_NAME, EnterpriseArchive.class);
+      JavaArchive ejbJar = createEjbJar(true);
+      ear.addModule(ejbJar);
+      MockArchiveManifest.addManifest(ear);
+      DeploymentUnit unit = assertDeploy(ear);
+      Class<?> plainJavaBeanClass = getClass(PlainJavaBean.class, unit);
+      Deployment deployment1 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+      // simple.war
+      WebArchive war = createWar(true);
+      unit = assertDeploy(war);
+      Class<?> servletWebBeanClass = getClass(ServletWebBean.class, unit);
+      Deployment deployment2 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+      
+      assertCannotLoadBDA(deployment1, servletWebBeanClass);
+      
+      BeanDeploymentArchive bda = deployment1.getBeanDeploymentArchives().iterator().next();
+      assertBDAId(bda, EAR_NAME);
+      assertExpectedClasses(bda, PlainJavaBean.class);
+      assertSame(bda, deployment2.loadBeanDeploymentArchive(plainJavaBeanClass));
+      // make sure bda contents are unchanged
+      assertBDAId(bda, EAR_NAME);
+      assertExpectedClasses(bda, PlainJavaBean.class);
+   }
+   
+   
+   public void testEjbJarInEar_WarWithLibInEar() throws Exception
+   {
+      // ejb.ear
+      EnterpriseArchive ejbEar = ShrinkWrap.create("ejb.ear", EnterpriseArchive.class);
+      JavaArchive ejbJar = createEjbJar(true);
+      ejbEar.addModule(ejbJar);
+      MockArchiveManifest.addManifest(ejbEar);
+      DeploymentUnit unit = assertDeploy(ejbEar);
+      Class<?> plainJavaBeanClass = getClass(PlainJavaBean.class, unit);
+      Deployment deployment1 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+      // war.ear
+      EnterpriseArchive warEar = ShrinkWrap.create("war.ear", EnterpriseArchive.class);
+      WebArchive war = createWarWithLib(true, false);
+      warEar.addModule(war);
+      MockArchiveManifest.addManifest(warEar);
+      unit = assertDeploy(warEar);
+      DeploymentUnit warUnit = unit.getChildren().iterator().next();
+      Class<?> servletWebBeanClass = getClass(ServletWebBean.class, warUnit);
+      Class<?> uiWebBeanClass = getClass(UIWebBean.class, warUnit);
+      Deployment deployment2 = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(unit));
+      
+      assertCannotLoadBDA(deployment1, servletWebBeanClass);
+      
+      BeanDeploymentArchive bda = deployment1.getBeanDeploymentArchives().iterator().next();
+      assertBDAId(bda, "ejb.ear");
+      assertExpectedClasses(bda, PlainJavaBean.class);
+      assertSame(bda, deployment2.loadBeanDeploymentArchive(plainJavaBeanClass));
+      // make sure bda contents are unchanged
+      assertBDAId(bda, "ejb.ear");
+      assertExpectedClasses(bda, PlainJavaBean.class);
+      
+      bda = deployment2.loadBeanDeploymentArchive(servletWebBeanClass);
+      String bdaName = "war.ear/" + WAR_NAME;
+      assertBDAId(bda, bdaName);
+      assertExpectedClasses(bda, ServletWebBean.class);
+      
+      BeanDeploymentArchive bda2 = deployment2.loadBeanDeploymentArchive(uiWebBeanClass);
+      assertSame(bda, bda2);
+      assertBDAId(bda, bdaName);
+      assertExpectedClasses(bda, ServletWebBean.class, UIWebBean.class);
+   }
+   
+   public void testMultipleArchives() throws Exception
+   {
+      WebArchive war1 = createWar("web1.war", true, ServletWebBean.class);
+      DeploymentUnit war1Unit = assertDeploy(war1);
+      Deployment war1Deployment = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(war1Unit));
+      BeanDeploymentArchive war1BDA = war1Deployment.getBeanDeploymentArchives().iterator().next();
+      assertBDAId(war1BDA, "web1.war");
+      assertExpectedClasses(war1BDA, ServletWebBean.class);
+      Class<?> servletWebBeanWar1Class = getClass(ServletWebBean.class, war1Unit);
+      
+      WebArchive war2 = createWar("web2.war", true, NotWBJsfBean.class);
+      createLib(war2, "crm.jar", false, CrmWebBean.class);
+      DeploymentUnit war2Unit = assertDeploy(war2);
+      Deployment war2Deployment = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(war2Unit));
+      BeanDeploymentArchive war2BDA = war2Deployment.getBeanDeploymentArchives().iterator().next();
+      assertBDAId(war2BDA, "web2.war");
+      assertExpectedClasses(war2BDA, NotWBJsfBean.class);
+      Class<?> notWBJsfBeanWar2Class = getClass(NotWBJsfBean.class, war2Unit);
+      Class<?> crmWebBeanWar2Class = getClass(CrmWebBean.class, war2Unit);
+      
+      JavaArchive ejbJar = createEjbJar("ejb.jar", true, BusinessInterface.class);
+      DeploymentUnit ejbJarUnit = assertDeploy(ejbJar);
+      Deployment ejbJarDeployment = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(ejbJarUnit));
+      BeanDeploymentArchive ejbJarBDA = ejbJarDeployment.getBeanDeploymentArchives().iterator().next();
+      assertBDAId(ejbJarBDA, "ejb.jar");
+      assertExpectedClasses(ejbJarBDA, BusinessInterface.class);
+      Class<?> businessInterfaceClass = getClass(BusinessInterface.class, ejbJarUnit);
+      
+      EnterpriseArchive ear1 = ShrinkWrap.create("full.ear", EnterpriseArchive.class);
+      WebArchive warInEar1 = createWarWithLibs(false, true, true);
+      ear1.addModule(warInEar1);
+      ear1.addModule(war2);
+      JavaArchive ejbJarInEar1 = createEjbJar("ejbInFullEar.jar", false, MySLSBean.class);
+      ear1.addModule(ejbJarInEar1);
+      createLib(ear1, "lib1.jar", false, ExternalWebBean.class);
+      createLib(ear1, "lib2.jar", true, A.class);
+      createLib(ear1, "lib3.jar", false, B.class);
+      MockArchiveManifest.addManifest(ear1);
+      DeploymentUnit ear1Unit = assertDeploy(ear1);
+      Deployment ear1Deployment = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(ear1Unit));
+      BeanDeploymentArchive ear1BDA = null, ear1War1BDA = null, ear1War2BDA = null;
+      for (BeanDeploymentArchive bda: ear1Deployment.getBeanDeploymentArchives())
+      {
+         if (bda.getId().contains(WAR_NAME))
+         {
+            ear1War1BDA = bda;
+         }
+         else if (bda.getId().contains("web2.war"))
+         {
+            ear1War2BDA = bda;
+         }
+         else
+         {
+            ear1BDA = bda;
+         }
+      }
+      assertBDAId(ear1BDA, "full.ear");
+      assertExpectedClasses(ear1BDA, A.class);
+      assertBDAId(ear1War1BDA, "full.ear/" + WAR_NAME);
+      assertExpectedClasses(ear1War1BDA, UIWebBean.class, CrmWebBean.class);
+      assertBDAId(ear1War2BDA, "full.ear/web2.war");
+      assertExpectedClasses(ear1War2BDA, NotWBJsfBean.class);
+      Class<?> servletWebBeanEar1Class = null, uiWebBeanEar1Class = null,
+               crmWebBeanEar1War1Class = null, notWBJsfBeanEar1Class = null,
+               crmWebBeanEar1War2Class = null;
+      for (DeploymentUnit ear1Child: ear1Unit.getChildren())
+      {
+         if (ear1Child.getName().contains(WAR_NAME))
+         {
+           servletWebBeanEar1Class = getClass(ServletWebBean.class, ear1Child);
+           uiWebBeanEar1Class = getClass(UIWebBean.class, ear1Child);
+           crmWebBeanEar1War1Class = getClass(CrmWebBean.class, ear1Child);
+         }
+         else if (ear1Child.getName().contains("web2.war"))
+         {
+            notWBJsfBeanEar1Class = getClass(NotWBJsfBean.class, ear1Child);
+            crmWebBeanEar1War2Class = getClass(CrmWebBean.class, ear1Child);
+         }
+      }
+      Class<?> externalWebBeanClass = getClass(ExternalWebBean.class, ear1Unit);
+      Class<?> aClass = getClass(A.class, ear1Unit);
+      Class<?> bClass = getClass(B.class, ear1Unit);
+      
+      EnterpriseArchive ear2 = ShrinkWrap.create("ejbWLibs.ear", EnterpriseArchive.class);
+      JavaArchive ejbJarInEar2 = createEjbJar("ejbInEar2.jar", true, PlainJavaBean.class);
+      ear2.addModule(ejbJarInEar2);
+      createLib(ear2, "lib1.jar", false, SomeUtil.class);
+      createLib(ear2, "lib2.jar", true, CrmWebBean.class);
+      MockArchiveManifest.addManifest(ear2);
+      DeploymentUnit ear2Unit = assertDeploy(ear2);
+      Deployment ear2Deployment = (Deployment) getBean(DeployersUtils.getDeploymentBeanName(ear2Unit));
+      BeanDeploymentArchive ear2BDA = ear2Deployment.getBeanDeploymentArchives().iterator().next();
+      assertBDAId(ear2BDA, "ejbWLibs.ear");
+      assertExpectedClasses(ear2BDA, PlainJavaBean.class, CrmWebBean.class);
+      Class<?> plainJavaBeanClass = getClass(PlainJavaBean.class, ear2Unit);
+      Class<?> someUtilClass = getClass(SomeUtil.class, ear2Unit);
+      Class<?> crmWebBeanClass = getClass(CrmWebBean.class, ear2Unit);
+      
+      // Assert on web classes
+      
+      assertCannotLoadBDA(war1Deployment, servletWebBeanEar1Class);
+      assertCannotLoadBDA(war1Deployment, notWBJsfBeanWar2Class);
+      assertCannotLoadBDA(war1Deployment, notWBJsfBeanEar1Class);
+      assertCannotLoadBDA(war1Deployment, crmWebBeanWar2Class);
+      assertCannotLoadBDA(war1Deployment, crmWebBeanEar1War1Class);
+      assertCannotLoadBDA(war1Deployment, crmWebBeanEar1War2Class);
+      assertCannotLoadBDA(war1Deployment, uiWebBeanEar1Class);
+      BeanDeploymentArchive bda = war1Deployment.loadBeanDeploymentArchive(servletWebBeanWar1Class);
+      assertSame(war1BDA, bda);
+      // verify the absence of collateral effects on the BDA
+      assertBDAId(war1BDA, "web1.war");
+      assertExpectedClasses(war1BDA, ServletWebBean.class);
+      
+      assertCannotLoadBDA(war2Deployment, servletWebBeanWar1Class);
+      assertCannotLoadBDA(war2Deployment, servletWebBeanEar1Class);
+      assertCannotLoadBDA(war2Deployment, notWBJsfBeanEar1Class);
+      assertCannotLoadBDA(war2Deployment, crmWebBeanEar1War1Class);
+      assertCannotLoadBDA(war2Deployment, crmWebBeanEar1War2Class);
+      assertCannotLoadBDA(war2Deployment, uiWebBeanEar1Class);
+      bda = war2Deployment.loadBeanDeploymentArchive(notWBJsfBeanWar2Class);
+      bda = war2Deployment.loadBeanDeploymentArchive(crmWebBeanWar2Class);
+      assertSame(war2BDA, bda);
+      assertBDAId(war2BDA, "web2.war");
+      assertExpectedClasses(war2BDA, NotWBJsfBean.class, CrmWebBean.class);
+      
+      assertCannotLoadBDA(ejbJarDeployment, servletWebBeanWar1Class);
+      assertCannotLoadBDA(ejbJarDeployment, servletWebBeanEar1Class);
+      assertCannotLoadBDA(ejbJarDeployment, notWBJsfBeanWar2Class);
+      assertCannotLoadBDA(ejbJarDeployment, notWBJsfBeanEar1Class);
+      assertCannotLoadBDA(ejbJarDeployment, crmWebBeanWar2Class);
+      assertCannotLoadBDA(ejbJarDeployment, crmWebBeanEar1War1Class);
+      assertCannotLoadBDA(ejbJarDeployment, crmWebBeanEar1War2Class);
+      assertCannotLoadBDA(ejbJarDeployment, uiWebBeanEar1Class);
+      
+      assertCannotLoadBDA(ear1Deployment, servletWebBeanWar1Class);
+      assertCannotLoadBDA(ear1Deployment, notWBJsfBeanWar2Class);
+      assertCannotLoadBDA(ear1Deployment, crmWebBeanWar2Class);
+      bda = ear1Deployment.loadBeanDeploymentArchive(servletWebBeanEar1Class);
+      assertSame(ear1War1BDA, bda);
+      bda = ear1Deployment.loadBeanDeploymentArchive(uiWebBeanEar1Class);
+      assertSame(ear1War1BDA, bda);
+      bda = ear1Deployment.loadBeanDeploymentArchive(crmWebBeanEar1War1Class);
+      assertSame(ear1War1BDA, bda);
+      assertBDAId(ear1War1BDA, "full.ear/" + WAR_NAME);
+      assertExpectedClasses(ear1War1BDA, ServletWebBean.class, UIWebBean.class, CrmWebBean.class);
+      
+      bda = ear1Deployment.loadBeanDeploymentArchive(notWBJsfBeanEar1Class);
+      assertSame(ear1War2BDA, bda);
+      bda = ear1Deployment.loadBeanDeploymentArchive(crmWebBeanEar1War2Class);
+      assertSame(ear1War2BDA, bda);
+      assertBDAId(ear1War2BDA, "full.ear/web2.war");
+      assertExpectedClasses(ear1War2BDA, NotWBJsfBean.class, CrmWebBean.class);
+      
+      assertCannotLoadBDA(ear2Deployment, servletWebBeanWar1Class);
+      assertCannotLoadBDA(ear2Deployment, servletWebBeanEar1Class);
+      assertCannotLoadBDA(ear2Deployment, notWBJsfBeanWar2Class);
+      assertCannotLoadBDA(ear2Deployment, notWBJsfBeanEar1Class);
+      assertCannotLoadBDA(ear2Deployment, crmWebBeanWar2Class);
+      assertCannotLoadBDA(ear2Deployment, crmWebBeanEar1War1Class);
+      assertCannotLoadBDA(ear2Deployment, crmWebBeanEar1War2Class);
+      assertCannotLoadBDA(ear2Deployment, uiWebBeanEar1Class);
+      
+      // Assert on business classes that are part of existing BDAs
+      bda = ejbJarDeployment.loadBeanDeploymentArchive(businessInterfaceClass);
+      assertSame(ejbJarBDA, bda);
+      war1Deployment.loadBeanDeploymentArchive(businessInterfaceClass);
+      assertSame(ejbJarBDA, bda);
+      war2Deployment.loadBeanDeploymentArchive(businessInterfaceClass);
+      assertSame(ejbJarBDA, bda);
+      ear1Deployment.loadBeanDeploymentArchive(businessInterfaceClass);
+      assertSame(ejbJarBDA, bda);
+      war2Deployment.loadBeanDeploymentArchive(businessInterfaceClass);
+      assertSame(ejbJarBDA, bda);
+      assertBDAId(ejbJarBDA, "ejb.jar"); // no collateral effects on the BDA
+      assertExpectedClasses(ejbJarBDA, BusinessInterface.class);
+      
+      bda = ear1Deployment.loadBeanDeploymentArchive(aClass);
+      assertSame(ear1BDA, bda);
+      bda = war1Deployment.loadBeanDeploymentArchive(aClass);
+      assertSame(ear1BDA, bda);
+      bda = war2Deployment.loadBeanDeploymentArchive(aClass);
+      assertSame(ear1BDA, bda);
+      bda = ejbJarDeployment.loadBeanDeploymentArchive(aClass);
+      assertSame(ear1BDA, bda);
+      bda = ear2Deployment.loadBeanDeploymentArchive(aClass);
+      assertSame(ear1BDA, bda);
+      assertBDAId(ear1BDA, "full.ear"); // no collateral effects on the BDA
+      assertExpectedClasses(ear1BDA, A.class);
+      
+      bda = ear2Deployment.loadBeanDeploymentArchive(plainJavaBeanClass);
+      assertSame(ear2BDA, bda);
+      bda = ear2Deployment.loadBeanDeploymentArchive(crmWebBeanClass);
+      assertSame(ear2BDA, bda);
+      bda = war1Deployment.loadBeanDeploymentArchive(plainJavaBeanClass);
+      assertSame(ear2BDA, bda);
+      bda = war1Deployment.loadBeanDeploymentArchive(crmWebBeanClass);
+      assertSame(ear2BDA, bda);
+      bda = war2Deployment.loadBeanDeploymentArchive(plainJavaBeanClass);
+      assertSame(ear2BDA, bda);
+      bda = war2Deployment.loadBeanDeploymentArchive(crmWebBeanClass);
+      assertSame(ear2BDA, bda);
+      bda = ejbJarDeployment.loadBeanDeploymentArchive(plainJavaBeanClass);
+      assertSame(ear2BDA, bda);
+      bda = ejbJarDeployment.loadBeanDeploymentArchive(crmWebBeanClass);
+      assertSame(ear2BDA, bda);
+      bda = ear1Deployment.loadBeanDeploymentArchive(plainJavaBeanClass);
+      assertSame(ear2BDA, bda);
+      bda = ear1Deployment.loadBeanDeploymentArchive(crmWebBeanClass);
+      assertSame(ear2BDA, bda);
+      assertBDAId(ear2BDA, "ejbWLibs.ear"); // no collateral effects on the BDA
+      assertExpectedClasses(ear2BDA, PlainJavaBean.class, CrmWebBean.class);
+      
+      // Assert on business classes that are not yet part of existing BDAs
+      bda = war1Deployment.loadBeanDeploymentArchive(externalWebBeanClass);
+      assertSame(ear1BDA, bda);
+      assertBDAId(ear1BDA, "full.ear");
+      assertExpectedClasses(ear1BDA, ExternalWebBean.class, A.class);
+      bda = war2Deployment.loadBeanDeploymentArchive(externalWebBeanClass);
+      assertSame(ear1BDA, bda);
+      bda = ejbJarDeployment.loadBeanDeploymentArchive(externalWebBeanClass);
+      assertSame(ear1BDA, bda);
+      bda = ear1Deployment.loadBeanDeploymentArchive(externalWebBeanClass);
+      assertSame(ear1BDA, bda);
+      bda = ear2Deployment.loadBeanDeploymentArchive(externalWebBeanClass);
+      assertSame(ear1BDA, bda);
+      assertBDAId(ear1BDA, "full.ear"); // no collateral effects on the BDA
+      assertExpectedClasses(ear1BDA, ExternalWebBean.class, A.class);
+      
+      bda = ear1Deployment.loadBeanDeploymentArchive(bClass);
+      assertSame(ear1BDA, bda);
+      assertBDAId(ear1BDA, "full.ear");
+      assertExpectedClasses(ear1BDA, ExternalWebBean.class, A.class, B.class);
+      bda = war1Deployment.loadBeanDeploymentArchive(bClass);
+      assertSame(ear1BDA, bda);
+      bda = war2Deployment.loadBeanDeploymentArchive(bClass);
+      assertSame(ear1BDA, bda);
+      bda = ejbJarDeployment.loadBeanDeploymentArchive(bClass);
+      assertSame(ear1BDA, bda);
+      bda = ear2Deployment.loadBeanDeploymentArchive(bClass);
+      assertSame(ear1BDA, bda);
+      assertBDAId(ear1BDA, "full.ear"); // no collateral effects on the BDA
+      assertExpectedClasses(ear1BDA, ExternalWebBean.class, A.class, B.class);
+
+      bda = ejbJarDeployment.loadBeanDeploymentArchive(someUtilClass);
+      assertSame(ear2BDA, bda);
+      assertBDAId(ear2BDA, "ejbWLibs.ear");
+      assertExpectedClasses(ear2BDA, PlainJavaBean.class, SomeUtil.class, CrmWebBean.class);
+      bda = war1Deployment.loadBeanDeploymentArchive(someUtilClass);
+      assertSame(ear2BDA, bda);
+      bda = war2Deployment.loadBeanDeploymentArchive(someUtilClass);
+      assertSame(ear2BDA, bda);
+      bda = ear1Deployment.loadBeanDeploymentArchive(someUtilClass);
+      assertSame(ear2BDA, bda);
+      bda = ear2Deployment.loadBeanDeploymentArchive(someUtilClass);
+      assertSame(ear2BDA, bda);
+      assertBDAId(ear2BDA, "ejbWLibs.ear"); // no collateraleffects on the BDA
+      assertExpectedClasses(ear2BDA, PlainJavaBean.class, SomeUtil.class, CrmWebBean.class);
+   }
+
+   @Override
+   protected Collection<Class<?>> getClasses(BeanDeploymentArchive bda)
+   {
+      return bda.getBeanClasses();
+   }
+
+   @Override
+   protected Collection<URL> getResources(BeanDeploymentArchive bda)
+   {
+      return bda.getBeansXml();
+   }
+   
+   private void assertBDAId(BeanDeploymentArchive bda, String name)
+   {
+      assertTrue("BDA id \""  + bda.getId() + "\" expected to end with suffix \"" + name + "/}\"",
+               bda.getId().endsWith(name + "/}"));
+   }
+
+   private Class<?> getClass(Class<?> clazz, DeploymentUnit unit) throws ClassNotFoundException
+   {
+      ClassLoader classLoader = unit.getClassLoader();
+      return classLoader.loadClass(clazz.getName());
+   }
+   
+   private void assertCannotLoadBDA(Deployment deployment, Class<?> beanClass)
+   {
+      boolean failed = false;
+      try
+      {
+         deployment.loadBeanDeploymentArchive(beanClass);
+      }
+      catch (IllegalArgumentException e)
+      {
+         failed = true;
+      }
+      assertTrue(failed);
+   }
+}
\ No newline at end of file


Property changes on: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/java/org/jboss/test/deployers/test/LoadBeanDeploymentArchiveTestCase.java
___________________________________________________________________
Name: svn:keywords
   + Author Date Id Revision
Name: svn:eol-style
   + native

Added: projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/resources/org/jboss/test/deployers/test/LoadBeanDeploymentArchiveTestCase.xml
===================================================================
--- projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/resources/org/jboss/test/deployers/test/LoadBeanDeploymentArchiveTestCase.xml	                        (rev 0)
+++ projects/weld-int/branches/Deployment_WELDINT-1/deployer/src/test/resources/org/jboss/test/deployers/test/LoadBeanDeploymentArchiveTestCase.xml	2010-07-20 03:47:07 UTC (rev 106875)
@@ -0,0 +1,33 @@
+<deployment xmlns="urn:jboss:bean-deployer:2.0">
+
+  <bean name="EarStructure" class="org.jboss.test.deployers.vfs.structure.ear.support.MockEarStructureDeployer"/>
+  <bean name="WarStructure" class="org.jboss.test.deployers.vfs.structure.war.support.MockWarStructureDeployer"/>
+  <bean name="WarClassLoader" class="org.jboss.test.deployers.vfs.reflect.support.MockWarClassLoaderDeployer"/>
+
+  <bean name="JWBMDDeployer" class="org.jboss.weld.integration.deployer.ext.JBossWeldMetaDataDeployer"/>
+  <bean name="WBFilesDeployer" class="org.jboss.weld.integration.deployer.metadata.WeldFilesDeployer"/>
+  <bean name="ArchiveInfoDeployer" class="org.jboss.weld.integration.deployer.env.ArchiveInfoDeployer"/>
+  <bean name="ArchiveDiscoveryDeployer" class="org.jboss.weld.integration.deployer.env.ArchiveDiscoveryDeployer"/>
+
+  <beanfactory name="JBossEjbServices" class="org.jboss.test.deployers.support.MockEmptyEjbServices"/>
+
+  <bean name="EjbServicesDeployer" class="org.jboss.weld.integration.deployer.env.EjbServicesDeployer">
+    <property name="ejbServicesClassName">org.jboss.test.deployers.support.MockEmptyEjbServices</property>
+  </bean>
+
+  <!-- Target of the Test -->
+  <bean name="DeploymentDeployer" class="org.jboss.weld.integration.deployer.env.JBossDeploymentDeployer"/>
+
+  <bean name="BootDeployer" class="org.jboss.test.deployers.support.deployer.MockBootDeployer"/>
+
+  <bean name="DynamicDependencyCreator" class="org.jboss.weld.integration.deployer.env.DynamicDependencyCreator">
+    <constructor>
+      <parameter><inject bean="jboss.kernel:service=KernelController"/></parameter>
+    </constructor>
+  </bean>
+
+  <bean name="JBossTransactionServices" class="org.jboss.test.deployers.support.MockTransactionServices"/>
+
+  <bean name="RealTransactionManager" class="java.lang.Object"/>
+
+</deployment>



More information about the jboss-cvs-commits mailing list