今天看了看osgi中Event Admin Service Specification,赶快将重点记下,害怕自己忘了
osgi中的事件通知机制,采用了Publish-Subscribe 的模式,首先所有的event Handler都需要在osgi框架中将自己进行注册成服务接口为org.osgi.service.event.EventHandler的服务,在注册的同时,需要将自己希望处理的处理的事件的topic和对事件进行过滤的filter作为所注册服务的属性,完成这个操作后,event admin Service就能在进行事件通知时,查找到合适EventHandler来处理所发生的事件。
在进行事件的发布时,Event Publisher从osgi框架中获取到event admin Service,需要借助于event admin Service的两个方法来通知event Handler来处理所发生的事件,一个是同步的sendEvent,另一个是异步的postEvent。
event admin Service是如何来选择event Handler?这就要通过event对象了,从event对象的构造器中就可以看出,event对象中包含了event topic和event 的属性,这样event Handler就能对所发生的事件进行过滤选择了,而且能从event的属性中获得event发生的相关信息。
从上面可以看出Event Publisher和event Handler是通过event admin Service联系起来的,event admin Service起了一个通道的作用。由于osgi框架动态的特性,event admin Service就需要确保event Handler选择的合理性,如:不能让bundle接收到自己被STARTED事件,同时也需要确保event Handler在处理同一个线程所发布的event的先后顺序,如:不能先接收到bundle被UNINSTALLED,然后在接收到这个bundle被INSTALLED。