openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Pinaki Poddar" <ppod...@bea.com>
Subject RE: svn commit: r561970 - in /openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa: enhance/PCRegistry.java util/ImplHelper.java
Date Thu, 02 Aug 2007 00:13:46 GMT
Kevin,
  Does that also imply that OpenJPA has to register() to the Embedder?
Otherwise Embedder may not remember whom to deRegister() unless someone
has register()ed to him. 
  Or is it purely Embedder's responsibility to remember because it is he
who only initiated a OpenJPA runtime? 

  Another rather insignifcant suggestion is to rename
PCRegistry.deRegister() may be more explict unloadClasses() or
something. 
Because PCRegistry is already using 'register' in some sense. This
deRegister() is carrying some other sense -- am I making sense?    


Pinaki Poddar
972.834.2865

-----Original Message-----
From: Kevin Sutter [mailto:kwsutter@gmail.com] 
Sent: Wednesday, August 01, 2007 5:34 PM
To: dev@openjpa.apache.org
Subject: Re: svn commit: r561970 - in
/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa:
enhance/PCRegistry.java util/ImplHelper.java

Pinaki,
The Embedder of OpenJPA would have to call this method (ie. Geronimo,
WebSphere, WebLogic, etc).  Any application server that embeds OpenJPA
may have to call this method if they run into this memory leak.  From
the discussion on the dev mailing list, it sounds like this problem
would be pervasive across all application servers.  Thus far, Geronimo
is the only one that has reported the problem.

I realize that this is not ideal with the Embedder calling back into
OpenJPA to indicate that a classloader is no longer in service, but from
the discussions, it didn't sound like any other solution was going to
suffice.
And, it sounded like from Don's last post on OPENJPA-285 that they were
getting antsy for some type of resolution.  I figured that this change
resolves the situation for now and if we come up with something better
or more generic, then we can change it or add to it later.

Kevin

On 8/1/07, Pinaki Poddar <ppoddar@bea.com> wrote:
>
> Kevin,
>    Who calls PCRegistry.deRegister(ClassLoader cl)?
>
>
> Pinaki Poddar
> 972.834.2865
>
> -----Original Message-----
> From: kwsutter@apache.org [mailto:kwsutter@apache.org]
> Sent: Wednesday, August 01, 2007 4:56 PM
> To: commits@openjpa.apache.org
> Subject: svn commit: r561970 - in
> /openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa:
> enhance/PCRegistry.java util/ImplHelper.java
>
> Author: kwsutter
> Date: Wed Aug  1 14:55:44 2007
> New Revision: 561970
>
> URL: http://svn.apache.org/viewvc?view=rev&rev=561970
> Log:
> OPENJPA-285.  I am going ahead with the integration of Kevan's patches

> for the two memory leaks found in OpenJPA while testing Geronimo.  I 
> will post more details in the Issue.
>
> Modified:
>
> openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/
> PC
> Registry.java
>
> openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Imp
> lH
> elper.java
>
> Modified:
> openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/
> PC
> Registry.java
> URL:
> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/jav
> a/
> org/apache/openjpa/enhance/PCRegistry.java?view=diff&rev=561970&r1=561
> 96
> 9&r2=561970
> ======================================================================
> ==
> ======
> ---
> openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/
> PC
> Registry.java (original)
> +++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enha
> +++ nc e/PCRegistry.java Wed Aug  1 14:55:44 2007
> @@ -203,6 +203,23 @@
>      }
>
>      /**
> +     * De-Register all metadata associated with the given
ClassLoader.
> +     * Allows ClassLoaders to be garbage collected.
> +     *
> +     * @param cl the ClassLoader
> +     */
> +    public static void deRegister(ClassLoader cl) {
> +        synchronized (_metas) {
> +            for (Iterator i = _metas.keySet().iterator(); 
> + i.hasNext();)
> {
> +                Class pcClass = (Class) i.next();
> +                if (pcClass.getClassLoader() == cl) {
> +                    _metas.remove(pcClass);
> +                }
> +            }
> +        }
> +    }
> +
> +    /**
>       * Returns a collection of class objects of the registered
>       * persistence-capable classes.
>       */
>
> Modified:
> openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Imp
> lH
> elper.java
> URL:
> http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/jav
> a/ 
> org/apache/openjpa/util/ImplHelper.java?view=diff&rev=561970&r1=561969
> &r
> 2=561970
> ======================================================================
> ==
> ======
> ---
> openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/Imp
> lH
> elper.java (original)
> +++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util
> +++ /I mplHelper.java Wed Aug  1 14:55:44 2007
> @@ -39,7 +39,6 @@
> import org.apache.openjpa.lib.util.Closeable;
> import org.apache.openjpa.lib.util.ReferenceMap;
> import org.apache.openjpa.lib.util.UUIDGenerator;
> -import org.apache.openjpa.lib.util.concurrent.ConcurrentHashMap;
> import
> org.apache.openjpa.lib.util.concurrent.ConcurrentReferenceHashMap;
> import org.apache.openjpa.meta.ClassMetaData;
> import org.apache.openjpa.meta.FieldMetaData;
> @@ -244,7 +243,8 @@
>          Boolean isAssignable = null;
>          Map assignableTo = (Map) _assignableTypes.get(from);
>          if (assignableTo == null) { // "to" cache doesn't exist, so 
> create it...
> -            assignableTo = new ConcurrentHashMap();
> +            assignableTo = new
> ConcurrentReferenceHashMap(ReferenceMap.WEAK,
> +                    ReferenceMap.HARD);
>              _assignableTypes.put(from, assignableTo);
>          } else { // "to" cache exists...
>              isAssignable = (Boolean) assignableTo.get(to);
>
>
>
> Notice:  This email message, together with any attachments, may 
> contain information  of  BEA Systems,  Inc.,  its subsidiaries  and  
> affiliated entities,  that may be confidential,  proprietary,  
> copyrighted  and/or legally privileged, and is intended solely for the

> use of the individual or entity named in this message. If you are not 
> the intended recipient, and have received this message in error, 
> please immediately return this by email and then delete it.
>

Notice:  This email message, together with any attachments, may contain information  of  BEA
Systems,  Inc.,  its subsidiaries  and  affiliated entities,  that may be confidential,  proprietary,
 copyrighted  and/or legally privileged, and is intended solely for the use of the individual
or entity named in this message. If you are not the intended recipient, and have received
this message in error, please immediately return this by email and then delete it.

Mime
View raw message