2012-01-10 25 views
1

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つです。

適切なクラスパスからロードするためにどのクラスローダにアクセスする必要がありますか?

答えて

0

SpringのMessageSourceResourceBundleクラスは、MessageSourceを使用してそのプロパティをフィードするResourceBundleの実装です。これは、MessageSourceオブジェクト(Autowired)とロケールを使用してインスタンス化できます。 MessageSourceはすでにアプリケーションで必要なものを処理しています。私はLocaleと同様に動作するResourceBundleを取得する必要がありました。

public ResourceBundle getBeanResourceBundle() { 
    Locale fromConfig = DEFAULT_LOCALE; 

    //Resolve Locale from a configuration service 

    return new MessageSourceResourceBundle(ms, fromNodeConfig); //replace code in my question 
} 
関連する問題