基于 EventAdmin 服务的 Bundle间通讯

OSGi的Event Admin服务提供了一种基于发布/订阅模型的Bundle间通信方式。发布者通过创建主题和携带属性的事件,使用Event Admin的postEvent或sendEvent方法发布。订阅者实现EventHandler接口来接收感兴趣的主题事件。Event Admin事件非持久化,仅在当前会话有效,订阅者可能错过部分事件。Equinox环境下需额外下载org.eclipse.equinox.event Bundle。
摘要由CSDN通过智能技术生成

 OSGi 的 Event Admin 服务规范提供了开发者基于发布 / 订阅模型,通过事件机制实现 Bundle 间协作的标准通讯方式。

事件发布者使用 Event Admin 服务发送基于主题 (Topic) 的事件,任何对某一主题感兴趣的事件订阅者都会收到该事件,并且做出相应的反应。

如何发布事件

我们遵循以下的步骤,通过 Event Admin 发布事件:

获得实现了 org.osgi.service.event.EventAdmin 接口的 Event Admin 服务引用。
拟定事件的主题。
指定事件所携带的 key/value 属性集。
使用 Event Admin 提供的 postEvent 或者 sendEvent 方法发布事件,postEvent 使用同步的方式发布事件,即:等到所有的事件订阅者响应了该事件,方法调用返回,而 sendEvent 使用异步的方式发布事件。
发布事件:

/**
* 自定义Bundle(服务)实现类,并且将事件发送到EventAdmin中
* @author zxpWork
*
*/
public class HelloWordImpl implements HelloWord {

public String getHello() {   
BundleContext context=Activator.contet;
ServiceReference ref =context.getServiceReference(EventAdmin.class.getName()); //获取EventAdmin服务
if(null!=ref){
EventAdmin eventAdmin = (EventAdmin)context.getService(context.getServiceReference(EventAdmin.class.getName()));
if(eventAdmin!=null) {
System.out.println("event started");
//                    eventAdmin.postEvent(new MyEvent()); //异步 :发送事件,不管监听方是否接收成功直接返回。
eventAdmin.sendEvent(new MyEvent());//同步  :发送事件,需要所有监听方正常接收成功

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值