OSGiフラグメントについて聞いた後、私は疑問に思いました:
フラグメントを使用してパッチを挿入できますか?つまり、既存の署名付きバンドル内の既存のクラスを置き換えることはできますか?
それを行う方法のドキュメントはありますか?
OSGiフラグメントについて聞いた後、私は疑問に思いました:
フラグメントを使用してパッチを挿入できますか?つまり、既存の署名付きバンドル内の既存のクラスを置き換えることはできますか?
それを行う方法のドキュメントはありますか?
署名付きバンドルをいじったことはありませんが、これはホスト バンドル内のクラスをオーバーライドするフラグメントを取得する方法です。ただし、事前にこれを計画する必要があります。
ホスト バンドルで、次のように Bundle-Classpath を定義します。
バンドル クラスパス: jar-not-in-host.jar;。
この jar ファイルは、ホストに存在してはなりません。次に、フラグメントに jar-not-in-host.jar という名前の jar を含めることができます。フラグメントがアタッチされると、jar-not-in-host.jar 内のクラスが、ホスト バンドルのルート内のクラスの前にロードされます。
あまり良くありませんが、うまくいきます。
答えはノーです。
OSGi フラグメントには独自のクラス ローダーがなく、ホストの一部として認識されます。新しいコードを挿入して既存のクラスを置き換えることはできません。フラグメントの一般的な使用法は、異なるホストに異なる実装を提供することです。その機能を必要とする別のバンドル (ホスト バンドルによってエクスポートされる) は、具体的な実装に依存しません。
バンドルはすでに OSGi のアトムの概念です。何かにパッチを当てたい場合は、新しいバージョンを提供する必要があります。