Ahh OK thanks a bunch Rob. This furthered my understanding a lot. Alex
On Fri, Apr 25, 2008 at 1:40 PM, Rob Davies <[EMAIL PROTECTED]> wrote: > > On 25 Apr 2008, at 16:42, Alex Karasulu wrote: > > On Fri, Apr 25, 2008 at 2:48 AM, Rob Davies <[EMAIL PROTECTED]> wrote: >> >> >>> On 25 Apr 2008, at 04:46, Alex Karasulu wrote: >>> >>> Hi all, >>> >>>> >>>> I just started using ActiveMQ 5.1.0 and it's just wonderful. I just >>>> wish >>>> I >>>> had a better understanding of it. Trying to get up to speed reading the >>>> code, the bundled test cases and playing with some of my own as well. >>>> >>>> Unfortunately I hit a brick wall today when trying to tinker with >>>> temporary >>>> queues. I got the following exception: >>>> >>>> javax.jms.InvalidDestinationException: Cannot use a Temporary >>>> destination from another Connection >>>> at >>>> >>>> org.apache.activemq.ActiveMQMessageConsumer.<init>(ActiveMQMessageConsumer.java:160) >>>> at >>>> >>>> org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:1004) >>>> at >>>> >>>> org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:948) >>>> at >>>> >>>> org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:861) >>>> at >>>> >>>> org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:834) >>>> >>>> >>>> Here's my environment in case that may factor in: >>>> Linux 2.6.22-14-generic SMP AMD x86_64 >>>> Java HotSpot(TM) 64-Bit Server VM (build 1.6.0_03-b05, mixed mode) >>>> Maven version: 2.0.8 >>>> >>>> This is coming from the following code snippet from a test. The code >>>> producing the exception is below but please excuse the use of actual >>>> ActiveMQXxxxx objects instead of the JMS equivalents - I've been doing >>>> this >>>> just to investigate, and learn about the internals. >>>> >>>> if ( create ) >>>> { >>>> factory = new ActiveMQConnectionFactory( >>>> "vm://localhost?create=true&broker.persistent=false" ); >>>> } >>>> else >>>> { >>>> factory = new ActiveMQConnectionFactory( >>>> "vm://localhost?broker.persistent=false" ); >>>> } >>>> factory.setObjectMessageSerializationDefered( true ); >>>> factory.setCopyMessageOnSend( false ); >>>> factory.setUseAsyncSend( true ); >>>> factory.setStatsEnabled( true ); >>>> >>>> ... >>>> >>>> String destination = "testQueue"; >>>> connection = ( ActiveMQConnection ) factory.createConnection(); >>>> connection.start(); >>>> session = ( ActiveMQSession ) connection.createSession( false, >>>> Session.AUTO_ACKNOWLEDGE ); >>>> queue = ( ActiveMQTempQueue ) >>>> ActiveMQDestination.createDestination( destination, >>>> ActiveMQDestination.TEMP_QUEUE_TYPE ); >>>> ====>>> consumer = ( ActiveMQMessageConsumer ) >>>> session.createConsumer( queue ); >>>> consumer.setMessageListener( this ); >>>> consumer.start(); >>>> producer = ( ActiveMQMessageProducer ) session.createProducer( queue >>>> ); >>>> >>>> >>>> >>>> The marked line above (see ====>>>>) where the consumer is created >>>> throws >>>> this exception. The interesting thing is when it does this, I'm using >>>> the >>>> same connection as well as the the same session. Why would the >>>> exception >>>> above say "Cannot use a Temporary destination from another Connection" >>>> if >>>> I'm using the same connection? >>>> >>>> I tracked it down to a constructor of ActiveMQMessageConsumer on line >>>> 160 >>>> here: >>>> >>>> String connectionID = >>>> session.connection.getConnectionInfo().getConnectionId().getValue(); >>>> >>>> if (physicalName.indexOf(connectionID) < 0) { >>>> throw new InvalidDestinationException( >>>> "Cannot use a >>>> Temporary destination from another Connection"); >>>> } >>>> >>>> The value for my queue's physicalName is showing "testQueue" and the >>>> value >>>> of the connectionID is showing "ID:newton-58167-1209094847149-2:0". >>>> Obviously the connectionID will not be found in "testQueue". I'm >>>> wondering >>>> why these values are the way they are and this check is failing? >>>> >>>> These are probably some dumb questions and I must be doing something >>>> dumb >>>> here. Looking for enlightenment :). >>>> >>>> Thanks much, >>>> Alex >>>> >>>> >>> Hi Alex, >>> >>> use session.createTemporaryQueue() - to create your Queue >>> >>> >> Thanks Rob for your response. I only have one problem with this and that >> is >> not being able to give this method a destination. Is there some what to >> specify a destination to create the temporary queue? >> >> Thanks, >> Alex >> > > Unfortunately at the moment you can't do that - but if you add an > enhancement request to our jiras this is something we certainly would > consider. However temporary destinations are only meant to be tied to a > particular connection, and only live as long as that connection. > > > > > > cheers, > > Rob > > http://open.iona.com/ -Enterprise Open Integration > http://rajdavies.blogspot.com/ > > > >