web-dev-qa-db-ja.com

プログラムでOSGi(Equinox)を起動しますか?

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

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

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

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

しかし、私はもっとやりたいです-私が言ったように:より多くのバンドルをロードし、多分いくつかのサービスを開始するなど。

26
javamonkey79

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

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を含むany OSGiフレームワークで機能します。

51
Neil Bartlett

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

PaxはMavenURLの優れたサポートを備えており、ラップURLハンドラーも備えているため、非osgijarをNicetidyバンドルに動的に変換できます。

http://wiki.ops4j.org/display/paxurl/Mvn+Protocol

    <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

注:chicken-Eggシナリオ-最初に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にデプロイできるため、Vanilla Felix/Equinox/Karafのセットアップを行い、mvn urlハンドラーを追加し、会社のmvnリポジトリで構成して、アプリ全体をプロビジョニングできます=)

5
earcam

編集: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();
}

編集:Maven

https://groups.google.com/group/spring-osgi/web/maven-url-handler?pli=1 には、次のURLを取得できるOSGiURlハンドラーサービスが含まれているようです。それらからバンドルをフォーマットしてロードします(mvn:// repo/bundle_path)

3
KitsuneYMG