27

OSGi フレームワーク (できれば Equinox) を簡単に起動し、pom にリストされているバンドルを Java メインからロードできるようにしたいと考えています。

これは可能ですか?もしそうなら、どのように?

pax ツールがこれを行うようですが、そのようなことを示すドキュメントが見つからないようです。次のように Equinox を起動できることはわかっています。

BundleContext context = EclipseStarter.startup( ( new String[] { "-console" } ), null );

しかし、私はもっとやりたいと思っています-私が言ったように:より多くのバンドルをロードし、おそらくいくつかのサービスを開始するなど.

4

3 に答える 3

54

OSGi フレームワーク (R4.1 以降) は、FrameworkFactoryAPIを使用してプログラムで開始できます。

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 フレームワークが実行中です。Frameworkextendsしているため、通常の API メソッドをすべてBundle呼び出しgetBundleContextて呼び出して、バンドルの操作、サービスの登録などを行うことができます。たとえば、

BundleContext bc = fwk.getBundleContext();
bc.installBundle("file:/path/to/bundle.jar");
bc.registerService(MyService.class.getName(), new MyServiceImpl(), null);
// ...

最後に、フレームワークがシャットダウンするのを待つ必要があります。

fwk.stop();
fwk.waitForStop(0);

繰り返しますが、このアプローチは、クラスパスにフレームワーク JAR を配置するだけで、Equinox や Felix を含むすべてのOSGi フレームワークで機能します。

于 2011-01-12T20:51:13.443 に答える
5

このスレッドは少し古くなっているかもしれませんが、とにかく...

Pax は Maven URL の優れたサポートを備えており、osgi 以外の jar を適切なバンドルに動的に変換できるラップ URL ハンドラーさえ備えています。

http://wiki.ops4j.org/display/paxurl/Mvn+プロトコル

    <dependency>
        <groupId>org.ops4j.pax.url</groupId>
        <artifactId>pax-url-wrap</artifactId>
        <version>1.2.5</version>        
    </dependency>
    <dependency>
        <groupId>org.ops4j.pax.url</groupId>
        <artifactId>pax-url-mvn</artifactId>
        <version>1.2.5</version>        
    </dependency>

コマンドは次のようになります。

install -s mvn:groupId:artifactId:version:classifier

注: ニワトリと卵のシナリオ - 最初に file: url ハンドラーを使用してこれらをインストールするか、autodeploy ディレクトリに配置する必要があります。

Karaf にはこのすべてがディストリビューションに組み込まれているので、Karaf ランチャーのソースを見てみてください。

2 番目の注意: スナップショットのデプロイは、リポジトリ URL に @snapshots を追加することで有効になり、設定は ConfigAdmin で管理されます

POM で定義されたすべての依存関係を管理するという点では、Karaf 機能をご覧ください。アプリ全体を展開するために使用できる機能 XML ファイルを生成できるプラグインがあります: http://karaf.apache.org/manual /2.1.99-SNAPSHOT/developers-guide/features-maven-plugin.html

さらに、この XML アーティファクトは OBR にデプロイできるため、バニラの Felix/Equinox/Karaf セットアップを使用して、mvn url ハンドラーを追加し、会社の mvn リポジトリで構成してから、アプリ全体をプロビジョニングできます =)

于 2011-03-24T18:02:35.013 に答える
4

編集:Java内から始めたいと思ったことに気づきました。十分に近くで読んでいないことを恥じてください

このリンクをチェックしてください。 http://www.eclipsezone.com/eclipse/forums/t93976.rhtml

本質的に

public static void main(String args[]) throws Exception {
  String[] equinoxArgs = {"-console","1234","-noExit"};
  BundleContext context = EclipseStarter.startup(equinoxArgs,null);
  Bundle bundle = context.installBundle(
    "http://www.eclipsezone.com/files/jsig/bundles/HelloWorld.jar");
  bundle.start();
}

編集:メイヴン

https://groups.google.com/group/spring-osgi/web/maven-url-handler?pli=1には、次の形式の URL を取得してそれらからバンドルをロードできる OSGi URl Handlers Service が含まれているようです( mvn://repo/bundle_path )

于 2011-01-12T20:39:50.217 に答える