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];
请注意,您甚至可以更改参数或在拦截器中使用其他参数.
您用ejb-3.0和spring标记了您的消息.在Spring AOP中,选项更加灵活,但总体思路仍然适用.
标签:ejb-3-0,spring,java,ejb-3.0,spring 来源: https://codeday.me/bug/20191101/1986346.html