Author: dblevins
Date: Sat Aug 18 02:25:42 2012
New Revision: 1374504
URL: http://svn.apache.org/viewvc?rev=1374504&view=rev
Log:
OPENEJB-1893: @LocalBean references did not survive passivation
OPENEJB-1885: Simplify EJB proxy code
Minor notes.
- You can now pass in a list of interfaces to implement as well.
- Proxies now use an @Proxy annotation so they can be quickly identified
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java
- copied, changed from r1374448,
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyFactoryTest.java
- copied, changed from r1374448,
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java
Removed:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.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
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/core/ivm/naming/IvmContext.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/ProxyEJB.java
openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetJndiTree.java
openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/viewjndi.jsp
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=1374504&r1=1374503&r2=1374504&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
Sat Aug 18 02:25:42 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.LocalBeanProxyGeneratorImpl;
+import org.apache.openejb.util.proxy.LocalBeanProxyFactory;
import org.apache.openejb.util.proxy.ProxyManager;
import javax.ejb.EJBLocalObject;
@@ -36,6 +36,7 @@ import javax.ejb.EJBObject;
import javax.ejb.SessionContext;
import javax.transaction.UserTransaction;
import javax.xml.rpc.handler.MessageContext;
+import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
@@ -133,7 +134,7 @@ public abstract class BaseSessionContext
}
if (InterfaceType.LOCALBEAN.equals(interfaceType)) {
- return
LocalBeanProxyGeneratorImpl.newProxyInstance(di.getClassLoader(),
di.getBeanClass(), handler);
+ return
LocalBeanProxyFactory.newProxyInstance(di.getClassLoader(), handler,
di.getBeanClass(), IntraVmProxy.class, Serializable.class);
} 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=1374504&r1=1374503&r2=1374504&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
Sat Aug 18 02:25:42 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.LocalBeanProxyGeneratorImpl;
+import org.apache.openejb.util.proxy.LocalBeanProxyFactory;
import org.apache.openejb.util.proxy.ProxyManager;
import javax.ejb.AccessLocalException;
@@ -38,6 +38,7 @@ import javax.ejb.EJBAccessException;
import javax.ejb.EJBException;
import javax.ejb.EJBHome;
import java.io.ObjectStreamException;
+import java.io.Serializable;
import java.lang.reflect.Method;
import java.rmi.AccessException;
import java.rmi.RemoteException;
@@ -135,7 +136,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
LocalBeanProxyGeneratorImpl.newProxyInstance(handler.getBeanContext().getClassLoader(),
handler.getBeanContext().getBeanClass(), handler);
+ return
LocalBeanProxyFactory.newProxyInstance(handler.getBeanContext().getClassLoader(),
handler, handler.getBeanContext().getBeanClass(), new
Class[]{IntraVmProxy.class, Serializable.class});
} 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/core/ivm/naming/IvmContext.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmContext.java?rev=1374504&r1=1374503&r2=1374504&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmContext.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/IvmContext.java
Sat Aug 18 02:25:42 2012
@@ -23,6 +23,7 @@ import org.apache.openejb.core.ivm.Intra
import org.apache.openejb.core.ivm.naming.java.javaURLContextFactory;
import org.apache.openejb.core.ivm.naming.openejb.openejbURLContextFactory;
import org.apache.openejb.loader.IO;
+import org.apache.openejb.util.proxy.LocalBeanProxyFactory;
import org.apache.xbean.naming.context.ContextUtil;
import javax.naming.Binding;
@@ -151,7 +152,7 @@ public class IvmContext implements Conte
}
// don't cache proxies
- if (!(obj instanceof IntraVmProxy ||
obj.getClass().getName().endsWith("$LocalBeanProxy"))) {
+ if (!(obj instanceof IntraVmProxy)) {
fastCache.put(compoundName, obj);
}
}
Copied:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java
(from r1374448,
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/LocalBeanProxyFactory.java?p2=openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyFactory.java&p1=openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImpl.java&r1=1374448&r2=1374504&rev=1374504&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/LocalBeanProxyFactory.java
Sat Aug 18 02:25:42 2012
@@ -25,7 +25,12 @@ import org.apache.xbean.asm.Type;
import javax.ejb.EJBException;
import java.io.Serializable;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
import java.lang.reflect.Field;
+import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
@@ -38,19 +43,20 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-public class LocalBeanProxyGeneratorImpl implements Opcodes {
- private static final String[] SERIALIZABLE = new
String[]{Serializable.class.getName().replace('.', '/')};
+public class LocalBeanProxyFactory implements Opcodes {
+
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";
+ private static final String BUSSINESS_HANDLER_NAME = "businessHandler";
+ private static final String NON_BUSINESS_HANDLER_NAME =
"nonBusinessHandler";
+ // This whole class could be turned static
+ private static final LocalBeanProxyFactory GENERATOR = new
LocalBeanProxyFactory();
- public static Object newProxyInstance(ClassLoader cl, Class interfce,
java.lang.reflect.InvocationHandler h) throws IllegalArgumentException {
+ public static Object newProxyInstance(ClassLoader classLoader,
InvocationHandler handler, Class classToSubclass, final Class... interfaces)
throws IllegalArgumentException {
try {
- final LocalBeanProxyGeneratorImpl generator = new
LocalBeanProxyGeneratorImpl();
- final Class proxyClass = generator.createProxy(interfce, cl);
- final Object object = generator.constructProxy(proxyClass, h);
+ final Class proxyClass = GENERATOR.createProxy(classToSubclass,
classLoader, interfaces);
+ final Object object = GENERATOR.constructProxy(proxyClass,
handler);
return object;
} catch (Throwable e) {
@@ -93,60 +99,62 @@ public class LocalBeanProxyGeneratorImpl
}
}
- public Class createProxy(final Class<?> clsToProxy, final ClassLoader cl) {
- final String proxyName = generateProxyName(clsToProxy.getName());
- return createProxy(clsToProxy, proxyName, cl);
+ public static boolean isProxy(final Class<?> clazz) {
+ return clazz.isAnnotationPresent(Proxy.class);
}
- private static String generateProxyName(final String clsName) {
- return clsName + "$LocalBeanProxy";
- }
-
- public static boolean isLocalBean(final Class<?> clazz) {
- if (clazz.getSuperclass() == null) {
- return false;
- }
- return
clazz.getName().equals(LocalBeanProxyGeneratorImpl.generateProxyName(clazz.getSuperclass().getName()));
- }
-
- private Class createProxy(final Class<?> clsToProxy, final String
proxyName, final ClassLoader cl) {
- final String clsName = proxyName.replace('.', '/');
+ public Class createProxy(final Class<?> classToProxy, final ClassLoader
cl, final Class... interfaces) {
+ final String proxyName = classToProxy.getName() + "$LocalBeanProxy";
+ final String classFileName = proxyName.replace('.', '/');
try {
return cl.loadClass(proxyName);
} catch (Exception e) {
}
- synchronized (LocalBeanProxyGeneratorImpl.class) { // it can be done
by concurrent threads
+ synchronized (LocalBeanProxyFactory.class) { // it can be done by
concurrent threads
try { // try it again
return cl.loadClass(proxyName);
} catch (Exception e) {
}
-
try {
- final byte[] proxyBytes = generateProxy(clsToProxy, clsName);
- return Unsafe.defineClass(clsToProxy, proxyName, proxyBytes);
+ final byte[] proxyBytes = generateProxy(classToProxy,
classFileName, interfaces);
+ return Unsafe.defineClass(classToProxy, proxyName, proxyBytes);
} catch (Exception e) {
throw new InternalError(e.toString());
}
}
}
- private byte[] generateProxy(final Class<?> classToProxy, final String
proxyName) throws ProxyGenerationException {
+ private byte[] generateProxy(final Class<?> classToProxy, final String
proxyName, final Class<?>... interfaces) throws ProxyGenerationException {
final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
final String proxyClassFileName = proxyName.replace('.', '/');
final String classFileName = classToProxy.getName().replace('.', '/');
// push class signature
- cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, proxyClassFileName, null,
classFileName, SERIALIZABLE);
+ final String[] interfaceNames = new String[interfaces.length];
+ for (int i = 0; i < interfaces.length; i++) {
+ final Class<?> anInterface = interfaces[i];
+ interfaceNames[i] = anInterface.getName().replace('.','/');
+ }
+
+ cw.visit(V1_5, ACC_PUBLIC + ACC_SUPER, proxyClassFileName, null,
classFileName, interfaceNames);
cw.visitSource(classFileName + ".java", null);
+ cw.visitAnnotation("L" + Proxy.class.getName().replace('.', '/') +
";", true).visitEnd();
+
// push InvocationHandler fields
cw.visitField(ACC_FINAL + ACC_PRIVATE, BUSSINESS_HANDLER_NAME,
"Ljava/lang/reflect/InvocationHandler;", null, null).visitEnd();
cw.visitField(ACC_FINAL + ACC_PRIVATE, NON_BUSINESS_HANDLER_NAME,
"Ljava/lang/reflect/InvocationHandler;", null, null).visitEnd();
- final Map<String, List<Method>> methodMap =
getNonPrivateMethods(classToProxy);
+ final Map<String, List<Method>> methodMap = new HashMap<String,
List<Method>>();
+
+ getNonPrivateMethods(classToProxy, methodMap);
+
+ for (Class<?> anInterface : interfaces) {
+ getNonPrivateMethods(anInterface, methodMap);
+ }
// Iterate over the public methods
for (final Map.Entry<String, List<Method>> entry :
methodMap.entrySet()) {
@@ -170,14 +178,7 @@ public class LocalBeanProxyGeneratorImpl
return cw.toByteArray();
}
- /*
- * Return all protected, public, and default methods of a given class
- * that are not final or static. The returned map includes the inherited
methods
- * and ensures that overridden methods are included once.
- */
- private Map<String, List<Method>> getNonPrivateMethods(Class<?> clazz) {
- final Map<String, List<Method>> methodMap = new HashMap<String,
List<Method>>();
-
+ private void getNonPrivateMethods(Class<?> clazz, Map<String,
List<Method>> methodMap) {
while (clazz != null) {
for (Method method : clazz.getDeclaredMethods()) {
final int modifiers = method.getModifiers();
@@ -205,8 +206,6 @@ public class LocalBeanProxyGeneratorImpl
clazz = clazz.getSuperclass();
}
-
- return methodMap;
}
private boolean isOverridden(final List<Method> methods, final Method
method) {
@@ -682,82 +681,83 @@ public class LocalBeanProxyGeneratorImpl
private static final Method putObject;
private static final Method objectFieldOffset;
- static {
- final Class<?> unsafeClass;
- try {
- unsafeClass = AccessController.doPrivileged(new
PrivilegedAction<Class<?>>() {
- public Class<?> run() {
- try {
- return
Thread.currentThread().getContextClassLoader().loadClass("sun.misc.Unsafe");
- } catch (Exception e) {
+ static {
+ final Class<?> unsafeClass;
+ try {
+ unsafeClass = AccessController.doPrivileged(new
PrivilegedAction<Class<?>>() {
+ public Class<?> run() {
try {
- return
ClassLoader.getSystemClassLoader().loadClass("sun.misc.Unsafe");
- } catch (ClassNotFoundException e1) {
- throw new IllegalStateException("Cannot get
sun.misc.Unsafe", e);
+ return
Thread.currentThread().getContextClassLoader().loadClass("sun.misc.Unsafe");
+ } catch (Exception e) {
+ try {
+ return
ClassLoader.getSystemClassLoader().loadClass("sun.misc.Unsafe");
+ } catch (ClassNotFoundException e1) {
+ throw new IllegalStateException("Cannot get
sun.misc.Unsafe", e);
+ }
}
}
+ });
+ } catch (Exception e) {
+ throw new IllegalStateException("Cannot get sun.misc.Unsafe
class", e);
+ }
+
+ unsafe = AccessController.doPrivileged(new
PrivilegedAction<Object>() {
+ public Object run() {
+ try {
+ Field field =
unsafeClass.getDeclaredField("theUnsafe");
+ field.setAccessible(true);
+ return field.get(null);
+ } catch (Exception e) {
+ throw new IllegalStateException("Cannot get
sun.misc.Unsafe", e);
+ }
+ }
+ });
+ allocateInstance = AccessController.doPrivileged(new
PrivilegedAction<Method>() {
+ public Method run() {
+ try {
+ Method mtd =
unsafeClass.getDeclaredMethod("allocateInstance", Class.class);
+ mtd.setAccessible(true);
+ return mtd;
+ } catch (Exception e) {
+ throw new IllegalStateException("Cannot get
sun.misc.Unsafe.allocateInstance", e);
+ }
+ }
+ });
+ objectFieldOffset = AccessController.doPrivileged(new
PrivilegedAction<Method>() {
+ public Method run() {
+ try {
+ Method mtd =
unsafeClass.getDeclaredMethod("objectFieldOffset", Field.class);
+ mtd.setAccessible(true);
+ return mtd;
+ } catch (Exception e) {
+ throw new IllegalStateException("Cannot get
sun.misc.Unsafe.objectFieldOffset", e);
+ }
+ }
+ });
+ putObject = AccessController.doPrivileged(new
PrivilegedAction<Method>() {
+ public Method run() {
+ try {
+ Method mtd =
unsafeClass.getDeclaredMethod("putObject", Object.class, long.class,
Object.class);
+ mtd.setAccessible(true);
+ return mtd;
+ } catch (Exception e) {
+ throw new IllegalStateException("Cannot get
sun.misc.Unsafe.putObject", e);
+ }
+ }
+ });
+ defineClass = AccessController.doPrivileged(new
PrivilegedAction<Method>() {
+ public Method run() {
+ try {
+ Method mtd =
unsafeClass.getDeclaredMethod("defineClass", String.class, byte[].class,
int.class, int.class, ClassLoader.class, ProtectionDomain.class);
+ mtd.setAccessible(true);
+ return mtd;
+ } catch (Exception e) {
+ throw new IllegalStateException("Cannot get
sun.misc.Unsafe.defineClass", e);
+ }
}
});
- } catch (Exception e) {
- throw new IllegalStateException("Cannot get sun.misc.Unsafe
class", e);
}
- unsafe = AccessController.doPrivileged(new PrivilegedAction<Object>() {
- public Object run() {
- try {
- Field field = unsafeClass.getDeclaredField("theUnsafe");
- field.setAccessible(true);
- return field.get(null);
- } catch (Exception e) {
- throw new IllegalStateException("Cannot get
sun.misc.Unsafe", e);
- }
- }
- });
- allocateInstance = AccessController.doPrivileged(new
PrivilegedAction<Method>() {
- public Method run() {
- try {
- Method mtd =
unsafeClass.getDeclaredMethod("allocateInstance", Class.class);
- mtd.setAccessible(true);
- return mtd;
- } catch (Exception e) {
- throw new IllegalStateException("Cannot get
sun.misc.Unsafe.allocateInstance", e);
- }
- }
- });
- objectFieldOffset = AccessController.doPrivileged(new
PrivilegedAction<Method>() {
- public Method run() {
- try {
- Method mtd =
unsafeClass.getDeclaredMethod("objectFieldOffset", Field.class);
- mtd.setAccessible(true);
- return mtd;
- } catch (Exception e) {
- throw new IllegalStateException("Cannot get
sun.misc.Unsafe.objectFieldOffset", e);
- }
- }
- });
- putObject = AccessController.doPrivileged(new
PrivilegedAction<Method>() {
- public Method run() {
- try {
- Method mtd = unsafeClass.getDeclaredMethod("putObject",
Object.class, long.class, Object.class);
- mtd.setAccessible(true);
- return mtd;
- } catch (Exception e) {
- throw new IllegalStateException("Cannot get
sun.misc.Unsafe.putObject", e);
- }
- }
- });
- defineClass = AccessController.doPrivileged(new
PrivilegedAction<Method>() {
- public Method run() {
- try {
- Method mtd = unsafeClass.getDeclaredMethod("defineClass",
String.class, byte[].class, int.class, int.class, ClassLoader.class,
ProtectionDomain.class);
- mtd.setAccessible(true);
- return mtd;
- } catch (Exception e) {
- throw new IllegalStateException("Cannot get
sun.misc.Unsafe.defineClass", e);
- }
- }
- });
- }
private static Object allocateInstance(final Class clazz) {
try {
return allocateInstance.invoke(unsafe, clazz);
@@ -788,4 +788,9 @@ public class LocalBeanProxyGeneratorImpl
return (Class<?>) defineClass.invoke(unsafe, proxyName,
proxyBytes, 0, proxyBytes.length, clsToProxy.getClassLoader(),
clsToProxy.getProtectionDomain());
}
}
+
+ @Target(ElementType.TYPE)
+ @Retention(RetentionPolicy.RUNTIME)
+ private static @interface Proxy {
+ }
}
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=1374504&r1=1374503&r2=1374504&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
Sat Aug 18 02:25:42 2012
@@ -60,8 +60,8 @@ public class ProxyManager {
}
public static java.lang.reflect.InvocationHandler
getInvocationHandler(Object proxy) {
- if (proxy.getClass().getName().endsWith("$LocalBeanProxy")) {
- return LocalBeanProxyGeneratorImpl.getInvocationHandler(proxy);
+ if (LocalBeanProxyFactory.isProxy(proxy.getClass())) {
+ return LocalBeanProxyFactory.getInvocationHandler(proxy);
}
checkDefaultFactory();
return defaultFactory.getInvocationHandler(proxy);
Copied:
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyFactoryTest.java
(from r1374448,
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/LocalBeanProxyFactoryTest.java?p2=openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyFactoryTest.java&p1=openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest.java&r1=1374448&r2=1374504&rev=1374504&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/LocalBeanProxyFactoryTest.java
Sat Aug 18 02:25:42 2012
@@ -18,9 +18,11 @@
package org.apache.openejb.util.proxy;
import junit.framework.TestCase;
+import org.apache.openejb.core.ivm.IntraVmProxy;
import org.junit.Test;
import java.io.IOException;
+import java.io.Serializable;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -29,7 +31,7 @@ import java.util.List;
import javax.ejb.EJBException;
-public class LocalBeanProxyGeneratorImplTest extends TestCase {
+public class LocalBeanProxyFactoryTest extends TestCase {
public class Call {
private String methodName;
@@ -177,11 +179,11 @@ public class LocalBeanProxyGeneratorImpl
private SampleLocalBean loadProxy(TestInvocationHandler
invocationHandler) throws Exception {
ClassLoader cl = Thread.currentThread().getContextClassLoader();
- return (SampleLocalBean)
LocalBeanProxyGeneratorImpl.newProxyInstance(cl, SampleLocalBean.class,
invocationHandler);
+ return (SampleLocalBean)
LocalBeanProxyFactory.newProxyInstance(cl, invocationHandler,
SampleLocalBean.class, IntraVmProxy.class, Serializable.class);
}
public void testShouldReturnCorrectMethodSignatures() throws Exception {
- LocalBeanProxyGeneratorImpl proxyGenerator = new
LocalBeanProxyGeneratorImpl();
+ LocalBeanProxyFactory proxyGenerator = new
LocalBeanProxyFactory();
assertEquals("(II)I",
proxyGenerator.getMethodSignatureAsString(Integer.TYPE, new Class<?>[] {
Integer.TYPE, Integer.TYPE }));
assertEquals("(ZZ)Z",
proxyGenerator.getMethodSignatureAsString(Boolean.TYPE, new Class<?>[] {
Boolean.TYPE, Boolean.TYPE }));
assertEquals("(CC)C",
proxyGenerator.getMethodSignatureAsString(Character.TYPE, new Class<?>[] {
Character.TYPE, Character.TYPE }));
@@ -861,7 +863,7 @@ public class LocalBeanProxyGeneratorImpl
@Test
public void testAreThoseTwoMethodsTheSame() throws Exception {
- LocalBeanProxyGeneratorImpl proxyGenerator = new
LocalBeanProxyGeneratorImpl();
+ LocalBeanProxyFactory proxyGenerator = new
LocalBeanProxyFactory();
assertEquals("[I",
proxyGenerator.getAsmTypeAsString(int[].class, true));
assertEquals("[[I",
proxyGenerator.getAsmTypeAsString(int[][].class, false));
@@ -881,8 +883,8 @@ public class LocalBeanProxyGeneratorImpl
TestInvocationHandler invocationHandler = new
TestInvocationHandler(new EnumParams());
ClassLoader cl = Thread.currentThread().getContextClassLoader();
- LocalBeanProxyGeneratorImpl generator = new
LocalBeanProxyGeneratorImpl();
- Class cls = generator.createProxy(EnumParams.class, cl);
+ LocalBeanProxyFactory generator = new LocalBeanProxyFactory();
+ Class cls = generator.createProxy(EnumParams.class, cl, new Class[]{
IntraVmProxy.class, Serializable.class});
EnumParams proxy = (EnumParams) generator.constructProxy(cls,
invocationHandler);
proxy.someStringMethod(Color.GREEN.name());
@@ -900,8 +902,8 @@ public class LocalBeanProxyGeneratorImpl
public void testGetEnumType() throws Exception {
System.out.println(Color.class.getCanonicalName());
- LocalBeanProxyGeneratorImpl localBeanProxyGenerator = new
LocalBeanProxyGeneratorImpl();
-
assertEquals("Lorg/apache/openejb/util/proxy/LocalBeanProxyGeneratorImplTest$Color;",
localBeanProxyGenerator.getAsmTypeAsString(Color.class, true));
+ LocalBeanProxyFactory localBeanProxyGenerator = new
LocalBeanProxyFactory();
+
assertEquals("Lorg/apache/openejb/util/proxy/LocalBeanProxyFactoryTest$Color;",
localBeanProxyGenerator.getAsmTypeAsString(Color.class, true));
}
@Test
Modified:
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/ProxyEJB.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/ProxyEJB.java?rev=1374504&r1=1374503&r2=1374504&view=diff
==============================================================================
---
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/ProxyEJB.java
(original)
+++
openejb/trunk/openejb/osgi/openejb-core-osgi/src/main/java/org/apache/openejb/core/osgi/impl/ProxyEJB.java
Sat Aug 18 02:25:42 2012
@@ -18,8 +18,10 @@ package org.apache.openejb.core.osgi.imp
import org.apache.openejb.BeanContext;
import org.apache.openejb.RpcContainer;
+import org.apache.openejb.core.ivm.IntraVmProxy;
import org.apache.openejb.util.proxy.LocalBeanProxyFactory;
+import java.io.Serializable;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
@@ -30,7 +32,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
LocalBeanProxyFactory.newProxyInstance(itfs[0].getClassLoader(), new
Handler(beanContext), itfs[0], IntraVmProxy.class, Serializable.class);
}
return Proxy.newProxyInstance(itfs[0].getClassLoader(), itfs, new
Handler(beanContext));
}
Modified:
openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetJndiTree.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetJndiTree.java?rev=1374504&r1=1374503&r2=1374504&view=diff
==============================================================================
---
openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetJndiTree.java
(original)
+++
openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetJndiTree.java
Sat Aug 18 02:25:42 2012
@@ -21,7 +21,7 @@ import org.apache.openejb.BeanContext;
import org.apache.openejb.core.ivm.BaseEjbProxyHandler;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.spi.ContainerSystem;
-import org.apache.openejb.util.proxy.LocalBeanProxyGeneratorImpl;
+import org.apache.openejb.util.proxy.LocalBeanProxyFactory;
import org.apache.openejb.util.proxy.ProxyManager;
import org.apache.tomee.webapp.command.Command;
import org.apache.tomee.webapp.command.Params;
@@ -42,7 +42,7 @@ public class GetJndiTree implements Comm
} else if (bean instanceof java.rmi.Remote
|| bean instanceof org.apache.openejb.core.ivm.IntraVmProxy
- || (bean != null &&
LocalBeanProxyGeneratorImpl.isLocalBean(bean.getClass()))) {
+ || (bean != null &&
LocalBeanProxyFactory.isProxy(bean.getClass()))) {
return "BEAN";
} else {
return "OTHER";
Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/viewjndi.jsp
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/viewjndi.jsp?rev=1374504&r1=1374503&r2=1374504&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/viewjndi.jsp
(original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/viewjndi.jsp Sat
Aug 18 02:25:42 2012
@@ -30,7 +30,7 @@ java.util.Properties
<%@ page import="javax.naming.NamingException" %>
<%@ page import="java.lang.reflect.Method" %>
<%@ page import="java.lang.reflect.Field" %>
-<%@ page import="org.apache.openejb.util.proxy.LocalBeanProxyGeneratorImpl" %>
+<%@ page import="org.apache.openejb.util.proxy.LocalBeanProxyFactory" %>
<html>
<head>
<meta charset="utf-8">
@@ -46,6 +46,7 @@ java.util.Properties
padding-top: 60px;
padding-bottom: 40px;
}
+
.sidebar-nav {
padding: 9px 0;
}
@@ -60,34 +61,36 @@ java.util.Properties
<body>
- <div class="navbar navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container-fluid">
- <a class="btn btn-navbar" data-toggle="collapse"
data-target=".nav-collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </a>
- <a class="brand" href="http://openejb.apache.org">TomEE</a>
- <div class="nav-collapse">
- <ul class="nav">
- <li><a href="index.jsp">Index</a></li>
- <li class="active"><a href="viewjndi.jsp">JNDI</a></li>
- <li><a href="viewejb.jsp">EJB</a></li>
- <li><a href="viewclass.jsp">Class</a></li>
- <li><a href="invokeobj.jsp">Invoke</a></li>
- </ul>
+<div class="navbar navbar-fixed-top">
+ <div class="navbar-inner">
+ <div class="container-fluid">
+ <a class="btn btn-navbar" data-toggle="collapse"
data-target=".nav-collapse">
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </a>
+ <a class="brand" href="http://openejb.apache.org">TomEE</a>
+
+ <div class="nav-collapse">
+ <ul class="nav">
+ <li><a href="index.jsp">Index</a></li>
+ <li class="active"><a href="viewjndi.jsp">JNDI</a></li>
+ <li><a href="viewejb.jsp">EJB</a></li>
+ <li><a href="viewclass.jsp">Class</a></li>
+ <li><a href="invokeobj.jsp">Invoke</a></li>
+ </ul>
- </div><!--/.nav-collapse -->
</div>
+ <!--/.nav-collapse -->
</div>
</div>
+</div>
- <div class="container-fluid">
- <div class="row-fluid">
- <div class="span12">
- <%
+<div class="container-fluid">
+ <div class="row-fluid">
+ <div class="span12">
+ <%
try{
String selected = request.getParameter("selected");
if (selected == null) {
@@ -217,7 +220,7 @@ java.util.Properties
buildNode(node, (Context) obj);
} else if (obj instanceof java.rmi.Remote
|| obj instanceof org.apache.openejb.core.ivm.IntraVmProxy
- || (obj != null &&
LocalBeanProxyGeneratorImpl.isLocalBean(obj.getClass()))) {
+ || (obj != null &&
LocalBeanProxyFactory.isProxy(obj.getClass()))) {
node.type = Node.BEAN;
} else {
node.type = Node.OTHER;