dain 2005/03/31 01:56:59
Modified: modules/core/src/java/org/openejb/corba
AdapterProxyFactory.java
Log:
Do not try to intercept the finalize method
Revision Changes Path
1.2 +19 -4
openejb/modules/core/src/java/org/openejb/corba/AdapterProxyFactory.java
Index: AdapterProxyFactory.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/AdapterProxyFactory.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AdapterProxyFactory.java 2 Mar 2005 05:23:10 -0000 1.1
+++ AdapterProxyFactory.java 31 Mar 2005 06:56:59 -0000 1.2
@@ -45,6 +45,7 @@
package org.openejb.corba;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.rmi.AccessException;
import java.rmi.MarshalException;
import java.rmi.NoSuchObjectException;
@@ -58,6 +59,8 @@
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
+import net.sf.cglib.proxy.CallbackFilter;
+import net.sf.cglib.proxy.NoOp;
import org.omg.CORBA.INVALID_TRANSACTION;
import org.omg.CORBA.MARSHAL;
import org.omg.CORBA.NO_PERMISSION;
@@ -92,7 +95,8 @@
enhancer.setClassLoader(classLoader);
enhancer.setSuperclass(AdapterDelegate.class);
enhancer.setInterfaces(clientInterfaces);
- enhancer.setCallbackType(MethodInterceptor.class);
+ enhancer.setCallbackTypes(new Class[]{NoOp.class,
MethodInterceptor.class});
+ enhancer.setCallbackFilter(FILTER);
enhancer.setUseFactory(false);
}
@@ -110,7 +114,7 @@
}
public synchronized Object create(Class[] types, Object[] arguments) {
- enhancer.setCallbacks(new Callback[]{interceptor});
+ enhancer.setCallbacks(new Callback[]{NoOp.INSTANCE, interceptor});
return enhancer.create(types, arguments);
}
@@ -139,5 +143,16 @@
}
}
}
+
+ private static final CallbackFilter FILTER = new CallbackFilter() {
+ public int accept(Method method) {
+ if (method.getName().equals("finalize") &&
+ method.getParameterTypes().length == 0 &&
+ method.getReturnType() == Void.TYPE) {
+ return 0;
+ }
+ return 1;
+ }
+ };
}