[ 
https://issues.apache.org/jira/browse/XBEAN-95?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12535910
 ] 

Christopher Sahnwaldt commented on XBEAN-95:
--------------------------------------------

I think this can be fixed by a small change in 
org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler.registerCustomEditors().

Current version (SVN revision 517909):

/**
 * Registers whatever custom editors we need
 */
public static void registerCustomEditors(DefaultListableBeanFactory 
beanFactory) {
  PropertyEditorHelper.registerCustomEditors();
}

New version:

/**
 * Registers whatever custom editors we need
 */
public static void registerCustomEditors(DefaultListableBeanFactory 
beanFactory) {
  PropertyEditorRegistrar registrar =
  new PropertyEditorRegistrar()
  {
    public void registerCustomEditors( PropertyEditorRegistry registry )
    {
      registry.registerCustomEditor(java.io.File.class, new 
org.apache.xbean.spring.context.impl.FileEditor());
      registry.registerCustomEditor(java.net.URI.class, new 
org.apache.xbean.spring.context.impl.URIEditor());
      registry.registerCustomEditor(java.util.Date.class, new 
org.apache.xbean.spring.context.impl.DateEditor());
      registry.registerCustomEditor(javax.management.ObjectName.class, new 
org.apache.xbean.spring.context.impl.ObjectNameEditor());
    }
  };

  beanFactory.addPropertyEditorRegistrar(registrar);
}

Two new imports are needed:

import org.springframework.beans.PropertyEditorRegistrar;
import org.springframework.beans.PropertyEditorRegistry;


PropertyEditorHelper.registerCustomEditors() is also called by the static 
initializers of 
org.apache.xbean.spring.context.v2c.XBeanBeanDefinitionParserDelegate and 
org.apache.xbean.spring.context.v2c.XBeanNamespaceHandler. I would think that 
these static initializers can simply be removed, but I'm not sure.

> register PropertyEditors locally, not globally
> ----------------------------------------------
>
>                 Key: XBEAN-95
>                 URL: https://issues.apache.org/jira/browse/XBEAN-95
>             Project: XBean
>          Issue Type: Bug
>          Components: spring
>            Reporter: Christopher Sahnwaldt
>
> org.apache.xbean.spring.context.impl.PropertyEditorHelper registers 
> PropertyEditors for java.io.File, java.net.URI, java.util.Date and 
> javax.management.ObjectName using 
> java.beans.PropertyEditorManager.registerEditor(). This may cause problems:
> - the usual problem with global variables: another application running in the 
> same JVM may register a different PropertyEditor, e.g. for java.util.Date. 
> One of the applications will then use the PropertyEditor that was registered 
> by the other application. Which application 'wins' depends on the order of 
> the calls to PropertyEditorManager.registerEditor().
> - java.beans.PropertyEditorManager keeps a strong reference to the registered 
> classes. The xbean PropertyEditor classes are loaded by the context class 
> loader, (which is the webapp class loader if running in Tomcat etc.). The 
> class java.beans.PropertyEditorManager is loaded by the bootstrap class 
> loader. This means that there is a strong reference from the bootstrap class 
> loader to the webapp class loader, which means that the webapp class loader 
> cannot be unloaded, which means that the webapp is not garbage collected when 
> it is undeployed.

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

Reply via email to