问题描述
刚刚研究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-----------------------------------