問題タブ [embedded-osgi]
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.
java - Apache Felix Host が依存関係を公開 OSGi
Apache Felix を使用して組み込み OSGi ホスト アプリケーションを作成しています。次のコードを使用して、公開したいパッケージを公開しています。
すべてがうまく機能し、これらのパッケージが公開されています。ただし、依存関係を宣言したすべてのホスト プロジェクトにアクセスするには、バンドルが必要です。たとえば、親アプリケーションには Jackson、Apache (さまざま) などが宣言されており、これらにアクセスするにはバンドルが必要です。
パッケージを明示的に追加しようとしましたが、依存関係がある場合はうまくいかないようです。たとえば、バンドルで Jacksons を使用したいcom.fasterxml.jackson.core.type.TypeReference;
ので、上記の EXTRA リストに追加com.fasterxml.jackson.core.type
しましたが、問題が解決しないようです。パッケージはまだ公開されていません。
完璧な作業では、すべてのホストの依存関係を、それぞれを明示的に述べることなく利用できるようにしたいだけです。
osgi - Felix GoGo シェルが MalformedURLException をスローする: 不明なプロトコル: Equinox の bundleresource
ZAPという Java アプリケーションの拡張機能を作成しています。拡張機能は、Equinox バンドル ( )がインライン化された fat/uber jar です。追加のバンドルも、この jar のサブディレクトリ内に含まれています。OSGi フレームワークは、How To Embed OSGiで説明されているように開始されています。org.eclipse.osgi
bundles
Eclipse の「コンソール シェル」ドキュメントで概説されている手順に従って、Felix GoGo シェルを機能させようとしています。次の必須バンドルを指定します。
org.apache.felix.gogo.command
org.apache.felix.gogo.runtime
org.apache.felix.gogo.shell
org.eclipse.equinox.console
Equinox / に加えてorg.eclipse.osgi
。Equinox はクラスパス上にないため、org.osgi.framework.system.packages.extra
構成をExport-Package
Equinox のバンドルで指定された値に設定します。
フレームワークが ACTIVE 状態になると、Eclipse で (または Eclipse の外部のコマンド ラインを介して) 次のスタック トレースが表示されます。
Equinox URL ハンドラが GoGo で使用されていないようです。それらに関連する次のパッケージが Equinox の にないことに気付きましたExport-Package
:
org.eclipse.osgi.storage.url
org.eclipse.osgi.storage.url.bundleresource
org.eclipse.osgi.storage.url.bundleentry
そのため、それらもorg.osgi.framework.system.packages.extra
パッケージリストに含めました。それは役に立ちませんでした。
それ以外の場合、明らかなエラーなしでバンドルがインストールおよび開始されます。
GoGo で Equinox のカスタム URL ハンドラを利用するにはどうすればよいですか?
更新 1: 多分レッドニシン
ランダムなトラブルシューティングでは、ここで概説されているように、最終的なシェーディング jar を実行したいと考えていました。org.eclipse.osgi
元のバンドルと影付きの jar の両方を同じディレクトリにコピーしました。ロードするconfiguration/config.ini
バンドルを指定しています。
ストック バンドルを実行すると、コンソールが表示されます。
影付きの jar を実行しますが、それほど多くはありません。
これは完全なニシンかもしれません... 私は OSGi について非常に無知です。これは私の最初の実践的な経験です。ただし、シェーディングされた jar は、在庫の Equinox jar と同じように実行されると思います。なぜ違いがあるのか わからないので、掘るのに適した場所がないのでそこを掘るつもりです...
更新 2: クラスパス上の Equinox の回避策の問題
Equinox バンドルをディレクトリ経由で ZAP のクラスパスに追加lib
し、拡張 jar にインライン化されないようにしました。これをServiceLoader.load
実行し、クラス ローダーを含めないように呼び出しを調整すると (システム クラス ローダーがデフォルトになります)、次のように動作します。
根本的な問題は、おそらくファイルに関連して、jar がどのようにインライン化されているかである可能性がありMANIFEST.MF
ます。関連している可能性がありますが、 の値を指定する必要がなくなりましたorg.osgi.framework.system.packages.extra
。
OSGi ライブラリをシェーディング アーティファクトとして含めることが本来の目的だったので、この質問には答えないままにしておきます。たぶん bndtools が役に立ちますか?
java - Felix OSGI Embedded アプリケーションの問題
「How to start and use Apache Felix from code?」で説明されているように、私は Felix を組み込みアプリケーションとして使用していました 。. 私がやりたいことは、OSGi を介してホスト アプリケーションから jar ファイルを動的にロードし、実装クラスのメソッドを呼び出すことです。
だから私は次の3つのmavenプロジェクトを持っています
1) インターフェイスを持つ Maven プロジェクト。そして、このインターフェースのパッケージがエクスポートされます。---> プロジェクト .
2) 実装プロジェクト --> ProjB、ProjA を Maven 依存関係としてインポートし、具体的なクラスを使用してそれにインターフェイスを実装する別の Maven プロジェクト。また、このプロジェクトでは、ProjA インターフェイス パッケージの OSGi インポート パッケージを行います。ここでも、アクティベーターを介して OSGI に実装を登録します。
3) 次に、ホストされたアプリケーションである ProjC。そこで私がすることは、
キャストするまで、すべてが正常に機能します。そこに次のエラーが表示されます。
誰かがこれについて私を助けてくれますか?私にとって、これはフェリックスのバグのようです。
osgi - 「bnd-maven-plugin」を使用して、OSGi バンドル jar にすべてのサードパーティ jar (解決可能) を追加するにはどうすればよいですか?
「bnd-maven-plugin」を使用して OSGi アプリケーションを開発してい ます https://github.com/bndtools/bnd/tree/master/maven/bnd-maven-plugin
私のプロジェクトには、maven を介して参照される多くのサードパーティの jar があります。
「maven install」を使用して jar バンドルを作成すると取得され、felix にデプロイすると、他の依存するサード パーティの jar が解決されません。
「maven-bundle-plugin」で動作してい ます http://www.lucamasini.net/Home/osgi-with-felix/creating-osgi-bundles-of-your-maven-dependencies
以下に示す「 bnd-maven-plugin 」を含むPOMファイル:
以下は「 maven-bundle-plugin」の POM の動作です。
osgi - java.lang.ClassCastException: com.sun.xml.internal.ws.client.sei.SEIStub を org.apache.cxf.frontend.clientproxy AEM OSGi にキャストできません
AEM の osgi 環境で Fuelsdk を使用しようとしています。このエラーが発生しています -
java.lang.ClassCastException: com.sun.xml.internal.ws.client.sei.SEIStub は org.apache.cxf.frontend.ClientProxy にキャストできません
これは、OSGi が、fuelsdk の依存関係が組み込まれているバンドルの前にシステム バンドルをロードするためです。バンドルが解決されます。このエラーは実行時に発生します。
OSGi クラスローダーが実行時に com.sun.xml.internal.ws.client.sei.SEIStub ではなく org.apache.cxf.frontend.ClientProxy を選択するように強制するにはどうすればよいですか?
「uses」ディレクティブの組み合わせを使用できますか? および/またはパッケージのインポート/エクスポート?
- を使用してクライアントを作成するよう提案されました。
factory.setServiceClass(); で使用するクラスを知りたいです。
と
factory.setAddress( ) でどのアドレスを使用する必要がありますか。それはエンドポイントアドレスですか?-- https://webservice.s6.exacttarget.com/Service.asmx
ヘルプは大歓迎ですありがとう