[ 
https://issues.apache.org/jira/browse/QPID-6556?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14558305#comment-14558305
 ] 

Alex Rudyy edited comment on QPID-6556 at 5/25/15 2:54 PM:
-----------------------------------------------------------

Qpid Client destinations and connection factories can be registered in external 
JNDI containers, for example Tomcat JNDI implementation.
AMQConnectionFactory implements "javax.naming.spi.ObjectFactory" interface 
allowing to instantiate instances of  AMQConnectionFactory , AMQConnection, 
AMQQueue and AMQTopic in external JNID container from  javax.naming.References. 
Additionally, AMQConnectionFactory and AMQDestination (parent of AMQQueue and 
AMQTopic) implement javax.naming.Referenceable interface allowing creation of 
javax.naming.Reference to itself for binding in external JNDI implementations.

AMQConnectionFactory allows to create:
* an instance of ConnectionFactory from a References containing reference 
address (RefAddr) of type "org.apache.qpid.client.AMQConnectionFactory" with a 
content set to Connection URL
* an instance of Connection from a References containing reference address 
(RefAddr) of type "org.apache.qpid.client.AMQConnection" with a content set to 
Connection URL
* an instance of of AMQQueue from a References containing reference address 
(RefAddr) of type "org.apache.qpid.client.AMQQueue" with a content set to a 
destination Binding URL
* an instance of of AMQTopic from a References containing reference address 
(RefAddr) of type "org.apache.qpid.client.AMQTopic" with a content set to a 
destination Binding URL

An example below demonstrates how to create JNDI resources in Tomcat container 
using Resource declartion in context.xml(usually added into war under 
/META-INF/context.xml ).
{code:xml}
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE xml>
<Context>

  <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'"/>

  <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'"/>

  <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?routingkey='myTopic'"/>

</Context>
{code}

In the example above ConnectionFactory would be registered under JNDI name 
"jms/connectionFactory", queue "myDurableQueue" would be resitered under JNDI 
name "jms/queue" and JMS topic destination "myTopic" would be registered under 
JNDI name "jms/topic". (All resources will be bound under "java:comp/env").

The client application can find the resources declared in Tomcat context.xml 
using the code below:
{code}
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");
...
{code}

{panel}
Note that AMQDestination (parent of AMQQueue and AMQTopic) implements 
Externalizable allowing to serialize Address based and BURL based destinations. 
At the moment only BURL-based destinations can be registered in external JNDI 
container.
{panel}



was (Author: alex.rufous):
Qpid Client destinations and connection factories can be registered in external 
JNDI containers, for example Tomcat JNDI implementation.
AMQConnectionFactory implements "javax.naming.spi.ObjectFactory" interface 
allowing to instantiate instances of  AMQConnectionFactory , AMQConnection, 
AMQQueue and AMQTopic in external JNID container from  javax.naming.References. 
Additionally, AMQConnectionFactory and AMQDestination (parent of AMQQueue and 
AMQTopic) implement javax.naming.Referenceable interface allowing creation of 
javax.naming.Reference to itself for binding in external JNDI implementations.

AMQConnectionFactory allows to create:
* an instance of ConnectionFactory from a References containing reference 
address (RefAddr) of type "org.apache.qpid.client.AMQConnectionFactory" with a 
content set to Connection URL
* an instance of Connection from a References containing reference address 
(RefAddr) of type "org.apache.qpid.client.AMQConnection" with a content set to 
Connection URL
* an instance of of AMQQueue from a References containing reference address 
(RefAddr) of type "org.apache.qpid.client.AMQQueue" with a content set to a 
destination Binding URL
* an instance of of AMQTopic from a References containing reference address 
(RefAddr) of type "org.apache.qpid.client.AMQTopic" with a content set to a 
destination Binding URL

An example below demonstrates how to create JNDI resources in Tomcat container 
using Resource declartion in context.xml(usually added into war under 
/META-INF/context.xml ).
{code:xml}
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE xml>
<Context>

  <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'"/>

  <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'"/>

  <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?routingkey='myTopic'"/>

</Context>
{code}

In the example above ConnectionFactory would be registered under JNDI name 
"jms/connectionFactory", queue "myDurableQueue" would be resitered under JNDI 
name "jms/queue" and JMS topic destination "myTopic" would be registered under 
JNDI name "jms/topic". (All resources will be bound under "java:comp/env").

The client application can find the resources declared in Tomcat context.xml 
using the code below:
{code}
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");
...
{code}

{note}
Note that AMQDestination (parent of AMQQueue and AMQTopic) implements 
Externalizable allowing to serialize Address based and BURL based destinations. 
At the moment only BURL-based destinations can be registered in external JNDI 
container.
{note}


> Document how to bind JMS client destinations and connection factories into 
> Tomcat JNDI 
> ---------------------------------------------------------------------------------------
>
>                 Key: QPID-6556
>                 URL: https://issues.apache.org/jira/browse/QPID-6556
>             Project: Qpid
>          Issue Type: Task
>          Components: Documentation
>            Reporter: Alex Rudyy
>            Assignee: Alex Rudyy
>             Fix For: 6.0 [Java]
>
>
> Qpid JMS client AMQConnectionFactory implements 
> javax.naming.spi.ObjectFactory allowing a creation of connection factory 
> instances and destination instances in external JNDI container.
> There is no documentation at the moment about how to integrate Qpid JMS 
> client into JNDI containers. The aim of this JIRA is to add an section into 
> Qpid JMS client documentation about how to integrate  Qpid JMS client into 
> Tomcat Web container JNDI.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to