openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Janap <janapure...@gmail.com>
Subject Re: Runtime Enhancement in Eclipse
Date Thu, 12 Jul 2007 16:56:21 GMT

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 <janapureddy@gmail.com> 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
>>> "org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory@1b0bdc8".
>>> 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#a11564182
Sent from the OpenJPA Users mailing list archive at Nabble.com.


Mime
View raw message