[ OSGi ] 6 - Spring DM 3
[ 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