<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Chapter&#160;1.&#160;HelloWorld Example</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="JMS-Client-0-10-Book.html">Prev</a>&#160;</td><th align="center" width="60%">&#160;</th><td align="right" width="20%">&#160;<a accesskey="n" href="JMS-Client-0-10-Configuring.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a id="JMS-Client-0-10-Example"></a>Chapter&#160;1.&#160;HelloWorld Example</h1></div></div></div><p>The following program shows how to send and receive a
      message using the Apache Qpid JMS client for AMQP 0-10 . JMS programs typically use
      JNDI to obtain connection factory and destination objects which
      the application needs. In this way the configuration is kept
      separate from the application code itself.</p><p>In this example, we create a JNDI context using a
      properties file, use the context to lookup a connection factory,
      create and start a connection, create a session, and lookup a
      destination from the JNDI context. Then we create a producer and
      a consumer, send a message with the producer and receive it with
      the consumer. This code should be straightforward for anyone
      familiar with JMS.</p><div class="example"><a id="d0e12"></a><p class="title"><strong>Example&#160;1.1.&#160;"Hello world!" in Java</strong></p><div class="example-contents"><pre class="programlisting" xml:lang="java">
package org.apache.qpid.example.jmsexample.hello;

import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;

public class Hello {

    public Hello() {
    }

    public static void main(String[] args) {
        Hello producer = new Hello();
        producer.runTest();
    }

    private void runTest() {
        try {
            Properties properties = new Properties();
            properties.load(this.getClass().getResourceAsStream("hello.properties"));  <a class="co" href="JMS-Client-0-10-Example.html#callout-java-properties" id="hello-java-properties"><span><img alt="1" border="0" src="images/callouts/1.png" /></span></a>
            Context context = new InitialContext(properties);   <a class="co" href="JMS-Client-0-10-Example.html#callout-java-context" id="hello-java-context"><span><img alt="2" border="0" src="images/callouts/2.png" /></span></a>

            ConnectionFactory connectionFactory
              = (ConnectionFactory) context.lookup("qpidConnectionfactory"); <a class="co" href="JMS-Client-0-10-Example.html#callout-java-connection-factory" id="hello-java-connection-factory"><span><img alt="3" border="0" src="images/callouts/3.png" /></span></a>
            Connection connection = connectionFactory.createConnection();  <a class="co" href="JMS-Client-0-10-Example.html#callout-java-connection" id="hello-java-connection"><span><img alt="4" border="0" src="images/callouts/4.png" /></span></a>
            connection.start();  <a class="co" href="JMS-Client-0-10-Example.html#callout-java-start" id="hello-java-start"><span><img alt="5" border="0" src="images/callouts/5.png" /></span></a>

            Session session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);<a class="co" href="JMS-Client-0-10-Example.html#callout-java-session" id="hello-java-session"><span><img alt="6" border="0" src="images/callouts/6.png" /></span></a>
            Destination destination = (Destination) context.lookup("topicExchange");  <a class="co" href="JMS-Client-0-10-Example.html#callout-java-destination" id="hello-java-destination"><span><img alt="7" border="0" src="images/callouts/7.png" /></span></a>

            MessageProducer messageProducer = session.createProducer(destination);  <a class="co" href="JMS-Client-0-10-Example.html#callout-java-producer" id="hello-java-producer"><span><img alt="8" border="0" src="images/callouts/8.png" /></span></a>
            MessageConsumer messageConsumer = session.createConsumer(destination);  <a class="co" href="JMS-Client-0-10-Example.html#callout-java-consumer" id="hello-java-consumer"><span><img alt="9" border="0" src="images/callouts/9.png" /></span></a>

            TextMessage message = session.createTextMessage("Hello world!");
            messageProducer.send(message);

            message = (TextMessage)messageConsumer.receive();    <a class="co" href="JMS-Client-0-10-Example.html#callout-java-receive" id="hello-java-receive"><span><img alt="10" border="0" src="images/callouts/10.png" /></span></a>
            System.out.println(message.getText());

            connection.close();  <a class="co" href="JMS-Client-0-10-Example.html#callout-java-close" id="hello-java-close"><span><img alt="11" border="0" src="images/callouts/11.png" /></span></a>
            context.close();   <a class="co" href="JMS-Client-0-10-Example.html#callout-java-jndi-close" id="hello-java-jndi-close"><span><img alt="12" border="0" src="images/callouts/12.png" /></span></a>
        }
        catch (Exception exp) {
            exp.printStackTrace();
        }
    }
}
</pre></div></div><br class="example-break" /><div class="calloutlist"><table border="0" summary="Callout list"><tr><td align="left" valign="top" width="5%"><p><a id="callout-java-properties"></a><a href="#hello-java-properties"><span><img alt="1" border="0" src="images/callouts/1.png" /></span></a> </p></td><td align="left" valign="top"><p>Loads the JNDI properties file, which specifies connection properties, queues, topics, and addressing options. See below for further details.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-java-context"></a><a href="#hello-java-context"><span><img alt="2" border="0" src="images/callouts/2.png" /></span></a> </p></td><td align="left" valign="top"><p>Creates the JNDI initial context.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-java-connection-factory"></a><a href="#hello-java-connection-factory"><span><img alt="3" border="0" src="images/callouts/3.png" /></span></a> </p></td><td align="left" valign="top"><p>Creates a JMS connection factory for Qpid.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-java-connection"></a><a href="#hello-java-connection"><span><img alt="4" border="0" src="images/callouts/4.png" /></span></a> </p></td><td align="left" valign="top"><p>Creates a JMS connection.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-java-start"></a><a href="#hello-java-start"><span><img alt="5" border="0" src="images/callouts/5.png" /></span></a> </p></td><td align="left" valign="top"><p>Activates the connection.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-java-session"></a><a href="#hello-java-session"><span><img alt="6" border="0" src="images/callouts/6.png" /></span></a> </p></td><td align="left" valign="top"><p>Creates a session. This session is not transactional (transactions='false'), and messages are automatically acknowledged.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-java-destination"></a><a href="#hello-java-destination"><span><img alt="7" border="0" src="images/callouts/7.png" /></span></a> </p></td><td align="left" valign="top"><p>Creates a destination for the topic exchange, so senders and receivers can use it.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-java-producer"></a><a href="#hello-java-producer"><span><img alt="8" border="0" src="images/callouts/8.png" /></span></a> </p></td><td align="left" valign="top"><p>Creates a producer that sends messages to the topic exchange.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-java-consumer"></a><a href="#hello-java-consumer"><span><img alt="9" border="0" src="images/callouts/9.png" /></span></a> </p></td><td align="left" valign="top"><p>Creates a consumer that reads messages from the topic exchange.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-java-receive"></a><a href="#hello-java-receive"><span><img alt="10" border="0" src="images/callouts/10.png" /></span></a> </p></td><td align="left" valign="top"><p>Reads the next available message.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-java-close"></a><a href="#hello-java-close"><span><img alt="11" border="0" src="images/callouts/11.png" /></span></a> </p></td><td align="left" valign="top"><p>Closes the connection, all sessions managed by the connection, and all senders and receivers managed by each session.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-java-jndi-close"></a><a href="#hello-java-jndi-close"><span><img alt="12" border="0" src="images/callouts/12.png" /></span></a> </p></td><td align="left" valign="top"><p>Closes the JNDI context.</p></td></tr></table></div><p>The contents of the hello.properties file are shown below.</p><div class="example"><a id="d0e80"></a><p class="title"><strong>Example&#160;1.2.&#160;JNDI Properties File for "Hello world!" example</strong></p><div class="example-contents"><pre class="programlisting">
java.naming.factory.initial
= org.apache.qpid.jndi.PropertiesFileInitialContextFactory

# connectionfactory.[jndiname] = [ConnectionURL]
connectionfactory.qpidConnectionfactory
= amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672' <a class="co" href="JMS-Client-0-10-Example.html#callout-hello-properties-connectionfactory" id="hello-properties-connectionfactory"><span><img alt="1" border="0" src="images/callouts/1.png" /></span></a>
# destination.[jndiname] = [address_string]
destination.topicExchange = amq.topic <a class="co" href="JMS-Client-0-10-Example.html#callout-hello-properties-destination" id="hello-properties-destination"><span><img alt="2" border="0" src="images/callouts/2.png" /></span></a>
	</pre></div></div><br class="example-break" /><div class="calloutlist"><table border="0" summary="Callout list"><tr><td align="left" valign="top" width="5%"><p><a id="callout-hello-properties-connectionfactory"></a><a href="#hello-properties-connectionfactory"><span><img alt="1" border="0" src="images/callouts/1.png" /></span></a> </p></td><td align="left" valign="top"><p>Defines a connection factory from which connections
	  can be created. The syntax of a ConnectionURL is given in
	  <a class="xref" href="JMS-Client-0-10-Configuring-JNDI.html" title="2.2.&#160;JNDI Properties">Section&#160;2.2, &#8220;JNDI Properties&#8221;</a>.</p></td></tr><tr><td align="left" valign="top" width="5%"><p><a id="callout-hello-properties-destination"></a><a href="#hello-properties-destination"><span><img alt="2" border="0" src="images/callouts/2.png" /></span></a> </p></td><td align="left" valign="top"><p>Defines a destination for which MessageProducers
	  and/or MessageConsumers can be created to send and receive
	  messages. The value for the destination in the properties
	  file is an address string as described in
	  <a class="xref" href="JMS-Client-0-10-Configuring-Addresses.html" title="2.4.&#160;Addresses">Section&#160;2.4, &#8220;Addresses&#8221;</a>. In the JMS
	  implementation MessageProducers are analogous to senders in
	  the Qpid Message API, and MessageConsumers are analogous to
	  receivers.</p></td></tr></table></div></div><div class="navfooter"><hr /><table summary="Navigation footer" width="100%"><tr><td align="left" width="40%"><a accesskey="p" href="JMS-Client-0-10-Book.html">Prev</a>&#160;</td><td align="center" width="20%">&#160;</td><td align="right" width="40%">&#160;<a accesskey="n" href="JMS-Client-0-10-Configuring.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">Apache Qpid JMS Client for AMQP 0-10&#160;</td><td align="center" width="20%"><a accesskey="h" href="JMS-Client-0-10-Book.html">Home</a></td><td align="right" valign="top" width="40%">&#160;Chapter&#160;2.&#160;Configuring the Client</td></tr></table></div></div>