問題タブ [osgi-fragment]
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 - PackageAdmin.getFragments に代わるものは何ですか
OSGi 4.3 では、PackageAdmin
非推奨になっていることを理解しています。次に、特定のバンドルのフラグメントをどのように見つけますPackageAdmin.getFragments(Bundle bundle)
か?
java - Tycho は他のフラグメントへのフラグメントの依存関係を解決できません
org.eclipse.swt
拡張機能をフラグメントとして作成したい。swt.extension
次の MANIFEST.MFでバンドルを作成しました。
また、SWT からインターフェイスを拡張するインターフェイスを作成しました。
プロジェクトを tycho ( mvn clean install
) でビルドすると、次のエラーが発生します。
tycho は org.eclipse.swt jar のみを解決するようです。これはホスト バンドルであり、クラスは含まれていません。実際の実装は org.eclipse.swt.win32.win32.x86_64 フラグメント バンドルにあります。そして、tycho-compiler-plugin がプロジェクトをコンパイルするとき、このバンドルはクラスパス上にないように見えます。
これは Tycho のバグですか?回避策はありますか?
すべてのソースを GitHub に置きました: https://github.com/orionll/tycho-fragment-to-fragment-dependency
私はMaven 3.1.0を使用しています
osgi - OSGi フラグメント バンドルからのサービスへのアクセス
私のプロジェクトには、インターフェイスを宣言型サービスとして公開する OSGi バンドルがありますcom.xyx.EventProvider
。
別のサードパーティ バンドルがありorg.eclipse.equinox.http.jetty
、これにフラグメント バンドルを添付しましたcom.xyz.jetty.customizer
。
このフラグメント バンドルは、インターフェイスを介して公開されているサービスにアクセスする必要がありますcom.xyx.EventProvider
。
問題は、フラグメント バンドルにはアクティベーターがないため、BundleContext への参照がないため、どのサービスにもアクセスできないことです。
OSGiでこれを達成する方法はありますか?
osgi - クラス/リソースをOSGiフラグメントに置き換える - フラグメントにjarを含めなくても可能ですか?
OSGi フラグメントを追加して、ホスト OSGi バンドル内の特定のリソースを置き換えたいと考えています。
私が理解しているように、OSGi フラグメントに含まれるリソースは、ホスト バンドルのクラスパスに追加されるだけです。フラグメントがホスト バンドルに既に存在するリソースを追加している場合、フラグメントのリソースが読み込まれるという保証はありません。それはホスト バージョンのままである可能性もあります。
リソースのフラグメント バージョンがホスト バージョンの代わりにロードされることを確認するために、 http: //wiki.osgi.org/wiki/Fragment は、Bundle-ClassPath ヘッダーを使用してリソースを「最初」として指定することが可能であると述べています。 (好ましい)。
例として patch.jar を示します。
そこで述べたように、「patch.jar は '.' よりも進んでいるため ホストではなくフラグメントからクラスを優先的にロードできるようになります。」
この手法を使用することもできますが、これは、まずフラグメント リソースを別の jar にバンドルしてから、この jar をフラグメント バンドルに含める必要があることを意味します。
フラグメントにjarを含めることなく、ホストではなくフラグメントからクラス/リソースを優先的にロードする方法はありますか?
osgi - ServiceRegistry によるスレッドのブロック
OSGi を使用している比較的大量/要求の多いシステムがあります。1 日あたり 8 億件近くのリクエストが寄せられています。
現在、スレッドがブロックされるという問題がいくつか見られます。受信するすべてのリクエストに対して、registerService を使用してイベント/データを osgi バンドルに転送し、このサービスをリッスンしている OSGi バンドルにペイロード/データを渡します。
次のように: bundleContext.registerService(Map.class.getName(), dataHolderMap, null);
dataHolderMap は通常の Java ハッシュマップに他なりません
JStack を使用したスレッドダンプは次のとおりです。
================================================== =========================
"RequestThread" prio=10 tid=0x00000000421ab800 nid=0x1042 実行可能 [0x00007fbdd3867000] java.lang.Thread.State: org.apache.felix.framework.ServiceRegistry.getService(ServiceRegistry.java:295) で実行可能 - ロック済み <0x0000000700e2c5c500> org.apache.felix.framework.ServiceRegistry) の org.apache.felix.framework.Felix.getService(Felix.java:3568) の org.apache.felix.framework.BundleContextImpl.getService(BundleContextImpl.java:468) のorg.osgi.util.tracker.ServiceTracker.addingService(ServiceTracker.java:411) at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:932) at org.osgi.util.tracker.ServiceTracker$ Tracked.customizerAdding(ServiceTracker.java:864) at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229) で org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:894) で org.apache.felix.framework .util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:932) org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:793) org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher) .java:543) org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4419) org.apache.felix.framework.Felix.registerService(Felix.java:3423) org.apache.felix. org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:320) com.mypackage.person.bs.processor.Processor.sendEvent(Processor.java:56) で com.mypackage.jetMyStream.event.support.AbstractEventSource.fireSendEvent(AbstractEventSource.java:97) で com.mypackage.jetMyStream .event.channel.messaging.InboundMessagingChannel.fireEvent(InboundMessagingChannel.java:113) com.mypackage.jetMyStream.event.channel.messaging.InboundMessagingChannel.onMessage(InboundMessagingChannel.java:204) com.mypackage.jetMyStream.messaging.MessageService .dispatchMessageForContext(MessageService.java:349) com.mypackage.jetMyStream.messaging.MessageService.dispatch(MessageService.java:259) com.mypackage.jetMyStream.messaging.MessageServiceRequest.execute(MessageServiceRequest.java:40) com. mypackage.jetMyStream.util.RequestThread.run(RequestThread.java:69)
"RequestThread" prio=10 tid=0x00000000425f8800 nid=0x1041 モニター エントリを待機中 [0x00007fbdd3968000] java.lang.Thread.State: org.apache.felix.framework.ServiceRegistry.registerService(ServiceRegistry.java: 109) - org.apache.felix.framework.Felix.registerService(Felix.java:3393) で org.apache.felix.framework.BundleContextImpl で <0x0000000700e2c590> (org.apache.felix.framework.ServiceRegistry) をロックするのを待っています.registerService(BundleContextImpl.java:346) で org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:320) で com.mypackage.person.bs.processor.Processor.sendEvent(BullseyeModelProcessor.java:56) でcom.mypackage.jetMyStream.event.support.AbstractEventSource.fireSendEvent(AbstractEventSource.java:97) com.mypackage.jetMyStream.event.channel.messaging.InboundMessagingChannel.fireEvent(InboundMessagingChannel.java:113) で com.mypackage.jetMyStream.event.channel.messaging.InboundMessagingChannel.onMessage(InboundMessagingChannel.java:204) で.mypackage.jetMyStream.messaging.MessageService.dispatchMessageForContext(MessageService.java:349) com.mypackage.jetMyStream.messaging.MessageService.dispatch(MessageService.java:259) com.mypackage.jetMyStream.messaging.MessageServiceRequest.execute(MessageServiceRequest) .java:40)jetMyStream.messaging.MessageService.dispatchMessageForContext(MessageService.java:349) com.mypackage.jetMyStream.messaging.MessageService.dispatch(MessageService.java:259) com.mypackage.jetMyStream.messaging.MessageServiceRequest.execute(MessageServiceRequest.java: 40)jetMyStream.messaging.MessageService.dispatchMessageForContext(MessageService.java:349) com.mypackage.jetMyStream.messaging.MessageService.dispatch(MessageService.java:259) com.mypackage.jetMyStream.messaging.MessageServiceRequest.execute(MessageServiceRequest.java: 40)
com.mypackage.jetMyStream.util.RequestThread.run(RequestThread.java:69) で
これに関するいくつかの質問:
registerService を介してマップを送信する際に何か問題がありますか? もしそうなら、私の代替手段は何ですか?
これを機能させる方法についてのアイデアはありますか? 26 個のノードがあり、このメカニズムを使用して毎秒約 400 のリクエストを処理するだけで済みます
誰かが同様の問題を抱えていましたか?どんなポインタでも大歓迎です
ありがとうマスティ
java - Osgi eclipse:フラグメントバンドルからパッケージをエクスポートして、それらを外部バンドルに表示する方法は?
スターター状況 (エラーなし):
- バンドル A (org.apache.xmlbeans と呼ばれる)、バンドル B、およびバンドル C の 3 つの異なるバンドルがあります。
- バンドル B は、バンドル A からエクスポートされたいくつかのパッケージをインポートします
- バンドル B はいくつかのパッケージをエクスポートします (例: パッケージ com.prova.xsd.config)
- バンドル C は、バンドル B によってエクスポートされたパッケージをインポートします (例: パッケージ com.prova.xsd.config)
ここで、バンドル B をバンドル A のフラグメント (fragment-host) にし、バンドル B の MANIFEST にディレクティブ Fragment-Host: org.apache.xmlbeans を追加します。
この変更後、すべてのバンドル (A、B、C) の MANIFEST.MF にエラーはありませんが、バンドル CI のクラス .java にはコンパイル エラーがあります: 「インポート com.prova.xsd.config をファイル .java.
何が問題ですか?どうすれば修正できますか?
どうもありがとう、
アンドレア