Re: Help w/ Oracle JMS and AQjmsException (JMS-147)
I've found a fix for this, but the underlying cause seems to be the implementation of Message.setRepyTo() inside the Oracle JMS package. Specifically, it seems to puke on "null" values for the Destination parameter.
I modified the class org.apache.camel.component.jms.JmsBinding @ line 156 in method appendJmsProperties() to perform a null check on the header value before attempting to set the replyTo property.
else if (headerName.equals("JMSReplyTo") && headerValue != null) {
jmsMessage.setJMSReplyTo(ExchangeHelper.convertToType(exchange,Destination.class, headerValue));
}
There might be adverse side-effects with outright ignoring the JMSReplyTo property in this manner, however.
Additionally, while debugging this problem I've discovered what seems to be a typo/error in Oracle's JMS package. It seems they are not following the JMS 1.1 spec per the JMSX property named "JMSXRcvTimestamp"; they've actually named it "JMSXRecvTimestamp" (with an 'e'). This is causing a subtle error to occur when using the camel JMS component with an Oracle AQ.
I also patched this by modifying the method JmsBinding.populateIgnoreJmsHeaders() -- adding an additional ignore string for the Oracle typo "JMSXRecvTimestamp".
Once I made these two changes, multicasting is working properly with Oracle AQ queues.
If the devs are interested I will open a JIRA and upload diff patch files against 1.3.0. I wanted to make sure though that I posted here to see if anyone else ran into a similar problem and had a better solution -- or perhaps I am way off-target and this is not a bug.
Cheers!
Seon