私の現在のアプリケーションでは、このパターンをいくつかの場所で実行しました。異なるが関連するジョブを行う単一のバンドル内に2つのサービス・インターフェースがあります。OSGiコンポーネント・モデルのバンドル内およびバンドル相互依存性
interface Service1 { ... }
interface Service2 { ... }
との両方を実装するシングルトンコンポーネントを持っていますが、それぞれが他への参照を必要とする見つけたい:
これを許可3つのOSGiのコンポーネントモデルの(DS、青写真、およびiPOJO)public class Service1Impl implements Service1 {
private Service2 service2;
...
}
public class Service2Impl implements Service2 {
private Service1 service1;
...
}
:1)Service1Impl
とService2Impl
が同じバンドルに入っている場合。 2)彼らが異なるバンドルにいるとき?
"Service1はService2がアクティブになると機能し、その逆もあります。したがって、フレームワークがサービスを開始できる順序はありません。"フレームワークはそれらを公開せずに両方のインスタンスを作成することができます(クライアントコードで呼び出すことはできず、参照の欠如は問題ではありません)。または、他のインスタンスへの参照なしに1つのインスタンスを公開し、2番目のインスタンスが作成されるまで、すべての呼び出しをブロックすることもできます。例えば。これは '@ Autowired' Spring Beanでうまく動作します。 –
DS仕様を見ると、実際にはこの状況でもう一方のサービスが提供されていません(112.3.5を参照)。 –
この場合、iPOJOには時間的な依存性もあります。 – Clement