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;


Reply via email to