首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让Pax考试使用OBR来处理传递依赖关系?

如何让Pax考试使用OBR来处理传递依赖关系?
EN

Stack Overflow用户
提问于 2012-06-12 09:03:49
回答 2查看 727关注 0票数 1

在Karaf中,我可以安装OBR特性并使用obr:addUrl添加repository.xml,使用obr:deploy部署包以及所有可传递的依赖项。我在https://stackoverflow.com/a/10989017/242042中记录了这一点

然而,现在我想使用PaxExam创建一个JUnit测试,但是我似乎不能在PaxExam上模拟我使用Karaf所做的事情。

有没有显示如何指向OBR存储库并自动完成所有可传递计算的部署的代码片段?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-15 11:37:24

其实我很久以前就找到了这个问题的答案。我不使用obr: protocol处理程序,而是使用OBR实现(Apache Aries)。

这就是我配置测试用例的方式

代码语言:javascript
复制
@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部署

代码语言:javascript
复制
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);
}

然后我的测试用例是这样的。这可以确保测试正确地加载它公开的服务。

代码语言:javascript
复制
@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部署多个包,以简化测试。

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2012-08-12 03:36:34

您可以使用Pax URL obr: protocol handler在Pax考试测试中提供来自OBR存储库的各个包,但这不会引入任何可传递的依赖项。

在Pax考试中,您总是需要单独配置每个包。但是您可以通过组合选项对包进行分组,以支持测试配置的重用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10989376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档