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