2013-03-04 2 views
5

OSGi를 처음 보았을 때 나는 JAR을 빌드 할 수 있었고 manifest 파일이있는 한 OSGi 컨테이너에 배치 할 수 있다는 인상하에있었습니다. 필자는 고전적인 방법으로 모듈을 빌드하고 상상할 수있는 플러그인을 사용하여 매니페스트를 작성한 다음 OSGi를 통해 다른 모듈과 통신하는 독립 실행 형 응용 프로그램을 만들 수 있습니다.OSGi modules/bundles granularity

OSGi에 대한 추가 정보는 저급 수준에서 기본적으로 의존성 주입을 대체하고 로깅과 같은 교차 절단 관련 서비스를 제공하는 데 사용되는 예제가 많이 있습니다. 그리고 최대 절전 모드 나 다른 모드와 같은 것들을 사용하는 것은 문제입니다 ... (또는 아마도 나는 뭔가를 놓친 것입니다).

적어도 나에게는 OSGi와 같은 정교성과 통합 성의 장점을 실제로 볼 수 없다. 별도의 모듈이 있어야하는데, 각 모듈마다 고유 한 세트가있다. 기술 및 프레임 워크, 그리고 아마도 웹 자원 및 지속성 계층을 포함합니다. 이것이 OSGi로 달성 할 수 있습니까? 그렇다면 올바른 방향이나 예제 등을 가르쳐 주시겠습니까?

편집, 나는은 OSGi를 사용하려고 해요 방법에 대한 몇 가지 세부 사항을 더 추가 :

가 난 그냥 하나 이상의 클래스 모듈을 가질 수있는 가능성을 상상 해요

, 즉 더있을 수 있습니다 상위 - 책임감.

좋아요. 의제 모듈을 좋아합니다. 이 경우에는 이벤트의 지속성, 이벤트 추가, 필터로 이벤트 목록 표시 등을 원합니다. 이 아젠다에는 여러 가지 내부 클래스가있을 수 있으며 지속성 계층이 필요할 수도 있습니다. 그래서 저는 Guice와 같은 클래스를 DI로 사용하고 JPA는 데이터를 유지하려고합니다.

서버 또는 로깅과 같은 X- 커팅 문제는 번들을 포함 할 수 있지만 데이터 모델은 의제 번들에만 해당된다는 것을 알고 있습니다. 그래서 제 질문은 끝났다고 생각합니다. 무엇이 무엇이며, 번들 안에서 할 수없는 것은 무엇입니까? 그리고 일반적인 관행으로 내부에서 무엇을해서는 안되며해야하지 않습니까?

감사합니다. Mauricio

답변

2

OSGi를 응용 프로그램 코드의 OSGi에 종속시키지 않고 사용할 수 있습니다. 그러나 OSGi는 모듈성을 제공하므로 미들웨어 (계층)는 OSGi에 대한 지식이 필요합니다. 문제는 모듈화 된 세계에서 구현 세부 사항을 숨기고 싶다는 것입니다. 이것이 전체적인 목적입니다. 그러나 Spring과 Hibernate와 같은 것들은 classpath가 경계가 없다고 가정하는 경향이 있으며, 그들은 울타리로 향한다. 다행히도 점점 더 많은 미들웨어가 준비되고있다. 나는 Hibernate가 지금 노력하고 있으며 JPA도 OSGi에서 사용할 수 있다고 들었다.

+0

그래서 OSGi-ready 프레임 워크 (guice?)를 사용하면 내 번들 내에서 계속 사용할 수 있습니까? – Mauricio

+0

그래, 그럴 것이다. 그러나 스프링 (Guice)과 같은 매우 모듈화 된 코드 프레임 워크를 작성할 때 문제가 너무 작아 져서 과도한 비중을 느끼기 때문에 기본 코드가 느슨해지는 경향이있다. 좋은 번들은 응집력이 있으며 일반적으로 이러한 프레임 워크의 오버 헤드가 필요하지 않습니다. 그러나 OSGi 세계에서는이 가중치를 추가 할 수 없습니다. –

1

maven으로 빌드하는 경우 Maven-Bundle-Plugin을 사용하면 매니페스트를 직접 작성할 필요없이 OSGi 번들을 빌드하는 데 도움이됩니다. 필요한 모든 메타 정보는 POM에 있습니다.

모듈 계층의 상단에서 종속성 주입을 수행 할 수 있습니다. 가능한 한 솔루션은 선언적 서비스이며 XML 설명 또는 코드 주석을 통해 삽입 할 수 있습니다. 이것은 OSGi Services의 역동적 인 성격 (서비스 바인딩의 동적 결합 해제)을 강하게 반영합니다. 대안은 청사진이며 봄을 기반으로하며 매우 유사한 구문을 사용합니다. 한 가지 주요 특징은 서비스의 바인딩 및 바인딩 해제의 본질을 추상화 할 수 있다는 것입니다. Spring을 사용할 생각이라면 Blueprint를 사용하십시오.

OSGi는 모듈을 구조화하는 방법을 의미합니다. 따라서 모듈 상호 작용에 대한 잘 정의 된 그래프 (패키지를 가져 오거나 내 보낸 사람, 누가 서비스를 내보내고 누가 사용합니까?) 따라서 모든 작업에 대해 응집력있는 묶음을 만들어서 엔터프라이즈 아키텍처를 구축 할 수 있습니다.

1

OSGi는 JVM의 서비스 지향 아키텍처라고도합니다. 서비스를 제공하는 모듈 단위로 번들을 보면 올바른 세분성을 정의하는 데 도움이됩니다. 일반적으로 API를 정의하는 Java 패키지, 이러한 API의 구현을 제공하는 서비스 번들 및 제공하는 유틸리티/보조 번들을 제공하기위한 API 번들이 있습니다. 당신이 언급하는 교차 절단 서비스.

OSGi 위에 일부 종속성 주입 프레임 워크를 사용할 수 있지만 일을 단순하게 유지하는 내 경험 (Apache Sling 및 Adobe CQ5 사용)에서 더 나은 경우가 많습니다. OSGi Service Component Runtime and Configuration Admin은 특히 처음부터 시스템을 설계 할 때 서비스, 의존성 및 구성을 관리하는 데 필요한 모든 것을 제공합니다.

"OSGi trenches의 이야기"슬라이드 http://www.slideshare.net/bdelacretaz/tales-from-the-osgi-trenches-2012-short-form-edition에서 Adobe CQ5를 디자인 할 때 OSGi에 대한 우리의 경험에 대해 좀 더 자세히 알아보십시오. 복잡한 시스템을 구축하는 데 OSGi가 어떻게 사용되는지 더 잘 이해할 수 있습니다.

+0

고마워, 더 높은 수준의 책임이있는 하나 이상의 클래스 모듈을 가질 가능성을 상상하고 있습니다. 의제 모듈을 말하는 것과 같습니다. 이 경우 이벤트의 지속성, 이벤트 추가, 필터로 이벤트 목록 표시 등을 원합니다. 이 아젠다에는 여러 가지 내부 클래스가있을 수 있으며 지속성 계층이 필요할 수도 있습니다. 그래서 저는 Guice와 같은 클래스를 DI로 사용하고 JPA는 데이터를 유지하려고합니다. 서버와 같은 일부 X 커팅 문제는 번들을 가질 수 있지만 데이터 모델은 의제 번들에만 해당된다는 것을 알고 있습니다. – Mauricio

+0

번들에서 내 보내지 않은 인터페이스와 번들 자체 내부의 구현을 사용하여 번들로 내부 서비스를 가질 수도 있습니다. 이는 "로컬 서비스"가 내부적으로 의제 번들을 더 잘 모듈화하는 데 사용되며, OSGi의 서비스 런타임. –

2

은 OSGi는 많은 사람들에게 많은 것을, 당신은 거의 선택하고 사용할 그것의 어떤 부분을 선택할 수 있습니다

  1. 당신이 다른 종속성을 사용하지 않는 일반 라이브러리를 가지고 있습니까? 달콤한, 그냥 최소한의 MANIFEST.MF 공개 패키지를 나열, 당신의 JAR을 빌드하는 데 maven을 사용하면 완료됩니다.
  2. 의존성이 있습니까? (1)과 동일하게 가져온 패키지를 매니페스트에 추가하면됩니다.
  3. 초기화를 수행해야합니까? Activator를 작성하고 매니 페스트에서 언급하십시오.
  4. 서비스? XML 파일에있는 종속성과 설명을 입력하고 매니페스트에 추가하면됩니다.

등등 - 편한 수준을 사용하십시오.

웹 응용 프로그램을 수행하려면 OSGi, 사용하는 라이브러리, 응용 프로그램 관리자, 서블릿/jee/어떤 컨테이너 사이의 아키텍처 상호 작용을 고려해야합니다. OSGi는 어느 수준에 존재합니까? 일반적으로 OSGi-> 컨테이너 -> 응용 프로그램, 컨테이너 -> OSGi-> 응용 프로그램 및 컨테이너 -> 응용 프로그램 -> OSGi 솔루션이 있으며 각각에는 고유 한 특질이 있습니다.

관련 문제