0

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

我创建了一个实现本地和远程接口的无状态会话 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 Resource Adapter 接收的 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”。我对吗?

4

1 回答 1

3

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

于 2012-11-22T07:03:15.387 回答