[jboss-cvs] JBossAS SVN: r108359 - in trunk: weld-int/assembly/src/main/assembly/resources/META-INF and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Sep 27 16:32:27 EDT 2010


Author: alesj
Date: 2010-09-27 16:32:25 -0400 (Mon, 27 Sep 2010)
New Revision: 108359

Modified:
   trunk/server/src/etc/conf/all/bootstrap/deployers.xml
   trunk/weld-int/assembly/src/main/assembly/resources/META-INF/weld-deployers-jboss-beans.xml
   trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/ArchiveDiscoveryDeployer.java
   trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveInfo.java
   trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ClasspathFactory.java
   trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/DeploymentImpl.java
   trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/LibraryDiscoveryService.java
Log:
[JBAS-8410]; initial weld libs work; TODO on tests.

Modified: trunk/server/src/etc/conf/all/bootstrap/deployers.xml
===================================================================
--- trunk/server/src/etc/conf/all/bootstrap/deployers.xml	2010-09-27 10:59:06 UTC (rev 108358)
+++ trunk/server/src/etc/conf/all/bootstrap/deployers.xml	2010-09-27 20:32:25 UTC (rev 108359)
@@ -287,4 +287,10 @@
       </constructor>
    </bean>
 
+   <bean name="WeldLibsLookupDeployer" class="org.jboss.deployers.plugins.classloading.AbstractResourceLookupDeployer">
+      <constructor>
+          <parameter>META-INF/beans.xml</parameter>
+      </constructor>
+   </bean>
+
 </deployment>

Modified: trunk/weld-int/assembly/src/main/assembly/resources/META-INF/weld-deployers-jboss-beans.xml
===================================================================
--- trunk/weld-int/assembly/src/main/assembly/resources/META-INF/weld-deployers-jboss-beans.xml	2010-09-27 10:59:06 UTC (rev 108358)
+++ trunk/weld-int/assembly/src/main/assembly/resources/META-INF/weld-deployers-jboss-beans.xml	2010-09-27 20:32:25 UTC (rev 108359)
@@ -5,6 +5,25 @@
 -->
 <deployment xmlns="urn:jboss:bean-deployer:2.0">
 
+  <!-- Weld libs lookup service -->
+
+  <bean name="WeldClasspathFactory" class="org.jboss.weld.integration.deployer.env.bda.ClasspathFactory">
+     <constructor factoryMethod="getInstance" />
+  </bean>
+
+  <bean name="LibsDiscoveryService" class="org.jboss.weld.integration.deployer.env.bda.LibraryDiscoveryService">
+     <constructor>
+        <parameter><inject bean="WeldLibsLookupDeployer"/></parameter>
+     </constructor>
+     <!--
+         Disable Weld libs lookup from now on; the libs should already be picekd up by now.
+         If this is not the case - e.g. some lib is part of deployer/ - create "disable" bean in deploy/.
+     -->
+     <install bean="WeldLibsLookupDeployer" method="setActive">
+        <parameter>false</parameter>
+     </install>
+  </bean>
+
   <!-- Weld deployers -->
   
   <!-- Responsible for discovering Weld files -->

Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/ArchiveDiscoveryDeployer.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/ArchiveDiscoveryDeployer.java	2010-09-27 10:59:06 UTC (rev 108358)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/ArchiveDiscoveryDeployer.java	2010-09-27 20:32:25 UTC (rev 108359)
@@ -75,7 +75,6 @@
       
       try
       {
-         ArchiveInfo archive = null;
          if (hasCp || hasWB)
          {
             VFSDeploymentUnit moduleUnit = unit;
@@ -87,11 +86,11 @@
             }
             if (module == null)
                throw new DeploymentException("No module in deployment unit's hierarchy: " + unit.getName());
-            archive = moduleUnit.getAttachment(ArchiveInfo.class);
+
+            ArchiveInfo archive = moduleUnit.getAttachment(ArchiveInfo.class);
             if (archive == null)
-            {
                throw new IllegalStateException("Archive attachment expected for unit " + unit);
-            }
+
             WeldDiscoveryEnvironment environment = archive.getEnvironment();
             if (hasCp)
             {

Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveInfo.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveInfo.java	2010-09-27 10:59:06 UTC (rev 108358)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveInfo.java	2010-09-27 20:32:25 UTC (rev 108359)
@@ -43,11 +43,20 @@
 
    // keeps track of the instances that are currently under use by deployers
    private static final Map<ClassLoader, WeakReference<ArchiveInfo>> instances = new WeakHashMap<ClassLoader, WeakReference<ArchiveInfo>>();
-   
+
+   // adapts an Archive to a Classpath
+   private ArchiveToClasspath classpathAdapter;
+   // the classpath
+   private Classpath classpath;
+   // the class loader
+   private ClassLoader classLoader;
+   // the discovery environment
+   private final WeldDiscoveryEnvironment environment;
+
    /**
     * Returns the ArchiveInfo instance that corresponds to the given class loader.
     * Only ArchiveInfo instances under use can be returned.
-    * 
+    *
     * @param classLoader the class loader
     * @return            the ArchiveInfo instance that contains {@code classLoader}
     */
@@ -55,19 +64,12 @@
    {
       // Unwrap from WeakReference before return
       WeakReference<ArchiveInfo> reference = instances.get(classLoader);
-      if (reference == null) return null;
+      if (reference == null)
+         return null;
+
       return reference.get();
    }
-   
-   // adapts an Archive to a Classpath
-   private ArchiveToClasspath classpathAdapter;
-   // the classpath
-   private Classpath classpath;
-   // the class loader
-   private ClassLoader classLoader;
-   // the discovery environment
-   private final WeldDiscoveryEnvironment environment;
-   
+
    /**
     * Creates an ArchiveInfo to keep track of all data related to an archive
     * during deployment.
@@ -78,7 +80,7 @@
    {
       // must wrap in WeakReference because value refers strongly to its own key
       // see WeakHashMap javadoc
-      instances.put(classLoader, new WeakReference(this));
+      instances.put(classLoader, new WeakReference<ArchiveInfo>(this));
       this.classLoader = classLoader;
       this.classpath = classpathFactory.create(classLoader);
       this.environment = new WeldDiscoveryEnvironment();
@@ -123,9 +125,8 @@
    ArchiveToClasspath getClasspathAdapter()
    {
       if (classpathAdapter == null)
-      {
          classpathAdapter = new ArchiveToClasspath();
-      }
+
       return classpathAdapter;
    }
    
@@ -136,7 +137,7 @@
     */
    boolean hasClasspathAdapter()
    {
-      return this.classpathAdapter != null;
+      return classpathAdapter != null;
    }
 
    /**
@@ -145,7 +146,7 @@
     */
    void cleanUp()
    {
-      instances.remove(this.classLoader);
+      instances.remove(classLoader);
    }
    
    public String toString()

Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ClasspathFactory.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ClasspathFactory.java	2010-09-27 10:59:06 UTC (rev 108358)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ClasspathFactory.java	2010-09-27 20:32:25 UTC (rev 108359)
@@ -23,6 +23,7 @@
 
 import java.lang.ref.WeakReference;
 import java.util.Map;
+import java.util.Set;
 import java.util.WeakHashMap;
 
 import org.jboss.classloader.plugins.loader.ClassLoaderToLoaderAdapter;
@@ -30,16 +31,22 @@
 import org.jboss.classloader.spi.ClassLoaderSystem;
 import org.jboss.classloader.spi.Loader;
 import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.logging.Logger;
 
 /**
  * Given the ClassLoader that is loading an archive during deployment, this factory
  * creates the corresponding classpath.
  * 
  * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @author <a href="mailto:ales.justin at jboss.org">Ales Justin</a>
  * @version $Revision$
  */
 class ClasspathFactory
 {
+   // the log
+   private static Logger log = Logger.getLogger(ClasspathFactory.class);
+
+   // the instance
    private static final ClasspathFactory instance = new ClasspathFactory();
    
    /**
@@ -52,46 +59,93 @@
       return instance;
    }
    
-   // 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;
+   private volatile ClassLoaderSystem system;
 
+   // the default domain
+   private volatile ClassLoaderDomain defaultDomain;
+
+   // the default classpath, corresponds to DefaultDomain
+   private volatile Classpath defaultClasspath;
+
+   // libs discovery service
+   private LibraryDiscoveryService libsDiscoveryService;
+
    // a list of domains
    private final Map<Loader, WeakReference<Classpath>> domainToClasspath;
 
    private ClasspathFactory()
    {
       domainToClasspath = new WeakHashMap<Loader, WeakReference<Classpath>>();
-      system = ClassLoaderSystem.getInstance();
    }
 
+   protected ClassLoaderSystem getSystem()
+   {
+      if (system == null)
+         setSystem(ClassLoaderSystem.getInstance());
+         
+      return system;
+   }
+
+   public void setSystem(ClassLoaderSystem system)
+   {
+      if (system == null)
+         throw new IllegalArgumentException("Null system");
+
+      this.system = system;
+      defaultDomain = system.getDefaultDomain();
+   }
+
+   public void setLibsDiscoveryService(LibraryDiscoveryService libsDiscoveryService)
+   {
+      this.libsDiscoveryService = libsDiscoveryService;
+   }
+
    /**
     * Creates the Classpath corresponding to ClassLoader.
     * 
     * @param classLoader the ClassLoader
-    * @return            a classpath that contains a list of the archives visible to
-    *                    ClassLoader.
+    * @return            a classpath that contains a list of the archives visible to ClassLoader
     */
    public Classpath create(ClassLoader classLoader)
    {
       Module module = SecurityActions.getModuleForClassLoader(classLoader);
       ClassLoaderDomain domain = null;
+      ClassLoaderSystem cls = getSystem(); // intialize system
+      // TODO -- why this check for a parent domain name?
       if (module != null && module.getDeterminedParentDomainName() != null)
       {
-         domain = system.getDomain(module.getDeterminedDomainName());
+         domain = cls.getDomain(module.getDeterminedDomainName());
       }
       return getClasspath(domain);
    }
 
+   @SuppressWarnings({"SynchronizeOnNonFinalField", "SynchronizationOnLocalVariableOrMethodParameter"})
    private Classpath getClasspath(Loader domain)
    {
-      if (domain == null || domain == DEFAULT_DOMAIN)
+      if (domain == null || domain == defaultDomain)
       {
-         return DEFAULT;
+         synchronized (defaultDomain)
+         {
+            if (defaultClasspath == null)
+            {
+               Archive[] archives = new Archive[0];
+               if (libsDiscoveryService != null)
+               {
+                  try
+                  {
+                     Set<Archive> ldsa = libsDiscoveryService.getLibraries();
+                     archives = ldsa.toArray(new Archive[ldsa.size()]);
+                  }
+                  catch (Exception e)
+                  {
+                     log.warn("Error looking up lib archives : " + e);
+                  }
+               }
+               defaultClasspath = new ClasspathImpl(defaultDomain.getName(), archives);
+            }
+         }
+         return defaultClasspath;
       }
       synchronized(domain)
       {

Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/DeploymentImpl.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/DeploymentImpl.java	2010-09-27 10:59:06 UTC (rev 108358)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/DeploymentImpl.java	2010-09-27 20:32:25 UTC (rev 108359)
@@ -21,12 +21,12 @@
  */
 package org.jboss.weld.integration.deployer.env.bda;
 
+import javax.enterprise.inject.spi.Extension;
+
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
 
-import javax.enterprise.inject.spi.Extension;
-
 import org.jboss.beans.metadata.spi.factory.BeanFactory;
 import org.jboss.weld.bootstrap.api.Bootstrap;
 import org.jboss.weld.bootstrap.api.Service;
@@ -75,6 +75,7 @@
     * @param archiveInfos the information that will be used for creation of the archives
     *                     contained in this deployment
     * @param ejbs         the ejb descriptors
+    * @param ejbServicesFactory the ejb services factory
     */
    public DeploymentImpl(String name, Collection<ArchiveInfo> archiveInfos, Collection<EjbDescriptor<?>> ejbs, BeanFactory ejbServicesFactory)
    {

Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/LibraryDiscoveryService.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/LibraryDiscoveryService.java	2010-09-27 10:59:06 UTC (rev 108358)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/LibraryDiscoveryService.java	2010-09-27 20:32:25 UTC (rev 108359)
@@ -52,7 +52,7 @@
    private ResourceLookupProvider<Module> provider;
    private Iterable<URL> excludedUrls;
 
-   private Set<BeanDeploymentArchive> libs;
+   private Set<Archive> libs;
    private AtomicBoolean checked = new AtomicBoolean();
 
    public LibraryDiscoveryService(ResourceLookupProvider<Module> provider)
@@ -68,11 +68,11 @@
     * @return the weld libraries
     * @throws Exception for any error
     */
-   public synchronized Set<BeanDeploymentArchive> getLibraries() throws Exception
+   public synchronized Set<Archive> getLibraries() throws Exception
    {
       if (libs == null || checked.get() == false)
       {
-         libs = new HashSet<BeanDeploymentArchive>();
+         libs = new HashSet<Archive>();
 
          List<VirtualFile> excludedFiles = null;
          Map<Module, Set<URL>> modules = provider.getMatchingModules();
@@ -118,7 +118,10 @@
                   ServiceRegistry serviceRegistry = new SimpleServiceRegistry();
                   // TODO: fill in serviceRegistry? With which services?
 
-                  libs.add(archive.createBeanDeploymentArchive(serviceRegistry));
+                  // create bda
+                  BeanDeploymentArchive bda = archive.createBeanDeploymentArchive(serviceRegistry);
+                  if (bda != null)
+                     libs.add(archive);
 
                   // the env
                   WeldDiscoveryEnvironment environment = archiveInfo.getEnvironment();



More information about the jboss-cvs-commits mailing list