Java 1.5,Java EE 5,WAS 6.1:使用ResourceBundle.getBundle(...)加载资源包的异常

时间:2009-05-01 19:09:00

标签: java java-ee websphere

以下是我们将应用程序从当前生产环境迁移到新数据中心环境时遇到的另一个问题(请参阅下面的详细信息)

  • 当前生产环境: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文件,结构如下(查看图片 - 请原谅我隐藏一些细节)
alt text


此类具有从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)

我们尝试了以下解决方法但没有奏效:

  1. 将db.properties重命名为db_en_US.properties
  2. 将属性文件放在jar中
  3. 在EAR级别移动jar文件。
  4. 请在此处提出可能有误的建议。我们可以做些什么才能让它发挥作用:)

    注意:文件db.properties位于WEB-INF / classes目录下。我们也尝试将它放在上面提到的位置,但无济于事。

    的问候,
    - Ashish

2 个答案:

答案 0 :(得分:1)

尝试在您的设置中更改类加载器排序。在EAR和WAR级别的管理控制台中的应用程序(从PARENT_FIRSTPARENT_LAST)。

在我看来,第三方类(com.myco.wo.vs.util.OrderLovUtilities)没有从WEB-INF / lib中的jar文件加载,而是来自服务器上的其他位置。它的类加载器然后没有看到属性文件。

如果这是问题,更改类加载器排序应该会导致加载类的预期副本。

此外,管理控制台中的类加载器查看器可以为此提供一些启示。

答案 1 :(得分:0)

您是否尝试将db.properties文件放在WEB-INF / classes目录下?