openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rick Curtis (JIRA)" <>
Subject [jira] Updated: (OPENJPA-952) Utilize Sun JDK's Attach API to dynamically load the OpenJPA enhancer agent
Date Wed, 01 Apr 2009 18:26:13 GMT


Rick Curtis updated OPENJPA-952:

    Attachment: OPENJPA-952.patch

Kevin -

Thanks for all the comments! The latest patch should have addressed all of your comments.
The only comment I'd like to address directly is,

Question: I like the getAgentJar processing for when running within Eclipse.  Should make
testing even easier.  Thanks.  But...  (always a but)...  Shouldn't there be a way to turn
this feature off?  Just in case we're debugging a particular situation, I think we need a
means of turning off this dynamic support.  Don't you think?

Answer: That processing is out of necessity, not a feature. To dynamically load an agent,
a jar file is needed that has an Agent-class defined. Under normal circumstances the PersistenceProviderImpl
is loaded from the OpenJPA jar and we can load the agent with that jar. When running a test
the OpenJPA jar doesn't exist and the only way to get around this would be to setup your test
to run off a compiled OpenJPA jar.

To run the news test suite associated with this patch the following steps need to be followed:
* Compile OpenJPA with the 1.5 JDK and make sure to skip the tests. (-DskipTests=true ...
We need to skip the tests so that the build time enhancer doesn't run)
* Switch to the Sun 1.6 JDK.
* Run mvn test -P test-dynamic-enhancer,test-derby (or which ever DB you want to run with,
I've only tried derby)

* See openjpa-persistence-jdbc -> org.apache.openjpa.persistence.enhance.DynamicEnhancementSuite
for a detailed list of the tests that are run.
* By specifying mvn test -P test-dynamic-enhancer,test-derby -DdynamicTest=org.apache.openjpa....
allows you to run a single test with the dynamic enhancer.


> Utilize Sun JDK's Attach API to dynamically load the OpenJPA enhancer agent
> ---------------------------------------------------------------------------
>                 Key: OPENJPA-952
>                 URL:
>             Project: OpenJPA
>          Issue Type: Improvement
>          Components: kernel
>    Affects Versions: 2.0.0
>         Environment: Sun 1.6 JDK. 
> Note: The Attach API is ONLY a part of the JDK, not the SDK.
>            Reporter: Rick Curtis
>         Attachments: OPENJPA-952.patch, OPENJPA-952.patch
> When running in a JSE environment, OpenJPA could use the Attach API to dynamically load
the enhancer agent at runtime. Dynamically loading the enhancer means that an OpenJPA developer
doesn't need to configure a -javaagent. Doing this would dramatically improve the out of box
performance, and also improve the ease of use. 
> This improvement has the following caveats:
> 1.) This API is ONLY a part of the 1.6 JDK.
> 2.) This API is supported by only the Sun JDK.
> 3.) If the agent is loaded from the earliest OpenJPA code, the agent will be laoded when
creating an EntityManager in the EntityManagerFactoryImpl. If an Entity class is loaded by
the JVM before the enhancer agent is loaded, that class' byte code will not be enhanced. 
> Attach API -

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message