OSGi 環境で次の問題に直面しています。com.mybiz.example パッケージをエクスポートするバンドル A があるとします。このパッケージのバージョン 1.0.0 には、Bean クラス MyBean が含まれているため、
public class MyBean {
int var;
public MyBean() { }
public int getVar() { return var; }
public void setVar(int v) { var = v; }
}
バンドル B は、MyBean を使用するインターフェース MyService をエクスポートします。
public interface MyService {
public MyBean getMyBean();
}
注: 私たちのアーキテクチャでは、MyBean はインターフェイスではなくクラスである必要があります。
バンドル 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 クラスでホット フィックスを実行する必要がある場合、問題が発生します。フィールドといくつかのメソッドを追加する必要があるとしましょう。次に、バンドル A、B、C がデプロイされた実行中の OSGi 環境を取得しました。
私の要件は、バンドルを停止できないことです。
したがって、これらの仮説の下で、バンドル A の新しいバージョン、たとえば A_1.1.0.jar をデプロイします。A_1.1.0.jar に含まれる新しいバージョンの MyBean クラスを使用するバンドル C を作成できません。
どうすればいいですか?
どうもありがとうございました!
よろしくお願いします
シゲルシ