[
https://issues.apache.org/jira/browse/QPID-3817?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Praveen Murugesan updated QPID-3817:
------------------------------------
Patch Attached
Cause: When creating a QueueBrowser with a destination created using an
addressing string a java.lang.ClassCastException is thrown.
Consequence: The application is unable to create QueueBrowser from destinations
created using an addressing string. The workaround was to create a Queue using
session.createQueue method passing an address string.
Fix: The createBrowser method has been modified to avoid doing the unnecessary
cast to AMQQueue object, as this doesn't work with the AMQAnyDestination object
created by the jndi queue creation model. The code is now modified to work with
the javax.jms.Queue interface instead of the concrete implementation.
Result: The createBrowser method is now able to create a QueueBrowser from a
destination created using an address string(if it implements the Queue
Interface).
Longer term, it might be nicer to deprecate the older addressing scheme, and
stick to the new one. Also, it will be nicer to have a common queue creation
code, not a separate path, when created using jndi, and when created using
session.createQueue(). Since I'm newer to this project I don't have great
expertise, about the reason to different models. It'd be great if someone can
throw some light about this.
Thank you.
> QueueBrowser does not work with the JNDI destination addressing scheme
> ----------------------------------------------------------------------
>
> Key: QPID-3817
> URL: https://issues.apache.org/jira/browse/QPID-3817
> Project: Qpid
> Issue Type: Bug
> Components: Java Broker
> Affects Versions: 0.15
> Reporter: Praveen Murugesan
> Labels: create, jndi, queue
> Fix For: 0.15
>
> Attachments: QueueBrowserPatch.patch
>
>
> I create my queue using the JNDI properties, and when I try to create a queue
> browser from the Destination object, I get the
> java.lang.ClassCastException: org.apache.qpid.client.AMQAnyDestination cannot
> be cast to org.apache.qpid.client.AMQQueue
> at org.apache.qpid.client.AMQSession.createBrowser(AMQSession.java:963)
> at org.apache.qpid.client.AMQSession.createBrowser(AMQSession.java:950)
> A sample code snippet is below; (just to give an idea).
> Properties properties = new Properties();
> String queueAddress = "T1;{create: always , node : {type : queue, durable :
> true}}"
> properties.put("destination.T1", queueAddress);
> InitialContext ctx = new InitialContext(properties);
> Destination queue = (Destination) ctx.lookup(queueName);
> QueueBrowser queueBrowser = qpidSession.createBrowser(queueRef);
> triggers =>
> java.lang.ClassCastException: org.apache.qpid.client.AMQAnyDestination cannot
> be cast to org.apache.qpid.client.AMQQueue
> at org.apache.qpid.client.AMQSession.createBrowser(AMQSession.java:963)
> at org.apache.qpid.client.AMQSession.createBrowser(AMQSession.java:950)
> The createBrowser call is part of JMS. However this part of the API cannot
> be used with Destinations defined using the addressing scheme.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]