我有一个在 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)
该类已加载并实例化(我可以看到来自其构造函数的日志),但它从不接收事件。
有什么我可以做的事情吗?