본 내용은 실전 OSGi&SpringDM(위키북스) 책의 일부 내용입니다
1. SpringDM을 사용한 OSGi Service 구현
Service를 좀더 편하게 사용하기 위해 SprigDM사용(SpringDM설치 방법 참조 Charter 11-p265)
1-1. SpringDM xml서비스 등록
구현체 googleBean 즉, 클래스 chapter12.google.Google를 인터페이스, 서비스 속성와 같이 서비스 등록
<beans ... >
//구현체
<bean id="googleBean" class="chapter12.google.Google" />
//서비스 등록
<osgi:service id="googleService" ranking="5" ref="googleBean">
//인터페이스
<osgi:interfaces>
<value>chapter04.searchengine.SearchEngine</value>
</osgi:interfaces>
//서비스 속성
<osgi:service-properties>
<entry key="service.vendor" value="Google" />
<entry key="searchable" value="Text,Image,Code" />
</osgi:service-properties>
</osgi:service>
</beans>
1-2. 서비스 실행
3-2-1. 서비스 실행 객체 얻기
//xml파일에서 주입받아 사용
private SearchEngine searhEngine;
public void setSearchEngine(SearchEngine searchEngine) {
this.searcheEngine = searchEngien;
}
1-2-2. 서비스 주입을 위한 xml파일
<beans ...>
//인터페이스를 통해 reference가져 옴
<osgi:reference id="searchEngineSvc" interface="chapter04.searchengine.SearchEngine" />
//<osgi:reference id="searchEngineSvc" interface="chapter04.searchengine.SearchEngine" cardinality="0..1" timeout="5000"/>
//위의 reference를 통해 서비스 검색(서비스 없으면 5분 동안 해당 서비스 대기)
<bean id="searchClient" class="chapter12.client.SearchClient" init-method="start">
<property name="searchEngine" ref="searchEngineSvc" />
</bean>
</beans>
1-2-3. 복수 서비스 검색(더 많은 옵션은 chpater12-p321참조)
//xml파일에서 주입받아 사용
private List searhEngines;
public void setSearchEngines(List searchEngines) {
this.searcheEngines = searchEngiens;
}
//xml 파일
<beans ...>
//인터페이스를 통해 reference가져 옴
<osgi:List id="searchEngineSvc" interface="chapter04.searchengine.SearchEngine" />
//위의 reference를 통해 서비스 검색(서비스 없으면 5분 동안 해당 서비스 대기)
<bean id="searchClient" class="chapter12.client.SearchClient" init-method="start">
<property name="searchEngine" ref="searchEngineSvc" />
</bean>
</beans>
3. OSGi Service를 구현한 jar파일
Maven을 사용한다면 dependency를 추가 하거나 아니며 OSGi Service를 구현 jar파일이 필요
<dependency>
<groupId>org.eclipse.osgi</groupId>
<artifactId>org.eclipse.osgi.services</artifactId>
<version>3.1.200.v20071203</version>
</dependency>