java - CDI+OSGI : bundle packages scope

标签 java osgi cdi weld pax

我使用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/

相关文章:

java - 如何在 Javadoc 中添加包级注释?

java - OSGi 中的回调和传递对象引用

java - AEM 6.0 Web 控制台 bundle (OSGi bundle )中安装的软件包未正确安装(状态应为 Activity 未安装)

jakarta-ee - CDI 与 @Produces 的不明确依赖 - 为什么?

java - 使用 JEE5 和 Tomcat6 的 CDI/焊接

spring-boot - Quarkus Jandex 索引无法解析 Artifact org.springframework :spring-web

java - 读取文件,并使用Word类、方法处理单词

java - Jenkins Email-ext Jelly 脚本(高级概述)

使用 TagSoup 解析页面 URL 以创建 DOM 时出现 java IOException

java - OSGi ServiceTracker 中的漂亮 URL