12.5. OSGi 서비스 액세스

12.5.1. 개요

이 섹션에서는 OSGi 컨테이너에 간단한 OSGi 클라이언트를 생성, 빌드 및 배포하는 방법을 설명합니다. 클라이언트는 OSGi 레지스트리에서 간단한 Hello World 서비스를 찾고 sayHello() 메서드를 호출합니다.

12.5.2. 사전 요구 사항

Maven 빠른 시작 archetype을 사용하여 프로젝트를 생성하려면 다음과 같은 사전 요구 사항이 있어야 합니다.

  • Maven 설치-Maven은 Apache의 무료 오픈 소스 빌드 툴입니다. http://maven.apache.org/download.html 에서 최신 버전을 다운로드할 수 있습니다(최소 버전 2.0.9).
  • 인터넷 연결- 빌드를 수행하는whilst, Maven은 외부 리포지토리를 동적으로 검색하고 즉시 필요한 아티팩트를 다운로드합니다. 이 기능이 작동하려면 빌드 머신이 인터넷에 연결되어 있어야 합니다.

12.5.3. Maven 프로젝트 생성

maven-archetype-quickstart archetype은 일반 Maven 프로젝트를 생성한 다음 원하는 목적에 맞게 사용자 지정할 수 있습니다. 좌표를 사용하여 Maven 프로젝트를 생성하려면 org.fusesource.example:osgi-client 를 입력합니다.

mvn archetype:create
-DarchetypeArtifactId=maven-archetype-quickstart
-DgroupId=org.fusesource.example
-DartifactId=osgi-client

이 명령의 결과는 생성된 프로젝트의 파일이 포함된 ProjectDir/osgi-client 디렉터리입니다.

참고

기존 제품의 그룹 ID와 충돌하는 아티팩트의 그룹 ID를 선택하지 않도록 주의하십시오! 이로 인해 프로젝트의 패키지와 기존 제품의 패키지가 충돌할 수 있습니다(일반적으로 프로젝트 Java 패키지 이름의 루트로 그룹 ID가 사용되므로).

12.5.4. POM 파일 사용자 정의

다음과 같이 OSGi 번들을 생성하려면 POM 파일을 사용자 지정해야 합니다.

  1. 5.1절. “번들 프로젝트 생성” 에 설명된 POM 사용자 지정 단계를 따르십시오.
  2. 클라이언트는 osgi-service 번들에 정의된 HelloWorldSvc Java 인터페이스를 사용하므로 osgi-service 번들에 Maven 종속성을 추가해야 합니다. osgi-service 번들의 Maven 조정이 org.fusesource.example:osgi-service:1.0-SNAPSHOT 이라고 가정하면 클라이언트의 POM 파일에 다음 종속성을 추가해야 합니다.

    <project ... >
      ...
      <dependencies>
        ...
        <dependency>
            <groupId>org.fusesource.example</groupId>
            <artifactId>osgi-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
      </dependencies>
      ...
    </project>

12.5.5. 블루프린트 파일 작성

클라이언트 프로젝트에 블루프린트 파일을 추가하려면 먼저 다음 하위 디렉터리를 생성합니다.

ProjectDir/osgi-client/src/main/resources
ProjectDir/osgi-client/src/main/resources/OSGI-INF
ProjectDir/osgi-client/src/main/resources/OSGI-INF/blueprint

ProjectDir/osgi-client/src/main/resources/OSGI-INF/blueprint 디렉터리 아래에서 원하는 텍스트 편집기를 사용하여 config.xml 을 생성하고 예 12.6. “서비스 가져오기를 위한 블루프린트 파일” 에서 XML 코드를 추가합니다.

예 12.6. 서비스 가져오기를 위한 블루프린트 파일

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">

  <reference id="helloWorld"
        interface="org.fusesource.example.service.HelloWorldSvc"/>

  <bean id="client"
        class="org.fusesource.example.client.Client"
        init-method="init">
    <property name="helloWorldSvc" ref="helloWorld"/>
  </bean>

</blueprint>

여기서 reference 요소는 OSGi 레지스트리에서 HelloWorldSvc 유형의 서비스를 찾는 참조 관리자를 생성합니다. Cryo stat 요소는 Client 클래스의 인스턴스를 생성하고 서비스 참조를 8080 속성 helloWorldSvc 로 삽입합니다. 또한 init-method 속성은 빈 초기화 단계에서 Client.init() 메서드가 호출되도록 지정합니다(즉, 서비스 참조가 클라이언트사이에 삽입된 ).

12.5.6. 클라이언트 클래스 작성

ProjectDir/osgi-client/src/main/java/org/fusesource/example/client 디렉터리 아래의 텍스트 편집기를 사용하여 파일을 생성하고, Client.java 에서 Java 코드를 추가합니다. 예 12.7. “클라이언트 클래스”

예 12.7. 클라이언트 클래스

package org.fusesource.example.client;

import org.fusesource.example.service.HelloWorldSvc;

public class Client {
    HelloWorldSvc helloWorldSvc;

    // Bean properties
    public HelloWorldSvc getHelloWorldSvc() {
        return helloWorldSvc;
    }

    public void setHelloWorldSvc(HelloWorldSvc helloWorldSvc) {
        this.helloWorldSvc = helloWorldSvc;
    }

    public void init() {
        System.out.println("OSGi client started.");
        if (helloWorldSvc != null) {
            System.out.println("Calling sayHello()");
            helloWorldSvc.sayHello();  // Invoke the OSGi service!
        }
    }

}

클라이언트 클래스는 삽입을 통해 Hello World 서비스에 대한 참조를 수신할 수 있는 helloWorldSvc 8080 속성에 대한 getter 및 setter 메서드를 정의합니다. init() 메서드는 속성 삽입 후 8080 초기화 단계에서 호출되므로 일반적으로 이 메서드 범위 내에서 Hello World 서비스를 호출할 수 있습니다.

12.5.7. 클라이언트 번들 실행

osgi-client 프로젝트를 설치하고 실행하려면 다음 단계를 수행합니다.

  1. 프로젝트 빌드- 명령 프롬프트를 열고 디렉터리를 ProjectDir/osgi-client 로 변경합니다. Maven을 사용하여 다음 명령을 입력하여 데모를 빌드합니다.

    mvn install

    이 명령이 성공적으로 실행되면 ProjectDir/osgi-client/target 디렉터리에 번들 파일 osgi-client-1.0-SNAPSHOT.jar.

  2. osgi-service 번들을 설치하고 시작합니다. Red Hat Fuse 콘솔에서 다음 명령을 입력합니다.

    karaf@root()> bundle:install -s file:ProjectDir/osgi-client/target/osgi-client-1.0-SNAPSHOT.jar

    여기서 ProjectDir 은 Maven 프로젝트를 포함하는 디렉터리이며 -s 플래그는 즉시 번들을 시작하도록 컨테이너를 지시합니다. 예를 들어 프로젝트 디렉터리가 Windows 머신의 C:\Projects 인 경우 다음 명령을 입력합니다.

    karaf@root()> bundle:install -s file:C:/Projects/osgi-client/target/osgi-client-1.0-SNAPSHOT.jar
    참고

    Windows 머신에서 파일 URL을 포맷하는 방법을 주의하십시오. 파일 URL 처리기에서 이해하는 구문에 대한 자세한 내용은 15.1절. “파일 URL 핸들러” 을 참조하십시오.

  3. 클라이언트 출력- 클라이언트 번들이 성공적으로 시작되면 콘솔에 다음과 같은 출력이 즉시 표시됩니다.

    Bundle ID: 239
    OSGi client started.
    Calling sayHello()
    Hello World!