31.4. OSGi 컨테이너에 서비스 게시


31.4.1. 개요

OSGi 컨테이너에 배포할 애플리케이션을 개발할 때 패키지된 번들의 라이프사이클을 사용하여 끝점의 게시 및 중지를 조정해야 합니다. 번들이 시작될 때 끝점이 게시되고 번들이 중지될 때 끝점이 중지되도록 합니다.

OSGi 번들 활성화기를 구현하여 엔드포인트 라이프사이클을 번들의 라이프사이클에 연결합니다. 번들 활성화기는 OSGi 컨테이너에서 시작될 때 번들에 대한 리소스를 생성하는 데 사용됩니다. 또한 컨테이너에서는 bundle activator를 사용하여 bundles 리소스를 중지할 때 정리합니다.

31.4.2. 번들 활성화기 인터페이스

org.osgi.framework.BundleActivator 인터페이스를 구현하여 애플리케이션에 대한 번들 활성화기를 생성합니다. 예 31.4. “번들 활성화기 인터페이스” 에 표시된 BundleActivator 인터페이스에는 구현해야 하는 두 가지 방법이 있습니다.

예 31.4. 번들 활성화기 인터페이스

interface BundleActivator
{
  public void start(BundleContext context)
  throws java.lang.Exception;

  public void stop(BundleContext context)
  throws java.lang.Exception;
}

start() 메서드는 번들을 시작할 때 컨테이너에서 호출됩니다. 여기에서 끝점을 인스턴스화하고 게시합니다.

stop() 메서드는 번들을 중지할 때 컨테이너에서 호출됩니다. 여기서 끝점을 중지합니다.

31.4.3. 시작 방법 구현

번들 활성화기 시작 방법은 엔드포인트를 게시하는 위치입니다. 끝점을 게시하려면 시작 방법은 다음을 수행해야 합니다.

  1. “서비스 공급자 인스턴스화” 서비스 공급자의 javax.xml.ws.Endpoint 오브젝트입니다.
  2. 서비스 공급자를 게시할 때 사용할 선택적 서버 컨텍스트를 생성합니다.
  3. “서비스 공급자 게시” publish() 메서드 중 하나를 사용하는 서비스 공급자입니다.

예 31.5. “bundleivator Start Method for publishing an Endpoint” 서비스 공급자를 게시하기 위한 코드를 표시합니다.

예 31.5. bundleivator Start Method for publishing an Endpoint

package com.widgetvendor.osgi;

import javax.xml.ws.Endpoint;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class widgetActivator implements BundleActivator
{
  private Endpoint endpt;
  ...

  public void start(BundleContext context)
  {
    WidgetOrderImpl impl = new WidgetOrderImpl();
    endpt = Endpoint.create(impl);
    endpt.publish("http://localhost:9000/SoapContext/SoapPort");
  }

  ...

}

예 31.5. “bundleivator Start Method for publishing an Endpoint” 의 코드는 다음을 수행합니다.

서비스 구현 오브젝트의 복사본을 인스턴스화합니다.

서비스 구현을 위해 게시되지 않은 끝점을 생성합니다.

http://localhost:9000/SoapContext/SoapPort 에 서비스 공급자를 게시합니다.

31.4.4. 중지 방법 구현

bundle activator의 stop 방법은 애플리케이션에서 사용하는 리소스를 정리하는 것입니다. 해당 구현에는 애플리케이션에서 게시한 모든 엔드포인트를 중지하는 논리가 포함되어야 합니다.

예 31.6. “bundleivator Stop Method for Stopping an Endpoint” 게시된 엔드포인트를 중지하는 중지 방법을 표시합니다.

예 31.6. bundleivator Stop Method for Stopping an Endpoint

package com.widgetvendor.osgi;

import javax.xml.ws.Endpoint;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class widgetActivator implements BundleActivator
{
  private Endpoint endpt;
  ...

  public void stop(BundleContext context)
  {
    endpt.stop();
  }

  ...

}

31.4.5. 컨테이너 정보

애플리케이션의 번들에 번들 활성화가 포함되어 있음을 컨테이너에 알려야 합니다. 번들의 매니페스트에 Bundle-Activator 속성을 추가하여 이 작업을 수행합니다. 이 속성은 번들을 활성화할 때 번들에서 사용할 클래스를 컨테이너에 알립니다. 해당 값은 번들 활성화기를 구현하는 클래스의 정규화된 이름입니다.

예 31.7. “bundleivator Manifest Entry” com.widgetvendor.osgi.widgetActivator 클래스로 구현되는 번들의 매니페스트 항목을 표시합니다.

예 31.7. bundleivator Manifest Entry

Bundle-Activator: com.widgetvendor.osgi.widgetActivator
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.