Author: dblevins
Date: Fri Aug 17 21:44:06 2012
New Revision: 1374448
URL: http://svn.apache.org/viewvc?rev=1374448&view=rev
Log:
OPENEJB-1885 Simplify EJB proxy code
Removed:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGenerator.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyEJB.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java?rev=1374448&r1=1374447&r2=1374448&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/BaseSessionContext.java
Fri Aug 17 21:44:06 2012
@@ -28,7 +28,7 @@ import org.apache.openejb.core.stateful.
import org.apache.openejb.core.stateless.StatelessEjbObjectHandler;
import org.apache.openejb.jee.SessionType;
import org.apache.openejb.spi.SecurityService;
-import org.apache.openejb.util.proxy.LocalBeanProxyFactory;
+import org.apache.openejb.util.proxy.LocalBeanProxyGeneratorImpl;
import org.apache.openejb.util.proxy.ProxyManager;
import javax.ejb.EJBLocalObject;
@@ -133,7 +133,7 @@ public abstract class BaseSessionContext
}
if (InterfaceType.LOCALBEAN.equals(interfaceType)) {
- return
LocalBeanProxyFactory.newProxyInstance(di.getClassLoader(), di.getBeanClass(),
handler);
+ return
LocalBeanProxyGeneratorImpl.newProxyInstance(di.getClassLoader(),
di.getBeanClass(), handler);
} else {
List<Class> interfaces = new ArrayList<Class>();
interfaces.addAll(di.getInterfaces(interfaceType));
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java?rev=1374448&r1=1374447&r2=1374448&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/EjbHomeProxyHandler.java
Fri Aug 17 21:44:06 2012
@@ -30,7 +30,7 @@ import org.apache.openejb.core.stateless
import org.apache.openejb.spi.ApplicationServer;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
-import org.apache.openejb.util.proxy.LocalBeanProxyFactory;
+import org.apache.openejb.util.proxy.LocalBeanProxyGeneratorImpl;
import org.apache.openejb.util.proxy.ProxyManager;
import javax.ejb.AccessLocalException;
@@ -135,7 +135,7 @@ public abstract class EjbHomeProxyHandle
// TODO Is it correct for ManagedBean injection via managed bean
class?
if ((InterfaceType.LOCALBEAN.equals(objectInterfaceType) ||
getBeanContext().getComponentType().equals(BeanType.MANAGED))
&& !getBeanContext().isDynamicallyImplemented()) {
- return
LocalBeanProxyFactory.newProxyInstance(handler.getBeanContext().getClassLoader(),
handler.getBeanContext().getBeanClass(), handler);
+ return
LocalBeanProxyGeneratorImpl.newProxyInstance(handler.getBeanContext().getClassLoader(),
handler.getBeanContext().getBeanClass(), handler);
} else {
List<Class> proxyInterfaces = new
ArrayList<Class>(handler.getInterfaces().size() + 1);
proxyInterfaces.addAll(handler.getInterfaces());
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java?rev=1374448&r1=1374447&r2=1374448&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java
Fri Aug 17 21:44:06 2012
@@ -16,6 +16,7 @@
*/
package org.apache.openejb.util.proxy;
+import org.apache.openejb.util.Debug;
import org.apache.xbean.asm.ClassWriter;
import org.apache.xbean.asm.Label;
import org.apache.xbean.asm.MethodVisitor;
@@ -37,13 +38,42 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-public class LocalBeanProxyGeneratorImpl implements LocalBeanProxyGenerator,
Opcodes {
+public class LocalBeanProxyGeneratorImpl implements Opcodes {
private static final String[] SERIALIZABLE = new
String[]{Serializable.class.getName().replace('.', '/')};
public static final java.lang.reflect.InvocationHandler
NON_BUSINESS_HANDLER = new NonBusinessHandler();
static final String BUSSINESS_HANDLER_NAME = "businessHandler";
static final String NON_BUSINESS_HANDLER_NAME = "nonBusinessHandler";
+ public static Object newProxyInstance(ClassLoader cl, Class interfce,
java.lang.reflect.InvocationHandler h) throws IllegalArgumentException {
+ try {
+ final LocalBeanProxyGeneratorImpl generator = new
LocalBeanProxyGeneratorImpl();
+
+ final Class proxyClass = generator.createProxy(interfce, cl);
+ final Object object = generator.constructProxy(proxyClass, h);
+
+ return object;
+ } catch (Throwable e) {
+ throw new InternalError(Debug.printStackTrace(e));
+ }
+ }
+
+ public static java.lang.reflect.InvocationHandler
getInvocationHandler(Object proxy) {
+ try {
+ final Field field =
proxy.getClass().getDeclaredField(BUSSINESS_HANDLER_NAME);
+ field.setAccessible(true);
+ try {
+ return (java.lang.reflect.InvocationHandler) field.get(proxy);
+ } finally {
+ field.setAccessible(false);
+ }
+ } catch (NoSuchFieldException e) {
+ throw new IllegalArgumentException(e);
+ } catch (IllegalAccessException e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+
public Object constructProxy(final Class clazz, final
java.lang.reflect.InvocationHandler handler) throws IllegalStateException {
final Object instance = Unsafe.allocateInstance(clazz);
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyEJB.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyEJB.java?rev=1374448&r1=1374447&r2=1374448&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyEJB.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyEJB.java
Fri Aug 17 21:44:06 2012
@@ -29,7 +29,7 @@ public class ProxyEJB {
public static Object proxy(final BeanContext beanContext, final Class<?>[]
itfs) {
if (beanContext.isLocalbean()) {
- return
LocalBeanProxyFactory.newProxyInstance(itfs[0].getClassLoader(), itfs[0], new
Handler(beanContext));
+ return
LocalBeanProxyGeneratorImpl.newProxyInstance(itfs[0].getClassLoader(), itfs[0],
new Handler(beanContext));
}
return Proxy.newProxyInstance(itfs[0].getClassLoader(), itfs, new
Handler(beanContext));
}
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java?rev=1374448&r1=1374447&r2=1374448&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java
Fri Aug 17 21:44:06 2012
@@ -61,7 +61,7 @@ public class ProxyManager {
public static java.lang.reflect.InvocationHandler
getInvocationHandler(Object proxy) {
if (proxy.getClass().getName().endsWith("$LocalBeanProxy")) {
- return LocalBeanProxyFactory.getInvocationHandler(proxy);
+ return LocalBeanProxyGeneratorImpl.getInvocationHandler(proxy);
}
checkDefaultFactory();
return defaultFactory.getInvocationHandler(proxy);
Modified:
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java?rev=1374448&r1=1374447&r2=1374448&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java
Fri Aug 17 21:44:06 2012
@@ -177,7 +177,7 @@ public class LocalBeanProxyGeneratorImpl
private SampleLocalBean loadProxy(TestInvocationHandler
invocationHandler) throws Exception {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
- return (SampleLocalBean)
LocalBeanProxyFactory.newProxyInstance(cl, SampleLocalBean.class,
invocationHandler);
+ return (SampleLocalBean)
LocalBeanProxyGeneratorImpl.newProxyInstance(cl, SampleLocalBean.class,
invocationHandler);
}
public void testShouldReturnCorrectMethodSignatures() throws Exception {