小编j-d*_*ion的帖子

如何动态加载 CDI 事件观察器?

我有一个在 JBoss/Wildfly 上运行的应用程序。我使用 CDI 事件在模块之间进行通信。我希望能够使用事件作为插入自定义的一种方式,基本上动态加载一个额外的观察者,该观察者也将接收 CDI 事件。

这是我用来从 EJB 中动态加载类的片段:

File file = new File("D:\\workspace\\integrator\\target\\classes\\");
            
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};

ClassLoader cl = new URLClassLoader(urls, Thread.currentThread().getContextClassLoader());

Class cls = cl.loadClass("demo.DemoObserver");
observerInstance=cls.newInstance();
Run Code Online (Sandbox Code Playgroud)

加载的类非常简单,只是一个普通的 CDI 事件观察器,注释为 @Dependent 以“看到”为一个 bean。我的 beans.xml 被配置为自动发现 bean。

@Dependent
public class DemoObserver {
    
    private boolean observed=false;
    
    public DemoObserver() {
        observed=false;
    }
    
    @PermitAll
    public void stateChanged(@Observes EquipmentE10StateChanged event) {
            observed=true;
            System.out.println("Demo observer received event E10 state changed: " + event.toString());
    }

}
Run Code Online (Sandbox Code Playgroud)

该类已加载并实例化(我可以看到来自其构造函数的日志),但它从不接收事件。

有什么我可以做的事情吗?

java jboss cdi java-ee-7 wildfly

0
推荐指数
1
解决办法
132
查看次数

标签 统计

cdi ×1

java ×1

java-ee-7 ×1

jboss ×1

wildfly ×1