Java Messaging Service as two models of messaging.
1.point-to-point (tutorial here)
2.Publish and Subscribe.
Here we are going to look publish and subscribe example.
Requirement
Application server : JBoss Server 5.0 GA
Java : jdk 1.5 and above
IDE(optional) : Eclipse Indigo/ Juno
Step 1:Make sure the topic as created with name(here queue name is topic) in the path c:/dummypath/jboss 5.1 GA/server/default/deploy/messaging and file is destinations-service.xml
Step 2:Create a Publisher to put a message in Topic.
Publisher
Step 3:Create a Subscribe to receive a message in Topic.
Subscribe
Output:
Subscribe Console :
Topic Subscriber --> Hello World
Publish Console :
Topic Published
1.point-to-point (tutorial here)
2.Publish and Subscribe.
Here we are going to look publish and subscribe example.
Requirement
Application server : JBoss Server 5.0 GA
Java : jdk 1.5 and above
IDE(optional) : Eclipse Indigo/ Juno
Step 1:Make sure the topic as created with name(here queue name is topic) in the path c:/dummypath/jboss 5.1 GA/server/default/deploy/messaging and file is destinations-service.xml
<mbean code="org.jboss.jms.server.destination.TopicService" name="jboss.messaging.destination:service=Topic,name=topic" xmbean-dd="xmdesc/Topic-xmbean.xml">
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
<depends>jboss.messaging:service=PostOffice</depends>
</mbean>
Step 2:Create a Publisher to put a message in Topic.
Publisher
import java.util.Hashtable;
import javax.jms.JMSException;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class TopicPublisher {
public final static String JNDI_FACTORY = "org.jnp.interfaces.NamingContextFactory";
// *************** Connection Factory JNDI name *************************
public final static String JMS_FACTORY = "/ConnectionFactory";
String topicName = "topic";
private TopicConnectionFactory tconFactory;
private TopicConnection tcon;
private TopicSession tsession;
private Topic topic;
private TextMessage msg;
public static void main(String[] args) throws Exception {
InitialContext ic = getInitialContext();
TopicPublisher tp = new TopicPublisher();
tp.init(ic);
tp.readAndSend(tp);
tp.close();
}
private static InitialContext getInitialContext() throws NamingException {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
env.put(Context.PROVIDER_URL, "localhost:1099");
return new InitialContext(env);
}
public void init(Context ctx) throws NamingException, JMSException {
tconFactory = (TopicConnectionFactory) ctx.lookup(JMS_FACTORY);
tcon = tconFactory.createTopicConnection();
tcon.start();
tsession = tcon.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
topic = tsession.createTopic(topicName);
msg = tsession.createTextMessage("Hello World");
}
private void readAndSend(TopicPublisher qs) throws JMSException {
javax.jms.TopicPublisher topicPub=tsession.createPublisher(topic);
topicPub.publish(msg);
System.err.println("Topic published");
}
public void close() throws JMSException {
tsession.close();
tcon.close();
}
}
Step 3:Create a Subscribe to receive a message in Topic.
Subscribe
import java.util.Hashtable;
import javax.jms.JMSException;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.jms.Session;
import javax.jms.Message;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class TopicSubscriber {
public final static String JNDI_FACTORY = "org.jnp.interfaces.NamingContextFactory";
// *************** Connection Factory JNDI name *************************
public final static String JMS_FACTORY = "/ConnectionFactory";
String topicName = "topic";
private TopicConnectionFactory tconFactory;
private TopicConnection tcon;
private TopicSession tsession;
private Topic topic;
private Message msg;
public static void main(String[] args) throws Exception {
InitialContext ic = getInitialContext();
TopicSubscriber ts = new TopicSubscriber();
ts.init(ic);
ts.readAndSend(ts);
ts.close();
}
private static InitialContext getInitialContext() throws NamingException {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
env.put(Context.PROVIDER_URL, "localhost:1099");
return new InitialContext(env);
}
public void init(Context ctx) throws NamingException, JMSException {
tconFactory = (TopicConnectionFactory) ctx.lookup(JMS_FACTORY);
tcon = tconFactory.createTopicConnection();
tcon.start();
tsession = tcon.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
topic = tsession.createTopic(topicName);
}
private void readAndSend(TopicSubscriber qs) throws JMSException {
javax.jms.TopicSubscriber topicSub=tsession.createSubscriber(topic);
msg=topicSub.receive();
TextMessage txtMsg=(TextMessage)msg;
System.out.println("Topic Subscriber --> " + txtMsg.getText());
}
public void close() throws JMSException {
tsession.close();
tcon.close();
}
}
Step 4: Run the subscribe first(listen the topic) and run the publisher.Note you can run one or subscribe at a time. Message will be reached all subscribe console.Output:
Subscribe Console :
Topic Subscriber --> Hello World
Publish Console :
Topic Published