I had to give jboss messaging a go to. Hmm doesn’t look that difficult either. Now a simple MessageDrivenBean and I’m in business.
The Sender:
import java.util.Properties;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
public class JbossJmsTest
{
public static void main(String[] args) throws Exception
{
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 queue");
Queue queue = (Queue) ctx.lookup("queue/testQueue");
log.info("Looking up connection factory");
QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("UIL2ConnectionFactory");
log.info("Creating connection");
QueueConnection qc = qcf.createQueueConnection();
try
{
log.info("Creating session");
QueueSession qs = qc.createQueueSession(false, 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");
sender.send(message);
}
finally
{
qc.close();
}
}
public static class log
{
public static void info(String message)
{
System.out.println(message);
}
public static void error(String message, Throwable t)
{
System.err.println(message);
t.printStackTrace();
}
}
}
The receiver
import java.util.Properties;
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;
public class JbossJmsReceiver {
public static void main(String[] args) throws Exception
{
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 queue");
Queue queue = (Queue) ctx.lookup("queue/testQueue");
log.info("Looking up connection factory");
QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("UIL2ConnectionFactory");
log.info("Creating connection");
QueueConnection qc = qcf.createQueueConnection();
try
{
log.info("Creating session");
QueueSession qs = qc.createQueueSession(false, Session.DUPS_OK_ACKNOWLEDGE);
log.info("Creating receiver");
QueueReceiver receiver = qs.createReceiver(queue);
log.info("Try to receive message, it will not work");
while(true){
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();
if(received!=null){
log.info("Got message: " + received);
}
}
}
finally
{
qc.close();
}
}
public static class log
{
public static void info(String message)
{
System.out.println(message);
}
public static void error(String message, Throwable t)
{
System.err.println(message);
t.printStackTrace();
}
}
}
this is almost the identic code of the jboss site only problem is finding it. It seems jboss has changed the jms server. I’m using jboss-4.0.3SP1 and somewhere they have changed JbossMQ to JBossMessaging or something. I still have to get the details but first things first getting some code working 🙂
