12.4. OSGi 서비스 게시


12.4.1. 개요

이 섹션에서는 OSGi 컨테이너에서 간단한 OSGi 서비스를 생성, 빌드 및 배포하는 방법을 설명합니다. 서비스는 간단한 Hello World Java 클래스이며 OSGi 구성은 블루프린트 구성 파일을 사용하여 정의됩니다.

12.4.2. 사전 요구 사항

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

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

12.4.3. Maven 프로젝트 생성

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

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

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

참고

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

12.4.4. POM 파일 사용자 정의

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

  1. 5.1절. “번들 프로젝트 생성” 에 설명된 POM 사용자 지정 단계를 따르십시오.
  2. Maven 번들 플러그인의 구성에서 bundle 지침을 수정하여 다음과 같이 org.fusesource.example.service 패키지를 내보냅니다.

    <project ... >
      ...
      <build>
        ...
        <plugins>
          ...
          <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
              <instructions>
                <Bundle-SymbolicName>${pom.groupId}.${pom.artifactId}</Bundle-SymbolicName>
            <Export-Package>org.fusesource.example.service</Export-Package>
              </instructions>
            </configuration>
          </plugin>
        </plugins>
      </build>
      ...
    </project>

12.4.5. 서비스 인터페이스 작성

ProjectDir/osgi-service/src/main/java/org/fusesource/example/service 하위 디렉토리를 생성합니다. 이 디렉터리에서 원하는 텍스트 편집기를 사용하여 파일 HelloWorldSvc.java 를 생성하고 예 12.3. “The HelloWorldSvc Interface” 의 코드를 추가합니다.

예 12.3. The HelloWorldSvc Interface

package org.fusesource.example.service;

public interface HelloWorldSvc
{
    public void sayHello();
}

12.4.6. 서비스 클래스 작성

ProjectDir/osgi-service/src/main/java/org/fusesource/example/service/impl 하위 디렉토리를 생성합니다. 이 디렉터리에서 원하는 텍스트 편집기를 사용하여 파일 HelloWorldSvcImpl.java 를 생성하고 예 12.4. “The HelloWorldSvcImpl Class” 의 코드를 추가합니다.

예 12.4. The HelloWorldSvcImpl Class

package org.fusesource.example.service.impl;

import org.fusesource.example.service.HelloWorldSvc;

public class HelloWorldSvcImpl implements HelloWorldSvc {

    public void sayHello()
    {
        System.out.println( "Hello World!" );
    }

}

12.4.7. 블루프린트 파일 작성

블루프린트 구성 파일은 클래스 경로의 OSGI-INF/blueprint 디렉터리에 저장된 XML 파일입니다. 프로젝트에 블루프린트 파일을 추가하려면 먼저 다음 하위 디렉터리를 생성합니다.

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

여기서 src/main/resources 는 모든 JAR 리소스의 표준 Maven 위치입니다. 이 디렉터리에 있는 리소스 파일은 생성된 번들 JAR의 루트 범위에 자동으로 패키지됩니다.

예 12.5. “서비스 내보내기를 위한 블루프린트 파일” 빈 요소를 사용하여 HelloWorldSvc 8080을 만든 다음 service 요소를 사용하여ans를 OSGi 서비스로 내보내는 샘플 블루프린트 파일을 표시합니다.

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

예 12.5. 서비스 내보내기를 위한 블루프린트 파일

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

  <bean id="hello" class="org.fusesource.example.service.impl.HelloWorldSvcImpl"/>

  <service ref="hello" interface="org.fusesource.example.service.HelloWorldSvc"/>

</blueprint>

12.4.8. 서비스 번들 실행

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

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

    mvn install

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

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

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

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

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

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

  3. 서비스가 생성되었는지 확인하려면번들이 성공적으로 시작되었는지 확인하려면 다음 Red Hat Fuse console 명령을 입력합니다.

    karaf@root()> bundle:list

    이 목록에는 osgi-service 번들에 대한 행이 표시되어야 합니다. 예를 들면 다음과 같습니다.

    [ 236] [Active     ] [Created     ] [       ] [   60] osgi-service (1.0.0.SNAPSHOT)
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.