我正在尝试理解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”。我是对的吗?
答案 0 :(得分:3)
不,只有一次。服务器将选择一个用于通知的实例,而不是所有实例。如果它们是不同的类型,那么您应该接收每种类型的通知。