2008-08-19 5 views
40

모듈/서비스/비트 응용 프로그램 기능이 OSGi 모듈에 특히 적합한 후보는 무엇입니까?OSGI를 시작하는 가장 좋은 방법은 무엇입니까?

내 응용 프로그램에 OSGi을 사용하고 싶습니다. 우리는 Java 샵이고 꽤 많이 Spring을 사용하므로 Spring Dynamic Modules for OSGi(tm) Service Platforms을 사용합니다. 나는 약간의 OSGi를 시험판으로 응용할 수있는 좋은 방법을 찾고있다. 여기 또는 비슷한 OSGi 기술을 사용하는 사람이 있습니까? 함정이 있습니까?

@Nicolas - 감사합니다. 그것은 좋은 튜토리얼이지만 Hello World 예제와는 달리 첫 번째 "실제"OSGi 번들을 만드는 방법에 대한 아이디어가 더 필요합니다.

@ david - 링크 해줘서 고마워! 이상적으로, greenfield 앱으로 모든 것을 동적으로 디자인 할 수 있습니다. 내가 지금 찾고있는 것은 기존 응용 프로그램의 작은 조각에 그것을 소개하는 것입니다. 내가 응용 프로그램의 일부를 선택할 수 있다고 가정하면 OSGi 기니피그로 그 조각을 더 좋게 만들거나 더 나빠지게하는 몇 가지 요인을 고려해야할까요?

답변

37

글쎄, 한 부분의 OSGi와 한 부분의 비 OSGi를 가질 수 없으므로 전체 응용 프로그램 OSGi를 만들어야합니다. 가장 간단한 형태로 전체 응용 프로그램에서 단일 OSGi 번들을 만듭니다. 분명히 이것은 최선의 방법은 아니지만 OSGi 컨테이너 (Equinox, Felix, Knoplerfish 등)에 번들을 배치하는 느낌을 얻는 것이 유용 할 수 있습니다.

당신은 앱을 구성 요소로 분리하기를 원할 것입니다. 구성 요소는 일반적으로 일련의 인터페이스와 클래스 종속성을 통해 응용 프로그램의 나머지 부분과 격리 될 수있는 일련의 책임을 가지고 있어야합니다. 손으로 이들을 식별하는 것은 잘 설계된 고도로 응집되어 있지만 느슨하게 결합 된 응용 프로그램에 익숙하지 않은 연동 소스 코드의 악몽에 이르기까지 다소 다양합니다.

어떤 도움은 JDepend과 같은 도구에서 나옵니다.이 도구는 시스템의 다른 패키지/클래스와 Java 패키지의 결합을 보여줍니다. 낮은 원심력 커플 링을 가진 패키지는 높은 원심력 커플 링을 가진 패키지보다 OSGi 번들로 추출하기 쉬워야합니다. Structure 101과 같은 프로 도구를 사용하여 더 많은 아키텍처 통찰력을 얻을 수 있습니다.

순수하게 기술적 인 수준에서 160 개의 OSGi 번들로 구성되어 있고 스프링 DM을 사용하는 애플리케이션으로 매일 작업하면서 "정상적인"스프링에서 스프링 DM으로의 전환이 크게 고통스럽지 않은지 확인할 수 있습니다. 여분의 네임 스페이스와 OSGi 고유의 스프링 구성을 별도의 파일로 분리 할 수 ​​있다는 사실은 OSGi 배포 시나리오의 유무에 상관없이 쉽게 할 수 있습니다.

은 OSGi는 깊고 넓은 컴포넌트 모델이며, 문서 내가 추천 :

  • OSGi R4 Specification을 : 코어 및 제요 사양의 PDF 파일, 그들은, 정식 권위와 매우 읽을 가져옵니다. 언제든지 편리하게 지름길을 가지고 상담하십시오.은 OSGi 모범 사례 읽기 최대
  • 는 사물의 대형 세트가 당신 할 수 있지만해야 사물의 다소 작은 설정하고 (DynamicImport을하지 않을 할 몇 가지가있다 : *에 대한 예).

일부 링크 :

1

나는 실제로 Apache Felix tutorials을 좋아합니다. 그러나 일반적으로 응용 프로그램에서 OSGi를 사용하는 것은 "과장이기 때문에이 프레임 워크를 사용합시다"라는 결정 중 하나는 아닙니다. 디자인에 관한 질문이지만, OSGi가 디자인 측면에서 당신에게 제공하는 모든 것은 바닐라 자바에서도 가능합니다.

런타임의 경우 기존 응용 프로그램을 추가하고 OSGi를 활성화 할 수 없습니다. 동적 인 디자인이어야합니다. DM DM은 당신을 쉽게 숨길 수있게 해줍니다. 그러나 여전히 거기에 있습니다. 당신은 그것을 알고 있어야합니다.

2

기존 애플리케이션이 개별 프로세스/레이어로 모 놀리 식 또는 계층 구조로되어 있습니까?

계층 형 인 경우 중간/응용 프로그램 계층을 OSGi 컨테이너에서 실행하도록 변환 할 수 있습니다.

우리 팀의 경험에 비추어 볼 때, OSGi의 고통스러운 웹 사이트 작업을 시도한 것으로 나타났습니다. 다른 고충은 Hibernate와 Jakarta Commons Logging이다.

OSGi 스펙이 꽤 읽기 쉽고 클래스 로딩 알고리즘을 보여주는 플로우 차트를 인쇄하는 것이 좋습니다. "NoClassDefFoundError가 발생하는 이유는 무엇입니까?"라는 순간을 보장해 드리겠습니다 : 순서도가 그 이유를 알려줍니다.

+1

어디서이 플로우 차트를 찾을 수 있습니까? – systemoutprintln

+0

@dubdubdubdot : 그는 [Bundle Life-Cycle] (http://en.wikipedia.org/wiki/OSGi#Life-cycle) 흐름도를 의미한다고 생각합니다. –

2

OSGi로 시작한다면 몇 가지 생각을 명심해야합니다.

이 스레드의 다른 부분에서 언급했듯이 클래스로드에 대해 아는 것은 정말로 중요합니다. 제 경험상 모든 사람들이 조만간 문제에 봉착하게됩니다.

기억해야 할 또 다른 중요한 점은 결코 참조하지 마십시오! OSGi의 서비스 개념이 구축 된 화이트 보드 패턴을 살펴보십시오 (다른 답변 중 하나의 링크 참조).

제 경험으로 보면 모노리딕 응용 프로그램을 OSGi 기반 응용 프로그램으로 변환해서는 안됩니다. 이것은 보통 심하게 다루기 힘든 혼란을 낳습니다. 새로 시작하십시오.

다운로드 무료로 사용할 수있는 독립형 OSGI 구현 중 하나. Knopflerfish가 다소 좋고 안정적이라는 것을 알았습니다 (저는 많은 프로젝트에서이 도구를 사용합니다). 또한 많은 소스 코드가 포함되어 있습니다. 당신은 여기에서 그것을 찾을 수있다 : http://www.knopflerfish.org

다른 좋은 자습서는 여기에서 찾아 낼 수있다. https://pro40.abac.com/deanhiller/cgi-bin/moin.cgi/OsgiTutorial

OSGi 얼라이언스의 Peter Kriens와 좋은 인터뷰 : http://www.infoq.com/interviews/osgi-peter-kriens. 그의 홈페이지와 블로그 (항상 좋은 읽을 거리가 있습니다 : http://www.aqute.biz

3

시도해보십시오.이 책은 OSGi 우수 사례가있는 예제를 가지고 있습니다.

8

새로운 기술을 배우면 풍부한 툴을 사용하여 큰 두통없이 작업 할 수 있습니다.

  • 인원 러너을 : ops4j.org에서 지역 사회 포함 "PAX"라는 풍부한 툴 세트를 제공하는이 시점에서 실행하고 쉽게
  • 팍스를 구축 펠릭스, 춘분, Knopflerfish와 컨시어지 사이를 전환 : , 구축을 쉽게 받는다는
  • 인원 드론와 & 빌드은 OSGi 프로젝트를 구성 : (PaxRunner 사용)
  • 독립적 인 프레임 워크를하면서있는 JUnit하여 OSGi 번들을 테스트

    • 팍스 로깅 (로깅),
    • 팍스 웹 (HTTP 서비스),
    • 인원 웹 Extender에 (:

    그 다음은 OSGi 제요 서비스의 많은 구현이 있습니다 전쟁 지원),

  • 팍스 코인 (구성),
  • 팍스 쉘 (셸 구현, 다음 osgi 버전의 일부)
  • 등입니다.

.. 저기에 도움이 프레임 워크 independend 사회는, -하지만 그게 전부 지금은 광고 ;-)

4

질문을 질문했다,하지만 난 그냥 발견 link후이 대답은 거의 삼년 제공 정말 좋은, 특히 maven을 사용하는 스타터들에게. 단계별 설명.

관련 문제