12.5. 访问 OSGi 服务


12.5.1. 概述

本节介绍如何在 OSGi 容器中生成、构建和部署简单的 OSGi 客户端。客户端在 OSGi 注册表中找到简单的 Hello World 服务,并在其上调用 sayHello () 方法。

12.5.2. 先决条件

要使用 Maven Quickstart archetype 生成项目,您必须满足以下先决条件:

  • Maven 安装- Maven 是 Apache 的免费开源构建工具。您可以从 http://maven.apache.org/download.html 下载最新版本(最小为 2.0.9)。
  • 互联网连接- 执行构建,Maven 会动态搜索外部存储库,并即时下载所需的工件。为了正常工作,您的构建机器 必须 连接到互联网。

12.5.3. 生成 Maven 项目

maven-archetype-quickstart archetype 创建一个通用 Maven 项目,然后您可以针对您想要的任何目的进行自定义。要使用协调( org.fusesource.example:osgi-client )生成 Maven 项目,请输入以下命令:

mvn archetype:create
-DarchetypeArtifactId=maven-archetype-quickstart
-DgroupId=org.fusesource.example
-DartifactId=osgi-client
Copy to Clipboard Toggle word wrap

此命令的结果是一个目录 ProjectDir/osgi-client,包含所生成的项目的文件。

注意

请注意 ,不要为您的工件选择一个组 ID,这些工件与现有产品的组 ID 冲突!这可能会导致项目的软件包和现有产品中的软件包之间冲突(因为组 ID 通常用作项目 Java 软件包名称的根目录)。

12.5.4. 自定义 POM 文件

您必须自定义 POM 文件来生成 OSGi 捆绑包,如下所示:

  1. 按照 第 5.1 节 “生成捆绑包项目” 中描述的 POM 自定义步骤操作。
  2. 由于客户端使用 HelloWorldSvc Java 接口,它在 osgi-service 捆绑包中定义,因此必须对 osgi-service 捆绑包添加 Maven 依赖项。假设 Maven 协调 osgi-service 捆绑包是 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>
    Copy to Clipboard Toggle word wrap

12.5.5. 编写蓝图文件

要在客户端项目中添加 Blueprint 文件,首先创建以下子目录:

ProjectDir/osgi-client/src/main/resources
ProjectDir/osgi-client/src/main/resources/OSGI-INF
ProjectDir/osgi-client/src/main/resources/OSGI-INF/blueprint
Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap

其中 reference 元素会创建一个参考管理器,它在 OSGi 注册表中找到 HelloWorldSvc 类型的服务。bean 元素创建 Client 类的实例,注入作为 bean 属性 helloWorldSvc 的服务引用。此外,init-method 属性指定在 bean 初始化阶段调用 Client.init () 方法(即,服务引用注入客户端 bean )。

12.5.6. 编写客户端类

ProjectDir/osgi-client/src/main/java/org/fusesource/example/client 目录下,使用您首选的文本编辑器创建文件 Client.java,并添加来自 例 12.7 “客户端类” 的 Java 代码。

例 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!
        }
    }

}
Copy to Clipboard Toggle word wrap

Client 类定义 getter 和 setter 方法,用于 helloWorldSvc bean 属性,它允许它通过注入来接收对 Hello World 服务的引用。init () 方法在 bean 初始化阶段调用,在属性注入后调用,这意味着通常在此方法范围内调用 Hello World 服务。

12.5.7. 运行客户端捆绑包

要安装并运行 osgi-client 项目,请执行以下步骤:

  1. 构建项目-open a command prompt,并将目录改为 ProjectDir/osgi-client。输入以下命令来使用 Maven 构建演示:

    mvn install
    Copy to Clipboard Toggle word wrap

    如果这个命令成功运行,ProjectDir/osgi-client/target 目录应包含捆绑包文件 osgi-client-1.0-SNAPSHOT.jar

  2. 在 Red Hat Fuse 控制台中安装并启动 osgi-service 捆绑包-at,输入以下命令:

    karaf@root()> bundle:install -s file:ProjectDir/osgi-client/target/osgi-client-1.0-SNAPSHOT.jar
    Copy to Clipboard Toggle word wrap

    其中 ProjectDir 是包含 Maven 项目和 -s 标志的目录,则 -s 标志可指示容器立即启动捆绑包。例如,如果您的项目目录在 Windows 机器上是 C:\Projects,您可以输入以下命令:

    karaf@root()> bundle:install -s file:C:/Projects/osgi-client/target/osgi-client-1.0-SNAPSHOT.jar
    Copy to Clipboard Toggle word wrap
    注意

    在 Windows 机器中,注意如何格式化 文件 URL - 有关 文件 URL 处理程序理解的语法的详情,请参阅 第 14.1 节 “文件 URL 处理程序”

  3. 客户端输出-f 客户端捆绑包成功启动,您应该在控制台中立即看到类似如下的输出:

    Bundle ID: 239
    OSGi client started.
    Calling sayHello()
    Hello World!
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat