Java 1.5、Java EE 5、WAS 6.1:使用 ResourceBundle.getBundle(...) 加载资源包时出现异常
题
这是我们在将应用程序从当前生产环境迁移到新数据中心环境时面临的另一个问题(请参阅下面的详细信息)
- 当前生产环境:Java 1.4、Java EE 3、WAS 5.1、JSF 2.1
- 新环境:Java 1.5、Java EE 5、WAS 6.1、JSF 2.1
这里我们有一个具有以下结构的第三方 jar 文件(检查图像 - 请原谅我隐藏了一些细节)
此类具有从 ResourceBundle (db.properties) 加载数据库属性的代码。这是 Cavaj 渲染的代码:
private static ResourceBundle getDBProperties() { if(dbProperties == null) { dbProperties = ResourceBundle.getBundle("db"); } return dbProperties; }
该应用程序在当前环境下运行良好。但不知怎的,当我们将应用程序移动到新环境时,我们得到一个“MissingResourceException”(见下文):
Caused by: java.util.MissingResourceException: Can't find bundle for base name db, locale en_US at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:863) at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:832) at java.util.ResourceBundle.getBundle(ResourceBundle.java:576) at com.myco.wo.vs.util.OrderLovUtilities.getDBProperties(OrderLovUtilities.java:195)
我们尝试了以下解决方法,但没有成功:
- 将 db.properties 重命名为 db_en_US.properties
- 将属性文件放入jar中
- 在 EAR 级别移动 jar 文件。
请提出这里可能出现问题的建议。我们能做些什么来让它发挥作用:)
笔记: 文件 db.properties 位于 WEB-INF/classes 目录下。我们也尝试将其放在上述位置但无济于事。
问候,
- 阿什什
解决方案
尝试在您的 ent 设置中更改类加载器顺序。管理控制台中的应用程序(来自 PARENT_FIRST
到 PARENT_LAST
)在 EAR 和 WAR 级别上。
在我看来,第 3 方课程(com.myco.wo.vs.util.OrderLovUtilities
)不是从 WEB-INF/lib 中的 jar 文件加载的,而是来自服务器上的其他位置。然后它的类加载器看不到属性文件。
如果这是问题所在,则更改类加载器顺序应该会导致加载类的预期副本。
此外,管理控制台中的类加载器查看器可以对此进行一些说明。
其他提示
您是否尝试过将 db.properties 文件放在 WEB-INF/classes 目录下?
不隶属于 StackOverflow