我無法獲取sessionscoped bean和ejb有狀態bean以在同一個java-ee容器內的用戶會話之間進行通信。通過試驗和錯誤,我決定使用數據庫在用戶會話之間傳遞消息。但是現在我遇到了一個問題,如何通知用戶的會話數據庫已更改 我可以在每個用戶的會話上下文中啓動後臺輪詢線程來輪詢數據庫的更改嗎?如果這能起作用,避免阻塞的最好方法是什麼,但要確保輪詢bean在自己的用戶會話上下文中「醒來」?cdi會話上下文之間的通信 - 與數據庫,將正確的cdi上下文被調用?
我使用的是Glassfish 3.1.2,用戶會話是CDI sessionscoped bean,以及一些用於JPA數據庫訪問的有狀態EJB。我正在使用CDI事件總線在用戶會話中圍繞bean傳遞消息。
我試圖使用單身人士在用戶會話之間進行通信。但是這並不起作用,因爲一旦將源自用戶1的消息傳遞給用戶2的bean,並且這些bean引發CDI事件,則CDI事件由用戶1的會話上下文處理。這是合理的,因爲消息是在用戶1的會話中創建的。
任何幫助將不勝感激!
不,它不會工作 - 我試過了。當接收到JMS消息時,接收Bean沒有上下文 - 由於消息接收Bean(偵聽器方法或MDB)超出範圍,它無法發送會話範圍上下文事件到現有會話。你會得到我上面提到的WELD-001303例外。 – 2012-03-30 17:17:08