Re: NameNotFoundException with temporary topics
Tim Anderson <[email protected]> Mon, 04 Jun 2007 09:22:30 +1000
| Newsgroups | gmane.comp.java.openjms.user |
|---|---|
| Message-ID | <[email protected]> |
George H wrote:
> Hi,
>
> I'm using OpenJMS 0.7.7-beta-1 configured to use MySQL on a Linux
> machine. It works fine except when I come to temporary topics.
>
> I have 2 java programs; 1 creates a TemporaryTopic and creates a
> subscriber for it, it also sends the temp topic name to the second
> java program. The second program receives the name of the temp topic
> (the one that is auto-generated) and tries to become a publisher for
> that temp topic.
>
> The problem is that the second program get a NameNotFoundException
> when trying to create a publisher, this happens when I take the
> topicname and try to treat it like a regular old Topic (creating a
> session, context, connection .,..etc).
>
> I don't see a lot of info on managing temporary topics anywhere. I
> have several topics which are fixed and have fixed durable
> subscribers, but I also want clients to communicate temporarily with
> temp topics...or should I just create and delete regular topics on the
> fly and generate my own uniqe topic names ?
>
> Thanks.
>
>
That's not the correct use of a TemporaryTopic.
A temporary topic exists for the lifetime of the connection that created
it, and is used to indicate
an address to publish replies to. E.g:
// Client
Topic topic = context.lookup("mytopic");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(topic);
MessageProducer consumer = session.createConsumer(replyTopic);
// send a request, and listen for a response on the tempTopic
Message request = session.createMessage();
TemporaryTopic replyTopic = session.createTemporaryTopic();
request.setJMSReplyTo(tempTopic);
producer.send(request);
Message reply = consumer.receive();
// you could also use TopicRequestor to achieve the above.
// Server
Topic topic = context.lookup("mytopic");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer = session.createConsumer(topic);
// listen for a request and send a response to the request's JMSReplyTo
topic
Message request = consumer.receive();
Message response = session.createMessage();
MessageProducer producer = session.createProducer(message.getJMSReplyTo());
producer.send(response);
OpenJMS does allow you to create non-persistent destinations on the fly
using the createTopic() and createQueue().
Note however that this is non-portable.
-Tim
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/