CDI + OSGI:捆绑包范围

时间:2015-05-30 12:52:33

标签: java osgi cdi weld pax

我使用javase和解决方案osgi(felix)+ cdi(焊接)+ paxcdi。我有两个捆绑包A和B.捆绑包B是一个lib捆绑包。

在捆绑包A中,我有一个类和一个包。

package com.example.firstpackage;
import com.example.secondpackage.Class2;
public class Class1{
   @Inject
   private Class2 class2;
}

在B组中,我有两个班级和两个包

package com.example.secondpackage;
import com.example.thirdpackage.Class3;
public class Class2{
   @Inject
   private Class3 class3;
}

package com.example.thirdpackage;
public class Class3{
   ....
}

我安装并启动两个捆绑包。

问题 - 用于在bundle A类中注入的pax(或焊接)仅扫描那些为IN类bundle A导入的包。在我的例子中 - CDI 对于Class1 Class2中的注入将扫描bundle B的com.example.secondpackage。但是,它会抛出异常,因为Class2需要Class3但是com.example.thirdpackage不会扫描bundle A(因为它没有导入!!!)。 com.example.thirdpackage只扫描B组,但据我所知,cdi的每个bundle都有自己的范围。如何解决?

1 个答案:

答案 0 :(得分:4)

如果您不更改系统设计,您只能从thirdpackage导出B并将其导入A

为了实现更好的封装,您可以将IClass2实现的服务接口Class2分解出来,使此类成为@OsgiServiceProvider并使用

@Inject @OsgiService
private IClass2 class2;
Class1中的