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