We have a need to implement some basic P2P JMS queues in Jboss 4.0.4-GA, and I'm
trying to set up a simple example using the sample queue/A JMS queue. The problem is the
example in the JBoss wiki does not work, and trying to figure out the 'proper' way
to do it is intensely frustrating. What with SpyDestination references and the like -
this seems to be a path that I shold not be taking.
The example code I tried is here:
http://wiki.jboss.org/wiki/Wiki.jsp?page=QueueExample
Here's my sample code - it's a bit verbose, but perhaps someone can figure out if
I'm mixing approaches or what...
| import javax.naming.NamingException;
| import javax.servlet.ServletException;
| import javax.servlet.http.HttpServlet;
| import javax.servlet.http.HttpServletRequest;
| import javax.servlet.http.HttpServletResponse;
|
| import java.util.Properties;
|
| import javax.annotation.Resource;
| import javax.jms.Message;
| import javax.jms.Queue;
| import javax.jms.QueueConnection;
| import javax.jms.QueueConnectionFactory;
| import javax.jms.QueueReceiver;
| import javax.jms.QueueSender;
| import javax.jms.QueueSession;
| import javax.jms.Session;
| import javax.jms.TextMessage;
| import javax.naming.Context;
| import javax.naming.InitialContext;
| import javax.naming.Reference;
| import org.jboss.mq.SpyQueue;
|
|
| public class Test extends HttpServlet {
|
| static Logger logger = Logger.getLogger(Test.class);
|
| InitialContext initialContext;
| @Resource(mappedName="queue/A") Queue queue;
|
| // snip snip
| QueueConnection qc;
| log.info("Creating jndi context - alternatively use a jndi.properties");
| Properties properties = new Properties();
| properties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
| properties.put(Context.URL_PKG_PREFIXES, "org.jnp.interfaces");
| properties.put(Context.PROVIDER_URL, "localhost");
|
| InitialContext ctx = new InitialContext(properties);
|
| log.info("Looking up connection factory");
| QueueConnectionFactory qcf = (QueueConnectionFactory)
ctx.lookup("UIL2ConnectionFactory");
|
| log.info("Creating connection");
| qc = qcf.createQueueConnection();
| log.info("Creating session");
| QueueSession qs = qc.createQueueSession(false,
javax.jms.Session.AUTO_ACKNOWLEDGE);
|
| log.info("Creating sender");
| QueueSender sender = qs.createSender (queue);
|
| log.info("Creating message");
| TextMessage message = qs.createTextMessage("hello");
|
|
| log.info("Sending message");
| // This is the error -
| //11:49:13,031 INFO [STDOUT] Sending message
| //11:49:13,031 ERROR [STDERR] java.lang.UnsupportedOperationException: Not
constructed with identifyed destination. Usage of method not allowed
| //11:49:13,031 ERROR [STDERR] at
org.jboss.mq.SpyMessageProducer.send(SpyMessageProducer.java:204)
| //11:49:13,031 ERROR [STDERR] at com.areteinc.servlets.Test.doGet(Test.java:72)
|
| sender.send(queue,message);
|
| log.info("Creating receiver");
| QueueReceiver receiver = qs.createReceiver(queue);
|
| log.info("Try to receive message, it will not work");
| Message received = receiver.receiveNoWait();
| if (received != null)
| throw new RuntimeException("Should not get a message if the connection is not
started!");
|
| log.info("You have to start the connection before receiving messages");
| qc.start();
|
| log.info("This receive will work");
| received = receiver.receiveNoWait();
|
| log.info("Got message: " + received);
| // snip snip
|
If I put in a destination type of 'queue' in the sender() call, it tells me this
is not a SpyDestination, and we go off spinning in 'spy' land.
Not having a simple, clear example of using JBossMQ, or a clear example of using JBoss
Messaging is very frurstating. Help please! We're dead in the water right now.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3983504#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...