I have an SIBus destination called: ‘MY/QUEUE’.
I create a JMS QueueConnectionFactory and JMS Queue definition to this destination. jms/LoggingPoisonQueueCF and jms/LoggingPoisonQueue. When I attempt to put a message on the destination (using Spring JMS) I get the following exception:
org.springframework.jms.InvalidDestinationException: CWSIA0046E: The parameter queue://MY/QUEUE?busName=SIBJMSBus is from a foreign implementation that is not supported.; nestedexception is javax.jms.InvalidDestinationException: CWSIA0046E: The parameter queue://MY/QUEUE?busName=SIBJMSBus is from a foreign implementation that is not supported.; nested exception is javax.jms.JMSException: CWSIA0385E: It is not permitted for a destination URI to specify a queue manager, as found in URI : queue://MY/QUEUE?busName=SIBJMSBus at org.springframework.jms.support.JmsUtils. convertJmsAccessException(JmsUtils.java:261)
Digging deeper into the stack trace, the offending piece of code is found:
Caused by: javax.jms.JMSException: CWSIA0385E:
It is not permitted for a destination URI to specify a
queue manager, as found in URI :queue://My/Queue?busName=SCA.APPLICATION.widCell.Bus at com.ibm.ws.sib.api.jms.impl.URIDestinationCreator. processURI(URIDestinationCreator.java:476) at com.ibm.ws.sib.api.jms.impl.URIDestinationCreator. createDestinationFromString(URIDestinationCreator.java:285) at com.ibm.ws.sib.api.jms.impl.JmsFactoryFactoryImpl. createQueue(JmsFactoryFactoryImpl.java:523) at com.ibm.ws.sib.api.jms.impl.JmsDestinationImpl. checkNativeInstance(JmsDestinationImpl.java:707)
This URIDestinationCreator is interpreting the string as the format
I poked around in vain in the infocenter and I think I found the article that describes the issue. Basically what happens with a destination URI that is ambiguous like this one (Am I referring to a queue names ‘Queue’ on QueueManager ‘My’ , or am I referring to a queue called ‘My/Queue’) is that WebSphere will just toss an exception.
When I tried to see if slashes were used anywhere in WebSphere Process Server, I was surprised to find that they were in the SYSTEM bus. I also noticed that JMS isn’t used by much except the BPEL engine. When the BPEL engine uses it, they use ‘.’ to separate components. I assume it’s because they also ran into this exception.
The workaround is to just not use forward slashes. The secondary workaround is to create aliases for your SIBus destinations sans slash.