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






Reply via email to