問題タブ [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.
osgi - WAS 8.0 にデプロイされた独自の OSGi アプリケーションで特定のバンドルを開始するにはどうすればよいですか?
Declarative Services を使用し、Equinox にデプロイするように設計された非常に洗練された OSGi アプリケーションがあります。ここでのタスクは、このアプリケーションを WAS 8 でデプロイできるようにすることです。
最初の試行は非常に実用的でした。基本的に同じ Equinox を開始した EAR を展開し、いくつかの WAS クラス ロード ポリシーの微調整の後、それは機能しました。
ここで、さらに先に進みたいと思います。Equinox ランタイムを取り除き、バンドルを WAS 8 に「ネイティブに」デプロイします。そのため、ビジネス バンドル、それらの依存関係、および Equinox DS ランタイムから構成される EBA を作成しました。EBA はアセットとしてデプロイされ、BLA に統合されます。アプリケーションは起動して実行されていますが、コンポーネントは初期化されていません。
ポイントは、 DS にその仕事をさせるために、独自のビジネス バンドルの前でequinox.ds を開始する必要があるということです (UPDATE: 必須ではありません。以下で説明します) 。しかし、展開された EBA 内で最初に開始されるバンドルをどのように通知すればよいでしょうか? Equinox の config.ini ファイルの類似物が必要です。
ネイティブにサポートされているブループリントを使用してコンポーネントを再配線できることはわかっていますが、率直に言って、これはやりたくありません。Equinox DS を動作させることができるはずですよね?
もう 1 つの質問は、WAS 8 にデプロイされた独自のアプリケーション用の OSGi コンソールを取得する方法です。バンドルを制御したいのですが、管理コンソールから行う方法がないようです。
アップデート
BJ と Neil のおかげで (以下の説明を参照)、質問は「WAS 8.0 にデプロイされた自分の OSGi アプリケーションで特定のバンドルを開始するにはどうすればよいですか?」に要約されます。
osgi - 宣言型サービスによるサービス バインディングの順序
宣言型サービスとのサービス バインディングの順序を確認または決定する方法はありますか? 私の問題は、OSGI で他のサービスの中でもログ サービスを実行していることです。これで、私のコンポーネントは、このロギング サービスと他のいくつかのサービスをバインドします。サービスがバインドまたはバインド解除されるたびにログ メッセージを書き込みたい。ただし、サービス A がログ サービスの前にバインドされている場合、A のログ エントリを書き込むことはできません。
どうにかしてバインディングの順序を設定できますか? サービスのバインド ポリシーを「静的」に設定することについて読みました。これは、このサービスが最初にバインドされるようにするためのものです。しかし、それはまさに私が望むものではありません。なんらかの理由でログ サービスが消えるたびにコンポーネントを再作成したくありません。
java - Felix SCR Annotations でデフォルト値のない String とは異なる型を持つ
実際の私の問題:
上記の注釈により、次が生成されます。
「型」が「整数」になるように @Property アノテーションを指定できますが、デフォルト値はありませんか? サンプルは整数型ですが、質問は非文字列型全て同じです。
他の注釈セット (BndLib からのものなど) で可能であれば、その解決策にも興味があります。しかし、Maven のサポートは私にとって非常に重要です。felix-scr-plugin には m2e ライフサイクル マッピングがあるため、target/classes フォルダー内の XML ファイルは常に最新です。
java - この JTextField をクリックして編集できません。なぜですか?
アップデート
これは、OS X で実行している場合にのみ発生します。この問題は、Windows には存在しません。私はEclipse KeplerとOracle 1.7.0_45.jdkを使用しています
以下のコードは、OSGI 宣言型サービス コンポーネントから実行される基本的な GUI です。問題は、GUI が起動したときに と対話できないことJTextField
loginField
です。と対話できJButton
loginButton
ます。Java アプリケーションと同じコードを実行すると、JTextField
. したがって、問題は OSGi バンドルとして起動されたことが原因であるに違いありません。問題が何であるかについて誰かが光を当てることができますか?
DoctorDevice.java
DoctorGUI.java
DbContextClient.xml - OSGi コンポーネント定義
websphere - Declarative Services SCR を WebSphere 8.5 で実行しようとしています (non-liberty)
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 を実行する機能にまだこだわっています。ありとあらゆる助けが大歓迎です!締め切りが非常に迫っています (私は知っています...誰が正しくないのですか? :)) そして、すべての助けを喜んで歓迎します! ありがとう!