You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/07/06 17:39:15 UTC

svn commit: r1608226 - in /tomee/tomee/trunk/container/openejb-core/src: main/java/org/apache/openejb/assembler/classic/Assembler.java test/java/org/apache/openejb/core/cmp/jpa/JpaTest.java

Author: rmannibucau
Date: Sun Jul  6 15:39:14 2014
New Revision: 1608226

URL: http://svn.apache.org/r1608226
Log:
preventing openjpa to refine classes - can be skipped with openejb.openjpa.canRedefine set to true but breaks cmp on java 7 otherwise in embedded mode at least

Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/JpaTest.java

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1608226&r1=1608225&r2=1608226&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Sun Jul  6 15:39:14 2014
@@ -185,6 +185,7 @@ import java.io.Serializable;
 import java.lang.instrument.ClassFileTransformer;
 import java.lang.instrument.Instrumentation;
 import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.net.MalformedURLException;
@@ -208,6 +209,7 @@ import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.locks.ReentrantLock;
+import java.util.logging.Level;
 
 @SuppressWarnings({"UnusedDeclaration", "UnqualifiedFieldAccess", "UnqualifiedMethodAccess"})
 public class Assembler extends AssemblerTool implements org.apache.openejb.spi.Assembler, JndiConstants {
@@ -2698,6 +2700,20 @@ public class Assembler extends Assembler
     }
 
     private static class PersistenceClassLoaderHandlerImpl implements PersistenceClassLoaderHandler {
+        static {
+            final boolean hack = "true".equalsIgnoreCase(System.getProperty("openejb.openjpa.canRedefine", "false"));
+            if (!hack) {
+                try { // hack for java 7 (was fine before)
+                    final Class<?> classRedefinerClass = ParentClassLoaderFinder.Helper.get().loadClass("org.apache.openjpa.enhance.ClassRedefiner");
+                    final Field field = classRedefinerClass.getDeclaredField("_canRedefine");
+                    field.setAccessible(true);
+                    field.set(null, Boolean.FALSE);
+                } catch (final Throwable e) {
+                    // use JUL and not openejb Logger
+                    java.util.logging.Logger.getLogger(PersistenceClassLoaderHandlerImpl.class.getName()).log(Level.SEVERE, e.getMessage(), e);
+                }
+            }
+        }
 
         private static final AtomicBoolean logged = new AtomicBoolean(false);
 

Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/JpaTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/JpaTest.java?rev=1608226&r1=1608225&r2=1608226&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/JpaTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/JpaTest.java Sun Jul  6 15:39:14 2014
@@ -19,6 +19,7 @@ package org.apache.openejb.core.cmp.jpa;
 
 import junit.framework.TestCase;
 import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
+import org.apache.openejb.core.ParentClassLoaderFinder;
 import org.apache.openejb.core.TempClassLoader;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.persistence.PersistenceClassLoaderHandler;
@@ -42,6 +43,7 @@ import javax.sql.DataSource;
 import javax.transaction.TransactionManager;
 import javax.transaction.TransactionSynchronizationRegistry;
 import java.lang.instrument.ClassFileTransformer;
+import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.sql.Connection;
 import java.sql.SQLException;
@@ -56,6 +58,17 @@ import static org.apache.xbean.asm5.Opco
 import static org.apache.xbean.asm5.Opcodes.ACC_TRANSIENT;
 
 public class JpaTest extends TestCase {
+    static {
+        try {
+            final Class<?> classRedefinerClass = ParentClassLoaderFinder.Helper.get().loadClass("org.apache.openjpa.enhance.ClassRedefiner");
+            final Field field = classRedefinerClass.getDeclaredField("_canRedefine");
+            field.setAccessible(true);
+            field.set(null, Boolean.FALSE);
+        } catch (final Exception e) {
+
+        }
+    }
+
 //    private static final String PERSISTENCE_PROVIDER = "org.apache.cayenne.jpa.Provider";
     private static final String PERSISTENCE_PROVIDER = "org.apache.openjpa.persistence.PersistenceProviderImpl";