如何检测是否在osgi容器中运行
问题描述:
我有一个OSGi包,也可以运行在普通的Java过程。我需要能够判断该捆绑包是否已加载到OSGi系统中。我怎样才能做到这一点?如果没有这样做的OSGi标准的方式,我会解决特定于Eclipse/Equinox的方法。如何检测是否在osgi容器中运行
答
如果您没有激活剂,你也可以试着问你的包:
Bundle b = org.osgi.framework.FrameworkUtil.getBundle(MyClass.this);
如果返回null,类没有被加载OSGi的。
答
您可以检查“this.getClass()。getClassLoader()instanceof org.osgi.framework.BundleReference”,如果您在R4.2 OSGi框架中运行,只应该是true。
+0
我正在使用eclipse安装中的测试,并将org.eclipse.osgi作为类加载程序包的开始。我决定检查非osgi情况下类加载器的名称是什么(com.sun ....我忘记了,现在我在家里),这使我的测试可以在其他OSGI实现中开放,尽管它受到其他非osgi类加载器实现的使用,并将扳手投入工作。 – Chris 2011-06-02 00:13:33
这与“getClass()。getClassLoader()instanceof org.osgi.framework.BundleReference”方法相比如何? OSGi版本的范围 – 2011-05-05 02:43:33
偷窥在实现中,它也依赖于BundleReference,并且可以从OSGi 4.2(eclipse 3.5.x?)上得到,我推荐它通过检查实例,因为它是API。 – 2011-05-05 11:08:54
请注意, instanceof“check也是API,因为规范指出bundle的类加载器必须实现BundleReference。 – 2014-07-16 02:29:00