blob: a8a8b5ae39fe6408b56eafff3bbf3f4b1c428095 [file] [log] [blame]
<!DOCTYPE html>
<!--
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Appendix&#160;E.&#160;How to bind Qpid destinations and connection factories into Tomcat JNDI - Apache Qpid&#8482;</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
<link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
<script type="text/javascript">var _deferredFunctions = [];</script>
<script type="text/javascript" src="/deferred.js" defer="defer"></script>
<!--[if lte IE 8]>
<link rel="stylesheet" href="/ie.css" type="text/css"/>
<script type="text/javascript" src="/html5shiv.js"></script>
<![endif]-->
<!-- Redirects for `go get` and godoc.org -->
<meta name="go-import"
content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
<meta name="go-source"
content="qpid.apache.org
https://github.com/apache/qpid-proton/blob/go1/README.md
https://github.com/apache/qpid-proton/tree/go1{/dir}
https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
</head>
<body>
<div id="-content">
<div id="-top" class="panel">
<a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>
<a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>
<ul id="-global-navigation">
<li><a id="-logotype" href="/index.html">Apache Qpid<sup>&#8482;</sup></a></li>
<li><a href="/documentation.html">Documentation</a></li>
<li><a href="/download.html">Download</a></li>
<li><a href="/discussion.html">Discussion</a></li>
</ul>
</div>
<div id="-menu" class="panel" style="display: none;">
<div class="flex">
<section>
<h3>Project</h3>
<ul>
<li><a href="/overview.html">Overview</a></li>
<li><a href="/components/index.html">Components</a></li>
<li><a href="/releases/index.html">Releases</a></li>
</ul>
</section>
<section>
<h3>Messaging APIs</h3>
<ul>
<li><a href="/proton/index.html">Qpid Proton</a></li>
<li><a href="/components/jms/index.html">Qpid JMS</a></li>
<li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
</ul>
</section>
<section>
<h3>Servers and tools</h3>
<ul>
<li><a href="/components/broker-j/index.html">Broker-J</a></li>
<li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
<li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
</ul>
</section>
<section>
<h3>Resources</h3>
<ul>
<li><a href="/dashboard.html">Dashboard</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
<li><a href="/resources.html">More resources</a></li>
</ul>
</section>
</div>
</div>
<div id="-search" class="panel" style="display: none;">
<form action="http://www.google.com/search" method="get">
<input type="hidden" name="sitesearch" value="qpid.apache.org"/>
<input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
<button type="submit">Search</button>
<a href="/search.html">More ways to search</a>
</form>
</div>
<div id="-middle" class="panel">
<ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-jms-amqp-0-x-6.3.1/index.html">Qpid JMS AMQP 0-x 6.3.1</a></li><li><a href="/releases/qpid-jms-amqp-0-x-6.3.1/jms-amqp-0-8-book/index.html">Apache Qpid JMS AMQP 0-8/0-9/0-9-1</a></li><li>Appendix&#160;E.&#160;How to bind Qpid destinations and connection factories into Tomcat JNDI</li></ul>
<div id="-middle-content">
<div class="docbook"><div class="navheader"><table summary="Navigation header" width="100%"><tr><th align="center" colspan="3">Appendix&#160;E.&#160;How to bind Qpid destinations and connection factories into Tomcat JNDI</th></tr><tr><td align="left" width="20%"><a accesskey="p" href="JMS-Client-0-8-Appendix-PooledConnecytionFactory.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-8-Appendix-ProducerFlowControl-Impact.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="JMS-Client-0-8-Appendix-Tomcat-JNDI-Integration"></a>Appendix&#160;E.&#160;How to bind Qpid destinations and connection factories into Tomcat JNDI</h1></div></div></div><p>
Qpid client destinations and connection factories can be registered in external JNDI containers, for example, Tomcat JNDI implementation.
</p><p>
<code class="literal">org.apache.qpid.jndi.ObjectFactory</code> implements
<a class="link" href="http://docs.oracle.com/javase/7/docs/api/javax/naming/spi/ObjectFactory.html" target="_top">javax.naming.spi.ObjectFactory</a>
allowing it to create instances of <code class="literal">AMQConnectionFactory</code>, <code class="literal">PooledConnectionFactory</code>,
<code class="literal">AMQConnection</code>, <code class="literal">AMQQueue</code> and <code class="literal">AMQTopic</code> in external JNDI container from
<a class="link" href="http://docs.oracle.com/javase/7/docs/api/javax/naming/Reference.html" target="_top">javax.naming.Reference</a>s.
</p><p>Additionally,
<code class="literal">AMQConnectionFactory</code>, <code class="literal">PooledConnectionFactory</code> and <code class="literal">AMQDestination</code> (parent of
<code class="literal">AMQQueue</code> and <code class="literal">AMQTopic</code>) implement
<a class="link" href="http://docs.oracle.com/javase/7/docs/api/javax/naming/Referenceable.html" target="_top">javax.naming.Referenceable</a>
allowing creation of <a class="link" href="http://docs.oracle.com/javase/7/docs/api/javax/naming/Reference.html" target="_top">javax.naming.Reference</a> objects
for binding in external JNDI implementations.
</p><p>
<code class="literal">org.apache.qpid.jndi.ObjectFactory</code> allows the creation of:
</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
an instance of <code class="literal">ConnectionFactory</code> from a <code class="literal">Reference</code> containing reference
address (<a class="link" href="http://docs.oracle.com/javase/7/docs/api/javax/naming/RefAddr.html" target="_top">javax.naming.RefAddr</a>)
<code class="literal">connectionURL</code> with content set to a
<a class="link" href="JMS-Client-0-8-Connection-URL.html" title="Chapter&#160;7.&#160;Connection URLs">Connection URL</a>.
</p></li><li class="listitem"><p>
an instance of <code class="literal">PooledConnectionFactory</code> from a <code class="literal">Reference</code> containing reference
address (<a class="link" href="http://docs.oracle.com/javase/7/docs/api/javax/naming/RefAddr.html" target="_top">javax.naming.RefAddr</a>)
<code class="literal">connectionURL</code> with content set to a
<a class="link" href="JMS-Client-0-8-Connection-URL.html" title="Chapter&#160;7.&#160;Connection URLs">Connection URL</a>.
</p></li><li class="listitem"><p>
an instance of <code class="literal">AMQConnection</code> from a <code class="literal">Reference</code> containing reference
address (<a class="link" href="http://docs.oracle.com/javase/7/docs/api/javax/naming/RefAddr.html" target="_top">javax.naming.RefAddr</a>)
<code class="literal">connectionURL</code> with content set to a
<a class="link" href="JMS-Client-0-8-Connection-URL.html" title="Chapter&#160;7.&#160;Connection URLs">Connection URL</a>.
</p></li><li class="listitem"><p>
an instance of <code class="literal">AMQQueue</code> from a <code class="literal">Reference</code> containing reference
address (<a class="link" href="http://docs.oracle.com/javase/7/docs/api/javax/naming/RefAddr.html" target="_top">javax.naming.RefAddr</a>)
<code class="literal">address</code> with content set to either <a class="link" href="/releases/qpid-jms-amqp-0-x-6.3.1/jms-amqp-0-10-book/" target="_top">Address</a> or
<a class="link" href="JMS-Client-0-8-Binding-URL.html" title="Chapter&#160;8.&#160;Binding URL">Binding URL</a>.
</p></li><li class="listitem"><p>
an instance of <code class="literal">AMQTopic</code> from a <code class="literal">Reference</code> containing reference
address (<a class="link" href="http://docs.oracle.com/javase/7/docs/api/javax/naming/RefAddr.html" target="_top">javax.naming.RefAddr</a>)
<code class="literal">address</code> with content set to either <a class="link" href="/releases/qpid-jms-amqp-0-x-6.3.1/jms-amqp-0-10-book/" target="_top">Address</a> or
<a class="link" href="JMS-Client-0-8-Binding-URL.html" title="Chapter&#160;8.&#160;Binding URL">Binding URL</a>.
</p></li></ul></div><p>
</p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
For <code class="literal">AMQQueue</code> and <code class="literal">AMQTopic</code> prefix <code class="literal">BURL:</code> need
to be specified for <a class="link" href="JMS-Client-0-8-Binding-URL.html" title="Chapter&#160;8.&#160;Binding URL">Binding URL</a>. Otherwise, client will try
to parse content using <a class="link" href="/releases/qpid-jms-amqp-0-x-6.3.1/jms-amqp-0-10-book/" target="_top">Address</a> format.
</p></div><p>
</p><p>An example below demonstrates how to create JNDI resources in the Tomcat container using Resource declarations in context.xml
(A Tomcat specific web application configuration file usually added into war under /META-INF/context.xml).
</p><div class="example"><a id="d0e3573"></a><p class="title"><strong>Example&#160;E.1.&#160;An example of Tomcat context.xml declaring Qpid JNDI resources</strong></p><div class="example-contents"><pre class="programlisting">
&lt;?xml version='1.0' encoding='utf-8'?&gt;
&lt;!DOCTYPE xml&gt;
&lt;Context&gt;
&lt;Resource name="jms/connectionFactory" auth="Container"
type="org.apache.qpid.client.AMQConnectionFactory"
factory="org.apache.qpid.jndi.ObjectFactory"
connectionURL="amqp://guest:guest@clientid/?brokerlist='localhost:5672'"/&gt;
&lt;Resource name="jms/pooledConnectionFactory" auth="Container"
type="org.apache.qpid.client.PooledConnectionFactory"
factory="org.apache.qpid.jndi.ObjectFactory"
connectionURL="amqp://guest:guest@clientid/?brokerlist='localhost:5672'"
maxPoolSize="20" connectionTimeout="60000"/&gt;
&lt;Resource name="jms/queue" auth="Container"
type="org.apache.qpid.client.AMQQueue"
factory="org.apache.qpid.jndi.ObjectFactory"
address="BURL:direct://amq.direct//myQueue?durable='true'"/&gt;
&lt;Resource name="jms/topic" auth="Container"
type="org.apache.qpid.client.AMQTopic"
factory="org.apache.qpid.client.AMQConnectionFactory"
address="BURL:topic://amq.topic//myTopic?routingkey='myTopic'"/&gt;
&lt;/Context&gt;</pre></div></div><br class="example-break" /><p>In the example above <code class="literal">AMQConnectionFactory</code> would be registered under JNDI name "jms/connectionFactory",
<code class="literal">PooledConnectionFactory</code> would be registered under JNDI name "jms/pooledConnectionFactory",
<code class="literal">Queue</code> "myQueue" would be registered under JNDI name "jms/queue" and JMS <code class="literal">Topic</code>
destination "myTopic" would be registered under JNDI name "jms/topic". (All resources will be bound under "java:comp/env").
On declaration of <code class="literal">PooledConnectionFactory</code> optional maxPoolSize and connectionTimeout are set to
20 and 60000 milliseconds accordingly.
</p><p>
The client application can find the resources declared in Tomcat context.xml using the code below:
</p><div class="example"><a id="d0e3597"></a><p class="title"><strong>Example&#160;E.2.&#160;An example of JNDI lookup for Qpid resources registered in Tomcat JNDI</strong></p><div class="example-contents"><pre class="programlisting">
Context context = new InitialContext();
Context environmentContext = (Context)context.lookup("java:comp/env");
...
ConnectionFactory connectionFactory = (ConnectionFactory) environmentContext.lookup("jms/connectionFactory");
...
Queue queue = (Queue)environmentContext.lookup("jms/queue");
...
Topic topic = (Topic)environmentContext.lookup("jms/topic");
...</pre></div></div><br class="example-break" /><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>
In order to support backward compatibility <code class="literal">AMQConnectionFactory</code> continues to implement
<a class="link" href="http://docs.oracle.com/javase/7/docs/api/javax/naming/spi/ObjectFactory.html" target="_top">javax.naming.spi.ObjectFactory</a>
and can be used to instantiate JNDI resources from
<a class="link" href="http://docs.oracle.com/javase/7/docs/api/javax/naming/Reference.html" target="_top">javax.naming.Reference</a>s.
However, its method <code class="literal">getObjectInstance</code> is marked as <code class="literal">Deprecated</code> and will be
removed in future version of client. For backward compatibility, Qpid JNDI resources can be declared using fully
qualified class names as addresses. That will became unsupported in future version as well.
An example of Tomcat context.xml with declarations of JNDI resources using deprecated factory and addresses is provided below.
</p><div class="example"><a id="d0e3620"></a><p class="title"><strong>Example&#160;E.3.&#160;An example of Tomcat context.xml declaring Qpid JNDI resources using deprecated <code class="literal">ObjectFactory</code> and deprecated addresses</strong></p><div class="example-contents"><pre class="programlisting">
&lt;?xml version='1.0' encoding='utf-8'?&gt;
&lt;!DOCTYPE xml&gt;
&lt;Context&gt;
&lt;Resource name="jms/queue" auth="Container"
type="org.apache.qpid.client.AMQQueue"
factory="org.apache.qpid.client.AMQConnectionFactory"
org.apache.qpid.client.AMQQueue="direct://amq.direct//myDurableQueue?durable='true'"/&gt;
&lt;Resource name="jms/topic" auth="Container"
type="org.apache.qpid.client.AMQTopic"
factory="org.apache.qpid.client.AMQConnectionFactory"
org.apache.qpid.client.AMQTopic="topic://amq.topic//myTopic?routingkey='myTopic'"/&gt;
&lt;Resource name="jms/connectionFactory" auth="Container"
type="org.apache.qpid.client.AMQConnectionFactory"
factory="org.apache.qpid.client.AMQConnectionFactory"
org.apache.qpid.client.AMQConnectionFactory="amqp://guest:guest@clientid/?brokerlist='localhost:5672'"/&gt;
&lt;/Context&gt;</pre></div></div><p><br class="example-break" />
</p></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-8-Appendix-PooledConnecytionFactory.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-8-Appendix-ProducerFlowControl-Impact.html">Next</a></td></tr><tr><td align="left" valign="top" width="40%">Appendix&#160;D.&#160;PooledConnectionFactory&#160;</td><td align="center" width="20%"><a accesskey="h" href="JMS-Client-Book.html">Home</a></td><td align="right" valign="top" width="40%">&#160;Appendix&#160;F.&#160;Impact of Broker enforced Producer Flow Control on Client</td></tr></table></div></div>
<hr/>
<ul id="-apache-navigation">
<li><a href="http://www.apache.org/">Apache</a></li>
<li><a href="http://www.apache.org/licenses/">License</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
<li><a href="/security.html">Security</a></li>
<li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
</ul>
<p id="-legal">
Apache Qpid, Messaging built on AMQP; Copyright &#169; 2015
The Apache Software Foundation; Licensed under
the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
Proton, Apache, the Apache feather logo, and the Apache Qpid
project logo are trademarks of The Apache Software
Foundation; All other marks mentioned may be trademarks or
registered trademarks of their respective owners
</p>
</div>
</div>
</div>
</body>
</html>