Osgi 更新捆绑包时发生ArrayStoreException

Osgi 更新捆绑包时发生ArrayStoreException,osgi,classloader,apache-felix,Osgi,Classloader,Apache Felix,使用ApacheFelix,我在更新包时遇到ArrayStoreException。它发生在与更新包不同的包中。受影响的捆绑包有一个服务侦听器,该侦听器对更新的捆绑包注册的新服务作出反应。侦听器执行一些以ArrayStoreException结尾的代码。以下是堆栈跟踪: ERROR: Bundle com.elsten.bliss.platform [47] EventDispatcher: Error during dispatch. (java.lang.ArrayStoreExceptio

使用ApacheFelix,我在更新包时遇到ArrayStoreException。它发生在与更新包不同的包中。受影响的捆绑包有一个服务侦听器,该侦听器对更新的捆绑包注册的新服务作出反应。侦听器执行一些以ArrayStoreException结尾的代码。以下是堆栈跟踪:

ERROR: Bundle com.elsten.bliss.platform [47] EventDispatcher: Error during dispatch. (java.lang.ArrayStoreException: com.elsten.bliss.music.policy.tag.tagtype.TagTypePolicy)
java.lang.ArrayStoreException: com.elsten.bliss.music.policy.tag.tagtype.TagTypePolicy
        at com.elsten.bliss.main.Main.getPolicies(Main.java:473)
        at com.elsten.bliss.main.Main.<init>(Main.java:150)
        at com.elsten.bliss.main.Main.startup(Main.java:143)
        at com.elsten.bliss.main.Activator$VersionServiceTracker.addingService(Activator.java:58)
        at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:980)
        at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:906)
        at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:262)
        at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:234)
        at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:941)
        at org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:932)
        at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:793)
        at org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:543)
        at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4260)
        at org.apache.felix.framework.Felix.registerService(Felix.java:3275)
        at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:346)
        at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:352)
        at com.elsten.osgi.Activator.start(Activator.java:28)
        at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:641)
        at org.apache.felix.framework.Felix.activateBundle(Felix.java:1977)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1895)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:944)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:931)
        at org.apache.felix.bundlerepository.impl.ResolverImpl.deploy(ResolverImpl.java:647)
        at com.elsten.bliss.updater.OnlineUpdater$2.run(OnlineUpdater.java:100)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:679)

我猜想这与类加载有关;更新后,MusicPolicy或TagTypePolicy类不匹配。我有点困惑为什么会这样;考虑到这些是私有的静态变量,我认为我的代码可以随心所欲。我认为,只有当静态数据导出到其他bundle时,才会出现问题。

我认为有必要查看bundle的导入/导出是什么。策略没有初始化也有点奇怪,您会假设在更新之后它仍然会被初始化吗?您是否只是更新了bundle B而没有停止bundle A(或停止)?这里只涉及一个bundle。。。正在更新的一个。OBR用于提供捆绑包,因此我认为应该在更新之前停止捆绑包。
private static final MusicPolicy tagTypePolicy = new TagTypePolicy();
private static MusicPolicy[] policies;
private static MusicPolicy[] getPolicies(Version version) {

    if(policies==null) {
        final HttpClientConfiguration httpClientConfig = HttpClientConfigurations.userAgentAndAcceptGzip(version);
        policies = new MusicPolicy[] {
            tagTypePolicy
        };
    }
    return policies;
}