操作の一部を簡素化するために、Felix iPOJO を「MyFramework」と呼ばれるフレームワークにラップしています。
MyFramework を使用すると、次のようになります。
1- サービスとして「hello」メッセージの印刷を提供する iPOJO コンポーネントである「HelloService」バンドル。
2- 上記の「HelloService」コンポーネントをインスタンス化し、その開始メソッドでそのサービスを取得する別の iPOJO コンポーネントである「MyFrameworkComposite」バンドル。
3- start メソッドで「MyFrameworkComposite」コンポーネントをインスタンス化する単なる OSGI バンドルであるスターター バンドル。
4- iPOJO に必要なバンドルと上記の 3 つのバンドルをロードする Java アプリケーション。
Java アプリケーションを実行すると、次のエラー出力が表示されます。
MyFramework Hello Service Bundle Started!
MyFramework Composite Bundle Started!
MyFramework Starter Bundle Started!
MyFramework Composite Started!
MyFramework Hello Service Component started!!
hello Component copy State is2
[ERROR] : [adere-composite-0] The callback method start has thrown an exception : loader constraint violation: loader (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) previously initiated loading for a different type with name "org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription"
java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) previously initiated loading for a different type with name "org/apache/felix/ipojo/handlers/providedservice/ProvidedServiceDescription"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at .....................................(OTHER SIMILAR ERRORS)
done ok (Y)
エラーは次の行で正確に発生します: (この行は私のフレームワーク コードにあります):
public String[] getServiceSpecifications()
{
return this.providedServiceDescription.getServiceSpecifications();//error here
}
org.apache.felix.ipojo.handlers.providedservice
providedServiceDescription は、パッケージの一部である ProvidedServiceDescription タイプです。
次のように、「MyFrameworkComposite」コンポーネントで「Hello Service」コンポーネントサービスを取得しようとすると、エラーが発生する行に到達します。
ProvidedService ps= content.getProvidedService("myhelloservice.helloservice.HelloService");
クラスパスにライブラリが重複している場合に発生する可能性があるさまざまなリソースを読みました。しかし、そうではないことは確かです。原因は何ですか?