【发布时间】:2013-02-05 14:11:13
【问题描述】:
我有一个企业应用程序存档 (EAR),其中包含多个后端模块 (EJB) 以及一些 Web 模块 (WAR)。
事件在后端模块之一内被触发:
@Inject private Event<MyEvent> myEvent;
...
public void fireEvent() {
myEvent.fire(new MyEvent());
}
...
可以在任何其他后端模块中观察到,代码如下:
public void listener(@Observes MyEvent myEvent) {
..
}
但我无法检索 WAR 中的事件。这是因为类加载器可见性(来自 WAR 的类对 EJB 不可见)还是应该由 CDI 处理?
如果 CDI 不能用于应用程序范围的事件,还有哪些替代方法?
- JMS
- Guava EventBus
- ...
有什么可以与 CDI 一起使用的吗?也许是一些将事件连接到 WAR 中的 CDI 扩展?
----------- 编辑:
如果它在同一个 WAR 中触发,我可以观察到该事件。 我还尝试使用@Stateless bean 作为事件侦听器,但没有成功。
包装是这样的:
- 耳朵
- WAR(应在此处观察事件)
- 战争
- EJB(在此处触发事件)
【问题讨论】:
-
在你的WAR文件中你肯定有一个
/WEB-INF/beans.xml -
是的.. beans.xml 文件已就位。
-
能否请您发布 WAR 事件侦听器(以了解您如何实例化和使用它们,也许 CDI 不知道您的 bean 实例...)。详细的包装说明也会有所帮助。
-
它知道我的豆子。如果我在同一个 WAR 中触发事件,则可以使用相同的代码观察它。
标签: java jakarta-ee war cdi ear