2011-01-12 8 views
21

私はOSGiフレームワーク(好ましくはEquinox)を簡単に起動して、自分のpomにリストされているバンドルをjavaメインからロードできるようにしたいと思います。プログラムによってOSGi(Equinox)を起動しますか?

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

paxツールがこれを行うと思われますが、そのようなことを示す文書は見つかりませんでした。

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

しかし、私はより多くを行うにはしたいと思います - 私が言ったように:私は、私はそうのような春分を起動することができます知っている中負荷以上の束を、おそらくいくつかのサービスなどを開始

答えて

45

任意の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フレームワークので動作します。

+0

これはとても役に立ちます。ありがとうございます。私はフレームワークの開始と停止の仕方に苦しんでいました(System.inのリダイレクトはそれほど魅力的ではありません)。受け入れの私の唯一のホールドアウトは、パスとその他のものの束をハードコードすることなく、私のクラスパスから私のバンドルをロードできるようにしたいということです。そして再び、私はあまりにも欲しいかもしれません:) – javamonkey79

+0

Mavenのクラスパスはどういう意味ですか? –

+0

本当に私のPOMの依存関係 - 私はそれらを検出してインストールすることができるようにしたいと思います。 – javamonkey79

2

編集:あなたを実現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は、OSGiのURLハンドラサービスが含まれていることを思わMVN(彼らから、次のフォーマットや負荷のバンドルのURLを取ることができます://レポ/ bundle_path)

+0

私はこれをすでに持っており、http URLからの読み込みも考えていました.Mavenからバンドルをロードする方法を知っていますか? – javamonkey79

+0

@ javamonkey79私はmavenを使ったことが一度もありません。しかし、https://groups.google.com/group/spring-osgi/web/maven-url-handler?pli=1は約束しているようです – KitsuneYMG

+0

@KitsuneYMG:Googleのリンクが壊れています。使える?ヘルプありがとう。 – ferhan

5

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

パックスは、MavenのURLの優れたサポートを持っている、それもあなたが動的に素敵な整頓バンドルに非OSGiのjarファイルを変換できるようにラップURLハンドラを持っています。

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 

注:鶏の卵のシナリオ - あなたがファイルを使用してこれらをインストールする必要があります:最初のURLハンドラをまたは自動配備に入れてディレクトリ。

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

第二注:展開のスナップショットは、レポのURLに@snapshotsを追加することによって可能に、設定はすべてのあなたのPOM定義された依存関係を管理するという点ではConfigAdmin

を介して管理されているKarafの機能を見て - それだろうプラグインがありますその後、あなたの全体のアプリを展開するために使用できる機能のXMLファイルを生成するために有効にします。 http://karaf.apache.org/manual/2.1.99-SNAPSHOT/developers-guide/features-maven-plugin.html

さらにもっとこのXMLアーティファクトは、あなたのOBRに展開することができますので、あなたは追加、バニラフェリックス/春分/ Karafのセットアップを取ることができますmvn urlハンドラとあなたの会社のmvn repoで設定してから、アプリ全体をプロビジョニングします=)

関連する問題