如何查看为什么在Apache Felix日志中不满足bundle的原因



我在嵌入式模式下使用felix,并使用文件安装捆绑包,并且安装了但未解决的捆绑包(因此没有启动/活动),我正在努力更多我认为要在日志中找到根本原因...

您如何/在哪里得到那些有用的外观"无法解决……因为..."或" BundleException:捆绑包中未解决的约束...无法解决...缺失要求... Osgi.Wiring。包装中的"日志中的消息",从Felix Framework和/或文件安装捆绑包中自动?我没有看到这样的东西 - 我应该成为吗?在哪里?

我还添加了日志记录(通过Apache Felix Log和Osgi-Loglistener-SLF4J),但仍然是NADA-您是否需要做更多的事情来启用(嵌入式)Felix中的这种问题?<<<<<<<<<<<</p>

然后,我添加了Felix Gogo Shell CLI,并发现其inspect命令也不是很有帮助(对未解决的捆绑包不起作用),并且只有start将显示根本原因 - 但是如何我可以将其记录下来,而不必拥有控制台并开始:

g! lb  
START LEVEL 1
   ID|State      |Level|Name
    0|Active     |    0|System Bundle (5.6.1)|5.6.1
    1|Active     |    1|Apache Felix File Install (3.5.4)|3.5.4
    2|Active     |    1|Apache Felix Remote Shell (1.1.2)|1.1.2
    3|Active     |    1|Apache Felix Gogo Runtime (0.16.2)|0.16.2
    4|Active     |    1|Apache Felix Gogo Command (0.16.0)|0.16.0
    5|Active     |    1|Apache Felix Gogo Shell (0.12.0)|0.12.0
    6|Installed  |    1|osgi.testplugin (1.0.0.SNAPSHOT)|1.0.0.SNAPSHOT
g! inspect req * 6
Bundle 6 is not resolved.
g! start 6
org.osgi.framework.BundleException: Unable to resolve ch.vorburger.minecraft.osgi.testplugin [8](R 8.0): missing requirement [ch.vorburger.minecraft.osgi.testplugin [8](R 8.0)] osgi.wiring.package; (osgi.wiring.package=org.spongepowered.api.command) Unresolved requirements: [[ch.vorburger.minecraft.osgi.testplugin [8](R 8.0)] osgi.wiring.package; (osgi.wiring.package=org.spongepowered.api.command)]

我确实理解,由于OSGI的异步束初始化,何时可以记录失败的捆绑启动可能并不明显,因为它可能需要等待依赖的捆绑包出现?难道还不能..在某种宽限期之后记录这种错误?

i在我找到PAX考试选项之前,我在测试中也有类似的问题,以检查所有捆绑包都已解决。

我所做的是通过编程方式浏览捆绑包的列表,并在未启动的每个捆绑包上呼叫启动。然后bundle.start()随后抛出一个异常,例如上面的Console命令。

不确定是否可以将Felix设置为默认情况下还记录此。

不确定它是最好的解决方案,但它帮助了我

import org.osgi.framework.*;
public class Activator implements BundleActivator, BundleListener {
    public void start(BundleContext context) {
        context.addBundleListener(this);
    }
    public void stop(BundleContext context) {
        context.removeBundleListener(this);
    }
    @Override
    public void bundleChanged(BundleEvent bundleEvent) {
        if (bundleEvent.getType() == BundleEvent.UNRESOLVED) {
            System.out.println("BUNDLE " + bundleEvent.getOrigin().getSymbolicName() + " UNRESOLVED");
        try{
            System.out.println("TRYING TO START " + bundleEvent.getOrigin().getSymbolicName() + " BUNDLE");
            bundleEvent.getOrigin().start();
        } catch (BundleException e) {
            e.printStackTrace();
        }
    }
}

}

并将激活程序配置添加到.bnd文件

Bundle-ClassPath: .
Bundle-Activator: com.netcracker.webportal.framework.activator.Activator
Import-Package: org.osgi.framework

相关内容

  • 没有找到相关文章

最新更新