在OSGi包中创建的线程无法从其他包中加载类

时间:2015-09-25 20:32:44

标签: multithreading osgi karaf

我有几个OSGi包;我在一个bundle中旋转一个线程并在run方法内部,我试图从另一个bundle创建一个类的实例,但它只是失败,抛出ClassNotFoundException

捆绑1:

package com.test.bnd1;
 public Class A {
 }

pom.xml:

Export-package: com.test.bnd1.*

捆绑2:

public com.test.bnd2;
public Class B {
   public void init() {
     MyThd thd = new MyThd();
     thd.start();
   }
}

public Class MyThd extends Thread {
   public void run() {
      A a = new A(); //throws ClassNotFoundException
   }
}

pom.xml:

Import-package: com.test.bnd1.*

blueprint.xml:

<bean id="testB" class="com.test.bnd2.B" init-method="init"/>

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

OSGi中没有名为#include <iostream> inline double fun() { return 3.0; } extern double m; double d2=m; int main() { std::cout<<d2; } double m=fun(); exports-package的标头。

您需要分别使用imports-packageExport-Package

答案 1 :(得分:0)

在阅读了这个article之后,我将当前线程的TCCL重置为bundle类加载器,并从其他bundle加载了类。如果其他人有更好的解决方案,请告诉我。