0

最近、OSGi フレームワークを使い始めました。Maven ベースのプロジェクトから OSGi コンテナーを起動しようとしています。

上記のmavenプロジェクトのpom.xmlファイルにこの依存関係を追加しました-

<dependency>
    <groupId>org.apache.felix</groupId>
    <artifactId>org.apache.felix.framework</artifactId>
    <version>4.2.1</version>
</dependency>

以下は私の主なアプリケーションです-

public static void main(String[] args) throws BundleException {

    FrameworkFactory frameworkFactory = ServiceLoader.load( FrameworkFactory.class).iterator().next();
    Map<String, String> config = new HashMap<String, String>();

    //TODO: add some config properties
    Framework framework = frameworkFactory.newFramework(config);
    framework.start();
}

のパッケージをインポートしようとすると、FrameworkFactory2 つのオプションから選択できます。以下はイメージです。ここでどれを選択する必要があるか、誰か助けてもらえますか?

ここに画像の説明を入力

私はこの2つを選んでいたのですか?

import org.osgi.framework.launch.Framework;
import org.osgi.framework.launch.FrameworkFactory;

これは正しいですか?

4

1 に答える 1

4

これは、Apache Felix だけでなく、すべての OSGi フレームワークにアクセスできるため、org.osgi.framework.launch.FrameworkFactory です。ServiceLoader は、このクラスの名前を使用して、すべてのクラス パス エントリ (jar)META-INF/servicesディレクトリでorg.osgi.framework.launch.FrameworkFactoryファイルを検索します。Felix フレームワーク バンドルを見ると、このファイルに「org.apache.felix.framework.FrameworkFactory」が含まれていることがわかります。これはインスタンス化されて返されます。

したがって、Apache Felix のみを使用したい場合new org.apache.felix.framework.FrameworkFactory()は、Java Service Loader の間接化を使用する代わりに使用することもできます。

于 2013-08-22T07:34:00.253 に答える