osgi上的qi4j无法启动

时间:2015-01-26 15:48:00

标签: osgi apache-servicemix apache-zest

有没有人设法让qi4j在像servicemix这样的OSGi环境中运行?我尝试没有成功。它经常告诉我:

[Application(6)] The activate method has thrown an exception
org.qi4j.bootstrap.BootstrapException: Can not create Qi4j without a 
    Qi4j Runtime.
at org.qi4j.bootstrap.Energy4Java.<init>(Energy4Java.java:51)
at org.qi4j.bootstrap.Energy4Java.<init>(Energy4Java.java:44)
...

在karaf控制台上,打印以下内容:

Qi4j Runtime jar is not present in the classpath.

我正在启动qi4j这样的激活方法(apache scr组件):

@Activate
public void activate() {

    try {
        // Bootstrap Qi4j Runtime
        // Create a Qi4j Runtime
        qi4j = new Energy4Java();
        ...
    } ...

在pom.xml中我定义了导入:

<Import-Package>
    org.qi4j.runtime,
    org.qi4j.runtime.*,
    org.qi4j.api.activation,
    org.qi4j.bootstrap,
    org.slf4j, 
    *
</Import-Package>
<DynamicImport-Package>*</DynamicImport-Package>

所有包解析,包括我在servicemix 5.3.0中部署的运行时以及所需的依赖项:

features:install scr
osgi:install wrap:mvn:org.codeartisans/org.json/20130213
osgi:install mvn:org.ow2.asm/asm-all/4.1
osgi:install mvn:org.qi4j.core/org.qi4j.core.api/2.0
osgi:install mvn:org.qi4j.core/org.qi4j.core.functional/2.0
osgi:install mvn:org.qi4j.core/org.qi4j.core.io/2.0
osgi:install mvn:org.qi4j.core/org.qi4j.core.spi/2.0
osgi:install mvn:org.qi4j.core/org.qi4j.core.bootstrap/2.0
osgi:install mvn:org.qi4j.core/org.qi4j.core.runtime/2.0

诀窍是什么?

2 个答案:

答案 0 :(得分:1)

可能你还没有开始捆绑。 osgi:install安装捆绑包,但它不会启动它们。请试试这个

features:install scr
osgi:install -s wrap:mvn:org.codeartisans/org.json/20130213
osgi:install -s mvn:org.ow2.asm/asm-all/4.1
osgi:install -s mvn:org.qi4j.core/org.qi4j.core.api/2.0
osgi:install -s mvn:org.qi4j.core/org.qi4j.core.functional/2.0
osgi:install -s mvn:org.qi4j.core/org.qi4j.core.io/2.0
osgi:install -s mvn:org.qi4j.core/org.qi4j.core.spi/2.0
osgi:install -s mvn:org.qi4j.core/org.qi4j.core.bootstrap/2.0
osgi:install -s mvn:org.qi4j.core/org.qi4j.core.runtime/2.0

答案 1 :(得分:0)

实际上我调试了运行时创建过程,发现bootstrap包中的RuntimeFactory尝试加载org.qi4j.runtime.Qi4jRuntimeImpl。显然这来自org.q14j.runtime包,它不是由引导包导入

我为主机org.qi4j.core.bootstrap;bundle-version=2.0.0创建了一个片段包以修复导入。

这完成了这项工作。