Grzegorz Grzybek created OPENJPA-2538:
-----------------------------------------

             Summary: Classloader memory leak in PCRegistry
                 Key: OPENJPA-2538
                 URL: https://issues.apache.org/jira/browse/OPENJPA-2538
             Project: OpenJPA
          Issue Type: Bug
    Affects Versions: 2.3.0
            Reporter: Grzegorz Grzybek
            Priority: Critical


I'm using OpenJPA in OSGi environment (namely: JBoss Fuse 6.1). We had nasty 
{{NullPointerException}} in Felix when trying to load source code during 
initialization of class metadata. [This 
line|https://github.com/apache/openjpa/blob/2.3.0/openjpa-kernel/src/main/java/org/apache/openjpa/meta/MetaDataRepository.java#L1614]
 returned duplicate entity classes - half of them were from old revision of a 
bundle and half - from new revision.

I tracked down the problem to the point, where 
{{org.apache.openjpa.enhance.PCRegistry#register()}} was invoked as part of 
constructing new instances of entity classes (static initialization injected 
during class enhancement). Although {{_metas}} is instance of 
{{ConcurrentReferenceHashMap}} with weak keys, the keys (entity classes) had 
other hard references too. Here's a list of the hard refs I got from simple 
heap dump:
* org.apache.openjpa.meta.MetaDataRepository#_impls
* org.apache.openjpa.meta.InheritanceComparator#_base
* org.apache.openjpa.enhance.PCRegistry.Meta#pcSuper
* org.apache.openjpa.meta.MetaDataRepository#_oids

so on every bundle refresh we have next bunch of classes in {{_metas}}...



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to