각각의 애플리케이션 모듈은 OSGi 번들로 패키징해야 한다. 번들은 META-INF/MANIFEST.MF 파일을 가지고 있는 jar 파일이다. OSGi 서비스 플랫폼 핵심 스팩 3.2에서 그 자세한 내용을 살펴볼 수 있다. 몇몇 OSGi 구현체들은 풀어헤쳐진 jar 파일을 지원하지만 형식은 동일하다.

스프링 Extender는 번들은 "스프링이 가미된"Spring-Powered 번들을 인식하고 해당 번들에 연관된 애플리케이션 컨텍스트를 번들이 시작할 때 다음의 조건 중에 하나라도 만족하면 만들어 준다.

  • META-INF/spring 폴더에 하나 이상의 .xml 파일을 가지고 있을 경우.
  • META-INF/MENIFEST.MF 파일에 Spring-Context라는 헤더가 있을 경우.

보태자면, 만약 부가적으로 SpringExtender-Version 헤더를 manifest 파일에 추가하면, extender는 명시된 버전 조건을 충족시키는 번들만 인식할 것이다. 버전은 Bundle-Version에 명시되어 있다. SpringExtender-Version의 값은 OSGi 스펙을 따라야 한다.

Spring-Context 헤더가 빠져있는 경우 extender는 META-INF/spring 폴더 안에 있는 모든 파일을 유효한 스프링 설정 파일로 인식한다.

Application Context는 이런 파일들의 집합으로 구성된다. 권장하는 방법은 Applicaion Context 설정을 최소한 두 개의 파일로 나누는 것이다. 하나는 모듈이름-contet.xml 이고 다른 하나는 모듈이름-osgi-context.xml 로 말이다.

  • 모듈이름-context.xml - OSGi와 상관없는 일반적인 빈 설정들을 담는다. 최상위 엘리먼트를 bean으로 사용.
  • 모듈이름-osgi-context.xml - OSGi 서비스로 import/export 하는 빈들을 설정한다. 최상위 엘리먼트를 Spring OSGi 네임스페이스로 사용한다.

menifest 파일의 Spring-Context 헤더는 설정 파일 집합을 기술하기 위해 사용한다. 자원 경로는 상대 경로로 인식하고 여기에 하나라도 설정을 하면 META-INF/spring 폴더에 있는 파일들은 무시한다. 다음과 설정할 수 있다.

Spring-Context: config/account-data-context.xml, config/account-security-context.xml

가용한 설정 옵션

  • create-asynchronosly(false|true): 애플리케이션 컨텍스트를 비동기적으로 생성(이게 기본값)할지 동기적으로 생성할지 설정.
Spring-Context: config/account-data-context.xml;create-asynchrously:=false

  • wait-for-dependencies (true|false):  필수 서비스 의존성을 만족 할 때 까지 대기할지(이게 기본값) 말지 설정.
Spring-Context: config/osgi-*.xml;wait-for-dependencies:=false

  • timeout (300): 대기 시간 설정 기본값은 5분. 300초. 초 단위로 설정. wait-for-dependencies가 false면 이 값은 무시함.
Spring-Context: *;timeout:=60

  • publish-context (true|false): application context 객체 자체를 서비스 레지스트리에 등록할지(이게 기본값) 말지 설정.
Spring-Context: *;publish-context:=false