我在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应用程序中的属性资源?
答案 0 :(得分:0)
您的共享库是在父类加载器中加载的,并且应用程序中的类和属性对于该类加载器是不可见的,这就是为什么找不到它们的原因。将属性文件添加到库的类路径而不是Web应用程序。
答案 1 :(得分:0)
在Web应用程序中打包访问资源文件的实用程序jar可以解决问题。
这种解决方案否定了共享库的目的。另请注意,在WAS 8.5中,这不是问题,因此在共享库的公开/加载方式方面发生了一些变化。