3
我有一個要求,象下面這樣:過濾器類的消息驅動Bean的
我們在我們的應用程序20個消息驅動Bean,當過消息已抵達每個bean我需要這些信息登錄到數據庫有關消息。我可以將它添加到每個bean中,但我需要爲每個bean更改每個類。
有沒有一種方法,我們可以添加將MDB onMessage方法執行前被解僱了一些過濾器類。因此,我可以有一個類記錄所有MDB消息。
我有一個要求,象下面這樣:過濾器類的消息驅動Bean的
我們在我們的應用程序20個消息驅動Bean,當過消息已抵達每個bean我需要這些信息登錄到數據庫有關消息。我可以將它添加到每個bean中,但我需要爲每個bean更改每個類。
有沒有一種方法,我們可以添加將MDB onMessage方法執行前被解僱了一些過濾器類。因此,我可以有一個類記錄所有MDB消息。
一般來說,你應該使用一些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
:
需要注意的是,你甚至可以改變參數,或者使用一個不同的攔截器。
你跟ejb-3.0和spring標記您的消息。在Spring AOP期權更爲靈活,但總體思路仍然適用。
我是否在這個方法myInterceptor(..)中得到正在onMessage中調用的消息?如果我有20個MDB,我怎麼能識別哪個mdb被調用? – Ran 2012-01-18 10:14:13
@Rana:看到我的更新,這完全有可能使用'InvocationContext'。 – 2012-01-18 10:29:00
其工作。感謝Tomasz。 – Ran 2012-01-18 10:52:26