处理无状态会话bean中的CDI事件

时间:2012-11-21 14:46:18

标签: java-ee ejb cdi

我正在尝试理解CDI Events如何工作以在我的应用程序中实现它们的用法,结构如下: 我有一个启动套接字服务器的JCA资源适配器。 然后我有一个MDB,它被映射为该资源适配器的端点。 现在,当我通过套接字服务器收到消息时,我想通知此消息池的无状态bean。此消息包含无状态会话Bean所需的数据,以便对来自Web服务的其他请求执行某些操作。

我创建了一个实现Local和Remote接口的Stateless会话bean。 本地人声明了listenToRegistration方法。

@Stateless(...)
public class myBean implements MyRemoteInterface,MyLocalInterface{
   ...

   public void listenToEvent(@Observes EventMessage eventMessage){
       logger.info("gotcha!");
   }
}

本地接口定义如下

@Local
public interface MyLocalInterface {
   public void listenToEvent(@Observes EventMessage eventMessage);
}

从JCA资源适配器接收的MDB就像这样

@MessageDriven(...)
public class messagerMDB implements MessageEndpoint {
    @Inject
    Event<EventMessage> events;   

    ...

    @Override
    public void onMessage(String message) throws Exception {
       ...
       events.fire(message);
    }

}

现在,想象一下,在某个时间点,我在池中有20个myBean实例。 当我收到一条消息时,我希望阅读20次“gotcha”。我是对的吗?

1 个答案:

答案 0 :(得分:3)

不,只有一次。服务器将选择一个用于通知的实例,而不是所有实例。如果它们是不同的类型,那么您应该接收每种类型的通知。