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 2012/12/19 20:23:02 UTC

svn commit: r1424048 - in /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb: cdi/OptimizedLoaderService.java persistence/PersistenceUnitInfoImpl.java util/classloader/URLClassLoaderFirst.java

Author: rmannibucau
Date: Wed Dec 19 19:23:01 2012
New Revision: 1424048

URL: http://svn.apache.org/viewvc?rev=1424048&view=rev
Log:
TOMEE-667 filtering server classes from enhancing

Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OptimizedLoaderService.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceUnitInfoImpl.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OptimizedLoaderService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OptimizedLoaderService.java?rev=1424048&r1=1424047&r2=1424048&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OptimizedLoaderService.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OptimizedLoaderService.java Wed Dec 19 19:23:01 2012
@@ -54,7 +54,7 @@ public class OptimizedLoaderService impl
     @Override
     public <T> List<T> load(Class<T> serviceType, ClassLoader classLoader) {
         // ServiceLoader is expensive (can take up to a half second).  This is an optimization
-        if (OpenWebBeansPlugin.class.equals(serviceType)) return loadWebBeansPlugins(classLoader);
+        if (OpenWebBeansPlugin.class.equals(serviceType)) return loadWebBeansPlugins(OptimizedLoaderService.class.getClassLoader());
 
         // As far as we know, this only is reached for CDI Extension discovery
         final List<T> list = loaderService.load(serviceType, classLoader);

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceUnitInfoImpl.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceUnitInfoImpl.java?rev=1424048&r1=1424047&r2=1424048&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceUnitInfoImpl.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/persistence/PersistenceUnitInfoImpl.java Wed Dec 19 19:23:01 2012
@@ -17,6 +17,14 @@
 package org.apache.openejb.persistence;
 
 
+import javax.persistence.SharedCacheMode;
+import javax.persistence.ValidationMode;
+import javax.persistence.spi.ClassTransformer;
+import javax.persistence.spi.PersistenceUnitInfo;
+import javax.persistence.spi.PersistenceUnitTransactionType;
+import javax.sql.DataSource;
+import java.io.File;
+import java.io.IOException;
 import java.lang.instrument.ClassFileTransformer;
 import java.lang.instrument.IllegalClassFormatException;
 import java.net.MalformedURLException;
@@ -26,14 +34,6 @@ import java.security.ProtectionDomain;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
-import java.io.File;
-import java.io.IOException;
-import javax.persistence.spi.ClassTransformer;
-import javax.persistence.spi.PersistenceUnitInfo;
-import javax.persistence.spi.PersistenceUnitTransactionType;
-import javax.persistence.SharedCacheMode;
-import javax.persistence.ValidationMode;
-import javax.sql.DataSource;
 
 public class PersistenceUnitInfoImpl implements PersistenceUnitInfo {
     /**
@@ -314,11 +314,92 @@ public class PersistenceUnitInfoImpl imp
             //        "org/apache/openejb/test/entity/cmp/BasicCmp2Bean_BasicCmp2Bean".equals(className)) {
             //    System.err.println("Loading " + className);
             // }
-            byte[] bytes = classTransformer.transform(classLoader, className.replace('/', '.'), classBeingRedefined, protectionDomain, classfileBuffer);
-            return bytes;
+            String replace = className.replace('/', '.');
+            if (isServerClass(replace)) {
+                return classfileBuffer;
+            }
+            return classTransformer.transform(classLoader, replace, classBeingRedefined, protectionDomain, classfileBuffer);
         }
     }
 
+    // not the shouldSkip() method from UrlClassLoaderFirst since we skip more here
+    // we just need JPA stuff so all the tricks we have for the server part are useless
+    public static boolean isServerClass(final String name) {
+        if (name.startsWith("java.")) return true;
+        if (name.startsWith("javax.")) return true;
+        if (name.startsWith("sun.")) return true;
+
+        if (name.startsWith("org.")) {
+            final String org = name.substring("org.".length());
+
+            if (org.startsWith("apache.")) {
+                final String apache = org.substring("apache.".length());
+
+                if (apache.startsWith("bval.")) return true;
+                if (apache.startsWith("openjpa.")) return true;
+                if (apache.startsWith("derby.")) return true;
+                if (apache.startsWith("xbean.")) return true;
+                if (apache.startsWith("geronimo.")) return true;
+                if (apache.startsWith("coyote")) return true;
+                if (apache.startsWith("webbeans.")) return true;
+                if (apache.startsWith("log4j")) return true;
+                if (apache.startsWith("catalina")) return true;
+                if (apache.startsWith("jasper.")) return true;
+                if (apache.startsWith("tomcat.")) return true;
+                if (apache.startsWith("el.")) return true;
+                if (apache.startsWith("jsp")) return true;
+                if (apache.startsWith("naming")) return true;
+                if (apache.startsWith("taglibs.")) return true;
+                if (apache.startsWith("openejb.")) return true;
+                if (apache.startsWith("openjpa.")) return true;
+                if (apache.startsWith("myfaces.")) return true;
+                if (apache.startsWith("juli.")) return true;
+                if (apache.startsWith("webbeans.")) return true;
+                if (apache.startsWith("cxf.")) return true;
+
+                if (apache.startsWith("commons.")) {
+                    final String commons = apache.substring("commons.".length());
+
+                    // don't stop on commons package since we don't bring all commons
+                    if (commons.startsWith("beanutils")) return true;
+                    if (commons.startsWith("cli")) return true;
+                    if (commons.startsWith("codec")) return true;
+                    if (commons.startsWith("collections")) return true;
+                    if (commons.startsWith("dbcp")) return true;
+                    if (commons.startsWith("digester")) return true;
+                    if (commons.startsWith("jocl")) return true;
+                    if (commons.startsWith("lang")) return true;
+                    if (commons.startsWith("logging")) return false;
+                    if (commons.startsWith("pool")) return true;
+                    if (commons.startsWith("net")) return true;
+
+                    return false;
+                }
+
+                return false;
+            }
+
+            // other org packages
+            if (org.startsWith("codehaus.swizzle")) return true;
+            if (org.startsWith("w3c.dom")) return true;
+            if (org.startsWith("quartz")) return true;
+            if (org.startsWith("eclipse.jdt.")) return true;
+            if (org.startsWith("slf4j")) return true;
+            if (org.startsWith("openejb")) return true; // old packages
+            if (org.startsWith("hsqldb")) return true; // old packages
+            if (org.startsWith("hibernate")) return true; // old packages
+
+            return false;
+        }
+
+        // other packages
+        if (name.startsWith("com.sun.org.apache.")) return true;
+        if (name.startsWith("javassist")) return true;
+        if (name.startsWith("serp.")) return true;
+
+        return false;
+    }
+
     // JPA 2.0
     /* (non-Javadoc)
      * @see javax.persistence.spi.PersistenceUnitInfo#getPersistenceXMLSchemaVersion()

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java?rev=1424048&r1=1424047&r2=1424048&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java Wed Dec 19 19:23:01 2012
@@ -165,6 +165,9 @@ public class URLClassLoaderFirst extends
     }
 
     // making all these call inline if far more costly than factorizing packages
+    //
+    // /!\ please check org.apache.openejb.persistence.PersistenceUnitInfoImpl.isServerClass() too
+    // when updating this method
     public static boolean shouldSkip(final String name) {
         for (String prefix : FORCED_SKIP) {
             if (name.startsWith(prefix)) {