You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jg...@apache.org on 2010/05/07 01:35:17 UTC

svn commit: r941970 - in /openejb/trunk/openejb3/container/openejb-core/src: main/java/org/apache/openejb/ main/java/org/apache/openejb/core/ivm/ main/java/org/apache/openejb/util/proxy/ test/java/org/apache/openejb/util/proxy/

Author: jgallimore
Date: Thu May  6 23:35:17 2010
New Revision: 941970

URL: http://svn.apache.org/viewvc?rev=941970&view=rev
Log:
Using sun.misc.Unsafe instead of AppClassLoader

Removed:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/AppClassLoader.java
Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGenerator.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java
    openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java?rev=941970&r1=941969&r2=941970&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java Thu May  6 23:35:17 2010
@@ -62,9 +62,9 @@ public class ClassLoaderUtil {
         });
     }
 
-    public static AppClassLoader createClassLoader(String appId, URL[] urls, ClassLoader parent) {
+    public static URLClassLoader createClassLoader(String appId, URL[] urls, ClassLoader parent) {
         urls = urlCache.cacheUrls(appId, urls);
-        AppClassLoader classLoader = new AppClassLoader(urls, parent);
+        URLClassLoader classLoader = new URLClassLoader(urls, parent);
 
         List<ClassLoader> classLoaders = classLoadersByApp.get(appId);
         if (classLoaders == null) {

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java?rev=941970&r1=941969&r2=941970&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java Thu May  6 23:35:17 2010
@@ -33,7 +33,6 @@ import javax.ejb.EJBHome;
 import org.apache.openejb.DeploymentInfo;
 import org.apache.openejb.InterfaceType;
 import org.apache.openejb.ProxyInfo;
-import org.apache.openejb.AppClassLoader;
 import org.apache.openejb.core.ServerFederation;
 import org.apache.openejb.core.managed.ManagedHomeHandler;
 import org.apache.openejb.core.singleton.SingletonEjbHomeHandler;
@@ -137,7 +136,7 @@ public abstract class EjbHomeProxyHandle
             proxyInterfaces.add(IntraVmProxy.class);
 
             if (InterfaceType.LOCALBEAN.equals(objectInterfaceType)) {
-                return LocalBeanProxyFactory.newProxyInstance((AppClassLoader) handler.getDeploymentInfo().getClassLoader(), handler.getDeploymentInfo().getBeanClass(), handler);
+                return LocalBeanProxyFactory.newProxyInstance(handler.getDeploymentInfo().getClassLoader(), handler.getDeploymentInfo().getBeanClass(), handler);
             } else {
                 return ProxyManager.newProxyInstance(proxyInterfaces.toArray(new Class[]{}), handler);
             }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java?rev=941970&r1=941969&r2=941970&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java Thu May  6 23:35:17 2010
@@ -16,15 +16,13 @@
  */
 package org.apache.openejb.util.proxy;
 
-import org.apache.openejb.AppClassLoader;
-
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Proxy;
 
 public class LocalBeanProxyFactory {
 
-    public static Object newProxyInstance(AppClassLoader cl, Class interfce, java.lang.reflect.InvocationHandler h) throws IllegalArgumentException {
+    public static Object newProxyInstance(ClassLoader cl, Class interfce, java.lang.reflect.InvocationHandler h) throws IllegalArgumentException {
         try {
             Class proxyCls = new LocalBeanProxyGeneratorImpl().createProxy(interfce, cl);
             Constructor constructor = proxyCls.getConstructor(java.lang.reflect.InvocationHandler.class);

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGenerator.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGenerator.java?rev=941970&r1=941969&r2=941970&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGenerator.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGenerator.java Thu May  6 23:35:17 2010
@@ -16,9 +16,7 @@
  */
 package org.apache.openejb.util.proxy;
 
-import org.apache.openejb.AppClassLoader;
-
 public interface LocalBeanProxyGenerator {
-    public Class createProxy(Class<?> clsToProxy, AppClassLoader cl);
+    public Class createProxy(Class<?> clsToProxy, ClassLoader cl);
 }
 

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java?rev=941970&r1=941969&r2=941970&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java Thu May  6 23:35:17 2010
@@ -17,14 +17,33 @@
 package org.apache.openejb.util.proxy;
 
 import org.apache.xbean.asm.*;
-import org.apache.openejb.AppClassLoader;
 
 import java.lang.reflect.Method;
+import java.lang.reflect.Field;
+import java.net.URLClassLoader;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 
 
 public class LocalBeanProxyGeneratorImpl implements LocalBeanProxyGenerator, Opcodes {
 
-    public Class createProxy(Class<?> clsToProxy, AppClassLoader cl) {
+    private static final sun.misc.Unsafe unsafe;
+
+    static {
+        unsafe = (sun.misc.Unsafe) AccessController.doPrivileged(new PrivilegedAction() {
+            public Object run() {
+                try {
+                    Field field = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
+                    field.setAccessible(true);
+                    return field.get(null);
+                } catch (Exception e) {
+                    throw new IllegalStateException("Cannot get sun.misc.Unsafe", e);
+                }
+            }
+        });
+    }
+
+    public Class createProxy(Class<?> clsToProxy, ClassLoader cl) {
         String proxyName = generateProxyName(clsToProxy.getName());
         return createProxy(clsToProxy, proxyName, cl);
     }
@@ -33,25 +52,19 @@ public class LocalBeanProxyGeneratorImpl
         return clsName + "$LocalBeanProxy";
     }
 
-    private Class createProxy(Class<?> clsToProxy, String proxyName, AppClassLoader cl) {
+    private Class createProxy(Class<?> clsToProxy, String proxyName, ClassLoader cl) {
         String clsName = proxyName.replaceAll("\\.", "/");
 
-        if (cl.classDefined(proxyName)) {
-            try {
-                return cl.loadClass(proxyName);
-            } catch (Exception e) {
-            }
+        try {
+            return cl.loadClass(proxyName);
+        } catch (Exception e) {
         }
 
         try {
             byte[] proxyBytes = generateProxy(clsToProxy, clsName);
-            cl.addClass(proxyBytes, proxyName);
-            Class<?> proxy = cl.loadClass(proxyName);
-            return proxy;
+            return (Class<?>) unsafe.defineClass(proxyName, proxyBytes, 0, proxyBytes.length, cl, this.getClass().getProtectionDomain());
         } catch (ProxyGenerationException e) {
             throw new InternalError(e.toString());
-        } catch (ClassNotFoundException e) {
-            throw new InternalError(e.toString());
         }
     }
 

Modified: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java?rev=941970&r1=941969&r2=941970&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java Thu May  6 23:35:17 2010
@@ -18,7 +18,6 @@
 package org.apache.openejb.util.proxy;
 
 import junit.framework.TestCase;
-import org.apache.openejb.AppClassLoader;
 import org.junit.Test;
 
 import java.io.IOException;
@@ -156,8 +155,7 @@ public class LocalBeanProxyGeneratorImpl
 	}
 
 	private SampleLocalBean loadProxy(TestInvocationHandler invocationHandler) throws Exception {
-		ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
-        AppClassLoader cl = new AppClassLoader(new URL[] { }, oldCl);
+		ClassLoader cl = Thread.currentThread().getContextClassLoader();
 
         Class cls = new LocalBeanProxyGeneratorImpl().createProxy(SampleLocalBean.class, cl);
         return (SampleLocalBean) cls.getConstructor(new Class[] { InvocationHandler.class }).newInstance(invocationHandler);