【问题标题】:Event in a @Stateless EJB@Stateless EJB 中的事件
【发布时间】:2011-07-27 13:54:32
【问题描述】:

我有一个抛出事件的无状态会话 Bean (java ee 6, cdi)

@Stateless
public class CustomerService {
@Inject @ErrorMessage Event<BaseEvent> errMsg;
//[...]
public Customer getCustomer(String username, String password) {
    Customer cust = null;
    try {
    //[...]
    } catch (Exception ex) {
        errMsg.fire(new BaseEvent("user not found [username="+username+"]"));
    }

这个 bean 是 ejb 模块的一部分。另一方面,我有两个事件观察者来监听这些事件。它们看起来像

public void showErrorMessage(@Observes @ErrorMessage BaseEvent event) {
    //do something with the event.
}

ejb-modul 中也有一个观察者。另一个观察者在一个战争模块中。 “ejb”-observer 捕捉到这个调用另一个没有。

如果无法将事件从 ejb 模块发送到战争模块?

注意:从 war-module 到 ejb-module 是可能的。

【问题讨论】:

  • 你为什么要分班?由于您使用的是 JEE 6,因此您可以拥有 WEB-INF/classes 下的所有内容。
  • 据我所知,我在这部分应用程序中需要 JMS。 JMS 在“网络”项目中不起作用。纠正我,如果我错了
  • 抱歉,回复晚了 - 取决于您所说的“网络项目”是什么意思。如果您指的是使用 web 配置文件,它是应用程序服务器上的一组精简 API,那么这是正确的,JMS 不是其中的一部分。但是如果你有一个标准的 JEE - 完整的 - 配置文件,你可以将所有东西打包在一个 WAR 中(无论你是真的有一个 web 应用程序还是只是一个后端应用程序),然后你就不必分离 EJB 和其他代码.

标签: events java-ee-6 cdi


【解决方案1】:

这可能归结为从一个模块到另一个模块的类加载器可见性是否也是不对称的。因此,如果从类加载器 POV 看不到 WAR,则该 WAR 中的 BeanManager 不会认为还有其他人@observing 它,因为他不需要扫描不可见的模块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2011-02-19
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    相关资源
    最近更新 更多