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)) {


Reply via email to