問題タブ [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 - NetbeansのOSGi、サービスを取得するときのClassCastException
ClassLoaderの問題が発生しています。私はかなりosgiの初心者なので、うまくいけば答えはそれほど難しくありません:)
コンパイルライブラリとランタイムライブラリに関係していると思います。 Netbeans 6.7.1プロジェクトのプロパティでは、コンパイル時のライブラリは常に他のカテゴリに伝播されるため、そこで区別することはできません。
FelixHostをコンパイルするとき、次のjarファイルが使用されます
- Felix.jar
- osgi-core.jar
- osgi-compendium.jar
- osgi.service.obr-1.0.2.jar
ただし、実行時に、フレームワークはOBRの実装をロードします。このOBRバンドルには、インターフェイス定義も含まれています。これがclassCastExceptionがある理由だと思います。
実際、FelixHostをOBRと連携させて、初期プロビジョニングを実行したいと考えています。
どんなアイデアでも大歓迎です。
java - 「ローカルバンドルキャッシュ」の管理を変更するようにEquinoxを構成します
前の質問に関連して、OSGiにConfig Adminを介して構成を再利用させる方法について、私はまだEquinoxFrameworkでこの問題を解決しようとしています。
PavolJuhosは次のように書いています。
Equinox Config Admin(org.eclipse.equinox.cm)は、フレームワークによって提供される永続ストレージ領域に構成データを保管します。そして、それはEquinoxのデフォルトの「ローカルバンドルキャッシュ」ディレクトリです。
だから私はこのトピックを読んで、Equinoxにはいくつかのランタイムオプションがあることを発見しました(とりわけosgi.configuration.area)。
ローカルバンドルキャッシュが削除またはクリーンアップされないように構成を変更する必要があるため、次にFrameworkを実行するときに、最後に入力された構成(任意のバンドル)が使用されます。
maven-2 - 複数のOSGiバンドルをBND/Maven-BND-pluginとマージするにはどうすればよいですか?
アプリケーションで既製のOSGiバンドルを使用していますが、OSGiとまだ互換性のない追加のパッケージと一緒に新しいバンドルに再パッケージ化したいと考えています。
その好例がEclipseLinkであり、これはいくつかのOSGiバンドルとして利用可能であり、そのほとんどは、実行したいことに応じてオプションです。自分に関係のあるバンドルを選び、データベースドライバー(MySQl JDBCコネクターなど)を追加して、展開しやすい新しいバンドルに再パッケージ化します。
ApacheFelixのmaven-bundle-pluginを使用しています。ソースコードなしで新しいMavenプロジェクトをセットアップし、依存関係として4つのeclipselinkとmysqlコネクターを追加し、次のことを試しました。
<Embed-Dependency>
および命令を使用し<Embed-Transitive>
て、すべての依存関係を1つのバンドルに含めます。問題:プラグインがマニフェストを書き換えるときに、eclipselinkバンドル(たとえば、javax.mail.internet)からのオプションの依存関係が必要になります。元のバンドルにはマニフェストに「resolution=optional」が含まれているため、マニフェストがなくても正常に機能します。manifest
プラグインとアセンブリの目標を使用しますjar-with-dependencies
が、それは基本的に同じ結果をもたらしますが、より多くの作業が必要です。- プラグインの目標を使用しました
bundleall
が、これは別のバンドルを再度作成するため、私が望んでいるものではありません。さらに悪いことに、これらのバンドルには依存関係がありません。
Struts 2でも同様の問題に直面することになります。これに執着するつもりはなく、個別のサードパーティバンドルを大量に使用するだけですが、もっときちんとパッケージ化できれば、本当に欲しいです。に。OSGiのポイントはモジュール性であることを認識しているので、大きなバンドルを作成することはそれを打ち負かしますが、モジュールが緊密に結合されている場合は、それらを1つのバンドルにまとめた方がよいと思います。
もちろん、マニフェストを手動で微調整することはできますが、絶対にしたくありません。
jpa - OSGi 環境では、クラスパスとクラスローダーはどのように設定されていますか?
OSGi でのクラスの可視性について混乱しています。Apache Felix を実行しており、次のバンドルをロードしています。
- 、
antlr
、asm
およびeclipselinkjpa
のバンドルcore
javax.persistence
1.99用の OSGi-fied jarcom.mysql.jdbc
ドライバーを含む OSGi-fied jar- 注釈付きのエンティティ クラスと
persistence.xml
- 呼び出す私自身の別のバンドル
Persistence.createEntityManagerFactory(String, Map)
さて、私が混乱しているのは、どのバンドルが MySQL ドライバーを認識できる必要があるかということです。これは EntityManagerFactory を作成するバンドルだと思っていましたが、そのマニフェストにインポートすると ClassNotFound エラーが発生します。jpa
次に、eclipselinkバンドルのマニフェストからインポートしようとしましたが、やはり失敗しました。永続化ユニット (エンティティ クラスおよびpersistence.xml
) を含むバンドルのマニフェストからインポートした場合にのみ機能します。
そのため、PU のバンドルのクラスローダによってデータベース ドライバが検索されているように見えますが、それは私には意味がありません。どうしたの?
これに関する簡単なドキュメントが見つからないようです。これらのスライドはいくつかのヒントを提供しますが、完全に網羅しているわけではありません。
java - 私自身の瓶のマニフェストを読む
Manifest
クラスを配信したファイルを読み取る必要がありますが、使用する場合:
MANIFEST
最初.jar
にJavaランタイムにロードされたものから取得します。
私のアプリはアプレットまたはWebスタートから実行される
ため、自分の.jar
ファイルにアクセスできないと思います。
私は実際にFelixOSGiを開始したExport-package
属性を読み取りたい.jar
ので、それらのパッケージをFelixに公開できます。何か案は?
java - Eclipse OSGIアクティベーターを相互に継承させるのは良い考えですか?
さまざまな製品を構築するための共通のeclipse/osgiコードプラットフォームがある場合、共通のコードからアクティベーターを継承できますか/継承する必要があります
例えば
org.test.common.PluginActivator
org.test.common.ui.UIPluginActivator
org.test.product1.Product1PluginActivator
org.test.product1.ui.Product1UIPluginActivator
org.test.product2.Product2PluginActivator
org.test.product2.ui.Product2PluginActivator
すべてのUIアクティベーターを共通のものから継承させたいのですが、非UIアクティベーターについても同じです。startメソッドはすべてsuperを呼び出します...しかし、これが悪いosgi /バンドルの練習であるのか、それとも問題を引き起こす可能性があるのか疑問に思います。
誰かがこれについて何かアイデア/意見を持っていますか?
java - バンドルのアクティベーターが無効です
Eclipseで簡単なプラグインを作成しようとしています。アプリケーションを実行すると、ログファイルに次のエラーが表示されます。
org.osgi.framework.BundleException:バンドルorg.xyのアクティベーターorg.xyのアクティベーターが無効です。
このエラーについて何か考えがありますか?
java - OSGI 環境でのシングルトンの移行ソリューション
私は、各アプリケーションが独自の war ファイルにある Java EE 環境で作業しています。各アプリケーション war ファイルの WEB-INF/lib には、すべてのアプリケーションで共有される共通の jar があります。この共通の jar には、コード内の多くのポイントからアクセスされるいくつかのシングルトンが含まれています。war ファイルの境界により、各アプリケーションには独自のシングルトン インスタンスがあります。各アプリケーションでいくつかのシングルトンを異なる方法で構成したいので、これが現在の運用方法です。
現在、OSGi 環境に移行しています。各バンドルには独自のクラス ローダーがあるため、このソリューションは機能しなくなります。そのため、バンドル「common.jar」にある MySingleton にバンドル「appA.jar」またはからアクセスしようとすると、 bundle "appB.jar" 同じインスタンスを取得します。
バンドルごとにシングルトンの異なるインスタンスが「必要」であることを思い出してください。(皮肉に聞こえるかもしれませんが)
理想的な解決策は、これらのシングルトンに依存しないようにコードを修正することだと思いますが、スケジュールが厳しいため、バンドル全体のシングルトンを使用できるようにする何らかの移行ソリューションを提案できるかどうか疑問に思っていました。それらのそれぞれは、バンドルごとに構成できます。
eclipse - 外部化された plugin.xml 文字列は、下流のプラグインで使用できますか?
プラグイン共通がある場合、プラグイン A と B は別々のプラグイン/製品であり、どちらもプラグイン共通に依存します。
plugin common では、plugin.xml の文字列を外部化します。これにより、%bundle-vendor = "My Company Name" が得られます。
ダウンストリーム プラグイン A と B で、ベンダーに共通の bundle-vendor プロパティを使用できますか。共通のプラグイン ID を先頭に追加しようとしましたが、うまくいきませんでした。これは可能でしょうか?