-
[ OSGi ] 6 - Spring DM 3JAVA 2014. 8. 28. 21:16728x90
[ OSGi ] 5 - Spring DM 2 에서 Spring DM을 이용해서 service 등록하는 내용을 봤다.
HelloWorldOSGiSub Project의 Activator(SubActivator.java)를 대신 하는 Spring annotation 과 DI를 적용 해보자.
Target Platform 추가
1. Spring에서 필요한 library project로 등록
lib로 프로젝트를 하나 만든다.
lib로 필요한 library를 넣는다. ( 여기의 lib 파일은 [ OSGi ] 4 - Spring DM 1 에서 설명한 lib이다. )
2. 그럼 이제 해당 lib 들을 target platform에 설정을 한다.
Window > Preferences 를 클릭하여 Plug-in Development > Target Platform을 선택한다.
아래의 화면에서 Edit...를 선택한다.
Add... 선택후 Directory를 선택한다.
이전에 만든 lib 경로를 지정하고 등록된 것을 확인한다.
Content Tab에 들어가서 Group by : 를 Location으로 선택하고
lib Project 밑의 파일들을 모두 선택한다.
그리고 Spring 3.2.9 를 사용 할것 이므로 "spring"으로 검색 후 4.0.2 부분의 선택을 해제한다.
Activator 제거 Spring Annotation 추가
SubSpringDMStarter.java, spring.xml을 추가한다.
1. MANIFEST.MF 에서 Bundle-Activator 부분을 지우고 밑에 빨강박스의 내용을 추가한다.
2. SubActivator를 대신할 kr.co.jabsiri.helloworldosgisub.SubSpringDMStarter.java 를 만든다.
여기서 BundleContext 를 @Autowired를 통해 주입 받는 것에 주목하자.
(Activator에서는 start method의 parameter로 받았었다. )
2. META-INF/spring/spring.xml을 만든다.
배포 & 실행
* 참고로 이전에 배포한 내용을 지워서 다시 plugin들을 install 할 것 이다.
1. HelloWorldOSGiSub을 배포한다.
2. HelloWorldOSGiSub을 update 한 후 start 를 해보자
osgi> ss
"Framework is launched."
id State Bundle
0 ACTIVE org.eclipse.osgi_3.10.0.v20140606-1445
1 ACTIVE org.eclipse.equinox.common_3.6.200.v20130402-1505
2 ACTIVE org.eclipse.equinox.console_1.1.0.v20140131-1639
3 ACTIVE org.apache.felix.gogo.shell_0.10.0.v201212101605
4 ACTIVE org.apache.felix.gogo.command_0.10.0.v201209301215
5 ACTIVE org.apache.felix.gogo.runtime_0.10.0.v201209301036
6 ACTIVE com.springsource.org.aopalliance_1.0.0
7 ACTIVE org.apache.commons.logging_1.1.3
8 ACTIVE log4j_1.2.17
9 ACTIVE org.apache.servicemix.bundles.spring-aop_3.2.9.RELEASE_1
10 ACTIVE org.apache.servicemix.bundles.spring-beans_3.2.9.RELEASE_1
11 ACTIVE org.apache.servicemix.bundles.spring-context_3.2.9.RELEASE_1
12 ACTIVE org.apache.servicemix.bundles.spring-context-support_3.2.9.RELEASE_1
13 ACTIVE org.apache.servicemix.bundles.spring-core_3.2.9.RELEASE_1
14 ACTIVE org.apache.servicemix.bundles.spring-expression_3.2.9.RELEASE_1
15 ACTIVE slf4j.api_1.7.7
Fragments=16
16 RESOLVED slf4j.log4j12_1.7.7
Master=15
17 ACTIVE org.springframework.osgi.extensions.annotations_1.2.1
18 ACTIVE org.springframework.osgi.core_1.2.1
19 ACTIVE org.springframework.osgi.extender_1.2.1
20 ACTIVE org.springframework.osgi.io_1.2.1
21 ACTIVE sample.HelloWorldOSGi_1.0.0
22 ACTIVE HelloWorldOSGiSpringDM_1.0.0
23 RESOLVED sample.HelloWorldOSGiSub_1.0.0
osgi> update 23
osgi> start 23
osgi> print string : I am sub spring dm !!!
spring dm service print string : I am sub spring dm !!!
보는 바와 같이 Activator에서 출력하는 내용 대신에 "spring dm service print string : I am sub spring dm !!!"이 출력된 것을 볼수 있다.
이것으로 Activator를 상속 받을 필요도 없고 Spring의 DI를 사용하여 BundleContext를 얻어 사용할수 있게 되었다.
첨부 1 : HelloWorldOSGi plugin Eclipse Project
첨부 2 : OSGi Framework
728x90'JAVA' 카테고리의 다른 글
[Mybaits-TIP] XML에서 static method 호출 하기와 (1) 2016.04.01 [ OSGi ] 7 - OSGi Eclipse 실행 (0) 2014.08.29 [ OSGi ] 5 - Spring DM 2 (0) 2014.08.26 [ OSGi ] 4 - Spring DM 1 (0) 2014.08.25 [ OSGi ] 3 - OSGi plugin 의존 관계 (0) 2014.08.20