gpt4 book ai didi

java - OSGi + Weld : FrameworkUtil getBundleContext() returns null

转载 作者:行者123 更新时间:2023-12-02 04:45:23 26 4
gpt4 key购买 nike

我使用 Apache Felix 和 Weld ,我有两个类:

@ApplicationScoped
class A {
private B b= new B();
}

class B {
private void foo(){
BundleContext bc= FrameworkUtil.getBundle(this.getClass()).getBundleContext();
}
}

对象是 A 类由 CDI 容器创建的,我认为这就是 B 类 FrameworkUtil.getBundle 返回 null 的原因。也许是类加载器问题或类似的问题。当然,当 Weld 注入(inject)它时,我可以从 A 类获取对包上下文的引用。但我不想将此引用保留在 A 内并将其传递给任何其他类。我可以获取 B 内的捆绑上下文的引用(而不从 A 获取)吗?我在B尝试过:

@Inject
BundleContext bundleContext;

但是没有成功。这可能很重要 - 这些类位于不同的包中。

最佳答案

对象实例可能具有 CDI 容器在运行时由其自己的自定义类加载器创建的类型(通过创建 A 的子类)。

而不是使用调用

BundleContext bc= FrameworkUtil.getBundle(this.getClass()).getBundleContext();

尝试打电话

BundleContext bc= FrameworkUtil.getBundle(A.class).getBundleContext();

如果类型 A 由包的 ClassLoader 加载,这应该可以工作。

顺便说一句:我建议不要在 OSGi 中使用 Weld、CDI 和其他技术。它们可能是集成的,但由于它们在应用程序服务器(只有一个类加载器/应用程序)中工作的技巧,它们经常会造成很多痛苦。

关于java - OSGi + Weld : FrameworkUtil getBundleContext() returns null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29714028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com