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 <[email protected]> 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.