[weld-commits] Weld SVN: r6231 - in java-se/trunk/src/main/java/org/jboss/weld/environment/se: discovery and 1 other directory.

weld-commits at lists.jboss.org weld-commits at lists.jboss.org
Fri May 14 08:25:01 EDT 2010


Author: peteroyle
Date: 2010-05-14 08:25:01 -0400 (Fri, 14 May 2010)
New Revision: 6231

Modified:
   java-se/trunk/src/main/java/org/jboss/weld/environment/se/Weld.java
   java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/AbstractScanner.java
   java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/SEBeanDeploymentArchive.java
   java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/SEWeldDeployment.java
   java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/SEWeldDiscovery.java
   java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/URLScanner.java
Log:
WELDSE-25: Added basic support for customising the deployment by subclassing the Weld class. Also updated URLScanner to use the configured or default ResourceLoader, rather than using Reflections.

Modified: java-se/trunk/src/main/java/org/jboss/weld/environment/se/Weld.java
===================================================================
--- java-se/trunk/src/main/java/org/jboss/weld/environment/se/Weld.java	2010-05-14 11:26:08 UTC (rev 6230)
+++ java-se/trunk/src/main/java/org/jboss/weld/environment/se/Weld.java	2010-05-14 12:25:01 UTC (rev 6231)
@@ -20,6 +20,7 @@
 import org.jboss.weld.bootstrap.api.Bootstrap;
 import org.jboss.weld.bootstrap.api.Environments;
 import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
+import org.jboss.weld.bootstrap.spi.Deployment;
 import org.jboss.weld.context.api.BeanStore;
 import org.jboss.weld.context.api.helpers.ConcurrentHashMapBeanStore;
 import org.jboss.weld.environment.se.beans.InstanceManager;
@@ -69,9 +70,12 @@
    public WeldContainer initialize()
    {
 
-      SEWeldDeployment deployment = new SEWeldDeployment()
+      SEWeldDeployment deployment = new SEWeldDeployment() 
       {
       };
+      configureDeployment(deployment);
+      deployment.scan();
+
       bootstrap.startContainer(Environments.SE, deployment, this.applicationBeanStore);
       final BeanDeploymentArchive mainBeanDepArch = deployment.getBeanDeploymentArchives().get(0);
       this.manager = bootstrap.getManager(mainBeanDepArch);
@@ -88,6 +92,24 @@
    }
 
    /**
+    * Clients can subclass and override this method to customise the deployment
+    * before weld boots up. For example, to add a custom ResourceLoader, you would
+    * subclass Weld like so:
+    * <code>
+    * public class MyWeld extends Weld {
+    *    @Override
+    *    protected void configureDeployment(Deployment deployment) {
+    *       deployment.getServices().add(ResourceLoader.class, new OSGIResourceLoader());
+    *    }
+    * }
+    * </code>
+    * @param deployment
+    */
+   protected void configureDeployment(Deployment deployment)
+   {
+   }
+
+   /**
     * Shuts down Weld.
     */
    public void shutdown()

Modified: java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/AbstractScanner.java
===================================================================
--- java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/AbstractScanner.java	2010-05-14 11:26:08 UTC (rev 6230)
+++ java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/AbstractScanner.java	2010-05-14 12:25:01 UTC (rev 6231)
@@ -17,6 +17,7 @@
 package org.jboss.weld.environment.se.discovery;
 
 import java.net.URL;
+import org.jboss.weld.resources.spi.ResourceLoader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -32,12 +33,12 @@
 {
 
    private static final Logger log = LoggerFactory.getLogger(Scanner.class);
-   private final ClassLoader classLoader;
+   private final ResourceLoader resourceLoader;
    private final SEWeldDiscovery webBeanDiscovery;
 
-   public AbstractScanner(ClassLoader classLoader, SEWeldDiscovery webBeanDiscovery)
+   public AbstractScanner(ResourceLoader resourceLoader, SEWeldDiscovery webBeanDiscovery)
    {
-      this.classLoader = classLoader;
+      this.resourceLoader = resourceLoader;
       this.webBeanDiscovery = webBeanDiscovery;
    }
 
@@ -48,16 +49,12 @@
          String className = filenameToClassname(name);
          try
          {
-            webBeanDiscovery.getWbClasses().add(getClassLoader().loadClass(className));
+            webBeanDiscovery.getWbClasses().add(getResourceLoader().classForName(className));
          }
          catch (NoClassDefFoundError e)
          {
             log.error("Error loading " + name, e);
          }
-         catch (ClassNotFoundException e)
-         {
-            log.error("Error loading " + name, e);
-         }
       }
       else if (name.endsWith("beans.xml"))
       {
@@ -65,9 +62,9 @@
       }
    }
 
-   public ClassLoader getClassLoader()
+   public ResourceLoader getResourceLoader()
    {
-      return classLoader;
+      return resourceLoader;
    }
 
    /**

Modified: java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/SEBeanDeploymentArchive.java
===================================================================
--- java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/SEBeanDeploymentArchive.java	2010-05-14 11:26:08 UTC (rev 6230)
+++ java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/SEBeanDeploymentArchive.java	2010-05-14 12:25:01 UTC (rev 6231)
@@ -24,6 +24,7 @@
 import org.jboss.weld.bootstrap.api.ServiceRegistry;
 import org.jboss.weld.bootstrap.api.helpers.SimpleServiceRegistry;
 import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive;
+import org.jboss.weld.bootstrap.spi.Deployment;
 import org.jboss.weld.ejb.spi.EjbDescriptor;
 
 /**
@@ -39,15 +40,25 @@
    private final SEWeldDiscovery wbDiscovery;
    private final ServiceRegistry serviceRegistry;
 
-   public SEBeanDeploymentArchive()
+   /**
+    * @param deployment Used to gain access to the ResourceLoader, in case one is defined.
+    */
+   public SEBeanDeploymentArchive(Deployment deployment)
    {
-      wbDiscovery = new SEWeldDiscovery()
+      this.wbDiscovery = new SEWeldDiscovery(deployment) 
       {
       };
-      serviceRegistry = new SimpleServiceRegistry();
+      this.serviceRegistry = new SimpleServiceRegistry();
    }
 
    /**
+    * Perform the class scanning.
+    */
+   public void scan() {
+      wbDiscovery.scan();
+   }
+
+   /**
     * @return a collection of all Bean classes on the classpath.
     */
    public Collection<Class<?>> getBeanClasses()

Modified: java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/SEWeldDeployment.java
===================================================================
--- java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/SEWeldDeployment.java	2010-05-14 11:26:08 UTC (rev 6230)
+++ java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/SEWeldDeployment.java	2010-05-14 12:25:01 UTC (rev 6231)
@@ -29,17 +29,24 @@
  */
 public abstract class SEWeldDeployment implements Deployment
 {
-   private final BeanDeploymentArchive beanDeploymentArchive;
+   private final SEBeanDeploymentArchive beanDeploymentArchive;
    private final List<BeanDeploymentArchive> archInCollection;
 
    public SEWeldDeployment()
    {
-      this.beanDeploymentArchive = new SEBeanDeploymentArchive();
+      this.beanDeploymentArchive = new SEBeanDeploymentArchive(this);
       this.archInCollection = new ArrayList<BeanDeploymentArchive>(1);
       this.archInCollection.add(this.beanDeploymentArchive);
    }
 
    /**
+    * Perform the class scanning.
+    */
+   public void scan() {
+      this.beanDeploymentArchive.scan();
+   }
+
+   /**
     * {@inheritDoc}
     * 
     * @return A collection containing the singular logical BeanDeploymentArchive

Modified: java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/SEWeldDiscovery.java
===================================================================
--- java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/SEWeldDiscovery.java	2010-05-14 11:26:08 UTC (rev 6230)
+++ java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/SEWeldDiscovery.java	2010-05-14 12:25:01 UTC (rev 6231)
@@ -21,8 +21,10 @@
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import org.jboss.weld.bootstrap.spi.Deployment;
 
-import org.jboss.weld.environment.se.util.Reflections;
+import org.jboss.weld.resources.DefaultResourceLoader;
+import org.jboss.weld.resources.spi.ResourceLoader;
 
 /**
  * The means by which beans are discovered on the classpath. This will only
@@ -35,14 +37,16 @@
 public abstract class SEWeldDiscovery
 {
 
+   private ResourceLoader resourceLoader;
+   private final Deployment deployment;
    private final Set<Class<?>> wbClasses;
    private final Set<URL> wbUrls;
 
-   public SEWeldDiscovery()
+   public SEWeldDiscovery(Deployment deployment)
    {
+      this.deployment = deployment;
       this.wbClasses = new HashSet<Class<?>>();
       this.wbUrls = new HashSet<URL>();
-      scan();
    }
 
    public Iterable<Class<?>> discoverWeldClasses()
@@ -65,10 +69,23 @@
       return wbUrls;
    }
 
-   private void scan()
+   public void scan()
    {
-      Scanner scanner = new URLScanner(Reflections.getClassLoader(), this);
+      Scanner scanner = new URLScanner(resourceLoader(), this);
       scanner.scanResources(new String[] { "META-INF/beans.xml" });
    }
 
+   public synchronized ResourceLoader resourceLoader() {
+      if (this.resourceLoader == null)
+      {
+         ResourceLoader aResourceLoader = deployment.getServices().get(ResourceLoader.class);
+         if (aResourceLoader == null)
+         {
+            aResourceLoader = new DefaultResourceLoader();
+         }
+         this.resourceLoader = aResourceLoader;
+      }
+      return this.resourceLoader;
+   }
+   
 }

Modified: java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/URLScanner.java
===================================================================
--- java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/URLScanner.java	2010-05-14 11:26:08 UTC (rev 6230)
+++ java-se/trunk/src/main/java/org/jboss/weld/environment/se/discovery/URLScanner.java	2010-05-14 12:25:01 UTC (rev 6231)
@@ -22,12 +22,14 @@
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.net.URLDecoder;
+import java.util.Collection;
 import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.Set;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
+import org.jboss.weld.resources.spi.ResourceLoader;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -45,9 +47,9 @@
 {
    private static final Logger log = LoggerFactory.getLogger(URLScanner.class);
 
-   public URLScanner(ClassLoader classLoader, SEWeldDiscovery webBeanDiscovery)
+   public URLScanner(ResourceLoader resourceLoader, SEWeldDiscovery webBeanDiscovery)
    {
-      super(classLoader, webBeanDiscovery);
+      super(resourceLoader, webBeanDiscovery);
    }
 
    public void scanDirectories(File[] directories)
@@ -66,11 +68,11 @@
       {
          try
          {
-            Enumeration<URL> urlEnum = getClassLoader().getResources(resourceName);
+            Collection<URL> urlEnum = getResourceLoader().getResources(resourceName);
 
-            while (urlEnum.hasMoreElements())
+            for (URL url : urlEnum)
             {
-               String urlPath = urlEnum.nextElement().getFile();
+               String urlPath = url.getFile();
                urlPath = URLDecoder.decode(urlPath, "UTF-8");
 
                if (urlPath.startsWith("file:"))



More information about the weld-commits mailing list