0

我为调用 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();
}

阅读 getDestination() 的 JavaDoc 后发现该属性是在调用 send() 之后设置的。

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

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

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

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

4

1 回答 1

0

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

MessageProducer producer = (MessageProducer)thisJoinPoint.getTarget();
String queueName = producer.getDestination().toString();
于 2013-09-03T20:51:56.023 回答