JAVA

[ OSGi ] 6 - Spring DM 3

알 수 없는 사용자 2014. 8. 28. 21:16
728x90

[ 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

HelloWorldOSGi_6.zip



첨부 2 : OSGi Framework

plugins_osgi_6.zip











728x90