Well..logically it should work for all classes defined in the persistence.xml. I saw some posts where they did not specify the path to persistence.xml (option : -properties META-INF/persistence.xml) and javaagent automatically looked for all persistent classes. But my Tomcat doesnt startup if I dont specify a path to persistence.xml.
Anyhow I couldnt get it running with javaagent...I am just using eclipse to enhance my classes. Jan Marina Vatkina wrote: > > Janap, > > I was wondering if running javaagent on Tomcat startup will only result in > enhancing Tomcat classes or is javaagent supposed to be smarter than that? > > thanks, > -marina > > Janap wrote: >> Whoa....Enhancement works finally. I gave up the javaagent,fiddled around >> with the Enhancer Task which all said the same thing ..... >> >> [openjpac] 141 INFO [main] openjpa.MetaData - Found 1 classes with >> metadata in 0 milliseconds. >> [openjpac] 141 INFO [main] openjpa.MetaData - The class "test.Scale" >> listed in the openjpa.MetaDataFactory configuration property could not be >> loaded; ignoring. >> >> i compiled it with the PCEnhancer java class. In Eclipse it is just a >> click >> away. >> >> One more observation - I now am using the JPA Eclipse Plugin to generate >> Entity classes and then enhance them. During this process, the enhancer >> once >> complained that I cannot use "BigDecimal" as primary key. >> The enhancement worked after I converted it to "long". Any ideas? >> >> >> >> >> >> Janap wrote: >> >>>I have tried both the combinations Marc. I believe it might be a problem >>>with my class. I have to post the source tomorrow since I dont carry my >>>work to home :-) The classes are entity classes which I have reverse >>>engineered using the Hibernate Tools plugin for Eclipse. They are EJB 3.0 >>>compatible and work fine with hibernate. >>> >>>I appreciate the help, >>>best wishes and good night >>>Jan >>> >>> >>>Patrick Linskey-2 wrote: >>> >>>>Can you post the source to the Scale class? >>>> >>>>-Patrick >>>> >>>>On 7/11/07, Janap <[EMAIL PROTECTED]> wrote: >>>> >>>>>Thx for the info Craig...got that step working. Didnt have time for >>>>>research >>>>>for the past2 days,but now Im back with another problem. >>>>> >>>>>My web project structure is as follows.. >>>>> >>>>>/build/classes/test/Scale.class >>>>> >>>>>/src/test/Scale.java >>>>> >>>>>/web/WEB-INF/classes/META-INF/persistence.xml >>>>>/web/WEB-INF/classes/META-INF/orm.xml >>>>> >>>>>/web/WEB-INF/lib >>>>> >>>>>Following is my persistence.xml >>>>> >>>>><persistence xmlns="http://java.sun.com/xml/ns/persistence" >>>>>version="1.0"> >>>>><persistence-unit name="myPersistence" >>>>>transaction-type="RESOURCE_LOCAL"> >>>>> <provider> >>>>> org.apache.openjpa.persistence.PersistenceProviderImpl >>>>> </provider> >>>>> <mapping-file>orm.xml</mapping-file> >>>>> <class>test.Scale</class> >>>>> <properties> >>>>> <property name="openjpa.ConnectionURL" value="myurl"/> >>>>> <property name="openjpa.ConnectionDriverName" >>>>>value="oracle.jdbc.driver.OracleDriver"/> >>>>> <property name="openjpa.ConnectionUserName" >>>>> value="myuser"/> >>>>> <property name="openjpa.ConnectionPassword" value="mypwd"/> >>>>> <property name="openjpa.Log" >>>>>value="DefaultLevel=TRACE,Tool=TRACE"/> >>>>> </properties> >>>>></persistence-unit> >>>>></persistence> >>>>> >>>>> >>>>> >>>>>For runtime enhancement is start Tomcat within Eclipse with the >>>>>following VM >>>>>arguments : >>>>> >>>>>-javaagent:C:\Programme\Eclipse\workspace\JPAWebTest\web\WEB-INF\lib\openjpa-all-0.9.6-incubating.jar=addDefaultConstructor=false >>>>>,properties=C:\Programme\Eclipse\workspace\JPAWebTest\web\WEB-INF\classes\META-INF\persistence.xml,-scanDevPath=true, >>>>>directory=C:\Programme\Eclipse\workspace\JPAWebTest\build\classes,-tmpClassLoader=false >>>>> >>>>> >>>>>My Tomcat starts properly with the following log : >>>>> >>>>>15 TRACE [main] openjpa.Runtime - Setting the following properties >>>>>from >>>>>"file:/C:/Programme/Eclipse/workspace/JPAWebTest/web/WEB-INF/classes/META-INF/persistence.xml" >>>>>into configuration: {openjpa.ConnectionUserName=myuser, >>>>>openjpa.ConnectionPassword=mypwd, >>>>>openjpa.Log=DefaultLevel=TRACE,Tool=TRACE, >>>>>openjpa.MetaDataFactory=Resources=orm.xml, Types=test.Scale, >>>>>javax.persistence.provider=org.apache.openjpa.persistence.PersistenceProviderImpl, >>>>>openjpa.ConnectionURL=myurl, >>>>>openjpa.ConnectionDriverName=oracle.jdbc.driver.OracleDriver} >>>>>186 INFO [main] openjpa.MetaData - Found 1 classes with metadata in 0 >>>>>milliseconds. >>>>> >>>>> >>>>>Then as I try to run this servlet code : >>>>> >>>>> EntityManagerFactory emf = >>>>>Persistence.createEntityManagerFactory("myPersistence"); >>>>> >>>>> EntityManager em = emf.createEntityManager(); >>>>> em.getTransaction().begin(); >>>>> >>>>> Scale tab = new Scale(5); >>>>> em.persist(tab); >>>>> em.getTransaction().commit(); >>>>> em.close(); >>>>> emf.close(); >>>>> >>>>>I run into an exception which I believe because my class is not somehow >>>>>enhanced : >>>>> >>>>>62 TRACE [http-8090-Processor24] openjpa.MetaData - Using metadata >>>>>factory >>>>>"[EMAIL PROTECTED]". >>>>>93 INFO [http-8090-Processor24] openjpa.jdbc.JDBC - Using dictionary >>>>>class "org.apache.openjpa.jdbc.sql.OracleDictionary". >>>>>202 INFO [http-8090-Processor24] openjpa.MetaData - Found 1 classes >>>>>with >>>>>metadata in 16 milliseconds. >>>>>95452 TRACE [http-8090-Processor24] openjpa.Enhance - "test/Scale" >>>>>requires runtime enhancement: true >>>>>95561 WARN [http-8090-Processor24] openjpa.Enhance - An exception was >>>>>thrown while attempting to perform class file transformation on >>>>>"test/Scale": >>>>>java.lang.IllegalArgumentException: java.lang.ClassNotFoundException: >>>>>test.Scale >>>>> at serp.util.Strings.toClass(Strings.java:211) >>>>> at serp.util.Strings.toClass(Strings.java:140) >>>>> at serp.bytecode.BCClass.getType(BCClass.java:565) >>>>> at >>>>>org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:187) >>>>> at >>>>>org.apache.openjpa.enhance.PCClassFileTransformer.transform(PCClassFileTransformer.java:124) >>>>> at >>>>>sun.instrument.TransformerManager.transform(TransformerManager.java:122) >>>>> at >>>>>sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:155) >>>>> at java.lang.ClassLoader.defineClass1(Native Method) >>>>> at java.lang.ClassLoader.defineClass(ClassLoader.java:620) >>>>> >>>>> >>>>>I tried out different combinations but was not successful...probably >>>>>someone >>>>>could find the flaw.. >>>>> >>>>>best wishes >>>>>Jan >>>>> >>>>> >>>>> >>>>>Hi, >>>>> >>>>>This is from the Java SE 6 documentation. It explains "all": >>>>>Command-Line Interface >>>>> >>>>>On implementations with a command-line interface, an agent is started >>>>>by adding this option to the command-line: >>>>> >>>>>-javaagent:jarpath[=options] >>>>>jarpath is the path to the agent JAR file. options is the agent >>>>>options. This switch may be used multiple times on the same command- >>>>>line, thus creating multiple agents. More than one agent may use the >>>>>same jarpath. An agent JAR file must conform to the JAR file >>>>>specification. >>>>>The manifest of the agent JAR file must contain the attribute Premain- >>>>>Class. The value of this attribute is the name of the agent class. >>>>>The agent class must implement a public static premain method similar >>>>>in principle to the main application entry point. After the Java >>>>>Virtual Machine (JVM) has initialized, each premain method will be >>>>>called in the order the agents were specified, then the real >>>>>application main method will be called. Each premain method must >>>>>return in order for the startup sequence to proceed. >>>>>The premain method has one of two possible signatures. The JVM first >>>>>attempts to invoke the following method on the agent class: >>>>>public static void premain(String agentArgs, Instrumentation inst); >>>>>If the agent class does not implement this method then the JVM will >>>>>attempt to invoke: >>>>> >>>>>public static void premain(String agentArgs); >>>>>The agent class may also have an agentmain method for use when the >>>>>agent is started after VM startup. When the agent is started using a >>>>>command-line option, the agentmain method is not invoked. >>>>> >>>>>The agent class will be loaded by the system class loader (see >>>>>ClassLoader.getSystemClassLoader). This is the class loader which >>>>>typically loads the class containing the application main method. The >>>>>premain methods will be run under the same security and classloader >>>>>rules as the application main method. There are no modeling >>>>>restrictions on what the agent premain method may do. Anything >>>>>application main can do, including creating threads, is legal from >>>>>premain. >>>>> >>>>>Each agent is passed its agent options via the agentArgs parameter. >>>>>The agent options are passed as a single string, any additional >>>>>parsing should be performed by the agent itself. >>>>> >>>>>If the agent cannot be resolved (for example, because the agent class >>>>>cannot be loaded, or because the agent class does not have an >>>>>appropriate premain method), the JVM will abort. If a premain method >>>>>throws an uncaught exception, the JVM will abort. >>>>> >>>>> >>>>> >>>>>Craig >>>>> >>>>> >>>>> >>>>>-- >>>>>View this message in context: >>>>>http://www.nabble.com/Runtime-Enhancement-in-Eclipse-tf4049770.html#a11537016 >>>>>Sent from the OpenJPA Users mailing list archive at Nabble.com. >>>>> >>>>> >>>> >>>> >>>>-- >>>>Patrick Linskey >>>>202 669 5907 >>>> >>>> >>> >>> >> > > > -- View this message in context: http://www.nabble.com/Runtime-Enhancement-in-Eclipse-tf4049770.html#a11575929 Sent from the OpenJPA Users mailing list archive at Nabble.com.
