OSGiフレームワーク(できればEquinox)を簡単に起動し、pomにリストされているバンドルをJava mainからロードできるようにしたいと思います。
これは可能ですか?もしそうなら、どのように?
Paxツールがこれを行うようですが、そのことを示すドキュメントが見つからないようです。私はEquinoxを次のように起動できることを知っています:
BundleContext context = EclipseStarter.startup( ( new String[] { "-console" } ), null );
しかし、私はもっとやりたいです-私が言ったように:より多くのバンドルをロードし、多分いくつかのサービスを開始するなど。
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フレームワークが実行されています。 Framework
はBundle
を拡張するため、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フレームワークで機能します。
このスレッドは少し古くなっているかもしれませんが、とにかく...
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リポジトリで構成して、アプリ全体をプロビジョニングできます=)
編集: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)