Hello, OSGi, Part 1 : 초보자를위한 번들

OSGi (Open Services Gateway Initiative)는 모듈 식 애플리케이션 및 라이브러리를 개발하고 배포하기위한 아키텍처를 정의합니다. OSGi에 대한 3 부로 구성된이 첫 번째 기사에서 Sunil Patil은 OSGi 개발 개념을 시작하고 Eclipse OSGi 컨테이너 구현 인 Equinox를 사용하여 간단한 Hello World 애플리케이션을 빌드하는 방법을 보여줍니다. 또한 OSGi를 사용하여 서비스 지향 애플리케이션을 구축하는 방법에 대해 간략히 설명하고 OSGi ServiceFactoryServiceTracker클래스를 소개 합니다.

Java 용 동적 모듈 시스템이라고도하는 OSGi (Open Services Gateway Initiative)는 모듈 식 애플리케이션 개발을위한 아키텍처를 정의합니다. Knopflerfish, Equinox 및 Apache Felix와 같은 OSGi 컨테이너 구현을 사용하면 애플리케이션을 여러 모듈로 분할하여 이들 간의 상호 종속성을보다 쉽게 ​​관리 할 수 ​​있습니다.

OSGi, Equinox 및 Project Jigsaw

영국 최대 규모의 과학 프로젝트에서 OSGi / Equinox 통합 과정에서 배운 교훈을 연구하여 실제 관점을 얻은 다음 Java 9의 Project Jigsaw에서 기대할 수있는 내용을 알아보십시오.

Java Servlet 및 EJB 사양과 유사하게 OSGi 사양은 OSGi 컨테이너가 구현해야하는 서비스 집합과 컨테이너와 애플리케이션 간의 계약이라는 두 가지를 정의합니다. OSGi 플랫폼에서 개발한다는 것은 먼저 OSGi API를 사용하여 애플리케이션을 빌드 한 다음 OSGi 컨테이너에 배포하는 것을 의미합니다. 개발자의 관점에서 OSGi는 다음과 같은 이점을 제공합니다.

  • 컨테이너를 다시 시작하지 않고도 애플리케이션의 여러 모듈을 동적으로 설치, 제거, 시작 및 중지 할 수 있습니다.
  • 응용 프로그램에는 동시에 실행되는 특정 모듈의 버전이 둘 이상있을 수 있습니다.
  • OSGi는 임베디드, 모바일 및 리치 인터넷 앱뿐만 아니라 서비스 지향 애플리케이션 개발을위한 매우 우수한 인프라를 제공합니다.

웹 애플리케이션을 빌드하기 위해 서블릿 컨테이너를 사용하고 트랜잭션 애플리케이션을 빌드하기 위해 EJB 컨테이너를 사용한다는 점을 감안할 때 또 다른 유형의 컨테이너가 필요한 이유가 궁금 할 것입니다. 짧은 대답은 OSGi 컨테이너가 모듈로 분할하려는 복잡한 Java 애플리케이션을 개발하기 위해 특별히 고안된 것입니다. 이 시리즈 전체에서 그 짧은 대답을 확장 할 것입니다.

안녕하세요, OSGi : 시리즈 읽기

  • 파트 1 : 초보자를위한 번들
  • Part 2 : Spring Dynamic 모듈 소개
  • 파트 3 : 서버 측으로 가져 가기

엔터프라이즈 애플리케이션의 OSGi

OSGi 사양 작업은 1999 년 3 월 OSGi Alliance에 의해 시작되었습니다. 주요 목표는 로컬 네트워크 및 장치에 관리 서비스를 제공하기위한 개방형 사양을 만드는 것이 었습니다. 기본 아이디어는 OSGi 서비스 플랫폼을 네트워크 장치 (내장 및 서버)에 추가하면 네트워크의 어느 곳에서나 해당 장치에있는 소프트웨어 구성 요소의 수명주기를 관리 할 수 ​​있어야한다는 것입니다. 소프트웨어 구성 요소는 장치 작동을 중단하지 않고도 즉시 설치, 업데이트 또는 제거 할 수 있습니다.

수년 동안 OSGi 기술은 임베디드 시스템 및 네트워크 장치 시장에서 번성했습니다. 이제 Eclipse 덕분에 OSGi는 기업 개발을위한 실용적이고 가치있는 기술로 부상하고 있습니다.

OSGi에 대한 지원 증가

2003 년에 Eclipse 개발 팀은 Eclipse를보다 동적 인 리치 클라이언트 플랫폼으로 만들고 도구 세트의 모듈성을 높이는 방법을 찾기 시작했습니다. 결국 팀은 OSGi 프레임 워크를 런타임 구성 요소 모델로 사용하기로 결정했습니다. 2004 년 6 월에 출시 된 Eclipse 3.0은 OSGi를 기반으로 한 Eclipse의 첫 번째 버전입니다.

거의 모든 엔터프라이즈 애플리케이션 서버는 OSGi를 지원하거나 지원할 계획입니다. Spring 프레임 워크는 또한 Spring 기반 Java 엔터프라이즈 애플리케이션 개발에서 OSGi를 더 쉽게 사용할 수 있도록 인프라 계층을 제공하는 OSGi 서비스 플랫폼 용 Spring Dynamic Modules 프로젝트를 통해 OSGi를 지원합니다.

오픈 소스 OSGi 컨테이너

엔터프라이즈 개발자의 관점에서 볼 때 OSGi 컨테이너는 설치 공간이 매우 적기 때문에 엔터프라이즈 애플리케이션에 쉽게 임베드 할 수 있습니다. 예를 들어 복잡한 웹 애플리케이션을 개발하고 있다고 가정 해 보겠습니다. 애플리케이션을 여러 모듈로 나누려고합니다. 하나는 뷰 레이어 용, 다른 하나는 DAO 레이어 용, 다른 하나는 데이터 액세스 레이어 용입니다. 임베디드 OSGi 컨테이너를 사용하여 이러한 모듈의 상호 종속성을 관리하면 애플리케이션을 다시 시작하지 않고도 DAO 계층 (예 : 느린 DAO에서 빠른 DAO로)을 업데이트 할 수 있습니다.

애플리케이션이 OSGi 사양을 준수하는 한 모든 OSGi 준수 컨테이너에서 실행할 수 있어야합니다. 현재 인기있는 오픈 소스 OSGi 컨테이너에는 세 가지가 있습니다.

  • Equinox는 OSGi 서비스 플랫폼 릴리스 4의 프레임 워크 부분에 대한 참조 구현입니다. Eclipse IDE의 핵심 인 모듈 식 Java 런타임이며 OSGi R4 사양의 모든 필수 및 대부분의 선택적 기능을 구현합니다.
  • Knopflerfish는 OSGi R3 및 OSGi R4 사양의 오픈 소스 구현입니다. Knopflerfish 2는 모든 필수 기능과 R4 사양에 정의 된 일부 선택적 기능을 구현합니다.
  • Apache Felix는 Apache Software Foundation의 오픈 소스 OSGi 컨테이너입니다. 작성 당시이 컨테이너는 OSGI R4 사양을 완전히 준수하지 않습니다.

이 기사에서는 Equinox를 OSGi 컨테이너로 사용합니다. Apache Felix 및 Knopflerfish에 대한 자세한 내용은 리소스 섹션을 참조하세요.