2011-07-27 40 views
1

我有一個無狀態會話Bean(Java EE 6的,CDI),它拋出事件事件在@Stateless EJB

@Stateless 
public class CustomerService { 
@Inject @ErrorMessage Event<BaseEvent> errMsg; 
//[...] 
public Customer getCustomer(String username, String password) { 
    Customer cust = null; 
    try { 
    //[...] 
    } catch (Exception ex) { 
     errMsg.fire(new BaseEvent("user not found [username="+username+"]")); 
    } 

這個bean是一個EJB模塊的一部分。另一方面,我有兩個事件觀察員在聽這些事件。它們看起來像

public void showErrorMessage(@Observes @ErrorMessage BaseEvent event) { 
    //do something with the event. 
} 

一個觀察者也在ejb模塊中。另一名觀察員在戰爭模塊中。 「ejb」-observer不會接收這個電話。

如果無法從ejb-module發送事件到war模塊?

注意:從war-module到ejb-module是可能的。

+0

你爲什麼要分開這些類?既然你使用的是JEE 6,你可以在WEB-INF/classes下找到所有的東西。 –

+0

我需要JMS在這部分的應用程序,據我所知。 JMS不能在「web」項目中工作。糾正我,如果我錯了 – h2mch

+0

對不起,遲到的迴應 - 取決於你的意思是「網絡項目」。如果您引用了使用Web配置文件(這是應用程序服務器上一組縮減的API),那麼這是正確的,JMS不是其中的一部分。但是如果你有一個標準的JEE--完整的配置文件,你可以將所有的東西打包到一個WAR中(不管你是真的有一個Web應用程序還是一個後端應用程序),然後你就不必分開EJB和其他代碼。 –

回答

0

這可能歸結爲從一個模塊到另一個模塊的類加載器可見性是否也是非對稱的。因此,如果WAR在類加載器POV中不可見,則該WAR中的BeanManager不會認爲有任何其他人@observing它,因爲他不需要掃描不可見的模塊。