2.2. Using JNDI
Overview
Many JMS providers store a reference to their connection factory in a JNDI service to ease retrieval. Red Hat JBoss Fuse allows developers to choose between a straight JNDI look-up and using Spring JNDI templates. Which mechanism you choose will depend on your environment.
Spring JEE JNDI lookup
Spring provides a built-in JNDI look-up feature that can be used to retrieve the connection factory for a JMS provider. To use the built-in JNDI look-up do the following:
- Add the following namespace declaration to your
beans
element in your service unit's configuration.xmlns:jee="http://www.springframework.org/schema/jee"
- Add a
jee:jndi-lookup
element to your service unit's configuration.Thejee:jndi-lookup
element has two attributes. They are described in Table 2.4, “Attributes for Using Spring's JEE JNDI Lookup”. - Add a
jee:environment
child element to thejee:jndi-lookup
element.Thejee:environment
element contains a collection of Java properties that are used to access the JNDI provider. These properties will be provided by your JNDI provider's documentation.
Example 2.4, “Getting the WebLogic Connection Factory Using Spring's JEE JNDI Look-up” shows a configuration snippet for using the JNDI look-up with WebLogic.
Example 2.4. Getting the WebLogic Connection Factory Using Spring's JEE JNDI Look-up
<beans xmlns:jee="http://www.springframework.org/schema/jee" ... > ... <jee:jndi-lookup id="connectionFactory" jndi-name="weblogic.jms.XAConnectionFactory"> <jee:environment> java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory java.naming.provider.url=t3://localhost:7001 </jee:environment> </jee:jndi-lookup> ... </beans>
Spring JNDI Templates
Another approach to using JNDI to get a reference to a JMS connection factory is to use the Spring framework's
JndiTemplate
bean. Using this approach, you configure an instance of the JndiTemple
bean and then use the bean to perform all of your JNDI look-ups using a JndiObjectFactoryBean
bean.
To get the JMS connection factory using a Spring JNDI template do the following:
- Add a
bean
element to your configuration for the JNDI template.- Set the
bean
element'sid
attribute to a unique identifier. - Set the
bean
element'sclass
attribute toorg.springframework.jndi.JndiTemplate
. - Add a
property
child element to thebean
element.Theproperty
element will contain the properties for accessing the JNDI provider. - Set the
property
element'sname
attribute toenvironment
. - Add a
props
child to theproperty
element. - Add a
prop
child element to theprops
element for each Java property needed to connect to the JNDI provider.Aprop
element has a single attribute calledkey
whose value is the name of the Java property being set. The value of the element is the value of the Java property being set. Example 2.5, “Setting a Java Property” shows aprop
element for setting the java.naming.factory.initial property.Example 2.5. Setting a Java Property
<prop key="java.naming.factory.initial"> com.sun.jndi.fscontext.RefFSContextFactory </prop>
NoteThe properties you need to set will be determined by your JNDI provider. Check its documentation.
- Add a
bean
element to your configuration to retrieve the JMS connection factory using the JNDI template.- Set the
bean
element'sid
attribute to a unique identifier. - Set the
bean
element'sclass
attribute toorg.springframework.jndi.JndiObjectFactoryBean
. - Add a
property
child element to thebean
element.Thisproperty
element loads the JNDI template to be used for the look-up. You must set itsname
attribute tojndiTemplate
. The value of itsref
attribute is taken from thename
attribute of thebean
element that configured the JNDI template. - Add a second
property
child element to thebean
element.Thisproperty
element specifies the JNDI name of the connection factory. You must set itsname
attribute tojndiTemplate
. - Add a
value
child element to theproperty
element.The value of the element is the JNDI name of the connection factory.
Example 2.6, “Using a JNDI Template to Look Up a Connection Factory” shows a configuration fragment for retrieving the WebSphere MQ connection factory using Sun's reference JNDI implementation.
Example 2.6. Using a JNDI Template to Look Up a Connection Factory
<beans ... > ... <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> <property name="environment"> <props> <prop key="java.naming.factory.initial"> com.sun.jndi.fscontext.RefFSContextFactory </prop> <prop key="java.naming.provider.url"> file:/tmp/ </prop> </props> </property> </bean> <bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiTemplate" ref="jndiTemplate" /> <property name="jndiName"> <value>MQConnFactory</value> </property> </bean> ... </beans>