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