0
我试图理解CDI事件如何在我的应用程序中实现它们的用法,它的结构如下: 我有一个启动Socket服务器的JCA资源适配器。 然后我有一个映射为此资源适配器端点的MDB。 现在,当我通过套接字服务器收到一条消息时,我想通知一个无状态bean池。此消息包含无状态会话Bean需要的数据,以处理来自Web服务的其他某些请求。在无状态会话bean中处理CDI事件
我创建了一个实现本地和远程接口的无状态会话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”。我对吗?
感谢您的回答。实际上,通过阅读[specs](http://www.jcp.org/en/jsr/detail?id=299),我注意到事件被引用到bean的“上下文实例”中。所以现在的问题变成了“我如何通知所有池实例发生了什么?”。到目前为止,我认为最好的解决方案是将这些信息写入数据库,并让bean在容器提供服务时读取它。 – fabpicca