﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-城市中的一条鱼-随笔分类-OSGI</title><link>http://www.blogjava.net/narry/category/22346.html</link><description>雪化了，就是春天</description><language>zh-cn</language><lastBuildDate>Sat, 12 May 2007 04:21:21 GMT</lastBuildDate><pubDate>Sat, 12 May 2007 04:21:21 GMT</pubDate><ttl>60</ttl><item><title>谈谈osgi中的事件机制</title><link>http://www.blogjava.net/narry/archive/2007/05/10/116570.html</link><dc:creator>narry</dc:creator><author>narry</author><pubDate>Thu, 10 May 2007 11:43:00 GMT</pubDate><guid>http://www.blogjava.net/narry/archive/2007/05/10/116570.html</guid><wfw:comment>http://www.blogjava.net/narry/comments/116570.html</wfw:comment><comments>http://www.blogjava.net/narry/archive/2007/05/10/116570.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/narry/comments/commentRss/116570.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/narry/services/trackbacks/116570.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 今天看了看osgi中Event Admin Service Specification，赶快将重点记下，害怕自己忘了<img src="http://www.blogjava.net/CuteSoft_Client/CuteEditor/images/emsmile.gif" align="absmiddle" border="0"><br>&nbsp;&nbsp; osgi中的事件通知机制，采用了Publish-Subscribe 的模式，首先所有的event Handler都需要在osgi框架中将自己进行注册成服务接口为org.osgi.service.event.EventHandler的服务，在注册的同时，需要将自己希望处理的处理的事件的topic和对事件进行过滤的filter作为所注册服务的属性，完成这个操作后，event admin Service就能在进行事件通知时，查找到合适EventHandler来处理所发生的事件。<br>&nbsp;&nbsp;&nbsp; 在进行事件的发布时，Event Publisher从osgi框架中获取到event admin Service，需要借助于event admin Service的两个方法来通知event Handler来处理所发生的事件，一个是同步的sendEvent，另一个是异步的postEvent。<br>&nbsp;&nbsp;&nbsp; event admin Service是如何来选择event Handler？这就要通过event对象了，从event对象的构造器中就可以看出，event对象中包含了event topic和event 的属性，这样event Handler就能对所发生的事件进行过滤选择了，而且能从event的属性中获得event发生的相关信息。<br>&nbsp;&nbsp;&nbsp; 从上面可以看出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。  <img src ="http://www.blogjava.net/narry/aggbug/116570.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/narry/" target="_blank">narry</a> 2007-05-10 19:43 <a href="http://www.blogjava.net/narry/archive/2007/05/10/116570.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>