任意のOSGiフレームワーク(R4.1以降)は、FrameworkFactory
APIを使用してプログラムで起動できます。
ServiceLoader<FrameworkFactory> ffs = ServiceLoader.load(FrameworkFactory.class);
FrameworkFactory ff = ffs.iterator().next();
Map<String,Object> config = new HashMap<String,Object>();
// add some params to config ...
Framework fwk = ff.newFramework(config);
fwk.start();
OSGiフレームワークが実行中です。
fwk.stop();
fwk.waitForStop(0);
:
Framework
ので、あなたが最後にあなたは、単にシャットダウンするためのフレームワークを待つべき
BundleContext bc = fwk.getBundleContext();
bc.installBundle("file:/path/to/bundle.jar");
bc.registerService(MyService.class.getName(), new MyServiceImpl(), null);
// ...
例えばgetBundleContext
を呼び出し、など、サービスを登録し、バンドルを操作するために、通常のAPIのすべてのメソッドを呼び出すことができますBundle
拡張
これを繰り返すと、このアプローチは、フレームワークJARをクラスパスに置くだけで、EquinoxとFelixを含む OSGiフレームワークので動作します。
これはとても役に立ちます。ありがとうございます。私はフレームワークの開始と停止の仕方に苦しんでいました(System.inのリダイレクトはそれほど魅力的ではありません)。受け入れの私の唯一のホールドアウトは、パスとその他のものの束をハードコードすることなく、私のクラスパスから私のバンドルをロードできるようにしたいということです。そして再び、私はあまりにも欲しいかもしれません:) – javamonkey79
Mavenのクラスパスはどういう意味ですか? –
本当に私のPOMの依存関係 - 私はそれらを検出してインストールすることができるようにしたいと思います。 – javamonkey79