2012-01-18 91 views
3

我有一個要求,象下面這樣:過濾器類的消息驅動Bean的

我們在我們的應用程序20個消息驅動Bean,當過消息已抵達每個bean我需要這些信息登錄到數據庫有關消息。我可以將它添加到每個bean中,但我需要爲每個bean更改每個類。

有沒有一種方法,我們可以添加將MDB onMessage方法執行前被解僱了一些過濾器類。因此,我可以有一個類記錄所有MDB消息

回答

4

一般來說,你應該使用一些AOP技術。詳細地說,EJB提供了一種簡單的方法來對MDB的應用攔截器:從Configuring an Interceptor Class for an EJB 3.0 MDB採取

public class LoggingInterceptor { 
    ... 
    @AroundInvoke 
    protected Object myInterceptor(InvocationContext ctx) throws Exception { 
     //do logging here... 
     return ctx.proceed(); 
    } 
} 

@Interceptors(LoggingInterceptor.class) 
public class SomeBean implements MessageListener { 
    public void onMessage(Message message) { 
     //.... 
    } 
} 

實施例。

要評論解決您的問題:你有暴露所需的所有屬性的攔截器內訪問InvocationContext

需要注意的是,你甚至可以改變參數,或者使用一個不同的攔截器。

你跟標記您的消息。在Spring AOP期權更爲靈活,但總體思路仍然適用。

+0

我是否在這個方法myInterceptor(..)中得到正在onMessage中調用的消息?如果我有20個MDB,我怎麼能識別哪個mdb被調用? – Ran 2012-01-18 10:14:13

+0

@Rana:看到我的更新,這完全有可能使用'InvocationContext'。 – 2012-01-18 10:29:00

+1

其工作。感謝Tomasz。 – Ran 2012-01-18 10:52:26