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/17 00:21:58 UTC

svn commit: r1611208 - in /tomee/tomee/trunk/container/openejb-core: pom.xml src/main/java/org/apache/openejb/assembler/classic/CmpJarBuilder.java src/test/java/org/apache/openejb/iTest.java

Author: rmannibucau
Date: Wed Jul 16 22:21:58 2014
New Revision: 1611208

URL: http://svn.apache.org/r1611208
Log:
activating back javaagent in openejb-core and removing hacks in CmpJarBuilder since we would need to fork too much code from openjpa with current codebase,normally javaagent in a dedicated app classloader should be enough - waiting for side effects on others tests

Modified:
    tomee/tomee/trunk/container/openejb-core/pom.xml
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmpJarBuilder.java
    tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/iTest.java

Modified: tomee/tomee/trunk/container/openejb-core/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/pom.xml?rev=1611208&r1=1611207&r2=1611208&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/pom.xml (original)
+++ tomee/tomee/trunk/container/openejb-core/pom.xml Wed Jul 16 22:21:58 2014
@@ -308,7 +308,8 @@
         <configuration>
           <reuseForks>false</reuseForks>
           <testNGArtifactName>none:none</testNGArtifactName>
-          <argLine> <!-- "-javaagent:${basedir}/target/openejb-javaagent-${project.version}.jar" -->
+          <argLine>
+            -javaagent:${project.basedir}/target/openejb-javaagent-${project.version}.jar
             -Dopenejb.classloader.forced-skip=org.apache.openejb.jee.,org.apache.openejb.api.
             -Dopenejb.classloader.forced-load=org.apache.openejb
             -enableassertions

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmpJarBuilder.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmpJarBuilder.java?rev=1611208&r1=1611207&r2=1611208&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmpJarBuilder.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/CmpJarBuilder.java Wed Jul 16 22:21:58 2014
@@ -17,8 +17,6 @@
 
 package org.apache.openejb.assembler.classic;
 
-import org.apache.commons.lang3.JavaVersion;
-import org.apache.commons.lang3.SystemUtils;
 import org.apache.openejb.ClassLoaderUtil;
 import org.apache.openejb.core.cmp.CmpUtil;
 import org.apache.openejb.core.cmp.cmp2.Cmp1Generator;
@@ -29,31 +27,10 @@ import org.apache.openejb.loader.SystemI
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.UrlCache;
-import org.apache.openejb.util.classloader.URLClassLoaderFirst;
-import org.apache.openjpa.enhance.PCEnhancer;
-import org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl;
-import org.apache.openjpa.jdbc.meta.MappingRepository;
-import org.apache.openjpa.jdbc.meta.NoneMappingDefaults;
-import org.apache.openjpa.jdbc.sql.HSQLDictionary;
-import org.apache.openjpa.lib.util.BytecodeWriter;
-import org.apache.openjpa.meta.MetaDataModes;
-import org.apache.openjpa.meta.MetaDataRepository;
-import org.apache.openjpa.persistence.jdbc.PersistenceMappingFactory;
-import org.apache.xbean.asm5.ClassReader;
-import org.apache.xbean.asm5.ClassWriter;
-import serp.bytecode.BCClass;
-
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
+
 import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
 import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.StringTokenizer;
@@ -61,8 +38,6 @@ import java.util.TreeSet;
 import java.util.jar.JarEntry;
 import java.util.jar.JarOutputStream;
 
-import static java.util.Arrays.asList;
-
 /**
  * Creates a jar file which contains the CMP implementation classes and the cmp entity mappings xml file.
  */
@@ -120,20 +95,8 @@ public class CmpJarBuilder {
                 }
             }
 
-            final URLClassLoaderFirst thisClassLoader = new EnhancingClassLoader(tempClassLoader, classes);
-            final StoringBytecodeBytecodeWriter writer = new StoringBytecodeBytecodeWriter(thisClassLoader);
-            doEnhanceWithOpenJPA(classes, thisClassLoader, writer, appInfo.cmpMappingsXml);
-
             for (final Entry e : classes.values()) {
-                // add the generated class to the jar
-                final byte[] bytes = writer.bytecodes.get(e.clazz);
-                final byte[] bytecode = bytes != null ? bytes : e.bytes;
-                final File f = new File("/tmp/dump/" + e.name + ".class");
-                f.getParentFile().mkdirs();
-                final FileOutputStream w = new FileOutputStream(f);
-                w.write(bytecode);
-                w.close();
-                addJarEntry(jarOutputStream, e.name, bytecode);
+                addJarEntry(jarOutputStream, e.name, e.bytes);
             }
             if (appInfo.cmpMappingsXml != null) {
                 // System.out.println(appInfo.cmpMappingsXml);
@@ -152,68 +115,6 @@ public class CmpJarBuilder {
         }
     }
 
-    private void doEnhanceWithOpenJPA(final Map<String, Entry> classes, final ClassLoader tmpLoader,
-                                      final StoringBytecodeBytecodeWriter writer,
-                                      final String cmpMappingsXml) throws ClassNotFoundException, IOException {
-        final Thread th = Thread.currentThread();
-        final ClassLoader old = th.getContextClassLoader();
-        th.setContextClassLoader(tmpLoader);
-        try {
-            final JDBCConfigurationImpl conf = new JDBCConfigurationImpl();
-            conf.setDBDictionary(new HSQLDictionary());
-            final MappingRepository repos = new MappingRepository();
-
-            final Set<Class<?>> tmpClasses = new HashSet<>();
-            for (final Entry e : classes.values()) {
-                tmpClasses.add(tmpLoader.loadClass(e.clazz));
-            }
-
-            final PersistenceMappingFactory factory = new PersistenceMappingFactory() {
-                @Override
-                public Set getPersistentTypeNames(final boolean devpath, final ClassLoader envLoader) {
-                    getXMLParser().setValidating(false);
-                    try { // xml only
-                        return parsePersistentTypeNames(tmpLoader);
-                    } catch (final IOException e) {
-                        // no-op
-                    }
-                    return super.getPersistentTypeNames(devpath, envLoader);
-                }
-            };
-
-            final File tempFile = File.createTempFile("OpenEJBGenerated.", ".xml", tmpDir());
-            tempFile.deleteOnExit();
-            final FileWriter tmpMapping = new FileWriter(tempFile);
-            try {
-                tmpMapping.write(cmpMappingsXml);
-            } finally {
-                tmpMapping.close();
-            }
-            factory.setFiles(asList(tempFile));
-
-            repos.setConfiguration(conf);
-            repos.setMetaDataFactory(factory);
-            repos.setMappingDefaults(NoneMappingDefaults.getInstance());
-            repos.setResolve(MetaDataModes.MODE_NONE);
-            repos.setValidate(MetaDataRepository.VALIDATE_NONE);
-            for (final Class<?> tmpClass : tmpClasses) {
-                repos.addMetaData(tmpClass);
-            }
-
-            final PCEnhancer.Flags flags = new PCEnhancer.Flags();
-            flags.tmpClassLoader = false;
-
-            PCEnhancer.run(conf, null, flags, repos, writer, tmpLoader);
-
-            tempFile.delete(); // try to delete it now, not a big deal otherwise,deleteOnExit will do it
-        } catch (final Throwable thr) {
-            // shouldn't be created in normal case
-            Logger.getInstance(LogCategory.OPENEJB, CmpJarBuilder.class).error(thr.getMessage(), thr);
-        } finally {
-            th.setContextClassLoader(old);
-        }
-    }
-
     /**
      * Test if an application contains and CMP beans that
      * need to be mapped to the JPA persistence engine.  This
@@ -409,102 +310,4 @@ public class CmpJarBuilder {
             this.bytes = bytes;
         }
     }
-
-    private static final class StoringBytecodeBytecodeWriter implements BytecodeWriter {
-        private final Map<String, byte[]> bytecodes = new HashMap<>();
-        private final ClassLoader loader;
-
-        private StoringBytecodeBytecodeWriter(final ClassLoader loader) {
-            this.loader = loader;
-        }
-
-        @Override
-        public void write(final BCClass type) throws IOException {
-            bytecodes.put(type.getName(), type.toByteArray());
-
-            final byte[] b = type.toByteArray();
-            final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            if (SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_1_7)) {
-                final ByteArrayInputStream bais = new ByteArrayInputStream(b);
-                final BufferedInputStream bis = new BufferedInputStream(bais);
-                final ClassWriter cw = new CommonClassWriterHack(loader);
-                final ClassReader cr = new ClassReader(bis);
-                cr.accept(cw, 0);
-                baos.write(cw.toByteArray());
-            } else {
-                baos.write(b);
-            }
-        }
-    }
-
-    private static final class CommonClassWriterHack extends ClassWriter {
-        private final ClassLoader loader;
-
-        private CommonClassWriterHack(final ClassLoader loader) {
-            super(ClassWriter.COMPUTE_FRAMES);
-            this.loader = loader;
-        }
-
-        @Override
-        protected String getCommonSuperClass(final String type1, final String type2) {
-            Class<?> class1;
-            Class<?> class2;
-            try {
-                class1 = loader.loadClass(type1.replace('/', '.'));
-                class2 = loader.loadClass(type2.replace('/', '.'));
-            } catch (final ClassNotFoundException ex) {
-                throw new RuntimeException(ex);
-            }
-            if (class1.isAssignableFrom(class2)) {
-                return type1;
-            }
-            if (class2.isAssignableFrom(class1)) {
-                return type2;
-            }
-            if (class1.isInterface() || class2.isInterface()) {
-                return "java/lang/Object";
-            }
-            do {
-                class1 = class1.getSuperclass();
-            } while (!class1.isAssignableFrom(class2));
-            return class1.getName().replace('.', '/');
-        }
-    }
-
-    private static class EnhancingClassLoader extends URLClassLoaderFirst {
-        private final Map<String, Entry> classes;
-
-        public EnhancingClassLoader(final ClassLoader tempClassLoader, Map<String, Entry> classes) {
-            super(new URL[0], tempClassLoader);
-            this.classes = classes;
-        }
-
-        @Override
-        public Class<?> loadClass(final String name, final boolean resolve) throws ClassNotFoundException {
-            final Entry e = classes.get(name);
-            if (e != null) {
-                final Class<?> alreadyLoaded = findLoadedClass(name);
-                if (alreadyLoaded != null) {
-                    if (resolve) {
-                        resolveClass(alreadyLoaded);
-                    }
-                    return alreadyLoaded;
-                }
-
-                final Class<?> c = defineClass(e.clazz, e.bytes, 0, e.bytes.length);
-                if (resolve) {
-                    resolveClass(c);
-                }
-                return c;
-            }
-            return super.loadClass(name, resolve);
-        }
-
-        @Override
-        public InputStream getResourceAsStream(final String name) {
-            final String key = name.replace('/', '.').replace(".class", "");
-            final Entry e = classes.get(key);
-            return e != null ? new ByteArrayInputStream(e.bytes) : super.getResourceAsStream(name);
-        }
-    }
 }

Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/iTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/iTest.java?rev=1611208&r1=1611207&r2=1611208&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/iTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/iTest.java Wed Jul 16 22:21:58 2014
@@ -46,6 +46,7 @@ public class iTest extends org.apache.op
         } catch (final Exception e) {
             // do nothing - exception ignored
         }
+        System.setProperty("openejb.classloader.skip-app-loader-if-possible", "false");
         System.setProperty("openejb.test.server", org.apache.openejb.test.IvmTestServer.class.getName());
         //        System.setProperty("openejb.test.database", org.apache.openejb.test.DerbyTestDatabase.class.getName());
         System.setProperty("openejb.test.database", org.apache.openejb.test.HsqldbTestDatabase.class.getName());