??xml version="1.0" encoding="utf-8" standalone="yes"?>粉嫩精品一区二区三区在线观看,国产一区二区三区免费,欧美视频福利http://www.aygfsteel.com/yangbutao/zh-cnSun, 18 May 2025 23:34:12 GMTSun, 18 May 2025 23:34:12 GMT60析扩展点(Extension PointQ?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/yangbutao/archive/2007/09/27/148500.html</guid><wfw:comment>http://www.aygfsteel.com/yangbutao/comments/148500.html</wfw:comment><comments>http://www.aygfsteel.com/yangbutao/archive/2007/09/27/148500.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yangbutao/comments/commentRss/148500.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yangbutao/services/trackbacks/148500.html</trackback:ping><description><![CDATA[     摘要: 扩展QExtensionQ是很多可扩展项目中一个关键的机制Q可以利用扩展向q_d新功能。但是扩展不能随意地创徏Q必L照扩展点QExtension PointQ定义的规范q行明确的声明,q_才能识别些扩展。所谓扩展点Q就是系l定义出来可以让你扩展的地方Q可以认为是一些扩展的契约Q而扩展,q是你对q些扩展点的实现Q当然你自己的插件也可以定义扩展点供别的开发h员扩展?nbsp; <a href='http://www.aygfsteel.com/yangbutao/archive/2007/09/27/148500.html'>阅读全文</a><img src ="http://www.aygfsteel.com/yangbutao/aggbug/148500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yangbutao/" target="_blank">阿不</a> 2007-09-27 09:09 <a href="http://www.aygfsteel.com/yangbutao/archive/2007/09/27/148500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSGI Module&lifecyclehttp://www.aygfsteel.com/yangbutao/archive/2007/09/24/147771.html阿不阿不Mon, 24 Sep 2007 05:26:00 GMThttp://www.aygfsteel.com/yangbutao/archive/2007/09/24/147771.htmlhttp://www.aygfsteel.com/yangbutao/comments/147771.htmlhttp://www.aygfsteel.com/yangbutao/archive/2007/09/24/147771.html#Feedback0http://www.aygfsteel.com/yangbutao/comments/commentRss/147771.htmlhttp://www.aygfsteel.com/yangbutao/services/trackbacks/147771.html                                                           OSGI Module&lifecycle
 
OSGI概念中主要分ZBundle和ServiceQ可以认为Bundle是一个模块的理器,主要是通过BundleActivator理模块的生命周期,而Service则是q个模块可暴露对外的服务对象Q这里体COSGI和传l的Plugin Framework不同的一个地方,理和静态结构分开Q在OSGI中通过在manifest.mf文g中增加一些内Ҏ发布BundleQ在其中描述了Bundle的提供商、版本、唯一ID、classpath、暴露对外的包、所依赖的包Q每个Bundle拥有自己的ClassLoader以及contextQ通过context可进行服务的注册、卸载等Q这些操作都会通过事g机制q播l相应的其他的BundleQ一般来说都为通过在Bundle中编写初始需要注册的服务的方法来完成Bundle可供外部使用的服务的暴露功能Q如需要调用其他Plugin提供的服务可通过context的getServiceReference先获取Service的句柄,再通过context.getService(ServiceReference)的方法获取Service的实体?/div>
前一D|间对osgi的service层做了介l,下面介绍module和lifecycle层,在这里主要介llifecycle
pȝ框架对bundle的生命周期进行了理?/div>
osgi生命周期的管理,覆盖到bundle的安装,启动Q停止,更新Q卸载,和监控这么一个过E?/div>
Bundle的生命周?/span>
下面是bundle的lifecycle的类?/div>
下面详细介绍bundle的几个对?/div>
 
l         Bunlde 标识
 Identifier
 Location
 symbolicName
l         bundle的状?/div>
  状态{换图
ü         bundle的安装一般有两种方式Q?/div>
通过另外一个bundle的bundlecontext来完?/div>
通过命o行的形式Q比如系lbundle一般是q样的)来完成的
ü         Bundle的解析(一般是在启动过E中完成的)
Ҏbundle的定义,创徏Z版本的moduleQ?span style="font-size: 10pt; color: black">ModuleDefinitionQ?/span>ContentLoaderQ?/span>WireQ?/div>
ü         Bundle的启动,pbundle的调用start api来完成的
      q里包含创徏该bundle的上下文QBundleContextQ?/div>
      创徏该bundle的activatorQ可以在activator里进行与该bundle相关的service的注册,bundlelistenerQservicelistener ,frameworklistener的注册以及安装其他的bundle.{?
      是否要立卌发该activatorQ需要根据该bundle的activator policy来决定;在用bundle获取resource的时候,采取解析bundleQ才创徏该bundle的classloader和activate该bundle。这栯节省启动的时_实现了懒加蝲?/div>
下图描述了bundle的启动过E中的状态变?/div>
ü         Bundle的更?/div>
Bundle的更斎ͼ是从一个版本到另一个版本的q移q程
程如下Q?/div>
1Q?span style="font: 7pt 'Times New Roman'">  查bundle的状?/div>
如果是uninsalledQ抛出异?/div>
2Q?span style="font: 7pt 'Times New Roman'">  Q但是不改变持久化的状?/span>Stop bundle
3Q?span style="font: 7pt 'Times New Roman'">  版本的修?/div>
4Q?span style="font: 7pt 'Times New Roman'">  更改bundle的时间戳Q状态设|成installed
5Q?span style="font: 7pt 'Times New Roman'">  发送unresolved事glbundle
6Q?span style="font: 7pt 'Times New Roman'">  把该bundle的老的module做一个removal标记Q表CZ可用
7Q?span style="font: 7pt 'Times New Roman'">  发送updated事glbundle
8Q?span style="font: 7pt 'Times New Roman'">  启动QstartQbundle
   
ü         Bundle的停?/div>
1Q?span style="font: 7pt 'Times New Roman'">  把bundle的持久化状态设|成inactive
2Q?span style="font: 7pt 'Times New Roman'">  查bundle的状?/div>
如果状态是InstalledQResolvedQ就q回
如果是uninstalledQ抛出异?/div>
如果是startingQstoppingQ抛异常
如果ACTIVEQ把bundle的状态设|成stoppingQ发stopping事g跟响应的bundle
3Q?span style="font: 7pt 'Times New Roman'">  调用该bundle的activator的stop操作Q清理分配的资源
4Q?span style="font: 7pt 'Times New Roman'">  清除bundle的上下文
清理?/span>bundle注册?/span>service
释放?/span>bundle用到?/span>service
删除?/span>bundle注册?/span>listener  
5Q?span style="font: 7pt 'Times New Roman'">  该bundle的状态返回到resolved状?/div>
6Q?span style="font: 7pt 'Times New Roman'">  发stopped事gl该bundle
 
ü         Bundle的卸?/div>
1Q?span style="font: 7pt 'Times New Roman'">  Stop bundle
2Q?span style="font: 7pt 'Times New Roman'">  把该bundle从缓存中删除
3Q?span style="font: 7pt 'Times New Roman'">  把该bundle攑օuninstall cd?/div>
4Q?span style="font: 7pt 'Times New Roman'">  该bundle状态设|成uninstalled
5Q?span style="font: 7pt 'Times New Roman'">  触发bundle的uninstall事g
6Q?span style="font: 7pt 'Times New Roman'">  看是否有以来该bundle的moduleQ如果没有则垃圾回收
Listener和事件机?span>            
关于q一部分功能和用法已在上一service层里已经做了介绍Q这里只做一下简单的|列
ü         Framework
FrameworkListenerQ?/div>
注册旉Q?/div>
触发旉Q?/div>
作用QOSGI environment
 FrameworkEvent: typeQbundleQthrowable
ü         Bundle
BundleListener
注册旉Q?/div>
触发旉Q?/div>
作用Q?span style="font-size: 10pt; color: black">a bundle lifecycle change.
BundleEvent: Bundle,type
ü         Service
ServiceListener
注册旉Q?/div>
触发旉Q?/div>
作用Qa service lifecycle change.
ServiceEvent:serviceReference ,type
 
资源
事gcd
触发时机
Framework
STARTED
Framework启动完成
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.
ERROR
There was an error associated with a bundle.
PACKAGES_REFRESHED
Framework has completed the refresh  packages operation initiated by a call to the
PackageAdmin.refreshPackages method.
STARTLEVEL_CHANGED
the Framework has completed changing the active start level initiated by a call to the StartLevel.setStartLevel
method.
WARNING
There was a warning associated with a bundle.
INFO
There was an informational event associated with a bundle.
Bundle
INSTALLED
The bundle has been installed.
STARTED
The bundle has been started.
STOPPED
The bundle has been stopped.
UNINSTALLED
The bundle has been uninstalled.
RESOLVED
The bundle has been resolved.
UNRESOLVED
The bundle has been unresolved.
STARTING
The bundle is about to start.
STOPPING
The bundle is about to stop.
Service
REGISTERED
This service has been registered.
MODIFIED
The properties of a registered service have been modified.
UNREGISTERING
 This service is in the process of being unregistered.
 
If a bundle is using a service that is <code>UNREGISTERING</code>, the
     bundle should release its use of the service when it receives this event.
     If the bundle does not release its use of the service when it receives
     this event, the Framework will automatically release the bundle's use of
     the service while completing the service unregistration operation.
 
 
 
 
  
资源的查?/font>
几点说明
pȝ启动时候,会把所有职责的兌关系wireh
q且创徏核心的查找资源policy
q有是有的module可以攑֜resolve阶段可以攑ֈ查找资源的时候进行,实现懒加载的功能
 
1.查找资源的核心类Q分发中心,所有的调度逻辑都在q里
2.所有的资源查找都代理到该核心类Q有点象代理的方?/div>
3.module的修改,q里会实时的得到更新Q通过注册listenerQ?/div>
资源的查找:在本bundle的classloader范围内,q行class的查找,资源加蝲的顺序可以参见规?/div>
下面是类查找的类?/div>
 
该bundle的Classloader在bundle的resolve阶段创建好?/div>
关于bundle的说明定义中的import export详见规范
pȝBundle的启动过E?/font>
1Q系lbundle由框架启动,q且只启动一?/div>
2Q?创徏服务的注册中心,该中心作为各U事件的分发场所?/div>
3Q?创徏核心的查找资源的policyQ加入resolver listener到该policyQ可以在module解析后,得到通知更新bundle的状?/div>
4Q?初始化事件分发器
5. 在加载其他的bundle之前Q创建系l的bundle负责容器相关的serviceQresolvepȝbundleQ创建系lbundle的activatorQ创建bundle的上下文Qƈ触发activator
6. 安装其他的bundle
7 触发pȝbundle的started事gQ标志系lbundle启动完成
8. 触发框架的started旉Q标志框架启动完?/div>

阿不 2007-09-24 13:26 发表评论
]]>OSGI 服务层探I?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/yangbutao/archive/2007/08/14/136620.html</guid><wfw:comment>http://www.aygfsteel.com/yangbutao/comments/136620.html</wfw:comment><comments>http://www.aygfsteel.com/yangbutao/archive/2007/08/14/136620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yangbutao/comments/commentRss/136620.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yangbutao/services/trackbacks/136620.html</trackback:ping><description><![CDATA[     摘要: OSGI的框架很好的解决了模块动态的更新Q部|Ԍ以及解决他们之间的依赖关p?<br>的问题,更够搭徏动态化的系l可以说是OSGI在SCA的部|策略上的一U很好的参考实现?<br>  <a href='http://www.aygfsteel.com/yangbutao/archive/2007/08/14/136620.html'>阅读全文</a><img src ="http://www.aygfsteel.com/yangbutao/aggbug/136620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yangbutao/" target="_blank">阿不</a> 2007-08-14 11:51 <a href="http://www.aygfsteel.com/yangbutao/archive/2007/08/14/136620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ɫ</a>| <a href="http://" target="_blank">¡Ң</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ֶ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ӣɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">»</a>| <a href="http://" target="_blank">ī</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̫</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">®</a>| <a href="http://" target="_blank">Ů</a>| <a href="http://" target="_blank">ͤ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ǿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">书</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʼ</a>| <a href="http://" target="_blank">̫</a>| <a href="http://" target="_blank">ͨ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ײ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>