编程语言
首页 > 编程语言> > java-消息驱动Bean的过滤器类

java-消息驱动Bean的过滤器类

作者:互联网

我有如下要求:

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

有没有一种方法可以添加一些Filter类,该类将在执行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) {
        //....
    }
}

示例取自Configuring an Interceptor Class for an EJB 3.0 MDB.

要从评论中解决您的问题:您可以访问拦截器内部的InvocationContext,该拦截器公开了所有必需的属性:

String class = ctx.getMethod().getDeclaringClass().getName();
Message msg = (Message)ctx.getParameters()[0];

请注意,您甚至可以更改参数或在拦截器中使用其他参数.

您用标记了您的消息.在Spring AOP中,选项更加灵活,但总体思路仍然适用.

标签:ejb-3-0,spring,java,ejb-3.0,spring
来源: https://codeday.me/bug/20191101/1986346.html