1

Karaf では、OBR 機能をインストールし、obr:addUrl を使用して repository.xml を追加し、obr:deploy を使用して、すべての推移的な依存関係と共にバンドルをデプロイできます。https://stackoverflow.com/a/10989017/242042で文書化しました

ただし、PaxExam を使用して JUnit テストを作成したいのですが、PaxExam で Karaf を使用して行ったことをエミュレートできないようです。

OBR リポジトリを参照し、すべての推移的な計算を自動的に実行してデプロイを行う方法を示すコード スニペットはありますか?

4

2 に答える 2

1

私は実際にこれに対する答えをしばらく前に見つけました。私は obr: プロトコル ハンドラーを使用しません。代わりに、実際には OBR 実装 (Apache Aries) を使用します。

これがテストケースの構成方法です

@Configuration
public static Option[] configuration() throws Exception {
    return options(
            systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level")
                    .value("WARN"),
            frameworkProperty("obr.repository.url").value(
                    new File("target/dependency/repository.xml").toURI()
                            .toASCIIString()),
            bundle("mvn:org.apache.felix/org.osgi.service.obr/1.0.2"),
            bundle("mvn:org.apache.felix/org.apache.felix.bundlerepository/1.6.6"),
            bundle("mvn:org.apache.aries/org.apache.aries.util/0.4"),
            bundle("mvn:org.apache.aries.proxy/org.apache.aries.proxy/0.4"),
            junitBundles());
}

次に、OBR 検索文字列を使用して OBR からデプロイする便利なメソッドをクラスに用意します。

private void obrDeploy(final String filter) throws Exception {
    final Resolver resolver = repositoryAdmin.resolver();
    final Resource[] discoverResources = repositoryAdmin
            .discoverResources(filter);
    for (final Resource r : discoverResources) {
        resolver.add(r);
    }
    assertTrue(resolver.resolve());
    resolver.deploy(true);
}

次に、私のテストケースは次のようになります。これにより、テストが公開するサービスを正しくロードすることが保証されます。

@Test
public void testBlueprintBundle() throws Exception {
    obrDeploy("(symbolicname=net.trajano.maven-jee6.blueprint.producer)");
    getService(bundleContext, MongoDbFactory.class);
    getService(bundleContext, BlockingQueue.class);
    getService(bundleContext, Executor.class);
}

これは、設計どおりの推移的なリンクを持つバンドルのみを展開することに注意してください。実装バンドルのように存在しない他の依存関係がある場合は、それらもデプロイする必要があります。以下は、テストを簡素化するためにワイルドカードを使用して OBR から複数のバンドルをデプロイする方法の行を示しています。

obrDeploy("(|(symbolicname=*.blueprint.consumer)(symbolicname=*.blueprint.producer)(symbolicname=*.hello.osgi))");

完全なソースはhttps://github.com/trajano/maven-jee6/blob/emerging-technologies/osgi-sample/assembly/src/test/java/net/trajano/osgi/test/PaxTest.javaにあります

于 2012-08-15T03:37:23.907 に答える
1

Pax URL obr: プロトコル ハンドラーを使用して、Pax Exam テストで OBR リポジトリから個々のバンドルをプロビジョニングできますが、これは推移的な依存関係を取り込みません。

Pax Exam では、常に各バンドルを個別にプロビジョニングする必要があります。ただし、テスト構成の再利用をサポートするために、複合オプションによってバンドルをグループ化できます。

于 2012-08-11T19:36:33.617 に答える