我试图了解 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”。我对吗?