当前位置:编程学习 > JAVA >>

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

刚刚研究osgi,当前对osgi的组件动态升级觉得很有趣。在《OSGi实战》这本书的Ch3.5.2 Refreshing bundles一节里讲了一些组件动态升级的过程:
Bundle A(Version 1.0) <--- Bundle B
      | (Update Bundle A)
Bundle A(Version 2.0)
Bundle A(Version 1.0) <--- Bundle B
      | (Refresh Bundle A)
Bundle A(Version 2.0) <--- Bundle B

Bundle A被Bundle B依赖,Bundle A的升级是两阶段式升级(update/refresh),update阶段后在内存里加载了一个新版本的Bundle A,同时Bundle B依赖的老版本Bundle A也在内存里,然后在Refresh阶段框架可以把Bundle B的依赖调整到Bundle A上。
但是书里没有讲这个过程涉及的细节,如果Bundle B在运行中已经依赖了老版本Bundle A中的类,比如在某个成员变量m_a就是Bundle A中类对象的引用,
在这种场景下Refresh Bundle A的话会发生什么?
允许Refresh 操作吗?
如果允许的话,刷新后Bundle B中再访问m_a的话会发生什么?
--------------------编程问答-------------------- 上面那个描述Bundle A升级过程的图画成这样更容易看清一些
-------------升级前-------------------
| Bundle A(Version 1.0) <--- Bundle B
--------------------------------------
      |
      | (Update Bundle A)
      |
-----------升级A之后---------------
| Bundle A(Version 2.0)
| Bundle A(Version 1.0) <--- Bundle B
-----------------------------------
      |
      | (Refresh Bundle A)
      |
-----------刷新A之后---------------
| Bundle A(Version 2.0) <--- Bundle B
-----------------------------------
补充:Java ,  Eclipse
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,