openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kurt T Stam <kurt.s...@gmail.com>
Subject Re: memory leak? - simple question
Date Wed, 13 Jan 2010 21:31:26 GMT
Hi Rick, thank you for you quick response. My comments inline.

Rick Curtis wrote:
> If you change the 1000 to something like 1000000... does your application go
> OOM? 
Yep it does.
> Are you running in a JSE environment?
running in tomcat.
>  What is PersistenceManager?
>   

http://svn.apache.org/repos/asf/webservices/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/config/PersistenceManager.java

The code referenced below is based on

http://svn.apache.org/repos/asf/webservices/juddi/trunk/juddi-core/src/main/java/org/apache/juddi/api/impl/UDDISecurityImpl.java

I just added the loop to make the problem more obvious. This method is 
called from a web service client.
> On Wed, Jan 13, 2010 at 2:05 PM, Kurt T Stam <kurt.stam@gmail.com> wrote:
>
>   
>> BTW I'm running with the cache off
>>
>> <property name="openjpa.DataCache" value="false"/>
>>
>> (that turns it off right?)
>>
>> --Kurt
>>
>>
>>
>> Kurt T Stam wrote:
>>
>>     
>>> Hi guys,
>>>
>>> [DESCRIPTION] The code below inserts a 1000 records in the database.
>>>
>>> for (int i=1; i<1000; i++) {
>>>           EntityManager em = PersistenceManager.getEntityManager();
>>>           EntityTransaction tx = em.getTransaction();
>>>           try {
>>>               tx.begin();
>>>                   // Generate auth token and store it!
>>>               String authInfo = AUTH_TOKEN_PREFIX + UUID.randomUUID();
>>>               org.apache.juddi.model.AuthToken modelAuthToken = new
>>> org.apache.juddi.model.AuthToken();
>>>               if (authInfo != null) {
>>>                   modelAuthToken.setAuthToken(authInfo);
>>>                   modelAuthToken.setCreated(new Date());
>>>                   modelAuthToken.setLastUsed(new Date());
>>>                   modelAuthToken.setAuthorizedName(publisherId);
>>>                   modelAuthToken.setNumberOfUses(0);
>>>                   modelAuthToken.setTokenState(AUTHTOKEN_ACTIVE);
>>>                     em.persist(modelAuthToken);
>>>               }
>>>                 apiAuthToken = new org.uddi.api_v3.AuthToken();
>>>                 MappingModelToApi.mapAuthToken(modelAuthToken,
>>> apiAuthToken);
>>>                 tx.commit();
>>>                         } finally {
>>>               if (tx.isActive()) {
>>>                   tx.rollback();
>>>               }
>>>               em.clear();
>>>               em.close();
>>>           }
>>>       }
>>>
>>>
>>> [ISSUE]
>>> After it leaving this code I end up with a 1000
>>> org.apache.juddi.model.AuthToken objects in memory. I've been using the
>>> profiler, and these objects cannot be garbage collected.
>>>
>>> This seems to be pretty the most common use case of using an OR-mapping
>>> tool, so I find it hard to believe openjpa has a memory leak here. Does
>>> anyone see what I'm doing wrong? Or can someone point me to an example that
>>> does not exhibit this behavior? BTW same code using hibernate does not
>>> accumulate these objects.
>>>
>>> We're using openjpa 1.2.1.
>>>
>>>
>>> Thx,
>>>
>>>
>>> Kurt
>>>
>>> Apache jUDDI.
>>>
>>>       
>>     
>
>
>   


Mime
View raw message