5. Spring DM을 사용하여 서비스 사용하기.
1. StoreManager 번들 정리하기.
- Activator를 없애버립니다.
- ServiceTracker도 없애버립니다.
둘다 일단 MENIFEST.MF의 Dependencies에서 제거하고 소스코드도 제거합니다.
이 번들이 필요한 건 오직 Store 번들의 Service 패키지에 있는 Greeting이라는 인터페이스 뿐입니다.
StoreManager의 MENIFEST.MF 파일이 다음과 같으면 깨끗하게 정리가 된 것입니다.
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: StoreManager Plug-in
Bundle-SymbolicName: StoreManager
Bundle-Version: 1.0.0
Import-Package: service
Eclipse-LazyStart: true
2. 구현하기
Keesun이라는 클래스를 하나 만들고 다음과 같이 구현했습니다.
public class Keesun {
private Greeting greeting;
public void setGreeting(Greeting greeting) {
this.greeting = greeting;
}
public void start(){
System.out.println(greeting.hi("기선"));
}
}
Setter Injection을 사용하기로 했고, start() 메소드는 제대로 세팅됐나 확인하기 위해 만들어 뒀습니다.
3. Bean 설정하기
META-INF 폴더에 spring 폴더를 만들고 스프링 설정 파일 하나를 만듭니다.
<?xml version="1.0" encoding="UTF-8"?>
<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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">
<bean class="storemanager.Keesun" init-method="start">
<property name="greeting" ref="greeting" />
</bean>
<osgi:reference id="greeting" interface="service.Greeting" />
</beans>
Keesun 클래스에 start라는 init-method를 등록해두고, <osgi:reference /> 엘리먼트로 서비스를 참조합니다. 그러면 이 내부에서는 마치 자기가 원래 가지고 있던 bean 처럼 사용할 수 있습니다.
4. 테스트
Run Dialog에서 Spring OSGi만 체크하고 Run 시킵니다. 나머지는 install을 사용해서 설치합니다.
osgi> install file:c:/plugins/Store_1.0.0.jar
Bundle id is 22
osgi> install file:c:/plugins/StoreManager_1.0.0.jar
Bundle id is 23
osgi> ss
Framework is launched.
id State Bundle
0 ACTIVE system.bundle_3.2.2.R32x_v20070118
1 ACTIVE org.springframework.osgi.log4j.osgi_1.2.15.SNAPSHOT
2 ACTIVE org.springframework.bundle.spring.context.support_2.5.1
3 ACTIVE org.springframework.bundle.osgi.core_1.0.0
4 ACTIVE org.springframework.osgi.aopalliance.osgi_1.0.0.SNAPSHOT
5 ACTIVE org.springframework.bundle.osgi.extender_1.0.0
6 ACTIVE org.springframework.bundle.spring.context_2.5.1
7 ACTIVE org.springframework.osgi.cglib-nodep.osgi_2.1.3.SNAPSHOT
8 ACTIVE org.springframework.bundle.osgi.extensions.annotations_1.0.0
9 ACTIVE org.springframework.osgi.junit.osgi_3.8.2.SNAPSHOT
10 INSTALLED org.springframework.bundle.osgi.test_1.0.0
11 ACTIVE org.springframework.bundle.osgi.io_1.0.0
12 ACTIVE org.springframework.osgi.asm.osgi_2.2.3.SNAPSHOT
13 ACTIVE jcl104.over.slf4j_1.4.3
14 ACTIVE org.springframework.spring.source_2.5.1
15 ACTIVE org.springframework.bundle.spring.core_2.5.1
16 ACTIVE org.springframework.osgi.source_1.0.0
17 ACTIVE slf4j.log4j12_1.4.3
18 ACTIVE org.springframework.osgi.backport-util-concurrent.osgi_3.1.0.SNAPSHOT
19 ACTIVE org.springframework.bundle.spring.beans_2.5.1
20 ACTIVE slf4j.api_1.4.3
21 ACTIVE org.springframework.bundle.spring.aop_2.5.1
22 INSTALLED Store_1.0.0
23 INSTALLED StoreManager_1.0.0
osgi> start 22
osgi> GreetingImpl Bean을 만들었습니다.
start 23
osgi> hi 기선
끝~ 이 아니고 이제부터 시작입니다.
설특집은 끝입니다.