В общем, вы должны использовать некоторую технику АОП. Подробно, 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) {
//....
}
}
Пример взят из Настройка класса перехватчика для EJB 3.0 MDB .
Чтобы ответить на ваш вопрос из комментария: у вас есть доступ к InvocationContext
внутри перехватчика, который предоставляет все необходимые атрибуты:
String class = ctx.getMethod().getDeclaringClass().getName();
Message msg = (Message)ctx.getParameters()[0];
Обратите внимание, что вы даже можете изменить параметр или использовать другой в перехватчике.
Вы отметили свое сообщение с ejb-3.0 и spring . В Spring AOP параметры гораздо более гибкие, но общая идея по-прежнему применима.