2013-09-03 2 views
0

Я создал следующий Pointcut для вызовов javax.jms.MessageProducer.send (..):Определение назначения Сообщение JMS с AspectJ

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

, который работает отлично. У меня есть как до, так и после совета для этого pointcut, который (среди прочего) читает свойство 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 для getDestination() reveiled, что свойство устанавливается после отправки() вызывается.

Получает объект Destination для этого сообщения. Поле заголовка JMSDestination содержит пункт назначения, которому отправляется сообщение.

Когда сообщение отправлено, это поле игнорируется. После завершения метода send или publish> поле содержит место назначения, указанное в методе.

Есть ли другой способ доступа к JmsDestination в пределах до консультации?

редактировать: Возможно, полезная информация: Я использую ActiveMQ

ответ

0

Я нашел решение моей проблемы:

MessageProducer producer = (MessageProducer)thisJoinPoint.getTarget(); 
String queueName = producer.getDestination().toString(); 
Смежные вопросы