WebSphere v8.5 (Non-Liberty Profile) で実行されているブループリント管理の OSGI アプリケーションがあり、1 つのサービス Service_A が別のサービス Service_B への参照を持っています。ブループリント コンテナーではなく宣言型サービス サービス コンポーネント ランタイムによって Service_B を管理したいのですが、Service_A はブループリントで管理されます。
SCR を実行する際に問題が発生していると思います。正しく含めているかどうか、または実行されているかどうかを確認する方法がわかりません。Service_B の実装で、いくつかの print ステートメントを使用して「アクティブ化」と「非アクティブ化」を定義しました。これは、私の理解では、サービスを見つけたときに SCR によって呼び出される必要があります。ブレークポイントがそこで停止せず、コンソールに出力が表示されないため、呼び出されていません。
これまでのランタイムを含めるための私の努力は次のとおりです。
私の理解では、SCR を実行するために必要なのは次の 3 つの jar/bundle だけです。
- org.eclipse.equinox.ds
- org.eclipse.equinox.util
- org.eclipse.osgi.services
私は先に進み、上記のすべてのjarファイルを含む新しいOSGIバンドル/jarを作成し、この新しいバンドルの各jarのエクスポートを渡しました。次に、この DS バンドルをメインの OSGI アプリケーションに追加し、これらの DS バンドル エクスポートのそれぞれを、SCR によって管理されるサービスを含むバンドルにインポートしました。
これは私がハングアップしているように見える場所です:
OSGI フレームワークはサービスを含むバンドルをロードしていますが、サービスがレジストリに追加されていません。これは、サービスを定義する component.xml ファイルが読み取られていないことを示唆しています。インターンは、SCR が実行されていないことを示唆しています。私の理解では、そのファイルを読み取るものです。
そのため、SCR を実行する機能にまだこだわっています。ありとあらゆる助けが大歓迎です!締め切りが非常に迫っています (私は知っています...誰が正しくないのですか? :)) そして、すべての助けを喜んで歓迎します! ありがとう!