![]() |
Sun ONE Message Queue Developer's Guide |
Chapter 2 Quick Start Tutorial
This chapter provides a quick introduction to JMS client programming in an MQ environment. It consists of a tutorial-style description of procedures used to create, compile, and run a simple HelloWorldMessage example application.This chapter covers the following procedures:
For the purpose of this tutorial it is sufficient to run the MQ message server in a default configuration. For instructions on configuring an MQ message server, please refer to the MQ Administrator's Guide.
Setting Up Your Environment
A number of environment variables are used when compiling and running a JMS client. This section describes how to set them.
To set MQ-related environment variables
If needed, set the IMQ_HOME environment variable (Windows platform only).
Set the JAVA_HOME environment variable.
- The IMQ_HOME environment variable is used when compiling and running a JMS client. On the Windows platform, the MQ installer sets IMQ_HOME.
- The directories and environment variables that are set up at installation time are listed below.
- The directories and environment variables that are set up at installation time are listed below.
Change to the directory in which the example applications are located:
- Set JAVA_HOME to the directory where you installed the J2SE SDK (Java2 Standard Edition Software Development Kit).
Platform
Settings
/usr/demo/imq/jms
IMQ_HOME/demo/jms
IMQ_HOME/demo/jms
IMQ_HOME/demo/jms
Set the CLASSPATH environment variable.
- In this directory you will find the application used as an example in this chapter.
- Set CLASSPATH to include the current directory, as well as the jar files (jms.jar, imq.jar, jndi.jar) in the IMQ_HOME/lib directory (/usr/share/lib/imq on Solaris). These are required for compiling and running clients.
Starting and Testing the MQ Message Server
This tutorial assumes that you do not have an MQ message server currently running. A message server consists of one or more brokersthe software component that routes and delivers messages.(If you run the broker as a UNIX startup process or Windows service, then it is already running and you can skip to "To test a broker" below.)
In a terminal window, change directory to IMQ_HOME/bin (/usr/bin on Solaris).
The broker will start and display a few messages before displaying the message, "imqbroker@host:7676 ready." It is now ready and available for clients to use.Run the broker (imqbrokerd) command as described below.
- The -tty option causes all logged messages to be displayed to the terminal console (in addition to the log file).
Platform
Startup Command
% usr/bin/imqbrokerd -tty
% IMQ_HOME/bin/imqbrokerd -tty
C:\Program Files\Sun Microsystems\
Message Queue 3.0\bin> imqbrokerd -tty
% IMQ_HOME/bin/imqbrokerd -tty
To test a broker
One simple way to check the broker startup is by using the MQ Command (imqcmd) utility to display information about the broker.
In a separate terminal window, change directory to IMQ_HOME/bin (/usr/bin on Solaris).
The output displayed should be similar to what is shown below.Run imqcmd with the arguments shown below.
Developing a Simple Client Application
This section leads you through the steps used to create a simple "Hello World" application that sends a message to a queue destination and then retrieves the same message from the queue. You can find this HelloWorldMessage application at IMQ_HOME/demo/jms (/usr/demo/imq/jms on Solaris).The following steps highlight Java programming language code that you use to set up a client to send and receive messages:
To program the HelloWorldMessage example application
Import the interfaces and MQ implementation classes for the JMS API.
Instantiate an MQ QueueConnectionFactory administered object.
- The javax.jms package defines all the JMS interfaces necessary to develop a JMS client.
- import javax.jms.*;
Create a connection to the MQ message server.
- A QueueConnectionFactory object encapsulates all the MQ-specific configuration properties for creating QueueConnection connections to an MQ message server.
- QueueConnectionFactory myQConnFactory =
new com.sun.messaging.QueueConnectionFactory();
- ConnectionFactory administered objects can also be accessed through a JNDI lookup (see "Looking Up ConnectionFactory Objects"). This approach makes the client code JMS-provider independent and also allows for a centrally administered messaging system.
Create a session within the connection.
- A QueueConnection object is the active connection to the MQ message server in the Point-To-Point programming domain.
- QueueConnection myQConn =
myQConnFactory.createQueueConnection();
Instantiate an MQ queue administered object corresponding to a queue destination in the MQ message server.
- A QueueSession object is a single-threaded context for producing and consuming messages. It enables clients to create producers and consumers of messages for a queue destination.
- QueueSession myQSess = myQConn.createQueueSession(false,
Session.AUTO_ACKNOWLEDGE);
- The myQSess object created above is non-transacted and automatically acknowledges messages upon consumption by a consumer.
Create a QueueSender message producer.
- Destination administered objects encapsulate provider-specific destination naming syntax and behavior. The code below instantiates a queue administered object for a physical queue destination named "world".
- Queue myQueue = new.com.sun.messaging.Queue("world");
- Destination administered objects can also be accessed through a JNDI lookup (see "Looking Up Destination Objects"). This approach makes the client code JMS-provider independent and also allows for a centrally administered messaging system.
Create and send a message to the queue.
- This message producer, associated with myQueue, is used to send messages to the queue destination named "world".
- QueueSender myQueueSender = myQSess.createSender(myQueue);
Create a QueueReceiver message consumer.
- You create a TextMessage object using the QueueSession object and populate it with a string representing the data of the message. Then you use the QueueSender object to send the message to the "world" queue destination.
- TextMessage myTextMsg = myQSess.createTextMessage();
myTextMsg.setText("Hello World");
System.out.println("Sending Message: " + myTextMsg.getText());
myQueueSender.send(myTextMsg);
Start the QueueConnection you created in Step 3.
- This message consumer, associated with myQueue, is used to receive messages from the queue destination named "world".
- QueueReceiver myQueueReceiver =
myQSess.createReceiver(myQueue);
Receive a message from the queue.
- Messages for consumption by a client can only be delivered over a connection that has been started (while messages produced by a client can be delivered to a destination without starting a connection, as in Step 7.
- myQConn.start();
Retrieve the contents of the message.
- You receive a message from the "world" queue destination using the QueueReceiver object. The code, below, is an example of a synchronous consumption of messages (see "Message Consumption: Synchronous and Asynchronous"). For samples of asynchronous consumption see Table 2-1.
- Message msg = myQueueReceiver.receive();
Close the session and connection resources.
- Once the message is received successfully, its contents can be retrieved.
- if (msg instanceof TextMessage) {
TextMessage txtMsg = (TextMessage) msg;
System.out.println("Read Message: " + txtMsg.getText());
}
- myQSess.close();
myQConn.close();
Compiling and Running a Client Application
To compile and run JMS clients in an MQ environment, it is recommended that you use the Java2 SDK Standard Edition v1.4, though versions 1.3 and 1.2 are also supported. The recommended SDK can be downloaded from the following location:
Be sure that you have set the CLASSPATH environment variable to point to the jms.jar and imq.jar files, as described in Step 4, before attempting to compile or run a client application.
- http://java.sun.com/j2se/1.4
The following instructions are based on the HelloWorldMessage application created in "Developing a Simple Client Application", and also located in the MQ 3.0 example applications directory:
- IMQ_HOME/demo/jms (/usr/demo/imq/jms on Solaris)
To compile and run the HelloWorldMessage application
Make the directory containing the application your current directory.
Compile the HelloWorldMessage application as shown below.
- The MQ 3.0 example applications directory on Solaris is not writable by users, so copy the HelloWrodMessage application to a writable directory and make that directory your current directory.
Run the HelloWorldMessage application as shown below.
- This step above results in the HelloWorldMessage.class file being created in the current directory.
- The output shown is what displays when you run the HelloWorldMessage example in the examples/jms directory.
- The output displayed when you run the HelloWorldMessage is as follows:
- Sending Message: Hello World
- Read Message: Hello World
Example Application Code
The example applications provided by MQ 3.0 consist of both JMS messaging applications as well as JAXM messaging examples (see "Working With SOAP Messages" for more information).
JMS Examples
A listing of the code in the HelloWorldMessage tutorial example can be found, along with code from a number of other example applications, at the following location:
The directory includes a README file that describes each example application and how to run it. The examples include standard JMS sample programs as well as MQ-supplied example applications. They are summarized in the following two tables.
- IMQ_HOME/demo/jms (/usr/demo/imq/jms on Solaris)
Table 2-1 is a listing and brief description of the JMS sample programs.
Table 2-2 is a listing and brief description of the MQ-supplied example applications.
JAXM Examples
A number of examples illustrating how to send and receive SOAP messages are provided at the following location:
The directory includes a README file that describes each example application and how to run it. These example applications are summarized in Table 2-3.
- IMQ_HOME/demo/jaxm (/usr/demo/imq/jaxm on Solaris)
Previous Contents Index Next
Copyright © 2002 Sun Microsystems, Inc. All rights reserved.
Last Updated June 19, 2002