http://rifers.org 에서 발췌한 내용을 번역 하였습니다.
번역: 이원찬(wonchan.lee@gmail.com)
-------------------------------------------------------
Adding configuration to the friends application
- Some explanation on RIFE participants
이 장에서는 friends어플리케이션에 설정(configuration)정보를 추가하는 방법을 설명한다. 앞에서 우리는 출력페이지의 타이틀을 설정가능토록 하기로 했다. 이런 기능은 하나의 어플리케이션을 여러명이 사용할 경우 My friends" 와 같은 제목 봐 "Friends of Mikael"과 같이 출력하고자 할때 유용하다.
설정(Configuration)은 ParticipantConfig참여자(paticipant)로 제어할 수 있다. 앞서 ParticipantSite를 살펴보고 간단히 참여자에 관해 설명하였다. 그러므로, 조금더 참여자들에 대한 설명을 하도록 하겠다.
참여자의 다양한 타입
참여자(participant)는 특정 작업을 처리하는 어플리케이션의 일부분이다. 간단한 어플리케이션은 ParticipantSite를 제외하고 다른 어떤 참여자도 사용하지 않을 수 있다. 하지만, 복잡도가 높아질수록 참여자(participant)는 필요하게 된다. 간혹, RIFE가 제공하는것 이외에 사용자정의 참여자(custom participant)를 개발할 필요가 있을수도 있다.
RIFE에는 다양한 내장된 참여자(built-in participant)가 다양한 작업을 처리한다. 이 장에서는 그중에서 설정처리를 위한 참여자에 대해 자세히 알아보겠다. 다음장에서는 데이터베이스 참여자를 사용할 것이다. 모든 참여자에 대한 자세한 내용은 com.ueyn.rife.rep.participants 패키지의 API문서를 보도록 하라.
참여자의 실행
참여자는 저장소(repository)파일에 정의되어 시작된다. 각 참여자는 고유의 쓰레드로 실행되고 따라서, 이들은 모두 동시에 실행된다. 만약 동시에 실행되지 않도록 하고 싶다면 paticipant태그에 blocking="true"속성을 추가하면 된다. 예를들어, 설정 참여자(config paticipant)가 우선 시작되길 원한다면 ParticipantConfig정의를 다음과 같이 하면 된다:
------------------------------------------------------------------
<participant param="rep/config.xml" blocking="true">ParticipantConfig</participant>
------------------------------------------------------------------
RIFE참여자들은 경우에 따라 상호 종속성을 가진다. 특정 참여자가 다른 참여자가 제공하는 정보에 의존하는 경우가 있으며, 이경우 RIFE는 의존하는 참여자가 완전히 로딩될때 까지 기다리기 위해 쓰레드를 멈출수(block) 있다. 하지만, 이런경우는 매우 드물다.
- Configuration in the friends application
이제 참여자에 대해 좀 더 알게 되었으므로 편하게 저장소(repository)에 설정참여자를 추가해 보자
------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rep SYSTEM "/dtd/rep.dtd">
<rep>
<participant param="rep/config.xml">ParticipantConfig</participant>
<participant param="sites/friends.xml">ParticipantSite</participant>
</rep>
------------------------------------------------------------------
설정 참여자는 설정데이터를 포함하는 파일을 파라미터로 받는다. 위의 경우 rep/config.xml이 된다. 설정파일의 내용은 다음과 같다:
------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config SYSTEM "/dtd/config.dtd">
<config>
<param name="DISPLAY_TITLE">Friends of Mikael</param>
</config>
------------------------------------------------------------------
DISPLAY_TITLE 파라미터는 요소구현에서 이용가능하다. 이제는 단지 display.html 템플릿의 제목부분에 값(value)태그만 추가하면 된다.
------------------------------------------------------------------
<html>
<head><title><!--V 'title'-->My Friends<!--/V--></title></head>
<body>
<h3><!--V 'CONFIG:DISPLAY_TITLE'-->My Friends<!--/V--></h3>
<!-- Rest of the template -->
</body>
</html>
------------------------------------------------------------------
템플릿 챕터에서 시작태그와 종료태그 사이의 문자열인 "My friends"은 아무런 값을 제공하지 않았을때 보여지는 기본값이라 명시했었다. 이 템플릿은 두가지 방법으로 제목을 설정한다. 첫번째 방법은 템플릿의 값(value)태그로 설정값을 직접 읽어온다:
------------------------------------------------------------------
<!--V 'CONFIG:DISPLAY_TITLE'-->
------------------------------------------------------------------
다른 방법으로는 자바 구현부의 setValue에 의해 템플릿에 값을 설정하는 것이다.
------------------------------------------------------------------
Config config = Config.getRepInstance();
if (config.hasParameter("DISPLAY_TITLE"))
{
template.setValue("title", config.getString("DISPLAY_TITLE"));
}
------------------------------------------------------------------
설정파일에 값이 설정되었다면 이것을 제목으로 사용할 것이며 그렇지 않다면 "My Firends"가 출력될 것이다.
- More on configuration
설정파일의 파라미터에 접근하기
Friends예제에서 우리는 모든 페이지(Display, Add, Remove, ...)의 타이틀을 설정하려 한다. 예를들면 추가(Add) 페이지에서는 "Add a Friend of Mikael"과 같이 할수도 있다. 모든 페이지의 타이틀에 사용자명은 반드시 포함될 것이다. 사용자가 변경될때마다 이것을 모두 변경하는 것은 금방 지루한 일이 될것이다. RIFE는 이 문제에 대한 해결책을 갖고 있다: 바로, 설정파일에서 스스로 접근하여 파라미터를 가져오는 것이다.
------------------------------------------------------------------
설정파일로 부터 값을 사용하기
------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config SYSTEM "/dtd/config.dtd">
<config>
<param name="USERNAME">Mikael</param>
<param name="DISPLAY_TITLE">Friends of <value name="USERNAME"/></param>
<param name="ADD_TITLE">Add a Friend of <value name="USERNAME"/></param>
</config>
------------------------------------------------------------------
USERNAME 파라미터는 Display페이지와 Add페이지 모두에 제목을 생성할 것이다. 만약 누군가 이름을 변경하고자 한다면 한곳만 변경하면 될것이다.
설정 선택자(selector)
어플리케이션 개발시, 종종 다른 설정정보를 옵션으로 제공할 필요가 있을 수 있다. 이것은 개발과정에서 다른 설정과정과 컴퓨터상에서 작동할 소프트웨어를 테스트하는데 유용하다.
RIFE의 설정시스템은 이를 위한 해결책을 제공한다. Config 참여자는 호스트명이나 운영체제 또는 사용자명에 따라 다른 설정파일을 선택할 수 있도록 한다.
------------------------------------------------------------------
<participant param="XmlSelectorHostname">ParticipantConfig</participant>
------------------------------------------------------------------
이 설정 참여자는 config-{host}.xml 이라는 파일을 찾게된다. 다른경우 XmlSelectorOs 선택자를 사용하면 운영체제에 따른 설정세트를 불러올수도 있다. 사용자명에 따를 경우에는 XmlSelectorUser가 사용된다.
설정선택자를 사용할 경우 다음과 같은 패턴의 파일들이 사용된다.
------------------------------------------------------------------
선택자를 사용할 경우의 파일명 규칙
------------------------------------------------------------------
Host name: rep/config-{host}.xml
Operation system: rep/config-{OS}.xml
User name: rep/config-{user}.xml
------------------------------------------------------------------
호스트, 운영체제, 사용자 문자열은 모두 소문자로 치환되며 점(.)이나 공백(space)은 밑준(_)문자로 대체된다.
설정파일 포함
설정선택자를 사용할때, 다른 설정의 경우 모든 파라미터가 필수사항은 아니다. 이런경우 일반적으로 공통된 설정은 별도의 파일로 분리하여 다른 설정파일들이 이를 공유하다록 한다. RIFE는 설정파일의 포함을 지원한다. 이것은 모든 선택자가 공통설정 파일을 포함할 수 있도록 한다.
------------------------------------------------------------------
<include file="rep/config-common.xml"/>
------------------------------------------------------------------
이제 공통옵션을 변경하려면 모든 선택자 파일을 변경하지 않고 하나만 변경하면 된다.
댓글 없음:
댓글 쓰기