blob: 4e95d9b734fdae6f2af2e20ced3b79a8fd709026 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>ActiveMQ</title>
<link rel="icon" type="image/png" href="/assets/img/favicon.png">
<link rel="stylesheet" href="/css/main.css">
<script defer src="https://use.fontawesome.com/releases/v5.0.8/js/all.js" integrity="sha384-SlE991lGASHoBfWbelyBPLsUlwY1GwNDJo3jSJO04KZ33K2bwfV9YBauFfnzvynJ" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light fixed-top">
<div class="container">
<!-- <a class="navbar-brand mr-auto" href="#"><img style="height: 50px" src="assets/img/apache-feather.png" /></a> -->
<a class="navbar-brand mr-auto" href="/"><img src="/assets/img/activemq_logo_black_small.png" style="height: 50px"/></a>
<button class="navbar-toggler ml-auto" type="button" data-toggle="collapse" data-target="#navbarContent" aria-controls="navbarContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="ml-auto collapse navbar-collapse" id="navbarContent">
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link active" href="/index.html">Home</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link" id="navbarDropdownComponents" data-target="#" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Components</a>
<ul class="dropdown-menu dropdown-menu-center" aria-labelledby="navbarDropdownComponents">
<div class="row">
<div class="col-12">
<ul class="multi-column-dropdown">
<li class="nav-item"><a class="dropdown-item" href="/components/classic">ActiveMQ 5</a></li>
<li class="nav-item"><a class="dropdown-item" href="/components/artemis/">ActiveMQ Artemis</a></li>
<li class="nav-item"><a class="dropdown-item" href="/components/nms">NMS Clients</a></li>
<li class="nav-item"><a class="dropdown-item" href="/components/cms">CMS Client</a></li>
</ul>
</div>
</div>
</ul>
</li>
<li class="nav-item dropdown">
<a class="nav-link" id="navbarDropdownCommunity" data-target="#" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Contact</a>
<ul class="dropdown-menu dropdown-menu-center multi-column columns-1" aria-labelledby="navbarDropdownCommunity">
<div class="row">
<div class="col-12">
<ul class="multi-column-dropdown">
<li class="nav-item"><a class="dropdown-item" href="/contact#mailing">Mailing Lists</a></li>
<li class="nav-item"><a class="dropdown-item" href="/contact#chat">Chat</a></li>
<li class="nav-item"><a class="dropdown-item" href="/contact#issues">Report Issues</a></li>
<li class="nav-item"><a class="dropdown-item" href="/contact#contributing">Contributing</a></li>
<li class="nav-item"><a class="dropdown-item" href="/security-advisories.html">Security</a></li>
</ul>
</div>
</div>
</ul>
</li>
<li class="nav-item dropdown">
<a class="nav-link" id="navbarDropdownTeam" data-target="#" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Apache</a>
<ul class="dropdown-menu dropdown-menu-center multi-column columns-1" aria-labelledby="navbarDropdownTeam">
<div class="row">
<div class="col-sm-12">
<ul class="multi-column-dropdown">
<li class="nav-item"><a class="dropdown-item" href="https://www.apache.org">The Apache Software Foundation</a></li>
<li class="nav-item"><a class="dropdown-item" href="https://www.apache.org/licenses/">License</a></li>
<li class="nav-item"><a class="dropdown-item" href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
<li class="nav-item"><a class="dropdown-item" href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
<li class="nav-item"><a class="dropdown-item" href="/security-advisories.html">Security</a></li>
<li class="nav-item"><a class="dropdown-item" href="https://www.apache.org/events/current-event">Events</a></li>
<li class="nav-item"><a class="dropdown-item" href="https://people.apache.org/phonebook.html?pmc=activemq">PMC & Committers</a></li>
<li class="nav-item"><a class="dropdown-item" href="/team/reports">Board Reports</a></li>
</ul>
</div>
</div>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<div class="content">
<div class="page-title-activemq5">
<div class="container">
<h1>JNDI Support</h1>
</div>
</div>
<div class="container" >
<div class="row" style="margin-top: 30px">
<div class="col-12 activemq5">
<p><a href="connectivity">Connectivity</a> &gt; <a href="containers">Containers</a> &gt; <a href="jndi-support">JNDI Support</a></p>
<p>ActiveMQ will work with any JNDI provider capable of storing Java objects. However it is common to require a JNDI initial context to be able to run many JMS example programs, like <a href="http://java.sun.com/products/jms/tutorial/1_3_1-fcs/doc/jms_tutorialTOC.html">Sun’s JMS tutorial.</a></p>
<p>So we provide a simple JNDI <code class="highlighter-rouge">InitialContextFactory</code> which can be used to lookup JMS connection factory objects as well as Destination objects. For example if you place this <a href="http://svn.apache.org/repos/asf/activemq/trunk/activemq-unit-tests/src/test/resources/jndi.properties">jndi.properties</a> file on your classpath, you can look inside the <code class="highlighter-rouge">InitialContext</code> and lookup <code class="highlighter-rouge">ConnectionFactory</code> objects and <code class="highlighter-rouge">Destinations</code> etc.</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
# use the following property to configure the default connector
java.naming.provider.url = vm://localhost
# use the following property to specify the JNDI name the connection factory
# should appear as.
#connectionFactoryNames = connectionFactory, queueConnectionFactory, topicConnectionFactry
# register some queues in JNDI using the form
# queue.[jndiName] = [physicalName]
queue.MyQueue = example.MyQueue
# register some topics in JNDI using the form
# topic.[jndiName] = [physicalName]
topic.MyTopic = example.MyTopic
</code></pre></div></div>
<p>You can edit the <code class="highlighter-rouge">jndi.properties</code> file to configure the <code class="highlighter-rouge">ActiveMQConnectionFactory</code>’s properties such as <code class="highlighter-rouge">brokerURL</code> and whether or not there should be an embedded broker etc. See <a href="how-do-i-embed-a-broker-inside-a-connection">how to embed a broker in a connection</a> for more details.</p>
<h3 id="activemq-jndi-tutorial">ActiveMQ JNDI Tutorial</h3>
<p>This is a quick one page tutorial on how to setup and use JNDI to create a connection to ActiveMQ. The first thing is ActiveMQ does not provide a full JNDI server. This means JMS clients need to use properties files to create a JNDI <code class="highlighter-rouge">IntialContextFactory</code>. If you need an example properties file, you can look the source distribution <a href="https://github.com/apache/activemq/blob/master/activemq-unit-tests/src/test/resources/jndi.properties">https://github.com/apache/activemq/blob/master/activemq-unit-tests/src/test/resources/jndi.properties</a>. Before we proceed, here are the properties.</p>
<table>
<tbody>
<tr>
<td>Name</td>
<td>Value</td>
</tr>
<tr>
<td><code class="highlighter-rouge">java.naming.factory.initial</code></td>
<td><code class="highlighter-rouge">org.apache.activemq.jndi.ActiveMQInitialContextFactory</code></td>
</tr>
<tr>
<td><code class="highlighter-rouge">java.naming.provider.url</code></td>
<td><code class="highlighter-rouge">tcp://hostname:61616</code></td>
</tr>
<tr>
<td><code class="highlighter-rouge">topic.MyTopic</code></td>
<td><code class="highlighter-rouge">example.MyTopic</code></td>
</tr>
</tbody>
</table>
<p>Make sure to add <code class="highlighter-rouge">activemq-_&lt;version&gt;_.jar</code> and <code class="highlighter-rouge">spring-1.x.jar</code> to your classpath. If the libraries are not in the classpath, you will get a <code class="highlighter-rouge">ClassNotFoundException</code> at runtime. If you get <code class="highlighter-rouge">ClassNotFoundException</code>, try printing out the classpath and check it is present. You can also run ActiveMQ with <code class="highlighter-rouge">-verbose</code> option to verify the jar was loaded correctly.</p>
<p><strong>Sample Code</strong></p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>// Create a new intial context, which loads from jndi.properties file:
javax.naming.Context ctx = new javax.naming.InitialContext();
// Lookup the connection factory:
javax.jms.TopicConnectionFactory factory = (javax.jms.TopicConnectionFactory)ctx.lookup("ConnectionFactory");
// Create a new TopicConnection for pub/sub messaging:
javax.jms.TopicConnection conn = factory.getTopicConnection();
// Lookup an existing topic:
javax.jms.Topic mytopic = (javax.jms.Topic)ctx.lookup("MyTopic");
// Create a new TopicSession for the client:
javax.jms.TopicSession session = conn.createTopicSession(false,TopicSession.AUTO_ACKNOWLEDGE);
// Create a new subscriber to receive messages:
javax.jms.TopicSubscriber subscriber = session.createSubscriber(mytopic);
</code></pre></div></div>
<p>Notice the name of the topic in the sample is <code class="highlighter-rouge">MyTopic</code>. ActiveMQ will read the <code class="highlighter-rouge">jndi.properties</code> files and creates the topics and queues in a lazy fashion. The prefix topic and queue is stripped, so the JNDI name begins after the prefix.</p>
<p>Once you have the <code class="highlighter-rouge">jndi.properties</code> edited and ready, it needs to be accessible to your application. The easiest way is to add <code class="highlighter-rouge">jndi.properties</code> to a jar file. When <code class="highlighter-rouge">new InitialContext()</code> is called, it will scan the resources and find the file. If you get <code class="highlighter-rouge">javax.naming.NamingException</code>, it usually means the <code class="highlighter-rouge">jndi.properties</code> file is not accessible.</p>
<p>You can also try to create a new initial context using either an instance of properties file or a map. For example, the approach recommended by JMS specification will work just fine.</p>
<p>Example Recommended by Specification</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>javaProperties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
props.setProperty(Context.PROVIDER_URL, "tcp://hostname:61616");
javax.naming.Context ctx = new InitialContext(props);
</code></pre></div></div>
<p>If ActiveMQ is embedded within an EJB container, you will need to look at the containers documentation for the correct JNDI values.</p>
<h3 id="dynamically-creating-destinations">Dynamically Creating Destinations</h3>
<p>For the easiest possible configuration with JNDI based programs, there are two dynamic contexts, namely:</p>
<ul>
<li><code class="highlighter-rouge">dynamicQueues</code></li>
<li><code class="highlighter-rouge">dynamicTopics</code></li>
</ul>
<p>These allow you to lookup queues and topics using JNDI without any configuration.</p>
<p>For example, if you use the following name to lookup into JNDI:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>dynamicQueues/FOO.BAR
</code></pre></div></div>
<p>you will get back an <code class="highlighter-rouge">ActiveMQQueue</code> of the name <code class="highlighter-rouge">FOO.BAR</code>. This can be very handy if you can easily reconfigure the JNDI name to use to lookup something in JNDI, but don’t want to have to double configure a <code class="highlighter-rouge">jndi.properties</code> to match.</p>
<h3 id="working-with-embedded-brokers">Working With Embedded Brokers</h3>
<p>It is often useful to use an embedded broker in the same JVM as the JMS client. For this see <a href="how-do-i-embed-a-broker-inside-a-connection">How do I embed a Broker inside a Connection</a>.</p>
<p>If you want to use an embedded broker with your JNDI provider you can just use the <a href="vm-transport-reference">VM Transport</a> to connect to the broker in your URL. e.g. to create a purely in JVM broker use this URI</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>vm://locahost
</code></pre></div></div>
<p>If you want to customize the broker use something like this:</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>vm:broker:(tcp://localhost:61616)
</code></pre></div></div>
<p>More options are available in the <a href="vm-transport-reference">VM Transport Reference</a></p>
<h3 id="example-java-code">Example Java Code</h3>
<p>Once you have configured JNDI on the classpath you can run any normal JMS application such as the following <a href="http://svn.apache.org/repos/asf/incubator/activemq/trunk/activemq-unit-tests/src/test/java/org/apache/activemq/demo/SimpleProducer.java">example</a>. Notice that the Java code just uses pure JMS APIs and is not in any way ActiveMQ specific</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">/**</span>
<span class="p">*</span> <span class="n">The</span> <span class="n">SimpleQueueSender</span> <span class="n">class</span> <span class="n">consists</span> <span class="n">only</span> <span class="k">of</span> <span class="n">a</span> <span class="n">main</span> <span class="n">method</span><span class="p">,</span>
<span class="p">*</span> <span class="n">which</span> <span class="n">sends</span> <span class="n">several</span> <span class="n">messages</span> <span class="k">to</span> <span class="n">a</span> <span class="n">queue</span><span class="p">.</span>
<span class="p">*</span>
<span class="p">*</span> <span class="nf">Run</span> <span class="n">this</span> <span class="n">program</span> <span class="k">in</span> <span class="n">conjunction</span> <span class="k">with</span> <span class="n">SimpleQueueReceiver</span><span class="p">.</span>
<span class="p">*</span> <span class="n">Specify</span> <span class="n">a</span> <span class="n">queue</span> <span class="n">name</span> <span class="n">on</span> <span class="n">the</span> <span class="nf">command</span> <span class="n">line</span> <span class="n">when</span> <span class="n">you</span> <span class="nf">run</span> <span class="n">the</span>
<span class="p">*</span> <span class="n">program</span><span class="p">.</span> <span class="n">By</span> <span class="n">default</span><span class="p">,</span> <span class="n">the</span> <span class="n">program</span> <span class="n">sends</span> <span class="n">one</span> <span class="n">message</span><span class="p">.</span> <span class="n">Specify</span>
<span class="p">*</span> <span class="n">a</span> <span class="n">number</span> <span class="n">after</span> <span class="n">the</span> <span class="n">queue</span> <span class="n">name</span> <span class="k">to</span> <span class="nf">send</span> <span class="n">that</span> <span class="n">number</span> <span class="k">of</span> <span class="n">messages</span><span class="p">.</span>
<span class="p">*/</span>
<span class="k">package</span> <span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">activemq</span><span class="p">.</span><span class="n">demo</span><span class="p">;</span>
<span class="n">import</span> <span class="n">javax</span><span class="p">.</span><span class="n">jms</span><span class="p">.</span><span class="n">Connection</span><span class="p">;</span>
<span class="n">import</span> <span class="n">javax</span><span class="p">.</span><span class="n">jms</span><span class="p">.</span><span class="n">ConnectionFactory</span><span class="p">;</span>
<span class="n">import</span> <span class="n">javax</span><span class="p">.</span><span class="n">jms</span><span class="p">.</span><span class="n">Destination</span><span class="p">;</span>
<span class="n">import</span> <span class="n">javax</span><span class="p">.</span><span class="n">jms</span><span class="p">.</span><span class="n">JMSException</span><span class="p">;</span>
<span class="n">import</span> <span class="n">javax</span><span class="p">.</span><span class="n">jms</span><span class="p">.</span><span class="n">MessageProducer</span><span class="p">;</span>
<span class="n">import</span> <span class="n">javax</span><span class="p">.</span><span class="n">jms</span><span class="p">.</span><span class="n">Session</span><span class="p">;</span>
<span class="n">import</span> <span class="n">javax</span><span class="p">.</span><span class="n">jms</span><span class="p">.</span><span class="n">TextMessage</span><span class="p">;</span>
<span class="n">import</span> <span class="n">javax</span><span class="p">.</span><span class="n">naming</span><span class="p">.</span><span class="n">Context</span><span class="p">;</span>
<span class="n">import</span> <span class="n">javax</span><span class="p">.</span><span class="n">naming</span><span class="p">.</span><span class="n">InitialContext</span><span class="p">;</span>
<span class="n">import</span> <span class="n">javax</span><span class="p">.</span><span class="n">naming</span><span class="p">.</span><span class="n">NamingException</span><span class="p">;</span>
<span class="n">import</span> <span class="n">org</span><span class="p">.</span><span class="n">slf4j</span><span class="p">.</span><span class="n">Logger</span><span class="p">;</span>
<span class="n">import</span> <span class="n">org</span><span class="p">.</span><span class="n">slf4j</span><span class="p">.</span><span class="n">LoggerFactory</span><span class="p">;</span>
<span class="p">/**</span>
<span class="p">*</span> <span class="n">A</span> <span class="n">simple</span> <span class="n">polymorphic</span> <span class="n">JMS</span> <span class="n">producer</span> <span class="n">which</span> <span class="n">can</span> <span class="n">work</span> <span class="k">with</span> <span class="n">Queues</span> <span class="k">or</span> <span class="n">Topics</span> <span class="n">which</span>
<span class="p">*</span> <span class="k">uses</span> <span class="n">JNDI</span> <span class="k">to</span> <span class="n">lookup</span> <span class="n">the</span> <span class="n">JMS</span> <span class="n">connection</span> <span class="n">factory</span> <span class="k">and</span> <span class="n">destination</span><span class="p">.</span>
<span class="p">*/</span>
<span class="k">public</span> <span class="n">final</span> <span class="n">class</span> <span class="n">SimpleProducer</span> <span class="p">{</span>
<span class="n">private</span> <span class="n">static</span> <span class="n">final</span> <span class="n">Logger</span> <span class="n">LOG</span> <span class="p">=</span> <span class="n">LoggerFactory</span><span class="p">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">SimpleProducer</span><span class="p">.</span><span class="n">class</span><span class="p">);</span>
<span class="n">private</span> <span class="n">SimpleProducer</span><span class="p">()</span> <span class="p">{}</span> <span class="err"> </span>
<span class="p">/**</span>
<span class="p">*</span> <span class="p">@</span><span class="n">param</span> <span class="n">args</span> <span class="n">the</span> <span class="n">destination</span> <span class="n">name</span> <span class="k">to</span> <span class="nf">send</span> <span class="k">to</span> <span class="k">and</span> <span class="n">optionally</span><span class="p">,</span> <span class="n">the</span> <span class="n">number</span> <span class="k">of</span>
<span class="p">*</span> <span class="n">messages</span> <span class="k">to</span> <span class="nf">send</span>
<span class="p">*/</span>
<span class="k">public</span> <span class="n">static</span> <span class="n">void</span> <span class="n">main</span><span class="p">(</span><span class="k">String</span><span class="p">[]</span> <span class="n">args</span><span class="p">)</span> <span class="p">{</span>
<span class="n">Context</span> <span class="n">jndiContext</span><span class="p">;</span>
<span class="n">ConnectionFactory</span> <span class="n">connectionFactory</span><span class="p">;</span>
<span class="n">Connection</span> <span class="n">connection</span><span class="p">;</span>
<span class="n">Session</span> <span class="n">session</span><span class="p">;</span>
<span class="n">Destination</span> <span class="n">destination</span><span class="p">;</span>
<span class="n">MessageProducer</span> <span class="n">producer</span><span class="p">;</span>
<span class="k">String</span> <span class="n">destinationName</span><span class="p">;</span>
<span class="n">final</span> <span class="n">int</span> <span class="n">numMsgs</span><span class="p">;</span> <span class="err"> </span>
<span class="k">if</span> <span class="p">((</span><span class="n">args</span><span class="p">.</span><span class="n">length</span> <span class="p">&lt;</span> <span class="m">1</span><span class="p">)</span> <span class="p">||</span> <span class="p">(</span><span class="n">args</span><span class="p">.</span><span class="n">length</span> <span class="p">&gt;</span> <span class="m">2</span><span class="p">))</span> <span class="p">{</span>
<span class="n">LOG</span><span class="p">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Usage: java SimpleProducer &lt;destination-name&gt; [&lt;number-of-messages&gt;]"</span><span class="p">);</span> <span class="nf">System</span><span class="p">.</span><span class="k">exit</span><span class="p">(</span><span class="m">1</span><span class="p">);</span>
<span class="p">}</span> <span class="err"> </span>
<span class="n">destinationName</span> <span class="p">=</span> <span class="n">args</span><span class="p">[</span><span class="m">0</span><span class="p">];</span>
<span class="n">LOG</span><span class="p">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Destination name is "</span> <span class="p">+</span> <span class="n">destinationName</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">args</span><span class="p">.</span><span class="n">length</span> <span class="p">==</span> <span class="m">2</span><span class="p">)</span> <span class="p">{</span>
<span class="n">numMsgs</span> <span class="p">=</span> <span class="p">(</span><span class="n">new</span> <span class="k">Integer</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="m">1</span><span class="p">])).</span><span class="n">intValue</span><span class="p">();</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="n">numMsgs</span> <span class="p">=</span> <span class="m">1</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">/*</span>
<span class="p">*</span> <span class="n">Create</span> <span class="n">a</span> <span class="n">JNDI</span> <span class="n">API</span> <span class="n">InitialContext</span> <span class="n">object</span>
<span class="p">*/</span>
<span class="n">try</span> <span class="p">{</span>
<span class="n">jndiContext</span> <span class="p">=</span> <span class="n">new</span> <span class="n">InitialContext</span><span class="p">();</span>
<span class="p">}</span> <span class="n">catch</span> <span class="p">(</span><span class="n">NamingException</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
<span class="n">LOG</span><span class="p">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Could not create JNDI API context: "</span> <span class="p">+</span> <span class="n">e</span><span class="p">.</span><span class="n">toString</span><span class="p">());</span>
<span class="nf">System</span><span class="p">.</span><span class="k">exit</span><span class="p">(</span><span class="m">1</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">/*</span>
<span class="p">*</span> <span class="n">Look</span> <span class="n">up</span> <span class="n">connection</span> <span class="n">factory</span> <span class="k">and</span> <span class="n">destination</span><span class="p">.</span>
<span class="p">*/</span>
<span class="n">try</span> <span class="p">{</span>
<span class="n">connectionFactory</span> <span class="p">=</span> <span class="p">(</span><span class="n">ConnectionFactory</span><span class="p">)</span><span class="n">jndiContext</span><span class="p">.</span><span class="n">lookup</span><span class="p">(</span><span class="s2">"ConnectionFactory"</span><span class="p">);</span>
<span class="n">destination</span> <span class="p">=</span> <span class="p">(</span><span class="n">Destination</span><span class="p">)</span><span class="n">jndiContext</span><span class="p">.</span><span class="n">lookup</span><span class="p">(</span><span class="n">destinationName</span><span class="p">);</span>
<span class="p">}</span> <span class="n">catch</span> <span class="p">(</span><span class="n">NamingException</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
<span class="n">LOG</span><span class="p">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"JNDI API lookup failed: "</span> <span class="p">+</span> <span class="n">e</span><span class="p">);</span>
<span class="nf">System</span><span class="p">.</span><span class="k">exit</span><span class="p">(</span><span class="m">1</span><span class="p">);</span>
<span class="p">}</span> <span class="err"> </span>
<span class="p">/*</span>
<span class="p">*</span> <span class="n">Create</span> <span class="n">connection</span><span class="p">.</span> <span class="n">Create</span> <span class="n">session</span> <span class="k">from</span> <span class="n">connection</span><span class="p">;</span> <span class="nb">false</span> <span class="n">means</span>
<span class="p">*</span> <span class="n">session</span> <span class="n">is</span> <span class="k">not</span> <span class="n">transacted</span><span class="p">.</span> <span class="n">Create</span> <span class="n">sender</span> <span class="k">and</span> <span class="n">text</span> <span class="n">message</span><span class="p">.</span> <span class="nf">Send</span>
<span class="p">*</span> <span class="n">messages</span><span class="p">,</span> <span class="n">varying</span> <span class="n">text</span> <span class="n">slightly</span><span class="p">.</span> <span class="nf">Send</span> <span class="k">end</span><span class="p">-</span><span class="k">of</span><span class="p">-</span><span class="n">messages</span> <span class="n">message</span><span class="p">.</span>
<span class="p">*</span> <span class="n">Finally</span><span class="p">,</span> <span class="n">close</span> <span class="n">the</span> <span class="n">connection</span><span class="p">.</span>
<span class="p">*/</span>
<span class="n">try</span> <span class="p">{</span>
<span class="n">connection</span> <span class="p">=</span> <span class="n">connectionFactory</span><span class="p">.</span><span class="n">createConnection</span><span class="p">();</span>
<span class="n">session</span> <span class="p">=</span> <span class="n">connection</span><span class="p">.</span><span class="n">createSession</span><span class="p">(</span><span class="nb">false</span><span class="p">,</span> <span class="n">Session</span><span class="p">.</span><span class="n">AUTO_ACKNOWLEDGE</span><span class="p">);</span>
<span class="n">producer</span> <span class="p">=</span> <span class="n">session</span><span class="p">.</span><span class="n">createProducer</span><span class="p">(</span><span class="n">destination</span><span class="p">);</span>
<span class="n">TextMessage</span> <span class="n">message</span> <span class="p">=</span> <span class="n">session</span><span class="p">.</span><span class="n">createTextMessage</span><span class="p">();</span> <span class="err"> </span>
<span class="n">for</span> <span class="p">(</span><span class="n">int</span> <span class="n">i</span> <span class="p">=</span> <span class="m">0</span><span class="p">;</span> <span class="n">i</span> <span class="p">&lt;</span> <span class="n">numMsgs</span><span class="p">;</span> <span class="n">i</span><span class="p">++)</span> <span class="p">{</span>
<span class="n">message</span><span class="p">.</span><span class="n">setText</span><span class="p">(</span><span class="s2">"This is message "</span> <span class="p">+</span> <span class="p">(</span><span class="n">i</span> <span class="p">+</span> <span class="m">1</span><span class="p">));</span>
<span class="n">LOG</span><span class="p">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Sending message: "</span> <span class="p">+</span> <span class="n">message</span><span class="p">.</span><span class="n">getText</span><span class="p">());</span> <span class="n">producer</span><span class="p">.</span><span class="nf">send</span><span class="p">(</span><span class="n">message</span><span class="p">);</span>
<span class="p">}</span> <span class="err"> </span>
<span class="p">/*</span>
<span class="p">*</span> <span class="nf">Send</span> <span class="n">a</span> <span class="n">non</span><span class="p">-</span><span class="n">text</span> <span class="n">control</span> <span class="n">message</span> <span class="n">indicating</span> <span class="k">end</span> <span class="k">of</span> <span class="n">messages</span><span class="p">.</span>
<span class="p">*/</span>
<span class="n">producer</span><span class="p">.</span><span class="nf">send</span><span class="p">(</span><span class="n">session</span><span class="p">.</span><span class="n">createMessage</span><span class="p">());</span>
<span class="p">}</span> <span class="n">catch</span> <span class="p">(</span><span class="n">JMSException</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
<span class="n">LOG</span><span class="p">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Exception occurred: "</span> <span class="p">+</span> <span class="n">e</span><span class="p">);</span>
<span class="p">}</span> <span class="n">finally</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">connection</span> <span class="c1">!= null) {
</span> <span class="n">try</span> <span class="p">{</span>
<span class="n">connection</span><span class="p">.</span><span class="n">close</span><span class="p">();</span>
<span class="p">}</span> <span class="n">catch</span> <span class="p">(</span><span class="n">JMSException</span> <span class="n">ignored</span><span class="p">)</span> <span class="p">{</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>
</div>
</div>
</div>
</div>
<div class="row sitemap">
<div class="col-sm-12">
<div class="container">
<div class="row">
<div class="col-sm-12">
<div class="row">
<div class="col-sm-3">
<div >
<img class="float-left" style="max-height: 100px" src="/assets/img/activemq_logo_white_vertical_small.png"/>
</div>
</div>
<div style="text-align: center; margin-bottom: 0px; margin-top: 30px; font-size: 65%" class="col-sm-6">
<p>Apache ActiveMQ, ActiveMQ, ActiveMQ Artemis, Apache, the Apache feather logo, and the Apache ActiveMQ project logo are trademarks of The Apache Software Foundation. Copyright &copy; 2019, The Apache Software Foundation. Licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.</p>
</div>
<div class="col-sm-3">
<div >
<a href="https://www.apache.org"><img class="float-right" style="margin-top: 10px; max-height: 80px" src="/assets/img/apache-logo-small.png"/></a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>