1

バンドル アクティベーターを実行しようとすると、次の例外が発生します。

java.lang.LinkageError: loader constraint violation: when resolving
method "com.openaf.osgi.OSGIUtils$.mapToDictionary(Lscala/collection/immutable/Map;)Ljava/util/Dictionary;"
the class loader (instance of
org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) of
the current class, com/openaf/test/TestBundleActivator, and the class
loader (instance of sun/misc/Launcher$AppClassLoader) for resolved
class, com/openaf/osgi/OSGIUtils$, have different Class objects for
the type a/util/Dictionary; used in the signature
    at com.openaf.test.TestBundleActivator.start(TestBundleActivator.scala:11)

が 2 つの異なるクラスローダーによってロードされたようですが、そのjava.util.Dictionary理由はわかりません。問題の原因となっているクラス ( com.openaf.osgi.OSGIUtils) はシステム パッケージです。すなわち

hm.put("org.osgi.framework.system.packages.extra", "sun.misc, com.openaf.osgi")

これは、存在するバンドルのマニフェストですTestBundleActivator

Manifest-Version: 1
Bnd-LastModified: 1345098244802
Bundle-Activator: com.openaf.test.TestBundleActivator
Bundle-ManifestVersion: 2
Bundle-Name: test.impl
Bundle-SymbolicName: test.impl
Bundle-Version: 0
Created-By: 1.7.0_04 (Oracle Corporation)
Export-Package: com.openaf.test;uses:="scala.collection,scala.collection
 .immutable,com.openaf.test.api,scala.collection.mutable,scala.reflect,o
 rg.osgi.framework,com.openaf.osgi,scala.runtime,scala,com.openaf.utils"
 ;version="0.0.0"
Import-Package: com.openaf.osgi,com.openaf.test.api,com.openaf.utils,org
 .osgi.framework,scala,scala.collection,scala.collection.immutable,scala
 .collection.mutable,scala.reflect,scala.runtime
Tool: Bnd-1.44.0

誰かが私が間違っていることを知っていますか? システムパッケージに含まれているため、基本クラスローダーによってロードされる必要があると推測しました。そうではないようです。

ありがとう、ニック。

編集 - 私がやろうとしていることを言うべきです。felix アプリケーションの起動時にクラスパスにパッケージがあり、すべてのバンドルで利用できるようにしたいと考えています。プロパティはそれを行う方法だと思いorg.osgi.framework.system.packages.extraました。あれは正しいですか?

4

0 に答える 0