重新部署后,WebSphere Portal Server ClassLoader不起作用

时间:2014-01-24 15:59:11

标签: java classloader portlet websphere-portal

我有一个简单的portlet可以在WebSohere Portal Server中部署。

这是一个war文件,在其lib文件夹中包含一个jar文件。在jar文件中,我尝试读取属性文件。在我的portlet项目中,我在src的根目录中有一个属性文件,可以在jar文件中读取没有问题。

但是,如果我重新部署war文件而不重新启动服务器,则下面的代码行将返回null,并且无法从属性文件中读取。重启服务器后,一切都还好。

InputStream inStream = this.getClass()。getClassLoader()。getResourceAsStream(“myFile.properties”);

我检查了ClassLoader的设置,父亲是最后的。我不知道是什么原因。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

由于性能原因,文件被读取一次并被缓存。

编辑:如果您希望修改文件,请将文件保留在本地文件系统上的EAR文件之外,并使用环境/服务器变量指向其路径。请参阅代码中的变量以加载文件。

答案 1 :(得分:0)

尝试使用上下文类加载器而不是类的类加载器,因为您没有将jar中的资源与类捆绑在一起(如果我正确阅读了您的描述)。

Thread.currentThread().getContextClassLoader().getResourceAsStream(...)

您是否偶然将此jar放在另一个Web模块中,或者可能放在WebSphere Shared Library文件夹中?由于您描述的行为是null而不仅仅是旧的文件值,我不太倾向于认为缓存涉及更多,您只是得到一个不同于您想到的类实例,因为您正在使用类加载器实用程序类本身,未找到Web模块的WEB-INF / classes中的属性文件。