2012-03-12 26 views
9

後で使用するためのサービスを提供するOSGiバンドルを大量に使用するEclipse RCPアプリケーションを開発します。ユースケースでは、後で異なる状況で使用するためにバンドルにサービス(登録フィルタなど)を登録する必要があります。 OSGiバンドルは、maven-bundle-pluginでビルドされています。EclipseプラットフォームでOSGiサービスを自動起動/開始する方法

OSGiバンドルを自動的に起動するようにEquinoxに指示するにはどうすればよいですか? Activatorによる通常の方法は機能していません。遅延モードだけが動作していますが、未知のバンドル内のクラスには触れません。私はOSGi仕様を読んでおり、遅延ロードとは逆の、熱心な負荷は提供されていません。自動ロードのためにバンドルをマークする別の機会はありますか? Eclipse内

は私がtrueに自動起動を設定する機会がありますが、私はMavenとティコで配布ビルド中に何をしますか?

宣言のサービスがロードされていないorg.eclipse.equinox.dsの問題に起因する動作していません。アクティベータの代わりに何とか始めることができますか?これも解決策になりますが、配布を構築する方法や設定として何を設定するのか分かりません。

ここでベストプラクティスは何ですか?他の可能性はありますか? Eclipseプラットフォーム上のOSGiバンドルのドキュメントは少し薄いです。

+1

私はmaven/tychoについて知らない。しかし、pde antスクリプトを使用すると、 'config.ini'を使って自動起動を制御します。 'workspace \ .metadata \ .plugins \ org.eclipse.pde.core \ your-rcp-product-name.product'の下に生成された' config.ini'をチェックしてください。 –

+1

http://software.2206966.n2.nabble.com/tycho-generated-config-ini-does-not-start-runtime-td6077893.html –

答えて

4

あなたは宣言的なサービスで正しい軌道に乗っていました。手動でサービスを登録するのは大変な作業ですが、安全にそれらを検索することでさらに多くの作業を行うことができ、正しく作業するには手間がかかります。この分野のもう一つの基準はBlueprintですが、DSメタデータがあれば書き直すことはお勧めしません。 Blueprintは、非常に動的な環境では、より豊かな特性を持ち、より豊かな構成を備えています。 (私は青写真の実装の1つ、Apache Ariesのコミッターです。)BlueprintとDSの両方で、重要なことは、あなたのためにサービスを管理することです。

これは、なぜあなたのバンドルが起動されていないのかの問題を私に残します。彼らがフェリックスで始めるという事実には手がかりが必要だと思います。あなたは分かりやすいコンソールを起動し、バンドルがすべてインストールされ、解決されていることを確認しましたか?config.iniファイルを見て、あなたのバンドルがリストされており、適切な開始レベルであることを確認しましたか?またはEquinoxの自動スタートを使用していますか?他のバンドルはすべてバンドルされていますか?

+0

はい、次に宣言的なサービスを試してみましょう。私は後で教えます。 –

+0

それで、それは働いていた。ランタイム中にDSを開始させ、XMLを介してサービスを宣言させます。以前のサービスは解決され、開始されませんでした。どのように私はそれに影響を与えることができます、私は知らない。しかし、DSは機能しています。 –

0

MANIFEST.MFはこれを持っている:

Bundle-ActivationPolicy: lazy 

また、これは役に立つかもしれない:

http://wiki.eclipse.org/Lazy_Start_Bundles#Should_I_change_to_the_new_Bundle-ActivationPolicy_Header.3F

は、しかし、私は、私はできるだけ多くのOSGIの活性化に頼るしようとするだろうと言うでしょう。あなたの問題を解決する他の方法がない場合、前のリンクが役に立つかもしれません。

+2

遅延ロードの場合、私のアプリケーションは起動するバンドルについて知る必要があります。これは望ましくないデザインではありません。これが私が遅延読み込みを削除した理由です。 Felixではバンドルが正しく起動されています。ちょうどちょうどちょうどいくつかの問題を引き起こす私が必要とするのは 'Bundle-ActivationPolicy:auto'ですが、これはサポートされていません。 –

5

プラグインで「org.eclipse.ui.startup」拡張ポイントを使用できます。これにより、Eclipse UIの起動時に呼び出されるIStartupクラスを指定できます。バンドルのクラスであれば、バンドルが開始されます。

これはplugin.xmlファイルを含むことを意味します。これは、標準OSGiバンドルではなくEclipseプラグインですが、このプラグインを使用して標準のOSGiバンドルをアクティブにできます。

+0

私が使っているバンドルの中には、かなり一般的なものがあり、プラグインをEclipseにするのは望ましくありません。私は、plugin.xmlと他のファイルをjarファイルにバンドルするのは問題ではないが、本当にきれいではないと思う。あなたの提案は良いことだと思いますが、それはうまくいくと思いますが、それは私の最後の選択です。とにかくありがとう! –

+0

現在のバンドルを変更する必要はありません。 Eclipseプラグインは、DSバンドルが確実に開始され、宣言的なサービスがすべて見つかるようにするという、新しいバンドルになります。これにより、config.iniファイルにスタートアップバンドルを指定する必要がなくなります。 –

8

プログラマーが起動時間を延ばすのを防ぐために、あなたはEclipseの誤った戦略の犠牲者です。警告の代わりに、彼らはバンドルをまったく起動しないことにしました。これは、OSGiが推奨するものとは逆です:-(誰かがそこからクラスをロードしたときにバンドルが起動するだけです(これは遅延起動です)。

これまでのところ、起動時に起動される即時サービスを宣言することができ、遅延サービスを宣言することができます。遅延サービスは、(あなたがダムプログラマではない場合)もちろん、特定のユースケースそれはインターネット上でサービスを提供していますすぐに、例のようにサーバーを必要としますが、DSが開始され、あなたのconfig.iniに確認する必要があり

+0

はい、私はすでにさまざまな哲学について読んでいます。私は怠惰な読み込みが好きですが、言及したように:いくつかのデザインは、サービスを登録するための自動読み込み(ホワイトボードパターン)が必要です。私は宣言的なサービスを試みます。 –

+0

Eclipseは通常、configに明示的にリストされていないか、遅延起動を使用し、他のバンドルによってクラスがロードされていない限り、バンドルを開始しません。停止/インストールされたバンドルは無視されるため、これはDSの問題です。しかし、私はEquinox Service Component Runtimeに隠れた機能があることに気付きました。バンドルを遅延ロードとして宣言し、コンポーネントが「即時」とマークされている場合、SCRはバンドル*を起動します(おそらくSCR誰もそれを始めていなければ、他の人はそうしないだろうという数字)。まだ即時性のない行動についてはまだ考えていません。 – JBert

0

あなたの.productファイルにこれを追加することができます。。

また、Eclipseで.productファイルを開いて[設定]タブに移動し、そこに目的の開始レベルのプラグインを追加します。

関連する問題