[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