[英]How to see why bundle requirements are not fulfilled in Apache Felix Log?
我在嵌入式模式下使用Felix,并且具有File Install捆绑包,并且具有已安装但尚未解决的捆绑包(因此无法启动/活动),而我所付出的努力比我认为要查找根本原因要多在日志中...
您如何/在何处获得那些有用的帮助,如“无法解决...因为...”或“ BundleException:捆绑中未解决的约束...无法解决...缺少要求... osgi.wiring.package”从Felix框架和/或“文件安装”捆绑包自动获取日志中的消息? 我没有看到类似的东西-我应该吗? 哪里?
我还添加了日志记录(通过Apache Felix Log和osgi-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.