【问题标题】:CDI+OSGI: bundle packages scopeCDI+OSGI:捆绑包范围
【发布时间】:2015-08-13 07:33:11
【问题描述】:

我使用 javase 和解决方案 osgi (felix)+cdi(weld)+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{
   ....
}

我安装并启动这两个包。

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

【问题讨论】:

    标签: java osgi cdi weld pax


    【解决方案1】:

    如果你不改变你的系统设计,你所能做的就是将thirdpackageB导出并导入A

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

    @Inject @OsgiService
    private IClass2 class2;
    

    Class1.

    【讨论】:

    • +1 作为替代建议,因为原始设计在 JEE 中使用 CDI 可能很好,但在 OSGi 中绝对不是这样做的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2012-06-26
    • 2015-05-22
    • 2015-10-04
    • 2023-03-03
    • 2012-06-29
    相关资源
    最近更新 更多