Java 消息驱动Bean的过滤器类';s

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 {

我有如下要求:

在我们的应用程序中有20个消息驱动bean,当每个bean的消息到达时,我需要将该消息的信息记录到数据库中。我可以将其添加到每个bean中,但我需要为每个bean更改每个类


有没有一种方法可以添加一些过滤器类,这些过滤器类将在执行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
,这是完全可能的。