問題タブ [declarative-services]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1468 参照

eclipse - OSGI: 宣言型サービス コンポーネントの開始を待つ最善の方法は何ですか?

次の問題があります。

1: OSGI バンドル A (分点) がアクティブ化され、アクティベーターが XML ファイルを解析します
2: XML ファイルで、別のバンドル (B) に存在する宣言型サービスが要求されます
3: バンドル B はまだアクティブ化されていません。そのため、バンドル A のアクティベーターは待機する必要があります

DS で純粋にこれにアプローチする方法は知っていますが、解析はアクティベーターで実行する必要があります。また、開始レベルなどでふざけたくありません。理想的には、必要に応じてバンドル B によって提供されるサービスを登録できるようにしたいと考えています。

これを達成するエレガントな方法はありますか?

ありがとう、

キース

0 投票する
1 に答える
1467 参照

java - OSGi 宣言型サービスと Spring

Spring と JDBC を使用してリポジトリの実装を提供するデータ アクセス モジュールがあります。

したがって、Spring コンテキストを次のように定義します。

また、次のように、Declarative Services を使用してリポジトリの実装をサービスとして公開します。

そのため、私のサービスは Spring 環境の外で作成されているため、完全には構成されていません (たとえば、データソースが挿入されていません)。

Spring を Declarative Services と統合する正しい方法を探しています。

ありがとう、ミカエル

0 投票する
2 に答える
74 参照

java - 実行時に宣言型サービスを取得

実行時まで要求するサービスの属性がわからない場合、できれば宣言型サービスを使用して、サービスを取得する正しい方法は何ですか?

このユース ケースは、サービス バージョン 1.0、2.0、および 3.0 を提供する 3 つのバンドルがあるが、ユーザーが UI でいずれかを選択するまで、どれが消費されるかわからないことに似ています。ユーザーが 2.0 を選択すると、コンシューマはバンドル 2.0 のものを消費します

私たちは BND アノテーションを使用しているので、それらがあれば理想的ですが、アノテーションや宣言的なサービス インジェクションを使用する代わりに、OSGi API を直接使用する必要があると感じています。

最後に、関連性がある場合、これは、さまざまな動作/実装についてではなく、リソース (XML スキーマ) のさまざまなバージョンを取得するためのものです。サービス自体のコードは同じであっても、サービスはバージョンごとに異なる内部リソースを提供するという考えでした。

0 投票する
1 に答える
171 参照

osgi - OSGi サービス: バンドル/コンポーネントの参照サービスのリクエスト

私は現在、OSGi サービス、より具体的に言えば、サービス間の配線に「苦労」しています。DS、SCR の基本と、コンポーネント インスタンスがサービスを取得するための一般的な戦略を認識しています。とにかく、ここに私の問題があります:

DS に続いて、コンポーネントは、XML ファイルで提供および消費されるサービスなどを宣言します。私の場合、特定のコンポーネントの「消費/参照」サービス (コンポーネントの XML ファイルの「参照」タグで宣言されている) に関心があります。

たとえば、実行中の OSGi アプリケーションを考えてみましょう。サービス (DS) に基づいて互いに連携する一連のバンドルです。ここで、特定のバンドルを選択し、それが消費する (可能性のある) サービスへのすべての参照をクエリします。これらのサービスが現在利用可能かどうかは関係ありません

inspect requirements *などの Apache Felix GoGo シェル コマンドを参照すると、インポートされたパッケージなどに関する情報は得られますが、消費されたサービスに関する完全な概要は得られません (-> 現在消費されているサービスとコンポーネントが待機しているサービスの両方)。

サービスの登録、変更、および登録解除に関する洞察を提供するフレームワーク API について読みましたが、明らかに、どのサービス バンドルが待機しているかに関する情報を提供していません。OSGi コア仕様に従って、これはListener Hookによって実現できます。

特定のバンドルのすべての参照されたサービスを取得するために、たとえば SCR にクエリを実行できる方法はありませんか? 明らかに、SCR はバンドルの Service-Component-XML ファイルを読み取り、消費/参照されたサービスを追跡するためにある種の「サービス トラッカー」を「登録」することになっています。利用可能ですよね?

これで私を助けていただければ幸いです。

ありがとう、ドン

0 投票する
1 に答える
676 参照

java - OSGi - 名前 (id) で ds サービスを取得する

私はOSGiの初心者です。数時間グーグルで検索しましたが、答えが見つかりませんでした。私の理解が間違っているのかもしれません。だから問題。コンポーネントがあるとします。

そしてコードで:

しかし、私は得るnull。間違いはどこですか?フィルターは(name=sample.component)合っていますか?または、サービスのIDを設定して検索するにはどうすればよいですか?

0 投票する
2 に答える
80 参照

java - バンドルは DS を使用して複数回インスタンス化されています

バンドルのヒップを持つアプリケーションを作成しています。それらのいくつかはインターフェースであり、いくつかはそれらのインターフェースの実装です。サービスを提供および使用するために宣言型サービス (DS) を使用しています。つまり、各バンドルには、提供/参照しているサービスを記述する component.xml があります。

ClockWidget現在、 3 つのインターフェイスを実装するという名前のクラスがあります (添付の図を参照)。実装されたサービスごとに、このサービスを参照する特定のクラスがあります。たとえば、Timeoutクラスには、サービスを実装する人を受け取る bind メソッドがありTimeoutListenerます。 ここに画像の説明を入力

問題は、ClockWidgetクラスのコンストラクターが 3 回呼び出されていることです。明らかに、それを他のバンドルで使用されているサービスの数と関連付けました。

問題は、複数のサービスを実装するバンドルを処理するための適切なアプローチ/プラクティスは何ですか? つまり、このバンドルをアプリケーション内で複製したくありません。この男を参照している 3 つのクラスで同じインスタンスを使用したいと思います。マニフェストで singleton プロパティを有効にしようとしましたが、何も変わりませんでした。

ClockWidget.class:

そのコンポーネント定義ClockWidget.xml

が提供するサービスを利用するクラスですClockWidget。この場合、Timeoutクラス:

タイムアウト コンポーネントの説明:

なにか提案を?

0 投票する
2 に答える
167 参照

java - OSGI で抽象バンドルを作成しようとしています

OSGI で抽象バンドルとして何かを作成したいと思います。アイデアは、バンドル Ax (x は 1 から 9 まで) が B によって提供されるサービスを介してバンドル B にバインドする必要がある場合、asbtractA を作成することでより簡単に実行できるということです (したがって、Ax は abstractA を拡張します)。

ここで、abstractA は宣言型サービス ファイルを含むバンドルです。xml ファイルには、バンドル B への参照サービスが記述されており、abstractA の適切なクラスでは、bind unbind メソッドと start メソッドが実装されています。

Ax には独自の startx という start メソッドがあり、いくつかのサービスにバインドされているため、バンドルには独自の .xml ファイルがあるとします。

質問: start (abstractBundle から) と startx の両方が呼び出されますか? bundleAx と bundleabstractA の両方の参照されたサービスからのバインドは行われますか?

0 投票する
1 に答える
267 参照

java - DS Annotations の使用時に Gradle が SERVICE_COMPONENT を生成しない

私のプロジェクトでは、gradle と共に Declarative Services アノテーションを使用しています。

Component クラスでそれぞれの注釈 (@Component など) を指定しました。また、gradle ファイルに felix scr 注釈プロジェクトの依存関係を追加しました。しかし、プロジェクトをビルドすると、コンポーネント xml ファイルが生成されず、Manifest.MF ファイルの Service-Component ヘッダーも生成されません。

OSGI バンドルを生成するために、gradle で「osgi」プラグインを使用しています。

gradle はこのサポートを提供しますか? maven-scr プラグインを使用することで、maven で可能です。gradle にそのようなプラグインはありますか?

どんな助けでも大歓迎です。

0 投票する
3 に答える
1188 参照

java - gradle を使用して OSGI-INF/serviceComponent.xml を生成します

OSGI-INF/serviceComponent.xml は、次のような依存関係を追加することにより、maven scr felix プラグインを使用して生成できます。

しかし、gradleの場合、生成できません..追加しようとしました

be.jlr-home.gradle が見つからないというエラーが発生しています。

私は何か間違ったことをしていますか?

基本的に、依存関係をgradleに追加してservicecomponent.xmlを生成する必要があります

0 投票する
2 に答える
620 参照

xml - OSGi Declarative Service コンポーネントの説明における複数のイベント トピック

とても単純なことだと思いますが、コンポーネントが OSGi フレームワークで複数のイベント トピックをリッスンするために必要な XML スキーマを理解できていません。

次の2つのイベントを処理したいのですが、ある時点でさらに多くのイベントを処理したい:

私はこのようなものを試しました

また

また

残念ながら、私の OSGi ブックでは 1 つのイベント トピックしか使用されておらず、驚いたことにネット上で何も見つかりませんでした。DS コンポーネントの説明に XML スキーマを使用しようとしましたが、理解できませんでした: http://www.osgi.org/xmlns/scr/v1.2.0/scr.xsd