[ http://issues.apache.org/jira/browse/JAMES-418?page=comments#action_12361357 ]
Stefano Bagnara commented on JAMES-418: --------------------------------------- Noel: we can refer the phoenix trunk by it's current version. A few month ago, while I was trying a tagged version of Loom, you asked help from Peter Royal about classloading issues and Loom vs Phoenix. The result of the thread was that Peter said that Loom is not used around while the phoenix-trunk is used in production in "many environment". I had no time to investigate on the validation issue I had with both loom and phoenix trunk until now. The "spaces in xml" issues verified on loom is not present in phoenix-trunk. I think we cannot expect someone to tag or release anything on the phoenix side (almost 2 years of inactivity). You suggested to talk with Peter, please talk with him again and try to make it clear what a "tag" will give to james. IMHO we need to upgrade the container because it's the only correct way to fix the classloading issues. > Loader uses wrong method to obtain class loader/doesn't set context class > loader > -------------------------------------------------------------------------------- > > Key: JAMES-418 > URL: http://issues.apache.org/jira/browse/JAMES-418 > Project: James > Type: Bug > Components: James Core > Versions: 2.2.0 > Reporter: Ben Lindahl > Assignee: Stefano Bagnara > Attachments: cornerstone-datasources-impl-2.1.jar, phoenix-trunk.zip > > I had difficulty loading resources from my classes directory. In reviewing > the Loader source code, I see two problems: > 1) It uses this.class.getClassLoader(), rather than the preferred/standard > Thread.currentThread.getContextClassLoader(). This is not a problem right > now, as the Apache James developers have control over the entire application, > but could become a difficult bug to track down in the future. In addition, > as soon as you start adding multiple class loaders, chaining class loaders > with parents becomes impossible (see next point) because it sets the same > class loader as multiple parents. In the source code, all instances of > this.getClass().getClassLoader() (or whatever.getClass().getClassLoader()) > should be replaced by Thread.currentThread().getContextClassLoader() > 2) The greater problem is that it does not call > Thread.currentThread().setContextClassLoader(classLoader). This means that > any code that uses the standard method > Thread.currentThread().getContextClassLoader() (as my code does) will not get > the correct class loader, and thus will not be able to load the appropriate > resources. In fact, I was getting the primary class loader, which only loads > the Phoenix Jar. I had to add into my code the following (the class loader's > parent is already set): > Thread.currentThread().setContextClassLoader(MyClass.class.getClassLoader()); > By the nature of Java class loaders, it is expected that the thread's Context > ClassLoader is always kept current, and that any new class loaders are added > to the chain. I think that this change should be made in the Apache James > source code. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
