﻿<?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-yangbutao</title><link>http://www.blogjava.net/yangbutao/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 25 Apr 2026 19:22:50 GMT</lastBuildDate><pubDate>Sat, 25 Apr 2026 19:22:50 GMT</pubDate><ttl>60</ttl><item><title>浅析扩展点（Extension Point）</title><link>http://www.blogjava.net/yangbutao/archive/2007/09/27/148500.html</link><dc:creator>阿不</dc:creator><author>阿不</author><pubDate>Thu, 27 Sep 2007 01:09:00 GMT</pubDate><guid>http://www.blogjava.net/yangbutao/archive/2007/09/27/148500.html</guid><wfw:comment>http://www.blogjava.net/yangbutao/comments/148500.html</wfw:comment><comments>http://www.blogjava.net/yangbutao/archive/2007/09/27/148500.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangbutao/comments/commentRss/148500.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangbutao/services/trackbacks/148500.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 扩展（Extension）是很多可扩展项目中一个关键的机制，可以利用扩展向平台添加新功能。但是扩展不能随意地创建，必须按照扩展点（Extension Point）定义的规范进行明确的声明，平台才能识别出这些扩展。所谓扩展点，就是系统定义出来可以让你扩展的地方，可以认为是一些扩展的契约，而扩展，这是你对这些扩展点的实现，当然你自己的插件也可以定义扩展点供别的开发人员扩展。&nbsp;&nbsp;<a href='http://www.blogjava.net/yangbutao/archive/2007/09/27/148500.html'>阅读全文</a><img src ="http://www.blogjava.net/yangbutao/aggbug/148500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangbutao/" target="_blank">阿不</a> 2007-09-27 09:09 <a href="http://www.blogjava.net/yangbutao/archive/2007/09/27/148500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSGI Module&amp;lifecycle</title><link>http://www.blogjava.net/yangbutao/archive/2007/09/24/147771.html</link><dc:creator>阿不</dc:creator><author>阿不</author><pubDate>Mon, 24 Sep 2007 05:26:00 GMT</pubDate><guid>http://www.blogjava.net/yangbutao/archive/2007/09/24/147771.html</guid><wfw:comment>http://www.blogjava.net/yangbutao/comments/147771.html</wfw:comment><comments>http://www.blogjava.net/yangbutao/archive/2007/09/24/147771.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangbutao/comments/commentRss/147771.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangbutao/services/trackbacks/147771.html</trackback:ping><description><![CDATA[<div style="text-indent: 36.75pt"><strong><span style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OSGI Module&amp;lifecycle</span></strong></div>
<div style="text-indent: 139.15pt"><strong>&nbsp;</strong></div>
<div style="text-indent: 36.75pt">OSGI概念中主要分为了Bundle和Service，可以认为Bundle是一个模块的管理器，主要是通过BundleActivator管理模块的生命周期，而Service则是这个模块可暴露对外的服务对象，这里体现了OSGI和传统的Plugin Framework不同的一个地方，管理和静态结构分开，在OSGI中通过在manifest.mf文件中增加一些内容来发布Bundle，在其中描述了Bundle的提供商、版本、唯一ID、classpath、暴露对外的包、所依赖的包；每个Bundle拥有自己的ClassLoader以及context，通过context可进行服务的注册、卸载等，这些操作都会通过事件机制广播给相应的其他的Bundle；一般来说都为通过在Bundle中编写初始需要注册的服务的方法来完成Bundle可供外部使用的服务的暴露功能；如需要调用其他Plugin提供的服务可通过context的getServiceReference先获取Service的句柄，再通过context.getService(ServiceReference)的方法获取Service的实体。</div>
<div style="text-indent: 15.75pt">前一段时间对osgi的service层做了介绍，下面介绍module和lifecycle层，在这里主要介绍lifecycle</div>
<div>系统框架对bundle的生命周期进行了管理。</div>
<div>osgi生命周期的管理，覆盖到bundle的安装，启动，停止，更新，卸载，和监控这么一个过程。</div>
<div style="margin: 13pt 0cm"><strong><font size="5"><span style="font-weight: normal; font-size: 10.5pt; line-height: 173%">Bundle</span><span style="font-weight: normal; font-size: 10.5pt; line-height: 173%">的生命周期</span></font></strong></div>
<div>下面是bundle的lifecycle的类图</div>
<div><img height="512" alt="" src="http://gocom.primeton.com/uploads/FCKUserFiles/Image/www.GIF" width="640" /></div>
<div>下面详细介绍bundle的几个对象</div>
<div align="right">&nbsp;</div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt"><span>l<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Bunlde 标识</div>
<div>&nbsp;Identifier</div>
<div>&nbsp;Location</div>
<div>&nbsp;symbolicName</div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt"><span>l<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>bundle的状态</div>
<div><span>&nbsp; </span>状态转换图</div>
<div><img alt="" src="http://gocom.primeton.com/uploads/FCKUserFiles/Image/eee.GIF" /></div>
<div style="margin: 0cm 0cm 0pt 26.25pt; text-indent: -21pt"><span>&#252;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>bundle的安装一般有两种方式：</div>
<div style="text-indent: 15.75pt">通过另外一个bundle的bundlecontext来完成</div>
<div style="text-indent: 15.75pt">通过命令行的形式（比如系统bundle一般是这样的）来完成的</div>
<div style="margin: 0cm 0cm 0pt 26.25pt; text-indent: -21pt"><span>&#252;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Bundle的解析（一般是在启动过程中完成的）</div>
<div style="margin: 0cm 0cm 0pt 15.75pt">根据bundle的定义，创建基于版本的module（<span style="font-size: 10pt; color: black">ModuleDefinition</span><span style="font-size: 10pt; color: black">，</span><span style="font-size: 10pt; color: black">ContentLoader</span><span style="font-size: 10pt; color: black">，</span><span style="font-size: 10pt; color: black">Wire</span>）</div>
<div style="margin: 0cm 0cm 0pt 26.25pt; text-indent: -21pt"><span>&#252;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Bundle的启动，由该bundle的调用start api来完成的</div>
<div style="text-indent: 5.25pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>这里包含创建该bundle的上下文（BundleContext）</div>
<div style="margin: 0cm 0cm 0pt 47.25pt; text-indent: -42pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>创建该bundle的activator，可以在activator里进行与该bundle相关的service的注册，bundlelistener，servicelistener ,frameworklistener的注册以及安装其他的bundle.等.</div>
<div style="margin: 0cm 0cm 0pt 47.25pt; text-indent: -42pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>是否要立即触发该activator，需要根据该bundle的activator policy来决定；在用bundle获取resource的时候，采取解析bundle，才创建该bundle的classloader和activate该bundle。这样能节省启动的时间，实现了懒加载。</div>
<div style="margin: 0cm 0cm 0pt 47.25pt; text-indent: -42pt">下图描述了bundle的启动过程中的状态变化</div>
<div style="margin: 0cm 0cm 0pt 47.25pt; text-indent: -42pt"><img height="512" alt="" src="http://gocom.primeton.com/uploads/FCKUserFiles/Image/qq.GIF" width="640" /></div>
<div style="margin: 0cm 0cm 0pt 26.25pt; text-indent: -21pt"><span>&#252;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Bundle的更新</div>
<div style="margin: 0cm 0cm 0pt 5.25pt">Bundle的更新，是从一个版本到另一个版本的迁移过程</div>
<div style="margin: 0cm 0cm 0pt 5.25pt">流程如下：</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><span>1．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>检查bundle的状态</div>
<div style="margin: 0cm 0cm 0pt 18pt">如果是uninsalled，抛出异常</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><span>2．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font>，但是不改变持久化的状态</span></span>Stop bundle</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><span>3．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>版本的修订</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><span>4．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>更改bundle的时间戳，状态设置成installed</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><span>5．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>发送unresolved事件给bundle</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><span>6．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>把该bundle的老的module做一个removal标记，表示不可用</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><span>7．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>发送updated事件给bundle</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><span>8．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>启动（start）bundle</div>
<div><span>&nbsp;&nbsp;&nbsp; </span></div>
<div style="margin: 0cm 0cm 0pt 26.25pt; text-indent: -21pt"><span>&#252;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Bundle的停止</div>
<div style="margin: 0cm 0cm 0pt 27pt; text-indent: -18pt"><span>1．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>把bundle的持久化状态设置成inactive</div>
<div style="margin: 0cm 0cm 0pt 27pt; text-indent: -18pt"><span>2．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>检查bundle的状态</div>
<div style="margin: 0cm 0cm 0pt 18pt">如果状态是Installed，Resolved，就返回</div>
<div style="margin: 0cm 0cm 0pt 18pt">如果是uninstalled，抛出异常</div>
<div style="margin: 0cm 0cm 0pt 18pt">如果是starting，stopping，抛异常</div>
<div style="margin: 0cm 0cm 0pt 18pt">如果ACTIVE，把bundle的状态设置成stopping，发stopping事件跟响应的bundle</div>
<div style="margin: 0cm 0cm 0pt 27pt; text-indent: -18pt"><span>3．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>调用该bundle的activator的stop操作，清理分配的资源</div>
<div style="margin: 0cm 0cm 0pt 27pt; text-indent: -18pt"><span>4．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>清除bundle的上下文</div>
<div style="margin: 0cm 0cm 0pt 27pt"><span style="font-size: 10pt; color: black">清理该</span><span style="font-size: 10pt; color: black">bundle</span><span style="font-size: 10pt; color: black">注册的</span><span style="font-size: 10pt; color: black">service</span></div>
<div style="margin: 0cm 0cm 0pt 27pt"><span style="font-size: 10pt; color: black">释放该</span><span style="font-size: 10pt; color: black">bundle</span><span style="font-size: 10pt; color: black">用到的</span><span style="font-size: 10pt; color: black">service</span></div>
<div style="margin: 0cm 0cm 0pt 27pt"><span style="font-size: 10pt; color: black">删除该</span><span style="font-size: 10pt; color: black">bundle</span><span style="font-size: 10pt; color: black">注册的</span><span style="font-size: 10pt; color: black">listener&nbsp;&nbsp; </span></div>
<div style="margin: 0cm 0cm 0pt 27pt; text-indent: -18pt"><span>5．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>该bundle的状态返回到resolved状态</div>
<div style="margin: 0cm 0cm 0pt 27pt; text-indent: -18pt"><span>6．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>发stopped事件给该bundle</div>
<div style="margin: 0cm 0cm 0pt 5.25pt">&nbsp;</div>
<div style="margin: 0cm 0cm 0pt 26.25pt; text-indent: -21pt"><span>&#252;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Bundle的卸载</div>
<div style="margin: 0cm 0cm 0pt 23.25pt; text-indent: -18pt"><span>1．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>Stop bundle</div>
<div style="margin: 0cm 0cm 0pt 23.25pt; text-indent: -18pt"><span>2．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>把该bundle从缓存中删除</div>
<div style="margin: 0cm 0cm 0pt 23.25pt; text-indent: -18pt"><span>3．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>把该bundle放入uninstall 类别中</div>
<div style="margin: 0cm 0cm 0pt 23.25pt; text-indent: -18pt"><span>4．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>该bundle状态设置成uninstalled</div>
<div style="margin: 0cm 0cm 0pt 23.25pt; text-indent: -18pt"><span>5．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>触发bundle的uninstall事件</div>
<div style="margin: 0cm 0cm 0pt 23.25pt; text-indent: -18pt"><span>6．<span style="font: 7pt 'Times New Roman'"><font size="3">&nbsp; </font></span></span>看是否有以来该bundle的module，如果没有则垃圾回收</div>
<div style="margin: 13pt 0cm"><strong><font size="5">Listener和事件机制<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></font></strong></div>
<div>关于这一部分功能和用法已在上一篇service层里已经做了介绍，这里只做一下简单的罗列</div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt"><span>&#252;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Framework</div>
<div style="margin: 0cm 0cm 0pt 21pt">FrameworkListener：</div>
<div style="margin: 0cm 0cm 0pt 21pt">注册时间：</div>
<div style="margin: 0cm 0cm 0pt 21pt">触发时间：</div>
<div style="margin: 0cm 0cm 0pt 21pt">作用：OSGI environment</div>
<div style="text-indent: 10.5pt">&nbsp;FrameworkEvent: type，bundle，throwable</div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt"><span>&#252;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Bundle</div>
<div style="text-indent: 21.75pt"><span style="font-size: 10pt; color: black">BundleListener</span></div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: 5.25pt">注册时间：</div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: 5.25pt">触发时间：</div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: 5.25pt">作用：<span style="font-size: 10pt; color: black">a bundle lifecycle change.</span></div>
<div style="text-indent: 21.75pt">BundleEvent: Bundle,type</div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt"><span>&#252;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Service</div>
<div style="margin: 0cm 0cm 0pt 21pt">ServiceListener</div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: 5.25pt">注册时间：</div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: 5.25pt">触发时间：</div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: 5.25pt">作用：a service lifecycle change.</div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: 5.25pt">ServiceEvent:serviceReference ,type</div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: 5.25pt">&nbsp;</div>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; width: 464.4pt; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" width="619" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 113.25pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="151">
            <div>资源</div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div>事件类型</div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div>触发时机</div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 113.25pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="151" rowspan="6">
            <div>Framework</div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; background: silver; color: black">STARTED</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div><span style="font-size: 10pt; color: black">Framework</span><span style="font-size: 10pt; color: black">启动完成</span></div>
            <div><span style="font-size: 10pt; color: #3f5fbf"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Framework has started after all installed bundles that are marked to be started have been started and the Framework has reached the intitial start level.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; background: silver; color: #0000c0">ERROR</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div><span style="font-size: 10pt; color: #3f5fbf"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">There was an error associated with a bundle.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; background: silver; color: #0000c0">PACKAGES_REFRESHED</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf">
            <div><span style="font-size: 10pt; color: black">Framework has completed the refresh &nbsp;packages operation initiated by a call to the</span></div>
            <span style="font-size: 10pt; color: black">PackageAdmin.refreshPackages method.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; background: silver; color: #0000c0">STARTLEVEL_CHANGED</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf">
            <div><span style="font-size: 10pt; color: black">the Framework has completed changing the active start level initiated by a call to the StartLevel.setStartLevel</span></div>
            <span style="font-size: 10pt; color: black">method.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; background: silver; color: #0000c0">WARNING</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">There was a warning associated with a bundle.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; color: #0000c0">INFO</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">There was an informational event associated with a bundle.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 113.25pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="151" rowspan="8">
            <div>Bundle</div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; background: silver; color: #0000c0">INSTALLED</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">The bundle has been installed.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; color: #0000c0">STARTED</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">The bundle has been started.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; color: #0000c0">STOPPED</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">The bundle has been stopped.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; color: #0000c0">UNINSTALLED</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">The bundle has been uninstalled.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; color: #0000c0">RESOLVED</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">The bundle has been resolved.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; color: #0000c0">UNRESOLVED</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">The bundle has been unresolved.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; color: #0000c0">STARTING</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">The bundle is about to start.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; color: #0000c0">STOPPING</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">The bundle is about to stop.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 113.25pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="151" rowspan="4">
            <div>Service</div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; background: silver; color: #0000c0">REGISTERED</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">This service has been registered.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; color: #0000c0">MODIFIED</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf"><span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-fareast-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">The properties of a registered service have been modified.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div><em><span style="font-size: 10pt; color: #0000c0">UNREGISTERING</span></em></div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left"><span style="font-size: 10pt; color: #3f5fbf">&nbsp;<span lang="EN-US" style="font-size: 10pt; color: black; font-family: 'Courier New'; mso-font-kerning: 0pt">This service is in the process of being unregistered.<O:P></O:P></span></span></div>
            <div align="left">&nbsp;</div>
            <div align="left"><span style="font-size: 10pt; color: black">
            <div><span style="font-size: 10pt; color: black">If a bundle is using a service that is &lt;code&gt;UNREGISTERING&lt;/code&gt;, the</span></div>
            <div><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; &nbsp;bundle should release its use of the service when it receives this event.</span></div>
            <div><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; &nbsp;If the bundle does not release its use of the service when it receives</span></div>
            <div><span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; &nbsp;this event, the Framework will automatically release the bundle's use of</span></div>
            <span style="font-size: 10pt; color: black">&nbsp;&nbsp;&nbsp; &nbsp;the service while completing the service unregistration operation.</span></span></div>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 134pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="179">
            <div>&nbsp;</div>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #ece9d8; padding-bottom: 0cm; width: 217.15pt; border-top-color: #ece9d8; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="290">
            <div align="left">&nbsp;</div>
            </td>
        </tr>
    </tbody>
</table>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><span>&nbsp;&nbsp; </span></div>
<div style="margin: 13pt 0cm"><strong><font size="5">资源的查找</font></strong></div>
<div>几点说明<br />
系统启动时候，会把所有职责的关联关系wire起来</div>
<div>并且创建核心的查找资源policy</div>
<div>还有就是有的module可以放在resolve阶段可以放到查找资源的时候进行，实现懒加载的功能</div>
<div>&nbsp;</div>
<div>1.查找资源的核心类，分发中心，所有的调度逻辑都在这里</div>
<div>2.所有的资源查找都代理到该核心类，有点象代理的方式</div>
<div>3.module的修改，这里会实时的得到更新（通过注册listener）</div>
<div>资源的查找：在本bundle的classloader范围内，进行class的查找，资源加载的顺序可以参见规范</div>
<div>下面是类查找的类图</div>
<div><img alt="" src="http://gocom.primeton.com/uploads/FCKUserFiles/Image/ss(1).gif" /></div>
<div>&nbsp;</div>
<div>该bundle的Classloader在bundle的resolve阶段就创建好了</div>
<div>关于bundle的说明定义中的import export详见规范</div>
<div style="margin: 13pt 0cm"><strong><font size="5">系统Bundle的启动过程</font></strong></div>
<div>1．系统bundle由框架启动，并且只启动一次</div>
<div>2． 创建服务的注册中心，该中心作为各种事件的分发场所。</div>
<div>3． 创建核心的查找资源的policy，加入resolver listener到该policy，可以在module解析后，得到通知更新bundle的状态</div>
<div>4． 初始化事件分发器</div>
<div>5. 在加载其他的bundle之前，创建系统的bundle负责容器相关的service，resolve系统bundle，创建系统bundle的activator，创建bundle的上下文，并触发activator</div>
<div>6. 安装其他的bundle</div>
<div>7&nbsp;触发系统bundle的started事件，标志系统bundle启动完成</div>
<div>8. 触发框架的started时间，标志框架启动完成</div>
<img src ="http://www.blogjava.net/yangbutao/aggbug/147771.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangbutao/" target="_blank">阿不</a> 2007-09-24 13:26 <a href="http://www.blogjava.net/yangbutao/archive/2007/09/24/147771.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSGI 服务层探究</title><link>http://www.blogjava.net/yangbutao/archive/2007/08/14/136620.html</link><dc:creator>阿不</dc:creator><author>阿不</author><pubDate>Tue, 14 Aug 2007 03:51:00 GMT</pubDate><guid>http://www.blogjava.net/yangbutao/archive/2007/08/14/136620.html</guid><wfw:comment>http://www.blogjava.net/yangbutao/comments/136620.html</wfw:comment><comments>http://www.blogjava.net/yangbutao/archive/2007/08/14/136620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yangbutao/comments/commentRss/136620.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yangbutao/services/trackbacks/136620.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: OSGI的框架很好的解决了模块动态的更新，部署，以及解决他们之间的依赖关系<br>的问题，更够搭建动态化的系统可以说是OSGI在SCA的部署策略上的一种很好的参考实现。<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/yangbutao/archive/2007/08/14/136620.html'>阅读全文</a><img src ="http://www.blogjava.net/yangbutao/aggbug/136620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yangbutao/" target="_blank">阿不</a> 2007-08-14 11:51 <a href="http://www.blogjava.net/yangbutao/archive/2007/08/14/136620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>