問題タブ [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 投票する
2 に答える
1345 参照

maven - Tycho ビルドのバンドルではないライブラリからの注釈の使用

Tycho を使用して Eclipse プラグインを構築しており、OSGi サービスに Declarative Services を利用しています。Eclipse には DS ファイル用の優れたエディターがありますが、それでも手動プロセスであるため、時間がかかり、エラーが発生しやすくなります。

Tycho OSGi 以外のプロジェクトでは、 を使用しmaven-scr-pluginてこれらの注釈を生成できます。Tycho の問題点は、org.apache.felix.annotationsjarへの参照を追加できないことです。

  • p2 リポジトリに存在しない
  • バンドルではありません

これらの注釈は で定義されるRetentionPolicy = CLASSため、バンドルに含める必要はありません。

pom-first artifacts への依存については知っていますが、アノテーション jar はバンドルではないため、うまくいきません。理想的には、コンパイル時に追加の jar を探すように Tycho/Eclipse を構成するだけで済みます。

Tycho と Eclipse で考慮されるコンパイル時のみの jar を取得するにはどうすればよいですか?


更新extraClasspathElements: のオプションを使用しようとしましたtycho-compiler-plugin。これにより、を呼び出すことができます(現在の pom.xmlmaven-scr-pluginを参照してください)。ただし、ビルドが失敗するため、scrプラグインはクラスにアクセスできないようです

[エラー] プロジェクト org.apache.sling.ide.eclipse-core: /mnt/md/ でゴール org.apache.felix:maven-scr-plugin:1.13.0:scr (generate-scr-descriptor) を実行できませんでしたrobert/git/sling-ide-tools/eclipse-core/src/org/apache/sling/ide/eclipse/core/ServerUtil.java : コンパイル済みクラスを読み込めません: org.apache.sling.ide.eclipse.core。 ServerUtil

完全なビルド ログも表示できます

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

java - OSGi 'update' コマンド; 動的サービスが再起動しない

システム全体をダウンさせることなく定期的に「更新」する予定の OSGi ベースのシステムを開発しています。バンドルの変更を容易にするために「更新」を使用するつもりであり、理論を証明するために小さなアプリ (2 バンドル) を作成しました。

私の最終目標: OSGi を使用してバンドルを動的に更新できるプラットフォームを実装しようとしています。

これまでのところ: 2 つのバンドルを作成しました。数学バンドル (加算と乗算が可能な 2 つのメソッドがあります) と、毎秒実行されるスレッドを持ち、2 つの乱数を生成し、前述の数学バンドルを使用してそれらを加算および乗算 (および結果を表示) する表示バンドルです私は宣言型サービスを使用しているため、インターフェイス IMath によって定義されたサービスをエクスポートする数学バンドルにコンポーネント定義があります。同様に、IMath インターフェイスで定義されたサービスにサブスクライブする (1:1 静的)ディスプレイバンドルにコンポーネント定義があります。各コンポーネントの起動/シャットダウンの各段階で典型的なデバッグ メッセージが表示されます。

プロジェクトが開始されると、通常は次のように表示されます。

その後、毎秒、表示スレッドが計算を行っていることがわかります。さらに、次のことができます (数学がバンドル 1 で、ディスプレイがバンドル 2 であると仮定します)。

問題:ここまでは順調ですよね? 「更新」コマンドを使用しようとするまで、すべてが順調に進んでいます。この場合、乗算計算でエラーが発生したため、数学バンドルを更新したいと考えています。

何?ds がスタートアップ メソッドを呼び出してディスプレイバンドルを再起動しなかったのはなぜですか? ディスプレイバンドルも更新してみましたが、問題なく動作しているようです。バンドルを更新すると再起動するような気がしますが、更新されたバンドルのサービスにサブスクライブするバンドルは、宙ぶらりんのままです。

さらに悪いことに、ディスプレイバンドルを停止して開始しても、まだ起動しません。

私は何かを間違った方法で見ていると確信しているので、誰かが私の問題に光を当てることができればいいと思います. ソース コードが必要な場合はお知らせください。基本的な Java ファイルをいくつか添付して、問題のデモを行います。

私の問題について十分に具体的でない場合は、お知らせください。推定します。

読んでくれてありがとう!アーロン

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

osgi - ServiceTracker と DS の組み合わせ?

存在するバンドルを想像してみましょう:

  • コンポーネントは、サービス レジストリ内のすべての「デバイス」サービス インスタンスをリッスンする役割を果たします。

  • 検出されたデバイスを使用して「アダプター」を作成するには、同じコンポーネントに「アダプター ファクトリ」が必要です。

  • ファクトリは別のバンドルによって所有されています。

ServiceTracker (アクティベーター + サービス トラッカー) を使用して問題の一部を解決できます。アクティベーターは ServiceTraker をインスタンス化し、「デバイス」サービスのすべての変更を登録できます。

しかし、他のバンドルで作成されたDSファクトリをこのサービストラッカーに注入することはできません. 「デバイス」サービスの変更をリッスンします)。

では...どうすればこのシナリオを解決できますか? クラス メンバーとして DS を使用して Service Tracker (私に最適) を使用するにはどうすればよいですか?

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

java - osgi 宣言型サービスのインスタンス化を制御する

宣言型サービスのインスタンス化を制御する簡単な方法を探しています。

私が欲しいのは、コンポーネントのインスタンスを返すように求められるが、インスタンス化を制御できるファクトリのようなものです。

現在、特定の辞書で newInstance を呼び出すことができる ComponentFactory を見つけました。しかし、私が本当に欲しいのは、IComponent が宣言型サービス インターフェイスであり、MyComponent が実装クラスであると仮定すると、このようなものです。

宣言型サービスでこのようなことは可能ですか? または、バンドル アクティベーション コードで独自のサービス登録を使用する必要がありますか?

前もって感謝します

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

osgi - 外部バンドルからの Osgi Equinox 有効化コンポーネント

このシナリオを考えると:

バンドル A: コンポーネント 1A (有効: false) バンドル B: コンポーネント 2B

バンドル B またはコンポーネント 2B からコンポーネント 1A を有効にするにはどうすればよいですか?

componentContext を使用してそれを実行しようとしましたが、

ただし、同じバンドル内のサービスでのみ機能するようです。

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

jar - バンドルの jar の外にあるコンポーネント定義をロードします

jar (バンドル) の外部からコンポーネント定義 (xml ファイル) をロードする必要があります。

私はそれを下に置いてみました:

  • plugins/my.bundle.name/OSGI-INF/mycomponent.xml
  • plugins/OSGI-INF/mycomponent.xml

そして、バンドルのクラスパスも試しましたが、運がありません。

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

servlets - OSGi 宣言型サービス インジェクション

ローカルの Glassfish サーバーで Declarative Services を使用して単純な OSGi サービスを実行しようとしています。提供するプラグインは常にアクティブです。

サービスを消費するサーブレットへの注入で問題が発生しました。サービス参照が注入されたオブジェクトと同じオブジェクトではないため、サーブレットが呼び出されると参照が null になります。

参照セッターにブレークポイントを設定してテストしたところ、サービスが注入されていることがわかりましたが、サーブレットをアプリケーションに呼び出すボタンをクリックすると、サービス参照は同じオブジェクトではないため null になります (つまり、取得します)。 servlet_Instance #1 に注入されますが、servlet_Instance #2 でメソッドを呼び出します.実行時にサービスを見つけて使用できるため、少し詳細が欠けているに違いありません

XML ファイルの生成に使用するプラグイン: maven-scr-plugin

これは私のサービスクラスです

生成された XML は

私のサーブレットは

生成された XML

また、Peter Kriens がそこに書いたように、サーブレットが見つからないように見えるため (エラー 404 - 要求されたリソース () は利用できません)、運がありませんでした: OSGi HTTP サービスから OSGi サービスを消費する方法

そこで、サーブレットを次のように変更しました。

生成された XML は

JSP からサーブレットにアクセスします

上記をテストするために、投稿と同じように、デプロイされたバンドル org.apache.felix.http.api-2.2.1、org.apache.felix.http.whiteboard-2.2.1 に含まれています。装着するスイッチがあるかどうかはわかりませんでした。

また、org.apache.felix.webconsole-4.2.0-all バンドルを確認したところ、サービスが稼働中であり、コンシューマー バンドルがそれを使用していると表示されます。

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

osgi - OSGi で HttpClient の ConnectionManager をいつシャットダウンするか

DS A と B を介して 2 つのサービスを使用する OSGi バンドルがあります。

B サービスは内部で Apache の HttpClient を使用しています。

私の質問は、いつ HttpClient の ConnectionManager をシャットダウンする必要があるかということです。サービス B の「バインド解除」メソッド内でそれを実行しようとしましたが、バインド解除メソッドが呼び出されてもインスタンスが破棄されるわけではないため、機能しません。再バインドされる可能性があるため、ConnectionManager がシャットダウンされたため、次のリクエストは失敗しました。

誰かが OSGi 環境内での HttpClient の使用法を明らかにしてくれることを願っています。