Whiteship's Note

6.4. Service importer global defaults

Spring DM/Chapter 6 : 2008.06.11 22:29


osgi 네임스페이스는 모든 가져올 레퍼런스에 설정한 전역 설정을 선언할 수 있는 두 개의 속성을 제공한다.

따라서, osgi 네임스페이스를 사용할 때 내부에 있는 set, list, reference 엘리먼트는 다음 속성을 사용할 수 있다.
  • default-timeout: 타임아웃을 명시하지 않은 모든 importer에 기본 타임아웃을 설정할 수 있다.
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:osgi="http://www.springframework.org/schema/osgi"                            (1)
          osgi:default-timeout="5000">                                                   (2)

  <reference id="someService" interface="com.xyz.AService"/>                             (3)

  <reference id="someOtherService" interface="com.xyz.BService"
       timeout="1000"/>                                                                  (4)

</beans:beans>

(1) osgi 네임스페이스 프리픽스 선언
(2) default-timeout을 루트 엘리먼트에 선언. 만약 기본값이 설정되어 있지 않으면 5분이다. 여기서는 5초로 설정했다. 즉 밀리세컨이라는거..
(3) 이 reference는 기본값을 상속 받아서 타임아웃이 5초다.
(4) 이 reference는 기본값을 재정의해서 1초가 된다.

  • default-cardinality: 연관유형을 설정하지 않은 것들의 기본 연관유형을 설정할 수 있다. 가용한 값은 0..X와  1..X다. X는 런타입시에 reference일 경우에는 1로 list나 set일 경우에는 N으로 바뀐다.
<beans:beans
      xmlns="http://www.springframework.org/schema/osgi"                                 (1)
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:beans="http://www.springframework.org/schema/beans"                          (2)
      xmlns:osgi="http://www.springframework.org/schema/osgi"                            (3)
         osgi:default-cardinality="0..X"                                                 (4)
         default-lazy-init="false">                                                      (5)

  <reference id="someService" interface="com.xyz.AService"/>                             (6)

  <set id="someSetOfService" interface="com.xyz.BService"/>                              (7)

  <list id="anotherListOfServices" interface="com.xyz.CService" cardinality="1..N"/>     (8)

</beans:beans>

(1) 스프링 DM 스키마를 기본 네임스페이스로 선언
(2) 스프링 프레임워크 beans 스키마를 가져오고 해당 네임스페이스 프리픽스를 정한다.(위 예제에선 beans로 했음)
(3) 스프링 DM 스키마를 가져오고 osgi 네임스페이스 프리픽스를 설정한다.
(4) default-cardinality를 루트 엘리먼트에 설정한다. 만약에 기본값을 설정하지 않으면 1..X으로 설정한다. 위의 경우 기본 값을 0..X으로 했고. 이 때 osgi 프리픽스를 붙인것에 주목하라.
(5) beans 엘리먼트 속성(default-lazy-init)은 프리픽스를 사용하지 않았다. since they are declared as being local and unqualified (see the beans schema for more information).
(6) reference 선언은 연관유형을 설정하지 않았기 때문에 기본값을 상속받는다. 즉 0..1이 된다.
(7) set 선언도 연관유형을 설정하지 않았기 때문에 기본값을 상속받는다. 즉 0..N이 된다. 0..1이 아니다
(8) list 선언은 연관유형이 기본값을 재정의하여 설정한대로 1..N 이 된다.

default-* 들을 사용하면 선언을 보다 쉽게 할 수 있고 기본 행위 변경을 간단하게 할 수 있다.(타임아웃 시간 줄이기나 늘리기와 같은..)
top

Write a comment.