我在 OSGi 环境下面临以下问题:假设我有一个包 A 导出 com.mybiz.example 包。这个包,在它的 1.0.0 版本中,包含一个 bean 类 MyBean 以便
public class MyBean {
int var;
public MyBean() { }
public int getVar() { return var; }
public void setVar(int v) { var = v; }
}
Bundle B 导出一个使用 MyBean 的接口 MyService:
public interface MyService {
public MyBean getMyBean();
}
注意:在我们的架构中,MyBean 必须是类而不是接口。
Bundle C 以这种方式使用 MyService 作为声明式服务:
private AtomicReference<MyService> _serv = new AtomicReference<MyService>();
public void addMyService(MyService serv) {
//this method is the one called by declarative services when Bundle B is started
_serv.set(serv);
}
public void run() {
...
MyBean x = _serv.getMyBean();
//use x ...
}
现在,如果我需要对 MyBean 类进行热修复,就会出现问题。假设我需要添加一个字段和一些方法。然后,我有一个正在运行的 OSGi 环境,其中部署了包 A、B、C。
我的要求是我不能停止任何捆绑。
因此,在这些假设下,我部署了我的包 A 的一个新版本,比如 A_1.1.0.jar。现在我无法使包 C 使用 A_1.1.0.jar 中包含的新版本的 MyBean 类。
我该怎么做?
非常感谢你!
最好的祝福
盖尔西