2009-05-24 8 views
7

誰でも私にosgiフレームワーククラスの使い方の例を教えていただけますか? Iどのようにそれらのクラスを使用する方法の手掛かりを持っていない...通常のJavaコード内でOSGiフレームワークを実行するには?

BR、

マルクス

+0

Githubのhttps://github.com/sarxos/equinox-launcherに私のプロジェクトに従ってください:私はリンクの質問の受け入れ答えは、よりであることを、言う http://stackoverflow.com/questions/4673406/programatically-start-osgi-equinox この質問への答えとして、このページに記載されているものをフィッティングします。 – hoijui

答えて

7

これは、使用しているOSGi実装に依存します。私はEclipse Equinoxを使用し、通常のJavaクラス内からフレームワークを開始します。 Eclipse jar(org.eclipse.osgi_longversion.jar)には、org.eclipse.core.runtime.adaptor.EclipseStarterというクラスがあります。これによりOSGiフレームワークが起動します。

Properties props = new Properties(); 
// add some properties to config the framework 
EclipseStarter.setInitialProperties(props); 
BundleContext context = EclipseStarter.startup(new String[]{},null); 

フレームワークを設定するには、いくつかのプロパティが必要です。文書化されたすべてのプロパティhereを見ることができます。起動したら、BundleContextはSystem Bundleコンテキストです。ここからバンドルをインストール/起動/停止できます。

すべてのプロパティを設定した場合、startup()に引数を渡す必要はありません。

Equinox websiteからEquinoxと他のバンドルをダウンロードできます。

+1

ありがとう!今、私はjavaコード内からいくつかのバンドルを使って春分のフレームワークを走らせることができました:)しかし、私はまだ少し混乱しています:Equinoxコンソールを実行して後でシステムバンドルを停止するために-consoleパラメータを使用すると、私はコンソールにコマンドを送るまで停止しません。新しいコマンドを待っているシステムバンドルの中に、ある種のループがありますか? – Markus

+0

バンドルを停止すると、システムバンドルであっても、アプリケーションがシャットダウンするとは限りません。コンソールでは、 "close"を発行するときに、実際にはすべてのバンドルを停止し、サービスとハンドラの登録を解除し、System.exit(0)を呼び出します。 – omerkudat

+0

コマンドラインからEclipseStarterクラスを使用できるように設定する必要がある特別なプロパティはありますか?現時点では、IDEから直接プログラムを実行する場合にのみ、このクラスを使用することができます。私はそれをjarファイルにエクスポートすると、スタータークラスはosgiサービスバンドルの代わりにシステムバンドルをロードするので、バンドルをインストールすることはできません。 – Markus

2

仕様は、OSGiフレームワークを、インスタンスの設定および起動する方法を定義していない参照してください。 。したがって、通常のJavaコードからOSGiフレームワークを実行することは、常に特定のフレームワーク実装(Equinox、Felix、Knopplerfish、...)に固有です。

Apache Felix(オープンソースOSGiフレームワーク)をアプリケーションに組み込むことはかなり簡単です。

詳細については、http://felix.apache.org/site/launching-and-embedding-apache-felix.htmlを参照してください。

+0

私はEquinoxの横の別のOSGiフレームワークを本当に使いたいのかどうか分かりません。私はorg.eclipse.osgi.framework.internal.core.OSGiクラスの使い方を説明するサンプルを探しています。今まで私はドイツのフォーラムで不完全な例しか見つけられませんでした:http://www.java-forum.org/plattformprogrammierung/81133-custom-open-services-gateway-initiative-launcher-mit-config-ini.html – Markus

+1

あなたが言及したパッケージのクラスを使用すべきではありません。このパッケージは "内部"であり、バンドルからエクスポートされません。 分かりやすい形でOSGiにアクセスするには、通常、org.osgi.frameworkのインタフェースを介して行われます。 – jens

0

私は最近、Equinox OSGiランタイムをJavaに埋め込む方法の簡単な概念証明を作成しました。詳細についての重複