Websphere Liberty Profile无法找到基本错误的包

时间:2014-10-21 09:58:42

标签: eclipse classloader websphere-liberty

我在WLP 8.5.5.3上的eclipse中安装了EAR

这是附加了类加载器的EAR条目:

<enterpriseApplication id="App4EAR" location="App4EAR-4.1.5-SNAPSHOT.ear" name="App4EAR">
    <classloader apiTypeVisibility="spec,ibm-api,api" delegation="parentFirst" commonLibraryRef="baseLibraries.app4">
    </classloader>
</enterpriseApplication>

服务器正在启动而没有问题。应用程序中的第一个jsp页面尝试读取位于WAR组件中的属性文件。这是它失败的地方。

SRVE0777E: Exception thrown by application class 'java.util.ResourceBundle.throwMissingResourceException:1427' 
java.util.MissingResourceException: Can't find bundle for base name prop.appadmin, locale nl_BE

读取属性的对象与属性文件一起位于Web应用程序中。用于读取资源包的实用程序类位于单独的jar中,并且是共享库(baseLibraries.app4)的一部分。

这是App4EAR.ear.xml部署定义中的一个条目,指向属性文件所在的文件夹:

<dir sourceOnDisk="C:\svn\app4\App4Web\target\classes" targetInArchive="/WEB-INF/classes"/>

在应用程序中直接使用java.util.ResourceBundle()时,它会成功找到属性文件。但是当我们使用共享库中的实用程序类时却不是这样。

为什么共享库无法访问主Web应用程序中的属性资源?

2 个答案:

答案 0 :(得分:0)

您的共享库是在父类加载器中加载的,并且应用程序中的类和属性对于该类加载器是不可见的,这就是为什么找不到它们的原因。将属性文件添加到库的类路径而不是Web应用程序。

答案 1 :(得分:0)

在Web应用程序中打包访问资源文件的实用程序jar可以解决问题。

这种解决方案否定了共享库的目的。另请注意,在WAS 8.5中,这不是问题,因此在共享库的公开/加载方式方面发生了一些变化。