0

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 を実行する機能にまだこだわっています。ありとあらゆる助けが大歓迎です!締め切りが非常に迫っています (私は知っています...誰が正しくないのですか? :)) そして、すべての助けを喜んで歓迎します! ありがとう!

4

1 に答える 1

1

私は WebSphere に詳しくありませんが、問題は、あなたの投稿からの次のステートメントにあると思います。この新しいバンドルの各 jar" . これは正しくありません。

あなたがすべきことは次のとおりです。

  1. 動作する DS 実装を一緒に形成するバンドルを個別に OSGi 環境にロードします。つまり、個別のバンドルとして (それらは既にバンドルになっています)。
  2. Service_B に関連するコードと xml 用に別のバンドルを作成します。

この方法でのみ、SCR はバンドルを取得してそのサービスを作成できます。SCR は、DS コンポーネントの他のバンドルを追跡し、それに応じてこれらの宣言を処理する別個のバンドルです。

于 2013-12-10T07:09:39.670 に答える