Jakarta ee 在无状态会话bean中处理CDI事件

Jakarta ee 在无状态会话bean中处理CDI事件,jakarta-ee,ejb,cdi,Jakarta Ee,Ejb,Cdi,我试图了解CDI事件如何工作,以便在我的应用程序中实现它们的使用,其结构如下: 我有一个启动套接字服务器的JCA资源适配器。 然后,我有一个映射为该资源适配器端点的MDB。 现在,当我通过套接字服务器收到一条消息时,我想将此消息通知一个无状态bean池。此消息包含无状态会话bean在处理来自Web服务的其他请求时执行某些工作所需的数据 我创建了一个实现本地和远程接口的无状态会话bean。 本地方法声明一个listenToRegistration方法 @Stateless(...) public

我试图了解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);
}
@MessageDriven(...)
public class messagerMDB implements MessageEndpoint {
    @Inject
    Event<EventMessage> events;   

    ...

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

}
从JCA资源适配器接收的MDB如下所示

@Local
public interface MyLocalInterface {
   public void listenToEvent(@Observes EventMessage eventMessage);
}
@MessageDriven(...)
public class messagerMDB implements MessageEndpoint {
    @Inject
    Event<EventMessage> events;   

    ...

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

}
@MessageDriven(…)
公共类messagerMDB实现MessageEndpoint{
@注入
事件;
...
@凌驾
public void onMessage(字符串消息)引发异常{
...
事件。火灾(信息);
}
}
现在,假设在某个时间点,我在一个池中有20个myBean实例。
当我收到一条信息时,我希望能读20遍“明白了”。我说得对吗?

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

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

谢谢你的回答。实际上,通过阅读,我注意到事件是指bean的“上下文实例”。所以现在的问题变成了“如何通知所有池实例发生了什么?”。到目前为止,我认为最好的解决方案是将这些信息写入数据库,并在容器提供服务时让bean读取。谢谢您的回答。实际上,通过阅读,我注意到事件是指bean的“上下文实例”。所以现在的问题变成了“如何通知所有池实例发生了什么?”。到目前为止,我认为最好的解决方案是将这些信息写入数据库,并在容器提供服务时让bean读取这些信息。