스프링 DM 기본 설명

스프링 애플리케이션에서 추가 코드 없이 OSGi를 사용할 수 있다.
=> 스프링 철학과 일맥상통한다. non-invasive

스프링 DM
- 오라클(/BEA)와 함꼐 협업하고 있다.
=> 스프링 DM이 OSGi 스펙을 주도 하고 있다.

Raw OSGi
=> 다이나믹스를 다루기 위한 반복적인 코드가 필요하다.
=> OSGi 번들은 일반 JAR 파일로 무엇을 사용하고공개할지 정의한 파일을 가지고 있다.
=> 손수 해야 할 일이 많다.

OSGi에서 스프링 사용하기
=> OSGi 서비스를 룩업하지 말고 DI하기

POJO developement in OSGi

기능 살펴보기

번들 == ApplicationContext
=> 하나의 번들은 하나의 application context를 가지고 있다. 직접 만들 필요는 없다. 모듈을 정의하고 설정을 만들고 배포하면 되지.. 스프링을 이용하려고 뭔가를 하지 않아도 된다.

OSGi-aware Contexxt
=> OSGi 환경에 대해 알고 싶다면(예를 들어, BundleContextAware)같은 인터페이스를 사용할 수 있다.
=> bundle 스코프 제공
=> 여러 모듈에 걸친 application context 설정파일 사용가능

애플리케이션 == 모듈 집합

OSGi 서비스 == 스프링 빈

=> 서비스 레지스트리는 loose coupling을 실현해준다.

서비스 공개하기(export)
=> 보통 인터페이스를 기준으로 공개한다.
=>  auto-export 속성

서비스 참조하기(import)
=> 서비스 다이나믹스를 내부에서 다뤄준다.

데모
1. STS에서 dm 서버 실행한다.
2. localhost 2401로 telnet한다.
3. osgi> 콘솔 확인 help로 기본 명령어 확인
4. ss로 설치된 번들 확인
5. bundle 번들id로 번들 정보 확인

1. 간단한 서비스 공개(하나는 all-classses, 하는 interface)
2. 번들을 dm 서버에 설치하고 공개된 서비스 확인

1.  shape 번들 만들고 서비스 세 개 공개
2. MF 파일 고칠 거 없다.
3. dm 서버에 배포하고 공개된 서비스 확인

1. painter manager 번들 만들고 painter와 packageAdmin 서비스 레퍼런스 가져온다.
2. osgi:list로 여러 서비스를 참조할 수 있다.
3. BundleLogger에  packageAdmin 주입.

서비스 다이나믹(dynamics)
=> dynamic은 서비스가 언제든지 새로 추가되거나 없어질 수 있다는 거다.
Dependency resilience

만약
- 대응하는 서비스가 없다면
- 대응하는 서브시가 여러 개라면
- 대응하는 서비스가 사용 도중 없어지면
- 더 잘 매칭하는 새로운 서비스가 배포 되면

import cardinality
- 1..X: 애플리케이션 시작할 때 필요하다
=> X .. 1 일 때 서비스가 사라지면 다른 서비스 참조한다.
=> X .. N 일 때 서비스가 사라지면 컬렉션에서 빼준다.

데모

1. 쓰레드로 2초마다 그림그리는 메소드 실행하는 번들 만듬
2. painterManager 번들 stop
3. 다시 start
4. 로깅을 stop(등록한 서비스를 제거한다.)
=> 없어지면 대체제를 찾고 대체제가 없으면 기다린다.
5. 로깅 다시 start

리스닝
=> 메소드 매개 변수에서 서비스를 필터링할 수 있다.

통합 테스트 데모
1. AbsractConfigurableBundleCreatorTests 상속 받기
2. bundleContext.getBundles() 사용하기
3. getPlatformName으로 테스트할 플랫폼 선택가능. Platform.EQUINOX

1.2.0은 Compendium Services Integration
- Configuration Admin 속성을 참조하라.
- osgix 네임스페이스 공부할 것...

OSGi 4.2 계획
- Spring DM은 OSGi 4.2를 기준으로 한다.
RFC 124의 RI가 된다.
- 2009년 5/6월을 배포를 목표로..
=> 스프링 네임스페이스랑 OSGi 네임스페이스가 거의 비슷한 형태로..

로드맵
- 1.2.0은 2009년 1/2월
- 2.0(Spring, 3.0, JDK 5.0, RFC 124 RI) 2009년 5/6월