2009-05-01 25 views
2

這是我們將應用程序從當前生產環境遷移到新數據中心環境時面臨的另一個問題(請參閱下面詳細說明)Java 1.5,Java EE 5,WAS 6.1:使用ResourceBundle.getBundle加載資源包的例外(...)

  • 當前生產環境:Java 1.4中的Java EE 3,爲5.1,JSF 2.1
  • 新環境:爪哇1.5,Java EE 5中,WAS 6.1,JSF 2.1

這裏我們有以下結構的第三方jar文件(檢查圖像 - 原諒我隱藏了一些細節)
alt text http://i43.tinypic.com/fxdqo0.jpg


這個類的代碼從資源(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. 將屬性文件放入罐子中將EAR級別的罐子文件移動到罐子中

請在這裏提出可能的錯誤建議。我們可以做些什麼來使其工作:)

注意:文件db.properties位於WEB-INF/classes目錄下。我們也嘗試將它放在上述位置,但無濟於事。

問候,
- 阿希什

+0

我在猜測你的意思是JSF 1.2:http://java.sun.com/javaee/javaserverfaces/reference/api/index.html – McDowell 2009-05-01 19:17:43

+0

db.properties位於你的應用程序中的位置? – McDowell 2009-05-01 19:20:37

+0

資源包用於特定於語言環境的消息和標籤。你的數據庫是特定於語言環境的嗎?我原以爲這就是JNDI的目的。這似乎是我的數據庫屬性錯誤的地方。這種方式不可能合併。 – duffymo 2009-05-01 22:07:11

回答

1

嘗試更改您的ent設置中的classloader排序。在EAR和WAR級別的管理控制檯(從PARENT_FIRSTPARENT_LAST)中的應用程序。

在我看來,第三方類(com.myco.wo.vs.util.OrderLovUtilities)沒有從您的jar文件加載到WEB-INF/lib中,而是來自服務器上的其他位置。它的類加載器然後看不到屬性文件。

如果這是問題,那麼更改類加載器排序應該會導致類的預期副本加載。

此外,管理控制檯中的類加載器查看器可以提供一些信息。

+0

將類加載器設置爲PARENT_LAST,並且它的工作方式類似於魅力。 非常感謝David ... – Vini 2009-05-05 18:17:59

0

您是否嘗試過把你的db.properties WEB-INF/classes目錄下的文件?

+0

是的,最初文件是在WEB-INF/classes下,然後我們也面臨同樣的問題,所以我們把文件放在WEB-INF/classes和WEB -INF/lib(兩個地方) – Vini 2009-05-02 09:30:37