[jboss-cvs] JBossAS SVN: r108284 - trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Sep 22 14:24:11 EDT 2010
Author: stan.silvert at jboss.com
Date: 2010-09-22 14:24:11 -0400 (Wed, 22 Sep 2010)
New Revision: 108284
Modified:
trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/Archive.java
trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveInfo.java
Log:
JBAS-8424 RestEasy deployer won't release Weld BeanManager on undeploy
Modified: trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/Archive.java
===================================================================
--- trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/Archive.java 2010-09-22 17:32:34 UTC (rev 108283)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/Archive.java 2010-09-22 18:24:11 UTC (rev 108284)
@@ -21,6 +21,7 @@
*/
package org.jboss.weld.integration.deployer.env.bda;
+import java.lang.ref.WeakReference;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
@@ -52,7 +53,7 @@
class Archive
{
// keep a map of Archive instances
- private static final Map<ClassLoader, Archive> instances = new WeakHashMap<ClassLoader, Archive>();
+ private static final Map<ClassLoader, WeakReference<Archive>> instances = new WeakHashMap<ClassLoader, WeakReference<Archive>>();
/**
* Returns the Archive instance corresponding to {@code classLoader}.
@@ -64,7 +65,9 @@
{
synchronized(instances)
{
- return instances.get(classLoader);
+ WeakReference<Archive> reference = instances.get(classLoader);
+ if (reference == null) return null;
+ return reference.get();
}
}
@@ -109,7 +112,7 @@
// update instances map
synchronized (instances)
{
- instances.put(this.classLoader, this);
+ instances.put(this.classLoader, new WeakReference(this));
}
}
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-22 17:32:34 UTC (rev 108283)
+++ trunk/weld-int/deployer/src/main/java/org/jboss/weld/integration/deployer/env/bda/ArchiveInfo.java 2010-09-22 18:24:11 UTC (rev 108284)
@@ -21,6 +21,7 @@
*/
package org.jboss.weld.integration.deployer.env.bda;
+import java.lang.ref.WeakReference;
import java.util.Map;
import java.util.WeakHashMap;
@@ -41,7 +42,7 @@
private static final ClasspathFactory classpathFactory = ClasspathFactory.getInstance();
// keeps track of the instances that are currently under use by deployers
- private static final Map<ClassLoader, ArchiveInfo> instances = new WeakHashMap<ClassLoader, ArchiveInfo>();
+ private static final Map<ClassLoader, WeakReference<ArchiveInfo>> instances = new WeakHashMap<ClassLoader, WeakReference<ArchiveInfo>>();
/**
* Returns the ArchiveInfo instance that corresponds to the given class loader.
@@ -52,7 +53,10 @@
*/
public static final ArchiveInfo getInstance(ClassLoader classLoader)
{
- return instances.get(classLoader);
+ // Unwrap from WeakReference before return
+ WeakReference<ArchiveInfo> reference = instances.get(classLoader);
+ if (reference == null) return null;
+ return reference.get();
}
// adapts an Archive to a Classpath
@@ -72,7 +76,9 @@
*/
public ArchiveInfo(ClassLoader classLoader)
{
- instances.put(classLoader, this);
+ // must wrap in WeakReference because value refers strongly to its own key
+ // see WeakHashMap javadoc
+ instances.put(classLoader, new WeakReference(this));
this.classLoader = classLoader;
this.classpath = classpathFactory.create(classLoader);
this.environment = new WeldDiscoveryEnvironment();
More information about the jboss-cvs-commits
mailing list