При создании компоновки iPOJO в комплекте отображается "java.lang.LinkageError: нарушение ограничения загрузчика: при разрешении переопределенного метода"
Я пытаюсь создать составной компонент, используя iPOJO API.
Первоначально я встраивал инфраструктуру Felix в свое Java-приложение следующим образом:
public class HostApplication
{
private HostActivator m_activator = null;
private Felix m_felix = null;
public HostApplication()
{
Map config= new HashMap();
// Create a configuration property map.
//Map config = new HashMap();
config.put(Constants.FRAMEWORK_STORAGE_CLEAN, Constants.FRAMEWORK_STORAGE_CLEAN_ONFIRSTINIT);
// Create host activator;
m_activator = new HostActivator();
List list = new ArrayList();
list.add(m_activator);
config.put(FelixConstants.SYSTEMBUNDLE_ACTIVATORS_PROP, list);
try
{
// Now create an instance of the framework with
// our configuration properties.
m_felix = new Felix(config);
// Now start Felix instance.
m_felix.start();
}
catch (Exception ex)
{
System.err.println("Could not create framework: " + ex);
ex.printStackTrace();
}
// Register the application's context as an OSGi service!
BundleContext bundleContext1 = m_felix.getBundleContext();
............
Я также развернул необходимые пакеты iPOJO в своем Java-приложении, как показано ниже:
//starting ipojo required bundles
Bundle coreBundle = bundleContext1.installBundle("file:C:\\Users\\zaid.almahmoud\\Dropbox\\EBTIC\\ADERE\\feasibility-codes\\ipojo\\ipojo-distribution-1.11.0\\bundle\\org.apache.felix.ipojo-1.11.0.jar");
coreBundle.start();
Bundle compositeBundle = bundleContext1.installBundle("file:C:\\Users\\zaid.almahmoud\\Dropbox\\EBTIC\\ADERE\\feasibility-codes\\ipojo\\ipojo-distribution-1.11.0\\bundle\\org.apache.felix.ipojo.composite-1.6.0.jar");
compositeBundle.start();
Bundle apiBundle = bundleContext1.installBundle("file:C:\\Users\\zaid.almahmoud\\Dropbox\\EBTIC\\ADERE\\feasibility-codes\\ipojo\\ipojo-distribution-1.11.0\\bundle\\org.apache.felix.ipojo.api-1.6.0.jar");
apiBundle.start();
Ниже приведен снимок файлов jar в моем пути к классам java-приложений:
В дополнение к моему Java-приложению у меня есть пакет, в котором я создаю составной тип компонента, используя iPOJO API. Я создаю этот композит и создаю его экземпляр в моем методе запуска Activator, как показано ниже:
public void start(BundleContext context) throws Exception {
CompositeComponentType type = new CompositeComponentType()
.setBundleContext(context)
.setComponentTypeName("comp1");
ComponentInstance ci = type.createInstance();
}
MANIFEST.MF моего пакета:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Starter
Bundle-SymbolicName: starter
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: starter.Activator
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ClassPath: .,
org.apache.felix.ipojo-1.6.0.jar,
org.apache.felix.ipojo.api-1.6.0.jar,
org.apache.felix.ipojo.composite-1.6.0.jar
Export-Package: org.apache.felix.ipojo
Import-Package: org.osgi.framework, org.apache.felix.ipojo
Мой путь к классу пакета:
Когда я устанавливаю и запускаю этот пакет в своем Java-приложении, я получаю следующую ошибку:
org.osgi.framework.BundleException: Activator start error in bundle starter...
Caused by: java.lang.LinkageError: loader constraint violation: when resolving overridden method "org.apache.felix.ipojo.composite.CompositeFactory.check(Lorg/apache/felix/ipojo/metadata/Element;)V" the class loader (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) of the current class, org/apache/felix/ipojo/composite/CompositeFactory, and its superclass loader (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5), have different Class objects for the type y.check(Lorg/apache/felix/ipojo/metadata/Element;)V used in the signature
в следующей строке:
ComponentInstance ci = type.createInstance();
Я читал здесь, что эта ошибка может возникнуть, когда у вас есть два одинаковых класса в двух комплектах. Но я не мог понять, где могут быть эти два класса. Я подозревал org/apache/felix/ipojo/metadata/Element
но я нашел только один класс в org.apache.felix.ipojo.
, У меня нет этой библиотеки нигде, кроме как в моем комплекте.
Можете ли вы помочь? Благодарю.