위키북스의 OSGi & Spring DM을 읽으면서 Spring DM쪽의 내용을 요약해 본다
▶ 동영상 자료
- IBM DeveloperWorks : 안영회/이일민 개념 및 개발하기 (맨 하단의 Next 클릭해서 봄)
▶ 간단 요약 (Ch. 11)
- 서비스 레지스트리를 사용하는 OSGi의 서비스 룩업 메커니즘을 스프링에서 제공하는 의존성 주입 형태로 사용할 수 있게 해준다. (그림 참조)
- SpringDM은 OSGi상에서 Extender 개념을 이용하여 POJO(Plain Old Java Object) 형태의 일반 스프링 빈을 OSGi번들로 동적으로 바꾸는 작업을 지원한다 (Extender : 동적으로 설치되는 번들/서비스의 설치/삭제 시 이벤트를 받아서 특정 동작을 수행함)
+ SpringDM OSGi Extender : META-INF/spring/*.xml 파일을 읽어서 스피링 빈으로 초기화 한다
+ SpringDM Web Extender : war 확장자 배포하거나 WEB-INF 폴더를 가지고 있으면 웹컨테이너에 등록시킴
- POJO A가 BundleActivator -> BundleContext로 Service Registry에 Service A등록이 되고 ServiceTracker -> BundleActivator를 통해 Service A를 찾아 POJO B가 사용한다 (참조)
- OSGi 번들은 BundleActivator, ServiceTracker Interface에 의존하나 SpringDM은 spring.xml 과 POJO 만을 필요로 한다
+ POJO기반으로 번들을 만들어 테스트가 용이하다
+ 번들, 라이프사이클, 버젼닝, 동적 추가/수정/삭제 등의 기능을 엔터프라이즈급 애플리케이션을 개발할 때 사용할 수 있게 됨
- SpringDM 개발 = Eclipse STS(Spring Tool Suite) + Maven Plugin(v 3.0.4) 설치
- Eclipse에 Target Platform을 설정한다 (T.P = 번들을 개발하고 실행하는 환경을 의미함. 사용자 Target Platform 만들기 참조)
- OSGi로 관련 Bundle을 별도의 Plug-In Project로 만들다 보면 Working set으로 묶어서 관리하고 싶어진다. 이를 위한 설정은 WhiteShip 브로깅을 참조한다
- SpringDM은 Spring Application Context : Bundle = 1:1 관계이다
1. Plug-in Project를 생성한다 (이클립스 플러그인 프로젝트는 기본적으로 이클립스 Equinox OSGi를 이용한다)
2. 적절한 이름을 입력하고 하단 Options에서 Activator를 상속받지 않은 POJO로 개발을 할 것이다
3. 생성하면 자동으로 MANIFEST.MF 파일이 생성된다
4. META-INF/spring.xml 파일을 생성한다
5. spring.xml 스프링 프레임워크 빈등록 환경설정 이전에 프로젝트를 선택하고 Spring Tools에서 "Add Spring Project Nature"를 선택한다
6. 프로젝트 폴더 우측 상단에 S 자가 표현된다
7. spring 폴더에 "Spring Bean Configuration File"을 생성한다
8. 명칭은 spring.xml 로 생성한다
9. spring.xml에 osgi 관련 xsd 내역이 없으니 코딩하고, 인식하고자 하는 bean을 등록한다
10. Run Configuration... 에서 해당 프로젝트의 실행 환경을 새로 생성한다
11. Bundle로 HelloSpringDM을 선택한다 (Target Platform을 적절히 선택해 주어야 한다. 여기선 오류가 있다. Spring이 선택되어야 한다)
12. Active한 bundle을 확인하고 HelloSpringDM의 RESOLVED 상태를 start 시켜주어 Active 상태로 만든다
'Middleware, Cloud > OSGi' 카테고리의 다른 글
[OSGi] Bundle 정의내리기 (0) | 2012.11.22 |
---|---|
[OSGi] 사용 개념 정리해 보기 (0) | 2012.11.15 |
[Eclipse Virgo] 사용하기 (0) | 2012.11.03 |
[OSGi] 서비스 Layer 만들기 (0) | 2012.10.30 |
[OSGi] BundleContext에 의한 LifeCycle 관리 (0) | 2012.10.30 |