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

Reply via email to