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