問題タブ [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.
communication - Eclipse 宣言型サービスとビュー (ContentProvider) の間でどのように通信しますか?
さまざまなビューを備えた Eclipse プラグインがあるとします。これらのビューは、データをビューにプッシュする OSGi バンドルからのデータを表示する必要があります。すべてのビューを OSGi バンドルと通信させるのではなく、ビューの黒板として機能し、ビューと他の OSGi バンドルとの間の通信を管理する中間の Facade クラスを用意します。これが理論です。
この問題は、ui バンドル (ビューと Facade を含む) が Declarative Services を使用して他のバンドル (DataStore と呼ぶ) と通信するために発生します。Data Store はさらに別のソースから非同期データ更新を受信するため、コンテンツを Facade (および利用可能な場合は他のバンドル) にプッシュする必要があります。OSGi は、データストアの DS 構成のカーディナリティの要件を満たすために Facade をインスタンス化しますが、ビューはプラグインの IApplication 実装によってインスタンス化されます。IApplication と Facade が同じクラスであっても、お互いを認識しない 2 つの別個のインスタンスを取得します。
これらのコンポーネント (プラグイン Application、Views などと OSGi でインスタンス化された Facade) 間の通信を有効にするにはどうすればよいですか?
java - サービス開始時にOSGiサービスを無効にする適切な方法は何ですか?
公開された(宣言型)サービスを使用してOSGiバンドルを作成しました。アクティベートが呼び出されたときに、サービスを提供できないなどの問題があることに気付いた場合は、サービスが公開されないようにする必要があります。現時点では、活性化関数は次のようになっています。
もう1つの方法は、次のように例外をラップ/伝播する(または、場合によっては新しい例外をスローする)ことです。
OSGi Service Platform Service Compendiumの宣言型サービスのセクションで指定されている正しい動作が見つかりませんが、何かが足りない可能性があります
java - 依存関係を使用してOSGiサービスを構築し、DSを介して公開する方法
私のサンプルクラス:
計画では、SingleModelProviderクラスをいくつかのバンドルで再利用して、ModelProviderのさまざまな実装を提供します。各バンドルで達成する必要があるのは、コンストラクターへの適切なパラメーターを使用してSingleModelProviderを単純にインスタンス化することです。DIフレームワークを使用した非常に単純なシナリオ。可能であれば、アクティベーターで定型コードを記述せずに、DS(宣言型サービス)を使用してModelProviderサービスを登録したいと思います。
これは可能ですか?
DSのクラス宣言ではコンストラクター引数(またはそのことについてはセッター)が許可されていないようであるため、これを実現する方法に関するドキュメントが見つからないようです。
工場を利用しますか?アクティベーターと公開サービスを手動で使用するよりも簡単ではない場合があるため、それが価値があるかどうかはわかりません。
configuration - サービスを構成するためのOSGi Declarative ServicesとManagedService?
私は最近、OSGi の Declarative Services がコンポーネントの構成を必須に設定できるという事実に出くわしました。これにより、コンポーネントはアクティブ化時にコンポーネントを受け取り、コンポーネントのアクティブ化と構成の間のギャップがなくなります。これにより、-メソッドを介して構成の更新を受信できることにも気付きましたmodified
。
ManagedService
この機能は、インターフェイスを実装し、提供する「サービス」の 1 つとして公開することによって提供される機能と非常によく似ているように思えます。
ManagedService
DS構成インジェクションを完全に無視して使用できるようです。
これらの手法のいずれかが他の手法よりも優先されますか、それとも私が見ていない他のトレードオフがありますか?
java - JAVA OSGi: InstantiationException with Declarative Services
I'm new to OSGi and am building a first DS-implementation.
Everything is coded according to "the book" but when running I get this error:
This is the configuration.xml of the module I want to use in other ones:
And this is the configuration.xml of the module which will use it:
Code for bind and unbind:
Any ideas? Thanks, Frank
java - スレッドで宣言型サービスを使用できますか?
OSGi モジュールとして次のコードがあります。
実行すると、ロガーが設定されたというメッセージが表示されます。
しかしその直後、run() 関数のループは storeLog が空であることを示しています。
何が間違っている可能性がありますか?
これがスレッドで実行されているという事実でしょうか?
osgi - OSGi: 宣言的なサービス コンポーネントのアクティブ化メソッド内でサービスを登録することは有効ですか?
これは別の質問の複製ですが、他の質問からコピーしています:
Felix SCR で次のメッセージが表示される問題に遭遇しました。
ServiceFactory.getService() で循環が発生しました
これが発生する理由は、アクティブ化メソッド内でそれを ServiceAImpl (ServiceA を提供する) と呼び、サービスが別のサービスを登録し、それを ServiceB と呼ぶためです。
ServiceA と ServiceB の両方に依存する ServiceCImpl という別のサービス コンポーネントがあります。ServiceAImpl が ServiceB を登録することで、ServiceCImpl が成立し、ServiceAImpl を起動する同じ呼び出し内で、ServiceCImpl バインド メソッドが呼び出されます。ServiceA のバインディング メソッドが呼び出されると、サイクルが検出され、コンポーネントの初期化に失敗します。
SCR が ServiceCImpl をバインドするのを待機できるようにする方法があるのかもしれませんし、ServiceB を別の方法で登録する必要があるのかもしれません。
Felix SCR が ServiceAImpl のアクティベーション メソッド内で ServiceCImpl をアクティベートする理由が理解できないと思います。アクティベーション メソッドが終了するまで ServiceCImpl が満足しているとは考えられません。おそらくこれは、サービスをフレームワークに直接登録しながら宣言型サービスを使用することの問題でしょうか?
Equinox のバージョンのような他の SCR 実装を試したことはありませんが、違いがあるかどうかを確認するために試してみるかもしれませんが、これが OSGi のものなのか Felix のものなのか誰かが知っているでしょうか?
追加情報: ServiceB がサービス コンポーネントではない理由については、ServiceA には実際には別のサービスに対する 0..n のサービス参照があり、それを ServiceD と呼びます。コンポーネントによって ServiceD インターフェイスが提供されるたびに、同じサービス オブジェクトを使用して ServiceB が登録されます。通常、ServiceD の同じプロバイダーが ServiceB を提供できますが、開発者が複数のサービス インターフェイスを提供する必要がないように、全体的なインターフェイスをより単純化することが目的です (また、ServiceB には、自動的に設定される必要があるいくつかのプロパティがあります)。手動で行われ、間違って行われる可能性があります)。
osgi - OSGi DS:バインディングメソッドによってスローされた例外がログに記録されるだけなのはなぜですか?
バインディングメソッドからスローされた例外のみをログに記録するのはなぜ仕様なのですか?
この場合、コンポーネントはアクティブ化されないと思います。
コンポーネントが正しく設定されていることを確認するには、バインディングメソッドからスローされた例外をどのように処理する必要がありますか?
osgi - OSGi宣言型サービス-NullPointer例外
宣言型サービスに問題があります。2つのバンドルがあります。1つはサーバープロバイダーで、もう1つはサービスを使用するユーザーインターフェイスです。
サーバー側では、実装は次のとおりです。
そして、OSGi-INFフォルダー内のXMLファイル:
クライアント側では、実装は次のとおりです。
そしてXMLファイル:
また、マニフェストファイルにタグService-Componentを含め、ACTIVEであるequinoxdsバンドルをデプロイしました。
クライアントはGWTユーザーインターフェイスであり、GWTのサーバー側にサービス参照を挿入します。Equinoxにアプリケーションをデプロイすると実行されますが、ボタンを押すと、ZBServiceを呼び出すイベントを起動します。アプリケーションをデバッグしましたが、エラーはzb属性がnullです。つまり、依存関係は注入されません。ただし、サービスはEquinoxで公開されています。Equinoxコンソールでサービスを作成すると、サービスが展開されます。次に、私の結論は、エラーは注入が実行されないためです。
誰かが理由を知っているかどうか知りたいですか?
よろしくお願いします!!
いい日
編集:
私はあなたの提案をしましたが、それは実行されません。コンポーネント名と条件/ポリシーを変更します。結果は同じです->インジェクションが行われないため、NullPointerExceptionが発生します。
また、アプリケーションをデバッグして、メソッドbindやunbindが呼び出されているかどうかを確認しましたが、呼び出されていません。
完全なクラスは次のとおりです。
そして、XMLクライアントは次のとおりです。
サービスがデプロイされている場合、なぜサービスが注入されないのですか?
osgi - Osgi 宣言型サービスの条件付きバインディング
私はこのシナリオを持っています。同じインターフェースを提供する 3 つの宣言型サービスがあります (たとえば、リーダー インターフェースで、readerimpl1-database-readerimpl2-flat file-readerimpl3-memory があります)。データベースの実装のみにバインドするコンシューマーが必要です。コンポーネント定義で名前を付けるので、その名前がレジストリにあると確信しているので、activate メソッドを追加すると、その名前を使用してコンポーネント コンテキストから検索できます。
サービス名をパラメーターとして使用しながら、バインド/バインド解除を介して試してみたいと思います。コンポーネント参照要素の「ターゲット」パラメーターを使用してこれを行うことができると確信していますが、使用方法がわかりません。
他の誰かがこれをしましたか?
これは @Reference(mapped-name="foo") を使用するのと似ています