問題タブ [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.
eclipse - OSGI: 宣言型サービス コンポーネントの開始を待つ最善の方法は何ですか?
次の問題があります。
1: OSGI バンドル A (分点) がアクティブ化され、アクティベーターが XML ファイルを解析します
2: XML ファイルで、別のバンドル (B) に存在する宣言型サービスが要求されます
3: バンドル B はまだアクティブ化されていません。そのため、バンドル A のアクティベーターは待機する必要があります
DS で純粋にこれにアプローチする方法は知っていますが、解析はアクティベーターで実行する必要があります。また、開始レベルなどでふざけたくありません。理想的には、必要に応じてバンドル B によって提供されるサービスを登録できるようにしたいと考えています。
これを達成するエレガントな方法はありますか?
ありがとう、
キース
java - OSGi 宣言型サービスと Spring
Spring と JDBC を使用してリポジトリの実装を提供するデータ アクセス モジュールがあります。
したがって、Spring コンテキストを次のように定義します。
また、次のように、Declarative Services を使用してリポジトリの実装をサービスとして公開します。
そのため、私のサービスは Spring 環境の外で作成されているため、完全には構成されていません (たとえば、データソースが挿入されていません)。
Spring を Declarative Services と統合する正しい方法を探しています。
ありがとう、ミカエル
java - 実行時に宣言型サービスを取得
実行時まで要求するサービスの属性がわからない場合、できれば宣言型サービスを使用して、サービスを取得する正しい方法は何ですか?
このユース ケースは、サービス バージョン 1.0、2.0、および 3.0 を提供する 3 つのバンドルがあるが、ユーザーが UI でいずれかを選択するまで、どれが消費されるかわからないことに似ています。ユーザーが 2.0 を選択すると、コンシューマはバンドル 2.0 のものを消費します
私たちは BND アノテーションを使用しているので、それらがあれば理想的ですが、アノテーションや宣言的なサービス インジェクションを使用する代わりに、OSGi API を直接使用する必要があると感じています。
最後に、関連性がある場合、これは、さまざまな動作/実装についてではなく、リソース (XML スキーマ) のさまざまなバージョンを取得するためのものです。サービス自体のコードは同じであっても、サービスはバージョンごとに異なる内部リソースを提供するという考えでした。
osgi - OSGi サービス: バンドル/コンポーネントの参照サービスのリクエスト
私は現在、OSGi サービス、より具体的に言えば、サービス間の配線に「苦労」しています。DS、SCR の基本と、コンポーネント インスタンスがサービスを取得するための一般的な戦略を認識しています。とにかく、ここに私の問題があります:
DS に続いて、コンポーネントは、XML ファイルで提供および消費されるサービスなどを宣言します。私の場合、特定のコンポーネントの「消費/参照」サービス (コンポーネントの XML ファイルの「参照」タグで宣言されている) に関心があります。
たとえば、実行中の OSGi アプリケーションを考えてみましょう。サービス (DS) に基づいて互いに連携する一連のバンドルです。ここで、特定のバンドルを選択し、それが消費する (可能性のある) サービスへのすべての参照をクエリします。これらのサービスが現在利用可能かどうかは関係ありません。
inspect requirements *などの Apache Felix GoGo シェル コマンドを参照すると、インポートされたパッケージなどに関する情報は得られますが、消費されたサービスに関する完全な概要は得られません (-> 現在消費されているサービスとコンポーネントが待機しているサービスの両方)。
サービスの登録、変更、および登録解除に関する洞察を提供するフレームワーク API について読みましたが、明らかに、どのサービス バンドルが待機しているかに関する情報を提供していません。OSGi コア仕様に従って、これはListener Hookによって実現できます。
特定のバンドルのすべての参照されたサービスを取得するために、たとえば SCR にクエリを実行できる方法はありませんか? 明らかに、SCR はバンドルの Service-Component-XML ファイルを読み取り、消費/参照されたサービスを追跡するためにある種の「サービス トラッカー」を「登録」することになっています。利用可能ですよね?
これで私を助けていただければ幸いです。
ありがとう、ドン
java - OSGi - 名前 (id) で ds サービスを取得する
私はOSGiの初心者です。数時間グーグルで検索しましたが、答えが見つかりませんでした。私の理解が間違っているのかもしれません。だから問題。コンポーネントがあるとします。
そしてコードで:
しかし、私は得るnull
。間違いはどこですか?フィルターは(name=sample.component)
合っていますか?または、サービスのIDを設定して検索するにはどうすればよいですか?
java - バンドルは DS を使用して複数回インスタンス化されています
バンドルのヒップを持つアプリケーションを作成しています。それらのいくつかはインターフェースであり、いくつかはそれらのインターフェースの実装です。サービスを提供および使用するために宣言型サービス (DS) を使用しています。つまり、各バンドルには、提供/参照しているサービスを記述する component.xml があります。
ClockWidget
現在、 3 つのインターフェイスを実装するという名前のクラスがあります (添付の図を参照)。実装されたサービスごとに、このサービスを参照する特定のクラスがあります。たとえば、Timeout
クラスには、サービスを実装する人を受け取る bind メソッドがありTimeoutListener
ます。
問題は、ClockWidget
クラスのコンストラクターが 3 回呼び出されていることです。明らかに、それを他のバンドルで使用されているサービスの数と関連付けました。
問題は、複数のサービスを実装するバンドルを処理するための適切なアプローチ/プラクティスは何ですか? つまり、このバンドルをアプリケーション内で複製したくありません。この男を参照している 3 つのクラスで同じインスタンスを使用したいと思います。マニフェストで singleton プロパティを有効にしようとしましたが、何も変わりませんでした。
ClockWidget.class
:
そのコンポーネント定義ClockWidget.xml
が提供するサービスを利用するクラスですClockWidget
。この場合、Timeout
クラス:
タイムアウト コンポーネントの説明:
なにか提案を?
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 の両方の参照されたサービスからのバインドは行われますか?
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 にそのようなプラグインはありますか?
どんな助けでも大歓迎です。
java - gradle を使用して OSGI-INF/serviceComponent.xml を生成します
OSGI-INF/serviceComponent.xml は、次のような依存関係を追加することにより、maven scr felix プラグインを使用して生成できます。
しかし、gradleの場合、生成できません..追加しようとしました
be.jlr-home.gradle が見つからないというエラーが発生しています。
私は何か間違ったことをしていますか?
基本的に、依存関係をgradleに追加してservicecomponent.xmlを生成する必要があります
xml - OSGi Declarative Service コンポーネントの説明における複数のイベント トピック
とても単純なことだと思いますが、コンポーネントが OSGi フレームワークで複数のイベント トピックをリッスンするために必要な XML スキーマを理解できていません。
次の2つのイベントを処理したいのですが、ある時点でさらに多くのイベントを処理したい:
私はこのようなものを試しました
また
また
残念ながら、私の OSGi ブックでは 1 つのイベント トピックしか使用されておらず、驚いたことにネット上で何も見つかりませんでした。DS コンポーネントの説明に XML スキーマを使用しようとしましたが、理解できませんでした: http://www.osgi.org/xmlns/scr/v1.2.0/scr.xsd