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レベルの両方。
サードパーティのクラス( com.myco.wo.vs.util.OrderLovUtilities
)はWEB-INF / libのjarファイルからロードされていないようですが、むしろサーバー上の他の場所から。そのクラスローダーは、プロパティファイルを見ません。
それが問題の場合、クラスローダーの順序を変更すると、予想されるクラスのコピーがロードされます。
また、管理コンソールのクラスローダービューアは、それに光を当てることができます。
他のヒント
db.propertiesファイルをWEB-INF / classesディレクトリに配置しようとしましたか?