osgi事件监听
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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());
}
}
}