使用AspectJ确定JMS消息的目标

时间:2013-09-03 17:58:17

标签: jms activemq aop aspectj

我为javax.jms.MessageProducer.send(..)调用创建了以下切入点:

pointcut callJmsSend(Message message): 
   (call(void javax.jms.MessageProducer.send(javax.jms.Message)))
   && args(message);

工作正常。我有这个切入点的前后建议,其中(除其他外)读取JmsDestination属性。

before(Message message): callJmsSend(message) {
    // null pointer exception
    String queueName = message.getJMSDestination().toString();
}

after(Message message): callJmsSend(message) {
    // works
    String queueName = message.getJMSDestination().toString();
}

读取JavaDoc for getDestination(),发现在调用send()之后设置了该属性。

  

获取此消息的Destination对象。   JMSDestination标头字段包含消息被发送到的目的地。

     

发送消息时,将忽略此字段。完成发送或发布>方法后,该字段保存方法指定的目标。

还有其他方法可以在之前的建议中访问JmsDestination吗?

编辑: 也许有用的信息:我正在使用ActiveMQ

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法:

MessageProducer producer = (MessageProducer)thisJoinPoint.getTarget();
String queueName = producer.getDestination().toString();