OSGi中bundle两阶段更新的细节是怎么样的?

问题描述

刚刚研究osgi,当前对osgi的组件动态升级觉得很有趣。在《OSGi实战》这本书的Ch3.5.2Refreshingbundles一节里讲了一些组件动态升级的过程:BundleA(Version1.0)<---BundleB|(UpdateBundleA)BundleA(Version2.0)BundleA(Version1.0)<---BundleB|(RefreshBundleA)BundleA(Version2.0)<---BundleBBundleA被BundleB依赖,BundleA的升级是两阶段式升级(update/refresh),update阶段后在内存里加载了一个新版本的BundleA,同时BundleB依赖的老版本BundleA也在内存里,然后在Refresh阶段框架可以把BundleB的依赖调整到BundleA上。但是书里没有讲这个过程涉及的细节,如果BundleB在运行中已经依赖了老版本BundleA中的类,比如在某个成员变量m_a就是BundleA中类对象的引用,在这种场景下RefreshBundleA的话会发生什么?允许Refresh操作吗?如果允许的话,刷新后BundleB中再访问m_a的话会发生什么?

解决方案

解决方案二:
上面那个描述BundleA升级过程的图画成这样更容易看清一些-------------升级前-------------------|BundleA(Version1.0)<---BundleB--------------------------------------||(UpdateBundleA)|-----------升级A之后---------------|BundleA(Version2.0)|BundleA(Version1.0)<---BundleB-----------------------------------||(RefreshBundleA)|-----------刷新A之后---------------|BundleA(Version2.0)<---BundleB-----------------------------------

时间: 2025-01-28 00:44:53

OSGi中bundle两阶段更新的细节是怎么样的?的相关文章

分布式事务(两阶段提交)模型详解

这一几天一直在回顾事务相关的知识,也准备把以前了解皮毛的知识进行一些深入总结,虽然这一些知识并没有用到,但是了解其实现原理还是很有必要的,因为知道了原理,你也能把它实现出来. 在上一节事务的编程模型里面,主要说明了三种编程模型,一般情况下,我们都接触的是单一资源的事务,也就是单独对一个数据库进行操作.如果需要跨多个资源保证事务一致性 举个例子:在ATM机取钱的时候,需要对用户的账户进行扣款处理,然后发送一条消息给消息服务器(假设消息服务器是用JMS实现的),由消息服务器异步通过短信通知用户.如果

移动应用开发者应该关注的 Google I/O 两项更新

移动应用开发者看过来,今年 Google I/O 这两项更新能帮上大忙 移动应用开发者看过来,今年 Google I/O 这两项更新能帮上大忙. I/O 的 Keynote 刚刚结束,用户可能为 Google 新的消费产品感到兴奋.但这毕竟是开发者大会,一些面向开发者的工具也有所更新: 移动营销工具 Universal App Campaigns 扩展到了 iOS 系统 推出全新的免费移动开发者平台 Firebase,无限制的通知权限,并且支持 iOS.Android 和 Web 平台 Univ

利用Eclipse开发基于OSGi的Bundle应用

开放服务网关协议 (Open Services Gateway Initiative),简称 OSGi,为网络服务定义了一个标准的.面向服务的计算环境,为用户提供了开放的.面向服务组件的.易于部署的编程模型,这个编程模型允许用户将定义好的接口规范绑定到 OSGi 运行环境中的特定Service,在构件 SOA 面向服务为中心的企业应用的过程中,OSGi 技术正发挥越来越重要的作用.在本文中,将介绍 OSGi 的概念和体系结构,并且利用 Eclipse 3.2 开发一个基于 OSGi 规范的服务应

在Word 2010中设置链接自动更新或手动更新

Word 2010文档中的链接更新方式包括"自动更新"和"手动更新"两种方式.如果使用"自动 更新"方式,则在打开包含有链接的Word文档时会提示用户是否使用链接文件中的数据更新本文档,如图2011081803所示 . 图2011081803 提 示用户是否更新链接数据 如果使用"手动更新"方式则不会提示更新链接,而需要用户手动进行更新.用户可以根据需要在Word 2010文档 中设置链接自动更新或手动更新,操作步骤如下所述:

Oracle分布式事务和两阶段提交(2PC)

分布式事务是指发生在多台数据库之间的事务,Oracle中通过dblink方式进行事务处理, 分布式事务比单机事务要复杂的多.大部分的关系型数据库通过两阶段提交(2 Phase Commit 2PC)算法来完成分布式事务,下面重点介绍下2PC算法. 1.分布式事务的 组成 在分布式事务中,主要有以下几个组成部分: Client:调用其它数据库信息的节点 Database:接受来自其它节点请求的节点 Global Coordinator (GC):发起分布式事务的节点 Local Coordinat

在Word2010中设置链接自动更新或手动更新

Word2010文档中的链接更新方式包括"自动更新"和"手动更新"两种方式.如果使用"自动更新"方式,则在打开包含有链接的Word文档时会提示用户是否使用链接文件中的数据更新本文档,如图1所示. 图1 提示用户是否更新链接数据如果使用"手动更新"方式则不会提示更新链接,而需要用户手动进行更新.用户可以根据需要在Word2010文档中设置链接自动更新或手动更新,操作步骤如下所述:第1步,打开Word2010文档窗口,右键单击链接

网页设计中文本排版的技巧和细节

网站的核心是内容,用户访问网站最重要的目的就是要看网站的正文,所以,网页的文本排版非常重要. 网页的文本排版并不是仅仅在CSS里设置个字体大小那么简单的,想要有好的排版,对细节要下一番功夫才行. 字体大小与行距 在早期的网页设计中,设计师为了追求中文字体的最佳视觉效果,经常使用12px像素的字号.其实在现在看来,网站内容页面用这么小的文字是不可取的,小字体的可读性很差,没有多少人愿意非常费力的盯着屏幕去辨识那些小字.应该说,将文字的字号设置成14px或者更大的16px会更加合理,浏览者阅读起来也

c++问题-c++中关于模板的一些小细节

问题描述 c++中关于模板的一些小细节 今天突然看到一细节,在模板中 template和template的区别是什么 解决方案 C++中typename和class的区别http://blog.163.com/susu_sf/blog/static/171060253201092233759957/ http://blog.csdn.net/dick_china/article/details/4522253 解决方案二: C++中typename和class的区别http://blog.163

java-android中使用按钮来更新UI

问题描述 android中使用按钮来更新UI 使用以下代码想实现:当点击一个按钮后要显示一个图像,两秒后这个图像又变得不可见. button.setOnClickListener(new OnClickListener() { public void onClick(View v) { firstImage.setVisibility(ImageView.VISIBLE); // delay of some sort firstImage.setVisibility(ImageView.INVI