我使用javase和解决方案osgi (felix)+cdi(weld)+paxcdi。我有两个 bundle A 和 B。 bundle B 是一个 lib bundle 。
在 bundle A 中,我有一个类和一个包。
package com.example.firstpackage;
import com.example.secondpackage.Class2;
public class Class1{
@Inject
private Class2 class2;
}
在 bundle B 中,我有两个类和两个包
package com.example.secondpackage;
import com.example.thirdpackage.Class3;
public class Class2{
@Inject
private Class3 class3;
}
和
package com.example.thirdpackage;
public class Class3{
....
}
我安装并启动这两个包。
问题 - 用于注入(inject) bundle A 的类中的 pax(或 Weld )仅扫描为 bundle A 中的类导入的那些包。在我的示例中 - CDI 在Class1中注入(inject),Class2将扫描bundle B的com.example.secondpackage。但是,它会抛出异常,因为Class2需要Class3,但com.example.thirdpackage不会扫描bundle A(因为它没有导入!!!)。 com.example.thirdpackage 仅扫描 bundle B,但据我了解,cdi 的每个 bundle 都有其自己的范围。如何解决?
最佳答案
如果你不改变系统设计,你所能做的就是从B
导出thirdpackage
并将其导入A
.
为了实现更好的封装,您可以分解出由 Class2
实现的服务接口(interface) IClass2
,使该类成为 @OsgiServiceProvider
并使用
@Inject @OsgiService
private IClass2 class2;
在Class1
中。
关于java - CDI+OSGI : bundle packages scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30546428/