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.

Reply via email to