3.3. Using the JCA Consumer Endpoint
Procedure
To configure a JCA consumer endpoint do the following:
- Specify the name of the service for which this endpoint is acting as a proxy.This is specified using the
service
attribute. - Specify the name of the endpoint for which this endpoint is acting as a proxy.This is specified using the
endpoint
attribute. - Specify the connection factory the endpoint will use.The endpoint's connection factory is configured using the endpoint's
connectionFactory
attribute. TheconnectionFactory
attribute's value is a reference to the bean that configures the connection factory. For example if the connection factory configuration bean is namedwidgetConnectionFactory
, the value of theconnectionFactory
attribute would be#widgetConnectionFactory
.For information on configuring a connection factory see Chapter 2, Configuring the Connection Factory. - Specify the destination onto which the endpoint will place messages.For more information see the section called “Configuring a destination”.
- Configure the JCA resource adapter that the consumer will use.You configure the endpoint's resource adapter using the
resourceAdapter
attribute. The attribute's value is a reference to the bean that configures the resource adapter. - Configure the
ActivationSpec
object that will be used by the endpoint.You configure the endpoint's resource adapter using theactivationSpec
attribute. The attribute's value is a reference to the bean that configures theActivationSpec
object. - Specify the ESB endpoint to which incoming messages are targeted.For more information see the section called “Specifying the target endpoint”.
- If your JMS destination is a topic, set the
pubSubDomaim
attribute totrue
.
Configuring a destination
A consumer endpoint chooses the destination to use for sending messages with the following algorithm:
- The endpoint will check to see if you configured the destination explicitly.You configure a destination using a Spring bean. You can add the bean directly to the endpoint by wrapping it in a
jms:destination
child element. You can also configure the bean separately and refer the bean using the endpoint'sdestination
attribute as shown in Example 3.9, “Configuring a JCA Consumer's Destination”.Example 3.9. Configuring a JCA Consumer's Destination
<beans xmlns:jms="http://servicemix.apache.org/jms/1.0" ... > ... <jms:jca-consumer service="my:widgetService" endpoint="jbiWidget" destination="#widgetQueue" ... /> ... <jee:jndi-lookup id="widgetQueue" jndi-name="my.widget.queue"> <jee:environment> java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory java.naming.provider.url=t3://localhost:7001 </jee:environment> </jee:jndi-lookup> ... </beans>
- If you did not explicitly configure a destination, the endpoint will use the value of the
destinationName
attribute to choose its destination.The value of thedestinationName
attribute is a string that corresponds to the name of the JMS destination. The binding component's default behavior when you provide a destination name is to resolve the destination using the standard JMSSession.createTopic()
andSession.createQueue()
methods.NoteYou can override the binding component's default behavior by providing a customDestinationResolver
implementation. See Section 7.2, “Using a Custom Destination Resolver”.
Specifying the target endpoint
There are a number of attributes available for configuring the endpoint to which the generated messages are sent. The poller endpoint will determine the target endpoint in the following manner:
- If you explicitly specify an endpoint using both the
targetService
attribute and thetargetEndpoint
attribute, the ESB will use that endpoint.ThetargetService
attribute specifies the QName of a service deployed into the ESB. ThetargetEndpoint
attribute specifies the name of an endpoint deployed by the service specified by thetargetService
attribute. - If you only specify a value for the
targetService
attribute, the ESB will attempt to find an appropriate endpoint on the specified service. - If you do not specify a service name or an endpoint name, you must specify an the name of an interface that can accept the message using the
targetInterface
attribute. The ESB will attempt to locate an endpoint that implements the specified interface and direct the messages to it.Interface names are specified as QNames. They correspond to the value of thename
attribute of either a WSDL 1.1serviceType
element or a WSDL 2.0interface
element.
Important
If you specify values for more than one of the target attributes, the consumer endpoint will use the most specific information.
Example
Example 3.10, “Basic Configuration for a JCA Consumer Endpoint” shows the configuration for a JCA consumer endpoint.
Example 3.10. Basic Configuration for a JCA Consumer Endpoint
<beans xmlns:jms="http://servicemix.apache.org/jms/1.0" ... > ... <jms:jca-consumer service="my:widgetService" endpoint="jbi" destinationName="widgetQueue" connectionFactory="#connectionFactory" resourceAdapter="#ra" activationSpec="#as" targetService="my:targetService" /> <bean id="ra" class="org.activemq.ra.ActiveMQConnectionFactory"> ... </bean> <bean id="as" class="org.apache.activemq.ra.ActiveMQActivationSpec"> ... </bean> ... </beans>