[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