You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by rm...@apache.org on 2012/09/12 22:52:57 UTC
svn commit: r1384120 - in
/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans:
intercept/NormalScopedBeanInterceptorHandler.java
proxy/JavassistProxyFactory.java
Author: rmannibucau
Date: Wed Sep 12 20:52:57 2012
New Revision: 1384120
URL: http://svn.apache.org/viewvc?rev=1384120&view=rev
Log:
OWB-704 using javassist method filter instead of manual filtering in our handlers
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java?rev=1384120&r1=1384119&r2=1384120&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java Wed Sep 12 20:52:57 2012
@@ -45,7 +45,6 @@ public class NormalScopedBeanInterceptor
{
/**Serial id*/
private static final long serialVersionUID = 1L;
- private static final String FINALIZE = "finalize".intern();
/** this stores the {@link java.lang.reflect.Method#hashCode()} of intercepted methods */
private CopyOnWriteArrayList<Integer> cachedInterceptedMethods = new CopyOnWriteArrayList<Integer>();
@@ -111,16 +110,6 @@ public class NormalScopedBeanInterceptor
public Object invoke(Object instance, Method method, Object[] arguments) throws Throwable
{
- if (method.getName() == FINALIZE && // Method.getName() is defined to return .intern() in the VM spec.
- method.getParameterTypes().length == 0 &&
- method.getReturnType() == Void.TYPE)
- {
- // we should NOT invoke the bean's finalize() from proxied
- // finalize() method since JVM will invoke it directly.
- // OWB-366
- return null;
- }
-
//Get instance from context
Object webbeansInstance = getContextualInstance();
Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java?rev=1384120&r1=1384119&r2=1384120&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/proxy/JavassistProxyFactory.java Wed Sep 12 20:52:57 2012
@@ -21,6 +21,7 @@ package org.apache.webbeans.proxy;
import java.io.Serializable;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.HashSet;
import java.util.Iterator;
@@ -34,6 +35,7 @@ import javax.enterprise.context.spi.Crea
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.Decorator;
+import javassist.util.proxy.MethodFilter;
import javassist.util.proxy.ProxyFactory;
import javassist.util.proxy.ProxyFactory.ClassLoaderProvider;
import javassist.util.proxy.ProxyObject;
@@ -474,8 +476,9 @@ public final class JavassistProxyFactory
ProxyFactory fact = new ProxyFactory();
fact.setInterfaces(interfaceArray);
- fact.setSuperclass(superClass);
-
+ fact.setSuperclass(superClass);
+ fact.setFilter(FinalizeMethodFilter.INSTANCE);
+
return fact;
}
@@ -489,4 +492,17 @@ public final class JavassistProxyFactory
return o instanceof ProxyObject;
}
+ private static class FinalizeMethodFilter implements MethodFilter
+ {
+ private static final String FINALIZE = "finalize".intern();
+
+ public static final FinalizeMethodFilter INSTANCE = new FinalizeMethodFilter();
+
+ public boolean isHandled(final Method method)
+ {
+ return !(method.getName() == FINALIZE
+ && method.getParameterTypes().length == 0
+ && method.getReturnType() == Void.TYPE);
+ }
+ }
}