ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ OSGi ] 6 - Spring DM 3
    JAVA 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

    '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
Designed by Tistory.