2012-01-10 2 views
1

JBoss AS7에서 실행되는 배포 된 WAR 컨텍스트에서 Spring 웹 애플리케이션의 i18n 현지화 속성을 ResourceBundle 객체로로드해야합니다.Spring에 ResourceBundle 객체로드하기

여기서는 보고서를 올바르게 컴파일하기 위해 JasperReports에 대한 매개 변수로 ResourceBundle 객체를 공급해야하기 때문입니다. "REPORT_RESOURCE_BUNDLE"매개 변수는 JasperReports가 str() 함수 또는 $ R {} 표현식 바인딩을 사용하여 보고서의 국제화를 처리하는 데 사용됩니다. 이 매개 변수에 대해 유일하게 허용되는 유형은 ResourceBundle 객체이므로 내 상황입니다.

나는 어느 시점에서 작동 했었지만, JBoss가 속성의 오래된 버전을 붙잡고있는 것 같았습니다. JBoss는 이전에 수정하지 않은 코드를 사용하여 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; 
} 

의 ResourceBundle 객체를 가져 오는에 대한 나의 현재의 구현이 될 때 :

다음과 같이

봄에서

우리는 성공적으로로드 및 자원 번들로 특성 파일을 사용할 수있다하는 MessageSource를 Bean을 구성했습니다

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()에서로드하도록 변경 한 후 작업을 시작했습니다. 이제는 clean : package : deploy가 비효율적이게되었고, 배포 된 애플리케이션에서 명백한 키 - 값 변경이 절대로 변경되지 않았기 때문에 새로운 "core_messages"ResourceBundle 객체를 실제로로드하는 것을 중단했다는 합리적인 정보가 있습니다.

코어 모듈 패키지를 배포 보스 워즈 포장하는 프론트 엔드 모듈에 의존하는 JAR 같이

전개의 구조는 다음과 같이 구축을 받는다는 것이다.

위의 방법에서 ResourceBundle과 같은 항목을로드하는 서비스가있는 코드는 핵심 모듈에 있습니다. 마지막 WAR는 WEB-INF/classes/.. classpath에서 파일을 분석하려고하는 FrontEnd 모듈 중 하나입니다.

적절한 클래스 경로에서로드하려면 어떤 클래스 로더에 액세스해야합니까?

답변

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 
} 
관련 문제