Why we needed this wrapping in the first place ? 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
