Thanks for clarification :) On Sat, Jun 7, 2008 at 1:48 AM, David Blevins <[EMAIL PROTECTED]> wrote: > > On May 22, 2008, at 3:20 AM, Mohammad Nour El-Din wrote: > >> Why we needed this wrapping in the first place ? > > It stems from the jdk 1.2 days when there was no proxy support in the VM. > It's still sort of nice to have around as it keeps all proxy creation in > one spot and allows us to switch to other impls, but it's not as important > as it once was. > > -David > > >> >> >> On Thu, May 22, 2008 at 2:19 AM, <[EMAIL PROTECTED]> wrote: >>> >>> Author: dblevins >>> Date: Wed May 21 16:19:27 2008 >>> New Revision: 658929 >>> >>> URL: http://svn.apache.org/viewvc?rev=658929&view=rev >>> Log: >>> Thinned out the ProxyManager/ProxyFactory abstraction. Biggest >>> improvement is that InvocationHandlers are no longer needlessly wrapped by a >>> Jdk13InvocationHandler. Now when debugging you step right into the >>> BaseEjbProxyHandler. >>> >>> Removed: >>> >>> >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/InvalidatedReferenceHandler.java >>> >>> >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/Jdk13InvocationHandler.java >>> >>> >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/Proxy.java >>> Modified: >>> >>> >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java >>> >>> >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/InvocationHandler.java >>> >>> >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/Jdk13ProxyFactory.java >>> >>> >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyFactory.java >>> >>> >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java >>> >>> Modified: >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java >>> URL: >>> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java?rev=658929&r1=658928&r2=658929&view=diff >>> >>> ============================================================================== >>> --- >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java >>> (original) >>> +++ >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/BaseEjbProxyHandler.java >>> Wed May 21 16:19:27 2008 >>> @@ -220,9 +220,15 @@ >>> setDoIntraVmCopy(on); >>> } >>> >>> + public InvocationHandler getInvocationHandler() { >>> + return this; >>> + } >>> + >>> public Object invoke(Object proxy, Method method, Object[] args) throws >>> Throwable { >>> isValidReference(method); >>> >>> + if (args == null) args = new Object[]{}; >>> + >>> if (method.getDeclaringClass() == Object.class) { >>> final String methodName = method.getName(); >>> >>> >>> Modified: >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/InvocationHandler.java >>> URL: >>> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/InvocationHandler.java?rev=658929&r1=658928&r2=658929&view=diff >>> >>> ============================================================================== >>> --- >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/InvocationHandler.java >>> (original) >>> +++ >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/InvocationHandler.java >>> Wed May 21 16:19:27 2008 >>> @@ -16,9 +16,8 @@ >>> */ >>> package org.apache.openejb.util.proxy; >>> >>> -import java.lang.reflect.Method; >>> +public interface InvocationHandler extends >>> java.lang.reflect.InvocationHandler { >>> >>> -public interface InvocationHandler { >>> + public InvocationHandler getInvocationHandler(); >>> >>> - public Object invoke(Object proxy, Method method, Object[] args) >>> throws Throwable; >>> } >>> >>> Modified: >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/Jdk13ProxyFactory.java >>> URL: >>> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/Jdk13ProxyFactory.java?rev=658929&r1=658928&r2=658929&view=diff >>> >>> ============================================================================== >>> --- >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/Jdk13ProxyFactory.java >>> (original) >>> +++ >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/Jdk13ProxyFactory.java >>> Wed May 21 16:19:27 2008 >>> @@ -32,46 +32,14 @@ >>> } >>> >>> public void init(Properties props) throws OpenEJBException { >>> - start(); >>> - } >>> - >>> - /** >>> - * @org.apache.xbean.InitMethod >>> - */ >>> - public void start() throws OpenEJBException { >>> - String version = ""; >>> - String badVersion = "1.3.0-"; >>> - try { >>> - version = System.getProperty("java.vm.version"); >>> - } catch (Exception e) { >>> - } >>> - if (version.indexOf(badVersion) != -1) { >>> - String message = "" + >>> - "INCOMPATIBLE VM: \n\n" + >>> - "The Java Virtual Machine you are using contains a >>> bug\n" + >>> - "in the proxy generation logic. This bug has been >>> \n" + >>> - "documented by Sun and has been fixed in later VMs. >>> \n" + >>> - "Please download the latest 1.3 Virtual Machine. >>> \n" + >>> - "For more details see: >>> \n" + >>> - >>> "http://developer.java.sun.com/developer/bugParade/bugs/4346224.html\n "; >>> - throw new OpenEJBException(message); >>> - } >>> } >>> >>> public org.apache.openejb.util.proxy.InvocationHandler >>> getInvocationHandler(Object proxy) throws IllegalArgumentException { >>> - Jdk13InvocationHandler handler = (Jdk13InvocationHandler) >>> Proxy.getInvocationHandler(proxy); >>> - if (handler == null) >>> - return null; >>> + InvocationHandler handler = (InvocationHandler) >>> Proxy.getInvocationHandler(proxy); >>> + if (handler == null) return null; >>> return handler.getInvocationHandler(); >>> } >>> >>> - public Object setInvocationHandler(Object proxy, >>> org.apache.openejb.util.proxy.InvocationHandler handler) throws >>> IllegalArgumentException { >>> - Jdk13InvocationHandler jdk13 = (Jdk13InvocationHandler) >>> Proxy.getInvocationHandler(proxy); >>> - if (jdk13 == null) >>> - throw new IllegalArgumentException("Proxy " + proxy + " >>> unknown!"); >>> - return jdk13.setInvocationHandler(handler); >>> - } >>> - >>> public Class getProxyClass(Class interfce) throws >>> IllegalArgumentException { >>> return Proxy.getProxyClass(interfce.getClassLoader(), new >>> Class[]{interfce}); >>> } >>> @@ -90,43 +58,23 @@ >>> return Proxy.isProxyClass(cl); >>> } >>> >>> - private final static Class[] constructorParams = >>> {java.lang.reflect.InvocationHandler.class}; >>> - >>> - public Object newProxyInstance(Class proxyClass) throws >>> IllegalArgumentException { >>> - if (!Proxy.isProxyClass(proxyClass)) >>> - throw new IllegalArgumentException(); >>> - try { >>> - Constructor cons = >>> proxyClass.getConstructor(constructorParams); >>> - return (Object) cons.newInstance(new Object[]{new >>> Jdk13InvocationHandler()}); >>> - } catch (NoSuchMethodException e) { >>> - throw (InternalError) new >>> InternalError(e.toString()).initCause(e); >>> - } catch (IllegalAccessException e) { >>> - throw (InternalError) new >>> InternalError(e.toString()).initCause(e); >>> - } catch (InstantiationException e) { >>> - throw (InternalError) new >>> InternalError(e.toString()).initCause(e); >>> - } catch (InvocationTargetException e) { >>> - throw (InternalError) new >>> InternalError(e.toString()).initCause(e); >>> - } >>> - } >>> - >>> /* >>> * Returns an instance of a proxy class for the specified interface >>> that dispatches method invocations to >>> * the specified invocation handler. >>> */ >>> public Object newProxyInstance(Class interfce, >>> org.apache.openejb.util.proxy.InvocationHandler h) throws >>> IllegalArgumentException { >>> - Jdk13InvocationHandler handler = new Jdk13InvocationHandler(h); >>> - return Proxy.newProxyInstance(interfce.getClassLoader(), new >>> Class[]{interfce}, handler); >>> + return Proxy.newProxyInstance(interfce.getClassLoader(), new >>> Class[]{interfce}, h); >>> } >>> >>> /* >>> * Returns an instance of a proxy class for the specified interface >>> that dispatches method invocations to >>> * the specified invocation handler. >>> */ >>> - public Object newProxyInstance(Class[] interfaces, >>> org.apache.openejb.util.proxy.InvocationHandler h) throws >>> IllegalArgumentException { >>> + public Object newProxyInstance(Class[] interfaces, >>> org.apache.openejb.util.proxy.InvocationHandler handler) throws >>> IllegalArgumentException { >>> if (interfaces.length < 1) { >>> throw new IllegalArgumentException("It's boring to implement 0 >>> interfaces!"); >>> } >>> - Jdk13InvocationHandler handler = new Jdk13InvocationHandler(h); >>> + >>> try { >>> return Proxy.newProxyInstance(interfaces[0].getClassLoader(), >>> interfaces, handler); >>> } catch (IllegalArgumentException e) { >>> >>> Modified: >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyFactory.java >>> URL: >>> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyFactory.java?rev=658929&r1=658928&r2=658929&view=diff >>> >>> ============================================================================== >>> --- >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyFactory.java >>> (original) >>> +++ >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyFactory.java >>> Wed May 21 16:19:27 2008 >>> @@ -26,8 +26,6 @@ >>> >>> public InvocationHandler getInvocationHandler(Object proxy) throws >>> IllegalArgumentException; >>> >>> - public Object setInvocationHandler(Object proxy, InvocationHandler >>> handler) throws IllegalArgumentException; >>> - >>> public Class getProxyClass(Class interfce) throws >>> IllegalArgumentException; >>> >>> public Class getProxyClass(Class[] interfaces) throws >>> IllegalArgumentException; >>> @@ -49,6 +47,5 @@ >>> */ >>> public Object newProxyInstance(Class[] interfaces, InvocationHandler h) >>> throws IllegalArgumentException; >>> >>> - public Object newProxyInstance(Class proxyClass) throws >>> IllegalArgumentException; >>> } >>> >>> >>> Modified: >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java >>> URL: >>> http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java?rev=658929&r1=658928&r2=658929&view=diff >>> >>> ============================================================================== >>> --- >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java >>> (original) >>> +++ >>> openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/proxy/ProxyManager.java >>> Wed May 21 16:19:27 2008 >>> @@ -20,7 +20,7 @@ >>> >>> public class ProxyManager { >>> >>> - private static volatile ProxyFactory defaultFactory; >>> + private static volatile ProxyFactory defaultFactory = new >>> Jdk13ProxyFactory(); >>> private static final HashMap factories = new HashMap(); >>> private static volatile String defaultFactoryName; >>> >>> @@ -64,11 +64,6 @@ >>> return defaultFactory.getInvocationHandler(proxy); >>> } >>> >>> - public static Object setInvocationHandler(Object proxy, >>> InvocationHandler handler) { >>> - checkDefaultFactory(); >>> - return defaultFactory.setInvocationHandler(proxy, handler); >>> - } >>> - >>> public static Class getProxyClass(Class interfaceType) throws >>> IllegalAccessException { >>> return getProxyClass(new Class[]{interfaceType}); >>> } >>> @@ -92,9 +87,4 @@ >>> return defaultFactory.isProxyClass(cl); >>> } >>> >>> - public static Object newProxyInstance(Class proxyClass) throws >>> IllegalAccessException { >>> - checkDefaultFactory(); >>> - return defaultFactory.newProxyInstance(proxyClass); >>> - } >>> - >>> } >>> >>> >>> >> >> >> >> -- >> Thanks >> - Mohammad Nour >> > >
-- Thanks - Mohammad Nour
