Hi Rick, thanks for response!
Unfortunately I guess I need Runtime Enhancement! I use openjpa within an OSGi-Runtime and I don't know all classes to persist at startUp. Therefore I need RuntimeEnhancement, right? I tried the option javaagent (within the stand-alone-test-project), but then I see the warning 'You have enabled runtime enhancement, but have not specified the set of persistent classes. OpenJPA must look for metadata for every loaded class, which might increase class load times significantly.'. I could live with that, but first have to try to use the javaagent within the OSGi-Runtime. Has anyone experiences with openjpa and osgi? It would be nice to hear, how you people deal with it! Cheers, Kevin > -----Ursprüngliche Nachricht----- > Von: Rick Curtis [mailto:[email protected]] > Gesendet: Dienstag, 25. August 2009 17:17 > An: [email protected] > Betreff: Re: Memory Issues > > Kevin - > > I'm willing to bet that the problem you're running into is a > result of not > enhancing your Entities. Take a read through the 'Entity > Enhancement' page > [1] and let us know how it goes. > > Thanks, > Rick > > [1] http://openjpa.apache.org/entity-enhancement.html > > On Tue, Aug 25, 2009 at 9:24 AM, Lohmann Kevin > <[email protected]>wrote: > > > Hi *, > > > > I'm using openjpa 1.2.1 and Derby 10.4.2.0 and I'm getting > > OutOfMemoryErrors (Java heap space). > > > > I have a class named 'Data' which has a byte-array. The class is > > annotated. > > > > In a small test I create one EntityManagerFactory and - in > a loop - 100 > > EntiyManagers. > > > > For each EM I start a transaction, create a Data-Object, > fill it with > > the byte-array, persist the object, commit the transaction > and close the > > EM. > > > > Surprisingly the OutOfMemoryError occurs after the ~70. > loop-event. With > > JProfiler I see, that all Data-Objects are still in the > memory, but I > > don't use any cache (DataCache + QueryCache). The objects > are held by > > 'org.apache.openjpa.enhance.ReflectingPersistenceCapable' and > > 'org.apache.openjpa.lib.util.concurrent.ConcurrentReferenceHashMap'. > > > > Is it because I use RuntimeEnhancement? > > > > I guess, I miss some configuration!? With Hibernate or > EclipseLink these > > OOME doesn't occure (the objects are then gc'ed - just like > expected!). > > > > Can anyone point me to the missing config parameter? Or is > it a known > > bug, which I can find in the inet? > > > > The config-parameter I use: > > > > props.put("openjpa.ConnectionURL", > > "jdbc:derby:C:\\database";create=true"); > > props.put("openjpa.ConnectionDriverName", > > "org.apache.derby.jdbc.EmbeddedDriver"); > > > > props.put("openjpa.jdbc.SynchronizeMappings", "buildSchema"); > > props.put("openjpa.RuntimeUnenhancedClasses", "supported"); > > props.put("openjpa.MetaDataFactory", > > "jpa(Types=\"use.database.Data\")"); > > > > props.put("openjpa.Multithreaded", "true"); > > > > props.put("openjpa.Log", "log4j"); > > props.put("openjpa.ConnectionFactoryProperties", > > "PrettyPrint=true, PrettyPrintLineLength=22"); > > > > props.put("openjpa.DataCache", "false"); > > props.put("openjpa.QueryCache", "false"); > > > > My Code: > > > > EntityManagerFactory lEMF = Persistence > > > .createEntityManagerFactory("openjpa", > > props); > > > > for (int i = 0; i < 100; i++) { > > > > EntityManager lEM = lEMF.createEntityManager(); > > > > lEM.getTransaction().begin(); > > > > Data lData = new Data(); > > // Here a file is read out, that has a size of 800kb > > lData.setContent(getContentFromFile()); > > > > lEM.persist(lData); > > lEM.getTransaction().commit(); > > > > lEM.close(); > > > > } > > > > Cheers, > > Kevin > > >
