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


Reply via email to