JBoss AS7上で実行されているデプロイされたWARのコンテキストで、Spring Webアプリケーションのi18nローカリゼーションプロパティをResourceBundleオブジェクトとしてロードする必要があります。SpringにResourceBundleオブジェクトをロードする
ここで私はResourceBundleオブジェクトをJasperReportsのパラメータとしてフィードにして、レポートを適切にコンパイルする必要があるからです。パラメータ "REPORT_RESOURCE_BUNDLE"は、JasperReportsによってstr()関数または$ R {}式バインディングでレポートの国際化を処理するために使用されます。このパラメータのために唯一認められた型はResourceBundleオブジェクトなので、私の状況です。
私はいつか働いていましたが、JBossが古いバージョンのプロパティを保持しているように見えました。これは、私が行った後も、変更されていないコードを使ってResourceBundleを見つけることができなくなったクリーンアップ、パッケージ化、および再デプロイメントを行います。
次のように我々はそれが成功したリソースバンドルとしてプロパティファイルをロードして使用することができ、MessageSourceビーンを設定している春に次のようにするResourceBundleオブジェクトをフェッチする
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource ms = new ReloadableResourceBundleMessageSource();
String[] basenames = {"/WEB-INF/classes/messages/i18n/core_messages",
"/WEB-INF/classes/messages/i18n/mui_messages"};
ms.setBasenames(basenames);
return ms;
}
私の現在の実装は次のようになります。
public ResourceBundle getBeanResourceBundle() {
Locale fromConfig = DEFAULT_LOCALE;
//Resolve Locale from a configuration service
ClassLoader cl = Thread.currentThread().getContextClassLoader();
return ResourceBundle.getBundle("core_messages", fromConfig, cl);
}
this.getClassLoader()を使用してクラスをロードする際に問題が発生し、Thread.currentThread()からロードするように変更した後で作業を開始しました。しかし、クリーンなパッケージ:deployはこれを無効にしてしまいました。デリバリーされたアプリケーションで明らかなキー値の変更が決して現れなかったため、新しい "core_messages" ResourceBundleオブジェクトを実際にロードすることをやめました。
コアモジュールパッケージをJBossの展開のためのWARとしてパッケージ化されているのフロントエンドモジュールの依存関係であるJARとして:
展開の構造は次のようにMavenによって構築されます。
上記の方法でResourceBundleのようなものをロードするサービスを持つコードは、コアモジュールにあります。最後のWARは、WEB-INF/classes/..クラスパスからファイルを解決しようとしているFrontEndモジュールの1つです。
適切なクラスパスからロードするためにどのクラスローダにアクセスする必要がありますか?