有以下PMD规则:
使用正确的类加载器(严重)
在J2EE
getClassLoader()
中可能无法按预期工作。请改用Thread.currentThread().getContextClassLoader()
。
可以在某种程度上解释他们的想法吗?究竟什么意思是“J2EE”环境?
答案 0 :(得分:1)
J2EE环境是指Java Enterprise Edition。在这里,您不要将程序作为JVM上的独立应用程序运行,而是让JEE Application Server(例如Glassfish或Tomcat)为您运行它。
应用程序服务器提供了许多不同的方式来运行程序,例如它们提供并发和分布式执行。 AppServers使用类加载器,有时会有层次结构,例如EAR(Enterprise ARchive)有一个,EAR内部的WAR(Web ARchive)有一个不同的。因此,无法确保始终通过getClassLoader()
调用获得正确的ClassLoader。使用Thread.currentThread().getContextClassLoader()
,您将始终获得加载应用的ClassLoader。
(注意:这不完全正确,一些应用程序使用ContextClassLoader(如Spring,OSGi)制作技巧。但是,这是获得正确的ClassLoader的最佳方法。)