CDI+OSGI:捆绑包范围
CDI+OSGI: bundle packages scope
我使用 javase 和解决方案 osgi (felix)+cdi(weld)+paxcdi。我有两个 bundle A 和 B。Bundle B 是一个 lib bundle。
在捆绑包 A 中,我有一个 class 和一个包裹。
package com.example.firstpackage;
import com.example.secondpackage.Class2;
public class Class1{
@Inject
private Class2 class2;
}
在捆绑包 B 中,我有两个 classes 和两个包
package com.example.secondpackage;
import com.example.thirdpackage.Class3;
public class Class2{
@Inject
private Class3 class3;
}
和
package com.example.thirdpackage;
public class Class3{
....
}
我安装并启动了两个包。
问题 - 注入包 A 的 classes 中的 pax(或焊接)仅扫描那些为 classes IN 包 A 导入的包。在我的示例中 - CDI
对于在 Class1 中注入,Class2 将扫描包 B 的 com.example.secondpackage。但是,它会抛出异常,因为 Class2 需要 Class3,但未扫描包 A 的 com.example.thirdpackage(因为它未导入!!!)。 com.example.thirdpackage 仅针对 bundle B 进行扫描,但据我了解,cdi 的每个 bundle 都有其自己的范围。如何解决?
如果您不更改系统设计,您所能做的就是将 thirdpackage
从 B
导出并导入到 A
。
为了实现更好的封装,您可以分解出由 Class2
实现的服务接口 IClass2
,将此 class 设为 @OsgiServiceProvider
并使用
@Inject @OsgiService
private IClass2 class2;
在 Class1
.
我使用 javase 和解决方案 osgi (felix)+cdi(weld)+paxcdi。我有两个 bundle A 和 B。Bundle B 是一个 lib bundle。
在捆绑包 A 中,我有一个 class 和一个包裹。
package com.example.firstpackage;
import com.example.secondpackage.Class2;
public class Class1{
@Inject
private Class2 class2;
}
在捆绑包 B 中,我有两个 classes 和两个包
package com.example.secondpackage;
import com.example.thirdpackage.Class3;
public class Class2{
@Inject
private Class3 class3;
}
和
package com.example.thirdpackage;
public class Class3{
....
}
我安装并启动了两个包。
问题 - 注入包 A 的 classes 中的 pax(或焊接)仅扫描那些为 classes IN 包 A 导入的包。在我的示例中 - CDI 对于在 Class1 中注入,Class2 将扫描包 B 的 com.example.secondpackage。但是,它会抛出异常,因为 Class2 需要 Class3,但未扫描包 A 的 com.example.thirdpackage(因为它未导入!!!)。 com.example.thirdpackage 仅针对 bundle B 进行扫描,但据我了解,cdi 的每个 bundle 都有其自己的范围。如何解决?
如果您不更改系统设计,您所能做的就是将 thirdpackage
从 B
导出并导入到 A
。
为了实现更好的封装,您可以分解出由 Class2
实现的服务接口 IClass2
,将此 class 设为 @OsgiServiceProvider
并使用
@Inject @OsgiService
private IClass2 class2;
在 Class1
.