繁体   English   中英

如何查看为什么Apache Felix Log中不满足捆绑要求?

[英]How to see why bundle requirements are not fulfilled in Apache Felix Log?

我在嵌入式模式下使用Felix,并且具有File Install捆绑包,并且具有已安装但尚未解决的捆绑包(因此无法启动/活动),而我所付出的努力比我认为要查找根本原因要多在日志中...

您如何/在何处获得那些有用的帮助,如“无法解决...因为...”或“ BundleException:捆绑中未解决的约束...无法解决...缺少要求... osgi.wiring.package”从Felix框架和/或“文件安装”捆绑包自动获取日志中的消息? 我没有看到类似的东西-我应该吗? 哪里?

我还添加了日志记录(通过Apache Felix Logosgi-loglistener-slf4j ),但是还是nada -您是否需要做比我更多的事情来启用(嵌入式)Felix中此类问题的日志记录?

然后,我添加了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的异步捆绑包初始化,何时登录失败的捆绑包启动可能并不明显,因为它可能必须等待相关的捆绑包出现? 在某种宽限期过后,是否仍会记录这种错误?

在找到pax考试选项来检查所有捆绑包之前,我在测试中遇到了类似的问题。

我所做的是以编程方式浏览分发包列表,并在每个未启动的分发包上调用start。 然后,bundle.start()会引发异常,其原因类似于上面的控制台命令。

不知道是否可以将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM