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);
- }
-
}