[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