使用OSGiAPI,如何确定给定的bundle是否是一个片段?

使用OSGiAPI,如何确定给定的bundle是否是一个片段?,osgi,bundle,osgi-fragment,Osgi,Bundle,Osgi Fragment,在OSGiAPI中,调用返回所有捆绑包,无论它们是否为片段。对于给定对象,判断这是否为片段的最佳方法是什么?一种可能的方法:使用查找标题。如果它存在,它就是一个片段。最佳方式: (bundle.adapt(BundleRevision.class.getTypes()&BundleRevision.TYPE_FRAGMENT)!=0根据OSGi核心规范第4版4.2版,还有PackageAdmin服务,该服务提供对捆绑包结构信息的访问,例如确定给定捆绑包是否为片段 import org.osgi.

在OSGiAPI中,调用返回所有捆绑包,无论它们是否为片段。对于给定对象,判断这是否为片段的最佳方法是什么?

一种可能的方法:使用查找标题。如果它存在,它就是一个片段。

最佳方式:


(bundle.adapt(BundleRevision.class.getTypes()&BundleRevision.TYPE_FRAGMENT)!=0

根据OSGi核心规范第4版4.2版,还有
PackageAdmin
服务,该服务提供对捆绑包结构信息的访问,例如确定给定捆绑包是否为片段

import org.osgi.framework.Bundle;
import org.osgi.service.packageadmin.PackageAdmin;

PackageAdmin packageAdmin = ...; // I assume you know this

Bundle hostBundle = ...;         // I assume you know this
Bundle fragmentBundle = ...;     // I assume you know this

assertFalse(PackageAdmin.BUNDLE_TYPE_FRAGMENT, packageAdmin.getBundleType(hostBundle);
assertEquals(PackageAdmin.BUNDLE_TYPE_FRAGMENT, packageAdmin.getBundleType(fragmentBundle);

显然,在OSGi4.3中,
PackageAdmin
服务似乎应该被
org.OSGi.framework.wiring
包所取代。

用我所知道的最好的方式回答我自己的问题。。。如果这是错误的,或者有更好的方法,我将奖励其他地方的答案!是的,这比我的方式要明确得多。谢谢请注意,这是OSGi4.3中的一个新API。还要注意,如果在卸载捆绑包时丢失竞争条件,adapt()可能会返回null。