[ 
https://issues.apache.org/jira/browse/OPENJPA-2042?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jacob Nowosatka updated OPENJPA-2042:
-------------------------------------

    Attachment: TestEMFMemoryLeak.java

> Diagnostics for Application Managed EntityManagerFactory leaks.
> ---------------------------------------------------------------
>
>                 Key: OPENJPA-2042
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2042
>             Project: OpenJPA
>          Issue Type: Improvement
>            Reporter: Jacob Nowosatka
>            Priority: Minor
>         Attachments: TestEMFMemoryLeak.java
>
>
> EntityManagerFactories can be leaked if they are created with the JSE 
> bootstrap Persistence class and are never closed, causing an 
> OutOfMemoryException.
> One possibility may be to log a warning or otherwise alert the developer when 
> the number of unclosed EMF's reaches a certain threshold. An extra step could 
> be taken here to track where the EMF's are being opened and which ones aren't 
> being closed as to show the developer exactly where in the code the problem 
> is occurring.
> There may be a possibility to eliminate this leak by making the references to 
> the EMF's weak and let the garbage collector clean up the unclosed EMF's. 
> However, in the case that other objects are being leaked as well, this change 
> may make it harder to detect such leaks.
> I ran a simple test that creates a EMF from Persistence. It then creates and 
> closes an EntityManger. A new EMF is then created without closing the old 
> one, effectively "leaking" it. As expected, this results in an 
> OutOfMemoryException. When using weak references on the EMF's, I was able to 
> get the test to run all night without a trace of any heap growth. However, 
> this is only a very simple test and a test with more 
> Entities/Configurations/etc. may result in heap growth due to other objects 
> being leaked(as mentioned earlier). My test case is attached.
> For comparison, I tried the same test on Hibernate and EclipseLink. Hibernate 
> runs into the same OutOfMemoryException. EclipseLink does not.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to