我将Felix iPOJO包装在称为“ MyFramework”的框架中,以简化其某些操作。
使用MyFramework,我有以下几点:
1-“ HelloService”捆绑包,它是一个iPOJO组件,提供打印“ hello”消息作为服务。
2-“ MyFrameworkComposite”捆绑包,它是另一个iPOJO组件,它在其start方法中实例化上面的“ HelloService”组件并检索其服务。
3-一个启动程序包,它只是一个OSGI包,它在启动方法中实例化了“ MyFrameworkComposite”组件。
4-我的Java应用程序,它加载了iPOJO所需的捆绑软件以及上述3个捆绑软件。
运行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
}
provideredServiceDescription的类型为ProvidedServiceDescription,它是
org.apache.felix.ipojo.handlers.providedservice
包的一部分。尝试在我的“ MyFrameworkComposite”组件中检索“ Hello Service”组件服务时,出现错误的行如下:
ProvidedService ps= content.getProvidedService("myhelloservice.helloservice.HelloService");
我读了不同的资源,这可能是由于您在类路径中复制了库而引起的。但我敢肯定事实并非如此。可能是什么原因?
最佳答案
问题来自您的OSGi嵌入。 OSGi框架内部和外部使用的类不同,因为它们的类加载器不同。您应该使用以下任一方法配置框架来避免此问题:
通过添加额外的系统软件包(此处为iPOJO软件包)
通过将这些软件包添加到引导代理
问题和转折在http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html#ApacheFelixFrameworkLaunchingandEmbedding-hostserviceusage上描述