私はosgiコンポーネント/サービスの複数のインスタンスを使用しています。 これらのosgiコンポーネントは、Configuration Policy =必須でインスタンス化され、ConfigurationAdmin経由で構成を追加または削除することによって削除されます。 さらに、サービスインスタンスの「セット」を使用し、各セットは、その構成を介して、リファレンスと同じセットのサービスインスタンスのみを使用するように構成されています(ref.target =(id = "123"))。OSGi ConfigAdminサービスの削除
問題: ある時点では、セットを削除する必要があります。しかし、ConfigAdmin経由で1つのセットから設定オブジェクトを削除すると、別のセットのサービスの一部も無効になります。彼らは即座に再起動しますが、すべてのサービス参照を失い、使用できなくなります。
私は彼らがなぜ非活性化しているのか分かりません。
EDIT
、サービスは、典型的には、このように定義される:
@Component(policy = ConfigurationPolicy.REQUIRE)
@Service
public class AServiceImpl implements AService {
@Reference(target = "(service.pid=*)")
BService bService;
...
}
BServiceImplはまた、必要な設定ポリシーを使用します。利用できるようにする特定のサービスを選択するには、サービス対象のフィルタ
を生成されることはありません各サービス:
ターゲットが原因フェリックスSCRからこのdocスニペットの注釈に設定されています。この値の値を構成プロパティーで上書きできるようにするには、このパラメーターを宣言する必要があります。各サービス
ため:パラメータが宣言されていない場合は、「設定」の新しいサービスは、これらの手順は、セットのすべてのサービスのために実行されているインスタンス化されると、それぞれの宣言属性は
Properties serviceProperties.put(ref + ".target", "(" + PID + "=" + pid + ")");
...
serviceConfiguration.update(dict);
の各参照用
Configuration serviceConfiguration = configurationAdmin.createFactoryConfiguration(serviceInterfaceName, null);
Iは設定を記録しbindXXX()メソッドの参照のpidとフィルタが機能しているようです。私はいつも等しいpidで参照を得る。
実行例をgithub asapに追加します。
EDIT2
私は行動を示す例を追加しました。私は、サービスの2つの "セット"を作成し、サービス機能を呼び出し、機能が終了した後にサービスセットを削除します。サービスセット1を削除すると、サービスセット2が再度アクティブになります。
コード例 https://github.com/andineupert/osgi-configadmin-example.git
Githubで小さなデモンストレータを作れますか? –
いくつかのサンプルコードなしでは、問題を推測することさえ不可能です。 –
アイデアや提案はありますか? – andineupert