Java 消息驱动Bean的过滤器类';s
我有如下要求: 在我们的应用程序中有20个消息驱动bean,当每个bean的消息到达时,我需要将该消息的信息记录到数据库中。我可以将其添加到每个bean中,但我需要为每个bean更改每个类Java 消息驱动Bean的过滤器类';s,java,spring,ejb-3.0,Java,Spring,Ejb 3.0,我有如下要求: 在我们的应用程序中有20个消息驱动bean,当每个bean的消息到达时,我需要将该消息的信息记录到数据库中。我可以将其添加到每个bean中,但我需要为每个bean更改每个类 有没有一种方法可以添加一些过滤器类,这些过滤器类将在执行MDB onMessage方法之前被激发。因此,我可以使用一个类来记录所有MDB消息。一般来说,您应该使用一些AOP技术。具体而言,EJB提供了一种在MDB上应用拦截器的简单方法: public class LoggingInterceptor {
有没有一种方法可以添加一些过滤器类,这些过滤器类将在执行MDB onMessage方法之前被激发。因此,我可以使用一个类来记录所有MDB消息。一般来说,您应该使用一些AOP技术。具体而言,EJB提供了一种在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) {
//....
}
}
例子取自
要从评论中回答您的问题:您可以访问公开所有必需属性的拦截器内部:
String class = ctx.getMethod().getDeclaringClass().getName();
Message msg = (Message)ctx.getParameters()[0];
请注意,您甚至可以在拦截器中更改参数或使用不同的参数
您用和标记了邮件。In选项更加灵活,但总体思路仍然适用。在这个方法中,我是否也会得到在onMessage中调用的消息myInterceptor(…)?如果我有20个mdb,如何识别调用了哪个mdb?@Rana:请看我的更新,使用
InvocationContext
,这是完全可能的。