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