A real project pom doing it: https://github.com/rmannibucau/JeBlog/blob/master/pom.xml Romain Manni-Bucau Twitter: @rmannibucau Blog: http://rmannibucau.wordpress.com/ LinkedIn: http://fr.linkedin.com/in/rmannibucau Github: https://github.com/rmannibucau
2013/9/18 Leonardo K. Shikida <[email protected]>: > So, > > what seems to work for me now was to enhance the classes before using them. > > thanks Rick and Romain > > It sounds a little wrong for me that I have to add an annotation processor > to generate classes for criteria (openjpa.metamodel=true) and another step > to post-process classes before using the classes. Isn't java source code > good enough? :-) > > And since I am too lazy to add an eclipse plugin that renders in a way that > I can't read the last checkbox, neither I want to change my eclipse project > structure to use an ant builder, and neither I want to move from 1.5.2 to > 1.6.0 right now, I decided to post-process my class manually with this > snippet. > > public static void main(String[] args) { > String baseClassDir = "/path/to/classes/"; > Collection<File> files = FileUtils.listFiles(new > File(baseClassDir), null, true); > for(File file:files){ > String[] a = new String[3]; > a[0] = "-d"; > a[1] = baseClassDir; > a[2] = file.getAbsolutePath(); > org.apache.openjpa.enhance.PCEnhancer.main(a); > } > } > > Maybe this can help someone, I hope :-) > > TIA > > Leo > > [] > > Leo > > > On Wed, Sep 18, 2013 at 11:58 AM, Leonardo K. Shikida > <[email protected]>wrote: > >> Also, it seems somehow consistent about the JDK. Both IBM 7 JDKs for >> windows and linux work, and both Oracle JDK for oracle 7 (u40) don't. >> >> TIA >> >> Leo >> >> [] >> >> Leo >> >> >> On Wed, Sep 18, 2013 at 11:52 AM, Leonardo K. Shikida >> <[email protected]>wrote: >> >>> Hi Rick >>> >>> here what happens >>> >>> when I run from eclipse, using IBM JDK 7 on linux, I defaults to subclass >>> >>> >>> WARNING: Creating subclass for "[...]". This means that your application >>> will be less efficient and will consume more memory than it would if you >>> ran the OpenJPA enhancer. Additionally, lazy loading will not be available >>> for one-to-one and many-to-one persistent attributes in types using field >>> access; they will be loaded eagerly instead. >>> >>> but it works. >>> >>> now, the same thing but using the javaagent in eclipse run configurations >>> >>> -javaagent:/path/to/openejb-javaagent.jar >>> >>> then I get >>> >>> INFO: Creating subclass and redefining methods for "[...]". This means >>> that your application will be less efficient than it would if you ran the >>> OpenJPA enhancer. >>> >>> Exception in thread "main" javax.ejb.EJBException: The bean encountered a >>> non-application exception; nested exception is: >>> <openjpa-2.2.0-r422266:1244990 fatal general error> >>> org.apache.openjpa.persistence.PersistenceException: null >>> >>> which is pretty the same error I get if I use Oracle JVM and no javaagent >>> >>> TIA >>> >>> Leo >>> >>> >>> [] >>> >>> Leo >>> >>> >>> On Wed, Sep 18, 2013 at 11:35 AM, Rick Curtis <[email protected]> wrote: >>> >>>> The waters are getting pretty muddy here.... but I'll try my best to >>>> clear >>>> things up. >>>> >>>> I'm not certain, but I suspect that when running on the IBM JVM, the >>>> openjpa.DynamicEnhancementAgent was kicking in an your Entities were >>>> getting enhanced automagically. For whatever reason it sounds like that >>>> wasn't working on the Windows Oracle JVM and it was falling back to >>>> subclassing. I know you mentioned that you don't have >>>> openjpa.RuntimeUnenhancedClass set to supported, but the initial stack >>>> trace that you posted indicates otherwise. >>>> >>>> The root issue here is that your entities weren't being enhanced. It >>>> sounds >>>> like now that you have the latest version of the tomEE agent hooked up, >>>> everything is working? If you prefer to not go the agent path, you could >>>> always use build time enhancement and not have to mess with any of this >>>> business. >>>> >>>> HTH, >>>> Rick >>>> >>>> >>>> >>>> >>>> On Wed, Sep 18, 2013 at 9:16 AM, Romain Manni-Bucau >>>> <[email protected]>wrote: >>>> >>>> > the javaagent was broken (fixed on trunk) so i fear you need to >>>> > enhance classes in your build >>>> > Romain Manni-Bucau >>>> > Twitter: @rmannibucau >>>> > Blog: http://rmannibucau.wordpress.com/ >>>> > LinkedIn: http://fr.linkedin.com/in/rmannibucau >>>> > Github: https://github.com/rmannibucau >>>> > >>>> > >>>> > >>>> > 2013/9/18 Leonardo K. Shikida <[email protected]>: >>>> > > Hi Romain >>>> > > >>>> > > thanks >>>> > > >>>> > > I am running some code using tomEE embedded in a main() method, using >>>> > > eclipse. >>>> > > >>>> > > So I've added to the run configurations->java application->my >>>> class->VM >>>> > > arguments >>>> > > >>>> > > -javaagent:/home/myuser/tomee/lib/openejb-javaagent.jar >>>> > > >>>> > > As suggested in (I guess) >>>> > > >>>> > > >>>> > >>>> http://webspherepersistence.blogspot.com.br/2009/02/openjpa-enhancement.html >>>> > > >>>> > > But I still get an error such as >>>> > > >>>> > > INFO: Creating subclass and redefining methods for "[class xyz]". >>>> This >>>> > > means that your application will be less efficient than it would if >>>> you >>>> > ran >>>> > > the OpenJPA enhancer. >>>> > > Exception in thread "main" javax.ejb.EJBException: The bean >>>> encountered a >>>> > > non-application exception; nested exception is: >>>> > > <openjpa-2.2.0-r422266:1244990 fatal general error> >>>> > > org.apache.openjpa.persistence.PersistenceException: null >>>> > > >>>> > > Am I missing something here? >>>> > > >>>> > > Your posts below talks about some system properties, is it enough to >>>> just >>>> > > drop them into properties.xml for tomee 1.5.2? >>>> > > >>>> > > >>>> > >>>> http://rmannibucau.wordpress.com/2012/07/26/tomee-and-openejb-jpa-deploy-time-enhancement/ >>>> > > >>>> > > TIA >>>> > > >>>> > > Leo >>>> > > >>>> > > >>>> > > >>>> > > >>>> > > >>>> > > [] >>>> > > >>>> > > Leo >>>> > > >>>> > > >>>> > > On Wed, Sep 18, 2013 at 1:36 AM, Romain Manni-Bucau >>>> > > <[email protected]>wrote: >>>> > > >>>> > >> Hi >>>> > >> >>>> > >> Note: In tomee on trunk if you list your classes in >>>> persistence-unit it >>>> > is >>>> > >> automatically done if the persistence.xml is in >>>> meta-inf/persistence.xml >>>> > >> Le 18 sept. 2013 04:40, "Leonardo K. Shikida" <[email protected]> a >>>> > écrit >>>> > >> : >>>> > >> >>>> > >> > So just answering myself (openJPA list brought the solution) >>>> > >> > >>>> > >> > It seems that if I use IBM JVM (J9) in both windows and linux, it >>>> > works. >>>> > >> > >>>> > >> > If I use oracle's, then I get the error. >>>> > >> > >>>> > >> > My persistence.xml does not have >>>> > >> > >>>> > >> > <property name="openjpa.RuntimeUnenhancedClasses" >>>> > value="unsupported"/> >>>> > >> > >>>> > >> > And I get the warning >>>> > >> > >>>> > >> > WARNING: Creating subclass for "[...]". >>>> > >> > This means that your application will be >>>> > >> > less efficient and will consume more memory >>>> > >> > than it would if you ran the OpenJPA enhancer. >>>> > >> > >>>> > >> > Additionally, lazy loading will not be >>>> > >> > available for one-to-one and many-to-one >>>> > >> > persistent attributes in types using field >>>> > >> > access; they will be loaded eagerly instead. >>>> > >> > >>>> > >> > And this procedure is not recommended as stated at >>>> > >> > http://openjpa.apache.org/entity-enhancement.html >>>> > >> > >>>> > >> > "The use of OpenJPA's subclassing support is not recommended, and >>>> is >>>> > >> > disabled by default in OpenJPA 2.0 and beyond." >>>> > >> > >>>> > >> > TIA >>>> > >> > >>>> > >> > >>>> > >> > Leo >>>> > >> > >>>> > >> > >>>> > >> > >>>> > >> > [] >>>> > >> > >>>> > >> > Leo >>>> > >> > >>>> > >> > >>>> > >> > On Tue, Sep 17, 2013 at 1:14 PM, Leonardo K. Shikida < >>>> > [email protected]> >>>> > >> > wrote: >>>> > >> > > >>>> > >> > > Hi >>>> > >> > > >>>> > >> > > I have an tomee 1.5.2 + that runs perfectly on linux, but when I >>>> > try to >>>> > >> > run from windows, it gives me the following error message (see >>>> > >> stacktrace) >>>> > >> > > >>>> > >> > > My doubts are >>>> > >> > > >>>> > >> > > - what does it mean :-) >>>> > >> > > - why only in windows >>>> > >> > > - is there any way to deal with this? >>>> > >> > > >>>> > >> > > My feeling it that it's somehow related to the OpenJPA >>>> enhancement >>>> > >> > process, but I really don't have a clue here. >>>> > >> > > >>>> > >> > > TIA >>>> > >> > > >>>> > >> > > Leo >>>> > >> > > >>>> > >> > > Exception in thread "main" javax.ejb.EJBException: The bean >>>> > >> encountered a >>>> > >> > non-application exception; nested exception is: >>>> > >> > > <openjpa-2.2.0-r422266:1244990 fatal general error> >>>> > >> > org.apache.openjpa.persistence.PersistenceException: null >>>> > >> > > at >>>> > >> > >>>> > >> > >>>> > >> >>>> > >>>> org.apache.openejb.core.ivm.BaseEjbProxyHandler.convertException(BaseEjbProxyHandler.java:363) >>>> > >> > > at >>>> > >> > >>>> > >> > >>>> > >> >>>> > >>>> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:283) >>>> > >> > > at (...) at >>>> > >> > > (...) >>>> > >> > > Caused by: <openjpa-2.2.0-r422266:1244990 fatal general error> >>>> > >> > org.apache.openjpa.persistence.PersistenceException: null >>>> > >> > > at >>>> > >> > >>>> > >> > >>>> > >> >>>> > >>>> org.apache.openjpa.enhance.ClassRedefiner.redefineClasses(ClassRedefiner.java:96) >>>> > >> > > at >>>> > >> > >>>> > >> > >>>> > >> >>>> > >>>> org.apache.openjpa.enhance.ManagedClassSubclasser.prepareUnenhancedClasses(ManagedClassSubclasser.java:176) >>>> > >> > > at >>>> > >> > >>>> > >> > >>>> > >> >>>> > >>>> org.apache.openjpa.kernel.AbstractBrokerFactory.loadPersistentTypes(AbstractBrokerFactory.java:314) >>>> > >> > > at >>>> > >> > >>>> > >> > >>>> > >> >>>> > >>>> org.apache.openjpa.kernel.AbstractBrokerFactory.initializeBroker(AbstractBrokerFactory.java:238) >>>> > >> > > at >>>> > >> > >>>> > >> > >>>> > >> >>>> > >>>> org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212) >>>> > >> > > at >>>> > >> > >>>> > >> > >>>> > >> >>>> > >>>> org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156) >>>> > >> > > at >>>> > >> > >>>> > >> > >>>> > >> >>>> > >>>> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227) >>>> > >> > > at >>>> > >> > >>>> > >> > >>>> > >> >>>> > >>>> org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60) >>>> > >> > > at >>>> > >> > >>>> > >> > >>>> > >> >>>> > >>>> org.apache.openejb.assembler.classic.ReloadableEntityManagerFactory.createEntityManager(ReloadableEntityManagerFactory.java:160) >>>> > >> > > at >>>> > >> > >>>> > >> > >>>> > >> >>>> > >>>> org.apache.openejb.persistence.JtaEntityManagerRegistry.getEntityManager(JtaEntityManagerRegistry.java:115) >>>> > >> > > at >>>> > >> > >>>> > >> > >>>> > >> >>>> > >>>> org.apache.openejb.persistence.JtaEntityManager.getEntityManager(JtaEntityManager.java:80) >>>> > >> > > (...) >>>> > >> > > Caused by: java.lang.VerifyError >>>> > >> > > at >>>> sun.instrument.InstrumentationImpl.retransformClasses0(Native >>>> > >> > Method) >>>> > >> > > at >>>> > >> > >>>> > >> > >>>> > >> >>>> > >>>> sun.instrument.InstrumentationImpl.retransformClasses(InstrumentationImpl.java:144) >>>> > >> > > ... 52 more >>>> > >> > > >>>> > >> > > [] >>>> > >> > > >>>> > >> > > Leo >>>> > >> > >>>> > >> >>>> > >>>> >>>> >>>> >>>> -- >>>> *Rick Curtis* >>>> >>> >>> >>
