jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sandrine Raffalli (JIRA)" <j...@apache.org>
Subject [jira] Updated: (JCR-2046) No Filter on method finalize for Proxy
Date Sat, 28 Mar 2009 22:40:50 GMT

     [ https://issues.apache.org/jira/browse/JCR-2046?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Sandrine Raffalli updated JCR-2046:
-----------------------------------

    Description: 
The InvocationHandler of a proxy is called when the method finalize() is called, that means
the proxy loads the object when the GC tries to delete it.
Adding a CallbackFilter to the Enhancer could be a solution to avoid that :

public class ProxyManagerImpl implements ProxyManager {

	private static final CallbackFilter FINALIZE_FILTER = new CallbackFilter() {
		public int accept(Method method) {
			if (method.getParameterTypes().length == 0 && method.getName().equals("finalize"))
{
				return 1;
			} else {
				return 0;
			}
		}
	};
       ...
	public Object createBeanProxy(BeanConverter beanConverter, String path, Session session,
Node parentNode, BeanDescriptor beanDescriptor,
			ClassDescriptor beanClassDescriptor, Class beanClass, Object parent) {
		...
		return Enhancer.create(beanClass, getInterfaces(beanClass), FINALIZE_FILTER, new Callback[]
{ loader , NoOp.INSTANCE});
	}
        ...
	public Object createCollectionProxy(Session session, CollectionConverter collectionConverter,
Node parentNode,
			CollectionDescriptor collectionDescriptor, Class collectionFieldClass) {
               ....
		return Enhancer.create(collectionFieldClass, getInterfaces(collectionFieldClass), FINALIZE_FILTER,
new Callback[] { loader , NoOp.INSTANCE});
	}

	...
}

Maybe you may consider other methods such as "equals", "hashCode"...

  was:
The InvocationHandler of a proxy is called when the method finalize() is called, that means
the proxy loads the object when the GC tries to delete it.
Adding a CallbackFilter to the Enhancer could be a solution to avoid that :

public class ProxyManagerImpl implements ProxyManager {

	private static final CallbackFilter FINALIZE_FILTER = new CallbackFilter() {
		public int accept(Method method) {
			if (method.getParameterTypes().length == 0 && method.getName().equals("finalize"))
{
				return 1;
			} else {
				return 0;
			}
		}
	};
       ...
	public Object createBeanProxy(BeanConverter beanConverter, String path, Session session,
Node parentNode, BeanDescriptor beanDescriptor,
			ClassDescriptor beanClassDescriptor, Class beanClass, Object parent) {
		...
		return Enhancer.create(beanClass, getInterfaces(beanClass), FINALIZE_FILTER, new Callback[]
{ loader });
	}
        ...
	public Object createCollectionProxy(Session session, CollectionConverter collectionConverter,
Node parentNode,
			CollectionDescriptor collectionDescriptor, Class collectionFieldClass) {
               ....
		return Enhancer.create(collectionFieldClass, getInterfaces(collectionFieldClass), FINALIZE_FILTER,
new Callback[] { loader });
	}

	...
}

Maybe you may consider other methods such as "equals", "hashCode"...


> No Filter on method finalize for Proxy
> --------------------------------------
>
>                 Key: JCR-2046
>                 URL: https://issues.apache.org/jira/browse/JCR-2046
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-ocm
>            Reporter: Sandrine Raffalli
>
> The InvocationHandler of a proxy is called when the method finalize() is called, that
means the proxy loads the object when the GC tries to delete it.
> Adding a CallbackFilter to the Enhancer could be a solution to avoid that :
> public class ProxyManagerImpl implements ProxyManager {
> 	private static final CallbackFilter FINALIZE_FILTER = new CallbackFilter() {
> 		public int accept(Method method) {
> 			if (method.getParameterTypes().length == 0 && method.getName().equals("finalize"))
{
> 				return 1;
> 			} else {
> 				return 0;
> 			}
> 		}
> 	};
>        ...
> 	public Object createBeanProxy(BeanConverter beanConverter, String path, Session session,
Node parentNode, BeanDescriptor beanDescriptor,
> 			ClassDescriptor beanClassDescriptor, Class beanClass, Object parent) {
> 		...
> 		return Enhancer.create(beanClass, getInterfaces(beanClass), FINALIZE_FILTER, new Callback[]
{ loader , NoOp.INSTANCE});
> 	}
>         ...
> 	public Object createCollectionProxy(Session session, CollectionConverter collectionConverter,
Node parentNode,
> 			CollectionDescriptor collectionDescriptor, Class collectionFieldClass) {
>                ....
> 		return Enhancer.create(collectionFieldClass, getInterfaces(collectionFieldClass), FINALIZE_FILTER,
new Callback[] { loader , NoOp.INSTANCE});
> 	}
> 	...
> }
> Maybe you may consider other methods such as "equals", "hashCode"...

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message