[Spring]ReloadableResourceBundleMessageSource 클래스를 이용하여 MessageSource 자동 로딩하기 :: 스프링(spring)/아이바티스(IBatis)/하이버네이트(Hibernate)[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

스프링(spring)/아이바티스(IBatis)/하이버네이트(Hibernate)
[1]
등록일:2008-06-11 16:42:59 (0%)
작성자:
제목:[Spring]ReloadableResourceBundleMessageSource 클래스를 이용하여 MessageSource 자동 로딩하기

ResourceBundleMessageSource 대신 ReloadableResourceBundleMessageSource가 필요한 이유

웹 애플리케이션을 개발하다보면 MessageSource가 변경될 경우 MessageSource를 반영하기 위하여 애플리케이션 서버를 재시작하는 경우가 많다. MessageSource가 변경될 때마다 서버를 재시작하는 것은 여간 짜증나는 일이 아닐 수 없다. 이 같은 문제점을 해결하기 위하여 Spring 프레임워크에서는 ReloadableResourceBundleMessageSource 클래스를 통하여 지원하고 있다.

그러나 이 같은 기능은 개발시에는 유용하게 사용할 수 있지만 실제로 애플리케이션을 운영하고 있는 시스템에서 이와 같은 방식으로 운영할 경우 문제가 발생할 소지가 있기 때문에 가능하면 사용하지 않는 것이 좋은 방법이다.

ReloadableResourceBundleMessageSource 사용하기 위하여 설정하는 방법

ReloadableResourceBundleMessageSource 클래스를 사용할 때 ResourceBundleMessageSource와 다른 점은 사용할 MessageSource파일(보통 Properties파일)을 클래스패스에 두지 말아야한다는 것이다. 애플리케이션 서버는 클래스패스에 있는 모든 리소스를 캐싱하기 때문에 파일을 변경하더라도 반영되지 않는다. 따라서 ReloadableResourceBundleMessageSource 클래스를 사용하기 위해서는 WEB-INF/classes 디렉토리 이외의 다른 디렉토리에 MessageSource 파일을 관리해야한다. 예를 들어 WEB-INF/messages 디렉토리와 같은 곳에서 관리해야한다.

이 문서는 Spring 프레임워크 워크북의 7장 예제를 ReloadableResourceBundleMessageSource을 사용하도록 변경하도록 하겠다.

먼저 applicationContext.xml 파일에서 다음과 같이 설정되어 있는 부분을 ReloadableResourceBundleMessageSource 클래스를 사용하도록 수정한다.

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>DBQuery</value>
            <value>Messages</value>
        </list>
    </property>
</bean>

위와 같이 ResourceBundleMessageSource 클래스를 사용하고 있는 부분을 다음과 같이 수정한다. 이 문서에서는 MessageSource파일을 관리하고 있는 디렉토리를 WEB-INF/messages라고 가정하고 설정하였다.

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>/WEB-INF/messages/DBQuery</value>
            <value>/WEB-INF/messages/Messages</value>
        </list>
    </property>
    <property name="cacheSeconds" value="5"/>
</bean>

ReloadableResourceBundleMessageSource 클래스를 사용할 때 추가할 부분은 파일이 변경되었는지를 모니터링하기위한 시간을 설정하는 것이다. 위와 같이 변경한 다음 MessageSource파일을 변경후 서버 재시작 없이 반영되는지를 확인해보기 바란다.

위와 같이 Spring 프레임워크 워크북의 예제를 테스트한 결과 org.springframework.context.support.MessageSourceAccessor 클래스를 이용하여 메세지를 추출하는 경우에는 제대로 반영이 되지 않고, JSP의 버튼 이름, 메시지 등에 대해서는 정상적으로 반영된다는 것을 확인할 수 있었다.

MessageSourceAccessor 클래스를 이용할 경우 리로딩한 MessageSource의 내용이 반영되지 않는 이유에 대해서는 좀 더 분석할 필요성이 있다.

출처 : Tong - 레이쥬님의 Java통

[본문링크] [Spring]ReloadableResourceBundleMessageSource 클래스를 이용하여 MessageSource 자동 로딩하기
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=30339
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.