31.4. 在 OSGi 容器中发布服务


概述

当您开发要部署到 OSGi 容器中的应用程序时,您需要使用打包的捆绑包的生命周期协调您的端点发布和停止。您希望在捆绑包启动时发布端点,并且您希望在捆绑包停止时停止端点。

您可以通过实施 OSGi 捆绑器将端点生命周期绑定到捆绑包的生命周期。OSGi 容器使用捆绑包激活器,在捆绑包启动时为其创建资源。容器也使用捆绑包激活器在捆绑包停止时清除捆绑包资源。

捆绑包激活器接口

您可以通过实施 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 () 方法。这是您将停止端点的位置。

实施 start 方法

捆绑包激活器的 start 方法是您发布端点的位置。要发布端点,start 方法必须执行以下操作:

  1. “实例化服务提供商”一节 服务提供商的 javax.xml.ws.Endpoint 对象。
  2. 创建在发布服务提供商时使用的可选服务器上下文。
  3. “发布服务提供商”一节 服务供应商使用其中一个 publish () 方法。

例 31.5 “捆绑包激活器开始方法发布端点” 显示发布服务提供商的代码。

例 31.5. 捆绑包激活器开始方法发布端点

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 “捆绑包激活器开始方法发布端点” 中的代码执行以下操作:

实例化服务实施对象的副本。

为服务实施创建未发布 的端点

http://localhost:9000/SoapContext/SoapPort 发布服务提供商。

实施 stop 方法

捆绑包激活器的 stop 方法是您清理应用程序使用的资源的位置。其实施应包含用于停止应用发布的所有端点的逻辑。

例 31.6 “Bundle Activator Stop Method for Stopping a Endpoint” 显示停止发布端点的 stop 方法。

例 31.6. Bundle Activator Stop Method for Stopping a 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();
  }

  ...

}

通知容器

您必须添加告知容器,应用程序的捆绑包包含捆绑包。您可以通过在捆绑包的清单中添加 Bundle-Activator 属性来完成此操作。此属性告知容器在激活捆绑包时要使用的捆绑包中的类。其值是实施捆绑包器的类的完全限定名称。

例 31.7 “捆绑包激活器清单条目” 显示捆绑包的清单条目,其 activator 由类 com.widgetvendor.osgi.widgetActivator 实施。

例 31.7. 捆绑包激活器清单条目

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.