查找 OSGi 应用程序

可以使用 org.apache.aries.blueprint 包中的类来扩展 OSGi 应用程序编程模型;此第三方 SPI 是通过 blueprint-1.0 服务器功能部件提供。必须访问 OSGi 应用程序捆绑软件才能应用扩展。在 Liberty 概要文件中,OSGi 应用程序作为子系统来运行。要查找 OSGi 应用程序,您可以在用户功能部件中创建 ServiceTracker

关于此任务

本主题描述了用户功能部件的开发者如何找到正在运行的 OSGi 应用程序。提供 OSGi 应用程序编程模型扩展的用户功能部件通常需要此任务。例如,新用户功能部件可提供此类扩展,方式是实现新的捆绑软件扩充器(通常称为容器),或者更简单一点,就是跟踪并调用从某些 OSGi 应用程序内部发布的服务。

此类用户功能部件必须使用正在运行的特定 OSGi 应用程序的 BundleContext 来创建新的 BundleTrackerServiceTracker 实例。可以从与 OSGi 应用程序相关联的 org.osgi.service.subsystem.Subsystem 获取此 BundleContext。以下过程描述了如何获取该子系统服务。

过程

要通过在用户功能部件中创建 ServiceTracker 来查找 OSGi 应用程序,请完成下列步骤:

  1. 构造以要查找的子系统为目标的 org.osgi.framework.Filter
  2. 创建 org.osgi.util.tracker.ServiceTracker,它使用步骤 1 中的过滤器来获取与您想要查找的 OSGi 应用程序相关联的 org.osgi.service.subsystem.Subsystem 服务。Subsystem 服务实例提供您处理 OSGi 应用程序所需的一切。

示例

以下示例说明如何使用 ServiceTracker 在用户功能部件中查找符号名称为 my.app 的应用程序:
import org.osgi.framework.BundleContext;
import org.osgi.service.subsystem.Subsystem;
import org.osgi.util.tracker.ServiceTracker;
import org.osgi.util.tracker.ServiceTrackerCustomizer;
在以下代码摘录中,变量 ctx 是其中一个用户功能部件捆绑软件的 BundleContext
String SERVICE_FILTER = "(&(objectClass=org.osgi.service.subsystem.Subsystem)
                           (subsystem.type=osgi.subsystem.application)(subsystem.symbolicName=my.app))"
    
      org.osgi.framework.Filter filter = ctx.createFilter(SERVICE_FILTER);
可以将最后的“null”参数替换为用于实现 ServiceTrackerCustomizer<Subsystem, Subsystem> 的类的实例:
org.osgi.util.tracker.ServiceTracker<Subsystem, Subsystem> str = new ServiceTracker<Subsystem, Subsystem>(ctx, filter, null);
可以构造 SERVICE_FILTER 以利用如下所示的常量:
org.osgi.framework.Constants.OBJECTCLASS;
org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_SYMBOLICNAME_PROPERTY;
org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION;
org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE_PROPERTY;

用于指示主题类型的图标 任务主题

信息中心的条款和条件 | 反馈


时间戳记图标 最近一次更新时间: Wednesday, 2 September 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_locate_osgi
文件名:twlp_locate_osgi.html