osgi事件监听

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

事件监听

OSGi运行环境内部的事件主要包括三类:

∙框架事件(FrameworkEvent)

STARTED框架已经启动

ERROR某个Bundle启动过程中引发错误

WARNING某一Bundle引发一个警告

INFO某一Bundle引发一个INFO类型的事件

PACKAGES_REFRESHED PackageAdmin.refreshPackage操作执行完成STARTLEVEL_CHANGED StartLevel.setStartLevel操作执行完成

∙Bundle事件(BundleEvent)

INSTALLED Bundle被安装到OSGi环境后系统发布该事件

RESOLVED Bundle被成功解析

LAZY_ACTIVATION Bundle将被延迟激活

STARTING Bundle正在被激活

STARTED Bundle被成功激活

STOPPING Bundle被停止

STOPPED Bundle正在被停止

UPDATED Bundle被更新

UNRESOLVED Bundle被UNRESOLVED

UNINSTALLED Bundle被卸载

∙服务事件(ServiceEvent)

REGISTERED服务被注册

MODIFIED服务被修改

UNREGISTERING服务正在被注销

下述代码展示了如何在Bundle组件中通过实现FrameworkListener,BundleListener和ServiceListener接口,并使用BundleContext注册监听OSGi环境的各种事件:

创建事件监听的bundle,测试的bundle

在bundle中导入jar包

具体代码如下

package com.virgo.bundlelistener;

import org.osgi.framework.Bundle;

import org.osgi.framework.BundleActivator;

import org.osgi.framework.BundleContext;

import org.osgi.framework.BundleEvent;

import org.osgi.framework.BundleListener;

import org.osgi.framework.FrameworkEvent;

import org.osgi.framework.FrameworkListener;

import org.osgi.framework.ServiceEvent;

import org.osgi.framework.ServiceListener;

public class Bundlelistener implements BundleActivator, FrameworkListener, BundleListener, ServiceListener

{

//处理框架事件

@Override

public void frameworkEvent(FrameworkEvent event) {

// TODO Auto-generated method stub

if ((event.getType() & FrameworkEvent.ERROR) != 0) {

System.err.println("Framework ERROR: " + event.getBundle());

}

}

@Override

public void start(BundleContext context) throws Exception { // 获取OSGi环境中的所有安装的bundle

for (Bundle bundle : context.getBundles()) {

System.out.println("Bundle Symbolic Name: "

+ bundle.getSymbolicName()); }

// 获取OSGi运行环境中的属性(查找范围包括系统属性)

System.out.println("osgi.framework =

"+context.getProperty("osgi.framework"));

//注册监听

context.addFrameworkListener(this);

context.addBundleListener(this);

context.addServiceListener(this);

}

@Override

public void stop(BundleContext context) throws Exception { System.out.println("stop");

}

//处理服务事件

@Override

public void serviceChanged(ServiceEvent event) {

if ((event.getType() & ServiceEvent.REGISTERED) != 0) {

System.err.println("Service REGISTERED: "

+ event.getServiceReference());

}

}

@Override

public void bundleChanged(BundleEvent event) {

// TODO Auto-generated method stub

if ((event.getType() & BundleEvent.STARTED) != 0) {

System.err.println("Bundle STARTED: " + event.getBundle());

} else if ((event.getType() & BundleEvent.STOPPED) != 0) {

System.err.println("Bundle STOPPED: " + event.getBundle());

}

}

}

相关文档
最新文档