You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by jr...@apache.org on 2010/03/17 18:58:40 UTC

svn commit: r924395 - /openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/InstrumentationFactory.java

Author: jrbauer
Date: Wed Mar 17 17:58:40 2010
New Revision: 924395

URL: http://svn.apache.org/viewvc?rev=924395&view=rev
Log:
OPENJPA-1410 Disable loading of dynamic enhancement agent if OpenJPA is not loaded with the system classloader.

Modified:
    openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/InstrumentationFactory.java

Modified: openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/InstrumentationFactory.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/InstrumentationFactory.java?rev=924395&r1=924394&r2=924395&view=diff
==============================================================================
--- openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/InstrumentationFactory.java (original)
+++ openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/enhance/InstrumentationFactory.java Wed Mar 17 17:58:40 2010
@@ -79,8 +79,7 @@ public class InstrumentationFactory {
      * @return null if Instrumentation can not be obtained, or if any 
      * Exceptions are encountered.
      */
-    public static synchronized Instrumentation 
-        getInstrumentation(final Log log) {
+    public static synchronized Instrumentation getInstrumentation(final Log log) {
         if (_inst != null || !_dynamicallyInstall)
             return _inst;
 
@@ -90,6 +89,18 @@ public class InstrumentationFactory {
 
         AccessController.doPrivileged(new PrivilegedAction<Object>() {
             public Object run() {
+                // Dynamic agent enhancement should only occur when the OpenJPA library is 
+                // loaded using the system class loader.  Otherwise, the OpenJPA
+                // library may get loaded by separate, disjunct loaders, leading to linkage issues.
+                try {
+                    if (!InstrumentationFactory.class.getClassLoader().equals(
+                        ClassLoader.getSystemClassLoader())) {
+                        return null;
+                    }
+                } catch (Throwable t) {
+                    return null;
+                }
+                
                 // If we can't find the tools.jar, we can't load the agent.
                 File toolsJar = findToolsJar(log);
                 if (toolsJar == null) {