Writing a simple publish/subscribe application connecting through WebSphere MQ

 

This section provides a walkthrough of a simple WebSphere MQ JMS application.

Here is the complete example. Individual sections are discussed after.

// ===========================================================================
//
// Licensed Materials - Property of IBM
//
// 5724-H27, 5655-L82, 5724-L26
//
// (c) Copyright IBM Corp. 1995,2002,2005
//
// ===========================================================================
// 
// A TopicConnectionFactory object is retrieved from LDAP; this is used to
// create a TopicConnection. The TopicConnection is used to create a
// TopicSession, which creates two publishers and two subscribers. Both
// publishers subscribe to a topic; both subscribers then receive.
// 
// @(#) jms/samples/PubSubSample.java, jms, j000 1.1 04/12/03 14:31:41

import java.util.Hashtable;

import javax.jms.*;
import javax.naming.*;
import javax.naming.directory.InitialDirContext;

public class PubSubSample {

    // To use LDAP the Initial Context Factory and the URL need to be specified
    // Change these to suit your particular installatoin
    static String icf = "com.sun.jndi.ldap.LdapCtxFactory";
    static String url = "ldap://edradour.hursley.ibm.com/cn=JMSData,dc=ibm,dc=uk";

    static String tcfLookup = "cn=ivtTCF"; // TopicConnectionFactory (TCF) lookup
    private static String tLookup = "cn=ivtT"; // topic lookup


    // Pub/Sub objects used by this program
    private static TopicConnectionFactory fact = null;
    private static Topic topic = null;

    public static void main(String args[]) {
        // Initialise JNDI properties
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, icf);
        env.put(Context.PROVIDER_URL, url);
        env.put(Context.REFERRAL, "throw");

        Context ctx = null;
        try {
            System.out.print("Initialising JNDI... ");
            ctx = new InitialDirContext(env);
            System.out.println("Done!");
        } catch (NamingException nx) {
            System.out.println("ERROR: " + nx);
            System.exit(-1);
        }

        // Lookup TCF
        try {
            System.out.print("Obtaining TCF from JNDI... ");
            fact = (TopicConnectionFactory) ctx.lookup(tcfLookup);
            System.out.println("Done!");
        } catch (NamingException nx) {
            System.out.println("ERROR: " + nx);
            System.exit(-1);
        }

        // Lookup Topic
        try {
            System.out.print("Obtaining topic T from JNDI... ");
            topic = (Topic) ctx.lookup(tLookup);
            System.out.println("Done!");
        } catch (NamingException nx) {
            System.out.println("ERROR: " + nx);
            System.exit(-1);
        }

        try {
            ctx.close();
        } catch (NamingException nx) {
            // Just ignore an exception on closing the context
        }

        try {
            // Create connection
            TopicConnection conn = fact.createTopicConnection();
            // Start connection
            conn.start();
            // Session
            TopicSession sess = conn.createTopicSession(false,
                    Session.AUTO_ACKNOWLEDGE);

            // Create a topic dynamically
            Topic t = sess.createTopic("myTopic");
            // Publisher
            TopicPublisher pub = sess.createPublisher(t);
            // Subscriber
            TopicSubscriber sub = sess.createSubscriber(t);
            // Publisher
            TopicPublisher pubA = sess.createPublisher(topic);
            // Subscriber
            TopicSubscriber subA = sess.createSubscriber(topic);

            // Publish "Hello World"
            TextMessage hello = sess.createTextMessage();
            hello.setText("Hello World");
            pub.publish(hello);
            hello.setText("Hello World 2");
            pubA.publish(hello);

            // Receive message
            TextMessage m = (TextMessage) sub.receive();
            System.out.println("Message Text = " + m.getText());
            m = (TextMessage) subA.receive();
            System.out.println("Message Text = " + m.getText());

            // Close publishers and subscribers
            pub.close();
            pubA.close();
            sub.close();
            subA.close();

            // Close session and connection
            sess.close();
            conn.close();
            System.exit(0);
        } catch (JMSException je) {
            System.out.println("ERROR: " + je);
            System.out.println("LinkedException: " + je.getLinkedException());
            System.exit(-1);
        }
    }
}


uj24660_