LibraryPrintFeedback

Using the JMS Binding Component

Version 7.1

December 2012
Trademark Disclaimer
Third Party Acknowledgements

Updated: 08 Jan 2014

Table of Contents

1. Introduction to the Fuse ESB Enterprise JMS Binding Component
2. Configuring the Connection Factory
Using Apache ActiveMQ and Apache ActiveMQ Connection Factories
Using JNDI
Using a Spring Bean
3. Creating a Consumer Endpoint
Introduction to Consumer Endpoints
Using the Generic Endpoint or the SOAP Endpoint
Basic Configuration
Listener Containers
Advanced Configuration
SOAP Specific Configuration
Using the JCA Consumer Endpoint
Configuring How Replies are Sent
Configuring the Reply Destination
Configuring the Qualities of Service
Setting Custom JMS Properties
4. Creating a Provider Endpoint
Introduction to Provider Endpoints
Basic Configuration
Configuring How Responses are Received
Advanced Provider Configuration
JMS Message Qualities of Service
JMS Message Optimization
SOAP Specific Configuration
5. Making Endpoints Stateful
6. Working with Message Marshalers
Consumer Marshalers
Provider Marshalers
7. Implementing Destination Resolving Logic
Using a Custom Destination Chooser
Using a Custom Destination Resolver
A. Consumer Endpoint Properties
Common Properties
Properties Specific to Generic Consumers and SOAP Consumers
Properties Specific to a JCA Consumer
B. Provider Endpoint Properties
Common Properties
Properties Specific to SOAP Providers
C. Using the Maven JBI Tooling
Setting up a Fuse ESB Enterprise JBI project
A service unit project
A service assembly project
D. Using the Maven OSGi Tooling
Setting up a Fuse ESB Enterprise OSGi project
Configuring the Bundle Plug-In
Index

List of Figures

3.1. Consumer Endpoint
4.1. Provider Endpoint

List of Tables

2.1. Attributes for Configuring the Simple AMQPool Connection Factory
2.2. Attributes for Configuring the XA AMQPool Connection Factory
2.3. Attributes for Configuring the JCA AMQPool Connection Factory
2.4. Attributes for Using Spring's JEE JNDI Lookup
3.1. Values for Configuring a Consumer's Listener Container
3.2. Attributes Used to Performance Tune Standard JMS Consumers and SOAP JMS Consumers
3.3. Consumer Transaction Support
5.1. Properties Used to Configure a JDBC Store Factory
A.1. Common Consumer Endpoint Property Attributes
A.2. Common Consumer Endpoint Property Beans
A.3. Attributes Uses to Configure Standard JMS Consumers and SOAP JMS Consumers
A.4. Elements Uses to Configure Standard JMS Consumers and SOAP JMS Consumers
A.5. Attributes for the JMS SOAP Consumer
A.6. Elements Used to Configure a JCA Consumer
B.1. Common Provider Endpoint Property Attributes
B.2. Common Provider Endpoint Property Beans
B.3. Attributes Used to Configure SOAP JMS Providers
B.4. Elements Used to Configure SOAP JMS Providers
C.1. Service unit archetypes

List of Examples

1.1. JBI Descriptor for a JMS Service Unit
1.2. Namespace Declaration for Using JMS Endpoints
1.3. Schema Location for Using JMS Endpoints
2.1. Configuring a Simple AMQPool Connection Factory
2.2. Configuring an XA AMQPool Connection Factory
2.3. Configuring a JCA AMQPool Connection Factory
2.4. Getting the WebLogic Connection Factory Using Spring's JEE JNDI Look-up
2.5. Setting a Java Property
2.6. Using a JNDI Template to Look Up a Connection Factory
2.7. Configuring a Connection Factory with a Spring Bean
3.1. Configuring a Consumer's Destination
3.2. Basic Configuration for a Generic Consumer Endpoint
3.3. Basic Configuration for a SOAP Consumer Endpoint
3.4. Configuring a SOAP Consumer to Use the Simple Listener Container
3.5. Tuning a Generic Consumer Endpoint
3.6. Configuring a Consumer to Use a Pooled Session Factory
3.7. Consumer using a Durable Subscription
3.8. Configuring a SOAP Consumer to Use the JBI Wrapper
3.9. Configuring a JCA Consumer's Destination
3.10. Basic Configuration for a JCA Consumer Endpoint
3.11. Configuring a Consumer's Reply Destination
3.12. Consumer with Reply QoS Properties
3.13. Adding Custom Properties to a Reply Message
4.1. Configuring a Provider's Destination
4.2. Basic Configuration for a Generic Provider Endpoint
4.3. Basic Configuration for a SOAP Provider Endpoint
4.4. JMS Provider Endpoint with a Response Destination
4.5. Setting JMS Provider Endpoint Message Properties
4.6. Configuring a SOAP Provider to Use the JBI Wrapper
5.1. Configuring a Statefull JMS Provider Endpoint
6.1. The Consumer Marshaler Interface
6.2. Consumer Marshaler Implementation
6.3. Configuring a Consumer to Use a Customer Marshaler
6.4. The Provider Marshaler Interface
6.5. Provider Marshaler Implementation
6.6. Configuring a Provider to Use a Customer Marshaler
7.1. Destination Chooser Method
7.2. Simple Destination Chooser
7.3. Configuring a Destination Chooser with a Bean Reference
7.4. Explicitly Configuring a Destination Chooser
7.5. Destination Resolver Method
7.6. Simple Destination Resolver
7.7. Configuring a Destination Resolver with a Bean Reference
7.8. Explicitly Configuring a Destination Resolver
C.1. POM elements for using Fuse ESB Enterprise Maven tooling
C.2. Top-level POM for a Fuse ESB Enterprise JBI project
C.3. Maven archetype command for service units
C.4. Configuring the maven plug-in to build a service unit
C.5. Specifying the target components for a service unit
C.6. Specifying a target component for a service unit
C.7. POM file for a service unit project
C.8. Maven archetype command for service assemblies
C.9. Configuring the Maven plug-in to build a service assembly
C.10. Specifying the target components for a service unit
C.11. POM for a service assembly project
D.1. Adding an OSGi bundle plug-in to a POM
D.2. Setting a bundle's symbolic name
D.3. Setting a bundle's name
D.4. Setting a bundle's version
D.5. Including a private package in a bundle
D.6. Specifying the packages imported by a bundle

A service unit that configures the JMS binding component will contain two artifacts:

xbean.xml

The xbean.xml file contains the XML configuration for the endpoint defined by the service unit. The contents of this file are the focus of this guide.

[Note]Note

The service unit can define more than one endpoint.

meta-inf/jbi.xml

The jbi.xml file is the JBI descriptor for the service unit. Example 1.1 shows a JBI descriptor for a JMS service unit.

Example 1.1. JBI Descriptor for a JMS Service Unit

<jbi xmlns="http://java.sun.com/xml/ns/jbi" version="1.0">
  <services binding-component="false" 1
            xmlns:b="http://servicemix.apache.org/samples/bridge"> 2
    <provides service-name="b:jms" 3
              endpoint-name="endpoint"/> 4
    <consumes interface-name="b:MyConsumerInterface"/>  5
  </services>
</jbi>

The elements shown in Example 1.1 do the following:

1

The service element is the root element of all service unit descriptors. The value of the binding-component attribute is always false.

2

The service element contains namespace references for all of the namespaces defined in the xbean.xml file's bean element.

3

The provides element corresponds to a JMS provider endpoint. The service-name attribute derives its value from the service attribute in the JMS provider's configuration.

[Note]Note

This attribute can also appear on a consumes element.

4

The endpoint-name attribute derives its value from the endpoint attribute in the JMS provider's configuration.

[Note]Note

This attribute can also appear on a consumes element.

5

The consumes element corresponds to a JMS consumer endpoint. The interface-name attribute derives its value from the interfaceName attribute in the JMS consumer's configuration.

[Note]Note

This attribute can also appear on a provides element.

The Fuse ESB Enterprise Maven tooling provides two archetypes for seeding a project whose result is a service unit for the JMS binding component:

The resulting project will contain two generated artifacts:

If you want to add custom marshalers, custom destination choosers, or other custom Java code, you must add a java folder to the generated src folder. You also need to modify the generated pom.xml file to compile the code and package it with the service unit.

When working with a JMS broker, a client application needs a ConnectionFactory object to create connections to the broker. The ConnectionFactory object is a JMS object that is provided along with the JMS broker. Each JMS provider has a unique ConnectionFactory object that uses properties specific to a particular JMS implementation.

When using the Fuse ESB Enterprise JMS binding component, you must configure each service unit with the information it needs to load a ConnectionFactory object. Often the ConnectionFactory object is looked up through JNDI. However, the information needed depends on the JMS provider you are using.

Commonly used JMS providers include Apache ActiveMQ, Apache ActiveMQ, IBM's WebShere® MQ, BEA's WebLogic®, and Progress Software's SonicMQ®. Apache ActiveMQ and Apache ActiveMQ can be configured using simple Spring XML. Other JMS providers must be configured using either JNDI or using custom Spring beans. This chapter provides basic information for configuring the ConnectionFactory objects for each of these platforms.

The recommended method for creating connections to Apache ActiveMQ, or Apache ActiveMQ, is by using the Jencks AMQPool. It provides support for using a scalable pool of connections for managing overhead. You can download the needed jar from http://repo1.maven.org/maven2/org/jencks/jencks-amqpool/2.0/jencks-amqpool-2.0.jar. Once the jar is downloaded, you need to add it to your classpath. The easiest way to do this is to place the jar into your InstallDir\lib folder.

[Note]Note

The examples included with Fuse ESB Enterprise use the standard Apache ActiveMQ connection factory. This is fine for testing purposes, but is not robust enough for enterprise deployments.

The Jencks AMQPool supplies three connection factories:

The JCA pooling connection factory is intended to be used inside of J2EE environments or in conjunction with the Jencks JCA environment. It is specified using the amqpool:jca-pool element. The attributes used to configure the JCA pooled connection factory are described in Table 2.3.


Example 2.3 shows a configuration snippet for configuring the JCA AMQPool connection factory.


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:

  1. Add a bean element to your configuration for the JNDI template.

    1. Set the bean element's id attribute to a unique identifier.

    2. Set the bean element's class attribute to org.springframework.jndi.JndiTemplate.

    3. Add a property child element to the bean element.

      The property element will contain the properties for accessing the JNDI provider.

    4. Set the property element's name attribute to environment.

    5. Add a props child to the property element.

    6. Add a prop child element to the props element for each Java property needed to connect to the JNDI provider.

      A prop element has a single attribute called key 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 shows a prop element for setting the java.naming.factory.initial property.


      [Note]Note

      The properties you need to set will be determined by your JNDI provider. Check its documentation.

  2. Add a bean element to your configuration to retrieve the JMS connection factory using the JNDI template.

    1. Set the bean element's id attribute to a unique identifier.

    2. Set the bean element's class attribute to org.springframework.jndi.JndiObjectFactoryBean.

    3. Add a property child element to the bean element.

      This property element loads the JNDI template to be used for the look-up. You must set its name attribute to jndiTemplate. The value of its ref attribute is taken from the name attribute of the bean element that configured the JNDI template.

    4. Add a second property child element to the bean element.

      This property element specifies the JNDI name of the connection factory. You must set its name attribute to jndiTemplate.

    5. Add a value child element to the property element.

      The value of the element is the JNDI name of the connection factory.

Example 2.6 shows a configuration fragment for retrieving the WebSphere MQ connection factory using Sun's reference JNDI implementation.


To configure a generic consumer or a SOAP consumer do the following:

  1. Decide what type of consumer endpoint to use.

    See Types of consumer endpoints.

  2. Specify the name of the service for which this endpoint is acting as a proxy.

    This is specified using the service attribute.

    [Tip]Tip

    If you are using a SOAP consumer and your WSDL file only has one service defined, you do not need to specify the service name.

  3. Specify the name of the endpoint for which this endpoint is acting as a proxy.

    This is specified using the endpoint attribute.

    [Tip]Tip

    If you are using a SOAP consumer and your WSDL file only has one endpoint defined, you do not need to specify the endpoint name.

  4. Specify the connection factory the endpoint will use.

    The endpoint's connection factory is configured using the endpoint's connectionFactory attribute. The connectionFactory attribute's value is a reference to the bean that configures the connection factory. For example, if the connection factory configuration bean is named widgetConnectionFactory, the value of the connectionFactory attribute would be #widgetConnectionFactory.

    For information on configuring a connection factory see Configuring the Connection Factory.

  5. Specify the destination onto which the endpoint will place messages.

    For more information see Configuring a destination.

  6. Specify the ESB endpoint to which incoming messages are targeted.

    For more information see Specifying the target endpoint.

  7. If you are using a JMS SOAP consumer, specify the location of the WSDL defining the message exchange using the wsdl attribute.

  8. If your JMS destination is a topic, set the pubSubDomaim attribute to true.

  9. If your endpoint is interacting with a broker that only supports JMS 1.0.2, set the jms102 attribute to true.

A consumer endpoint chooses the destination to use for sending messages with the following algorithm:

There are several ways of tuning the performance of a generic consumer endpoint or a SOAP consumer endpoint. They are all controlled by the listener container used by the endpoint.

Table 3.2 describes the attributes used to tune endpoint performance.


Example 3.5 shows an example of a generic consumer that allows consumer level message caching and only tries once to receive a message.


The server session listener container uses the JMS ServerSessionPool SPI to tune an endpoint's performance. In order for the listener container to function,k it uses a ServerSessionFactory object. By default, the Fuse ESB Enterprise JMS BC uses the Spring framework's SimpleServerSessionFactory object. This server session factory creates a new JMS ServerSession object with a new JMS session everytime it is called.

You can configure the endpoint to use a different server session factory using the serverSessionFactory attribute. This attribute provides a reference to the bean configuring the ServerSessionFactory object.

[Note]Note

You can also explicitly configure the endpoint's ServerSessionFactory object by adding a serverSessionFactory child element to the endpoint's configuration. This element would wrap the ServerSessionFactory object's configuration bean.

Example 3.6 shows an example of configuring an endpoint to use the Spring framework's CommonsPoolServerSessionFactory object as a session factory.


To configure a JCA consumer endpoint do the following:

  1. Specify the name of the service for which this endpoint is acting as a proxy.

    This is specified using the service attribute.

  2. Specify the name of the endpoint for which this endpoint is acting as a proxy.

    This is specified using the endpoint attribute.

  3. Specify the connection factory the endpoint will use.

    The endpoint's connection factory is configured using the endpoint's connectionFactory attribute. The connectionFactory attribute's value is a reference to the bean that configures the connection factory. For example if the connection factory configuration bean is named widgetConnectionFactory, the value of the connectionFactory attribute would be #widgetConnectionFactory.

    For information on configuring a connection factory see Configuring the Connection Factory.

  4. Specify the destination onto which the endpoint will place messages.

    For more information see Configuring a destination.

  5. 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.

  6. Configure the ActivationSpec object that will be used by the endpoint.

    You configure the endpoint's resource adapter using the activationSpec attribute. The attribute's value is a reference to the bean that configures the ActivationSpec object.

  7. Specify the ESB endpoint to which incoming messages are targeted.

    For more information see Specifying the target endpoint.

  8. If your JMS destination is a topic, set the pubSubDomaim attribute to true.

A consumer endpoint chooses the destination to use for sending messages with the following algorithm:

If your endpoint is participating in in/out message exchanges, or exceptions need to be returned to the external endpoint, you need to configure how your endpoint will handle the reply messages. You can configure the JMS destination used to send the reply and how the endpoint specifies the reply message's correlation ID. In addition, you can specify a number of QoS settings including:

You can also specify a number of custom properties to place in a reply message's JMS header.

Consumer endpoints use the following algorithm to determine the reply destination for a message exchange:

  1. If the in message of the exchange includes a value for the JMSReplyTo property, that value is used as the reply destination.

  2. If the JMSReplyTo is not specified, the endpoint looks for a destination chooser implementation to use.

    If you have configured your endpoint with a destination chooser, the endpoint will use the destination chooser to select the reply destination.

    For more information on using destination choosers see Using a Custom Destination Chooser.

  3. If the JMSReplyTo is not specified and there is no configured destination chooser, the endpoint checks its replyDestination attribute for a destination.

    You configure a destination using a Spring bean. The recommend method to configure the destination is to configure the bean separately and refer the bean using the endpoint's replyDestination attribute as shown in Example 3.11. You can also add the bean directly to the endpoint by wrapping it in a jms:replyDestination child element.

  4. As a last resort, the endpoint will use the value of the replyDestinationName attribute to determine the reply destination.

    The replyDestinationName attribute takes a string that is used as the name of the destination to use. The binding component's default behavior when you provide a destination name is to resolve the destination using the standard JMS Session.createTopic() and Session.createTopic() methods to resolve the JMS destination.

    [Note]Note

    You can override the binding component's default behavior by providing a custom DestinationResolver implementation. See Using a Custom Destination Resolver.

To configure a provider endpoint do the following:

  1. Decide what type of provider endpoint to use.

    See Types of providers.

  2. Specify the name of the service for which this endpoint is acting as a proxy.

    This is specified using the service attribute.

    [Tip]Tip

    If you are using a SOAP provider and your WSDL file only has one service defined, you do not need to specify the service name.

  3. Specify the name of the endpoint for which this endpoint is acting as a proxy.

    This is specified using the endpoint attribute.

    [Tip]Tip

    If you are using a SOAP provider and your WSDL file only has one endpoint defined, you do not need to specify the endpoint name.

  4. Specify the connection factory the endpoint will use.

    The endpoint's connection factory is configured using the endpoint's connectionFactory attribute. The connectionFactory attribute's value is a reference to the bean that configures the connection factory. For example, if the connection factory configuration bean is named widgetConnectionFactory, the value of the connectionFactory attribute would be #widgetConnectionFactory.

    For information on configuring a connection factory see Configuring the Connection Factory.

  5. Specify the destination onto which the endpoint will place messages.

    For more information see Configuring a destination.

  6. If you are using a JMS SOAP provider, specify the location of the WSDL defining the message exchange using the wsdl attribute.

  7. If your JMS destination is a topic, set the pubSubDomaim attribute to true.

  8. If your endpoint is interacting with a broker that only supports JMS 1.0.2, set the jms102 attribute to true.

A provider endpoint chooses the destination to use for sending messages with the following algorithm:

  1. If you provided a custom DestinationChooser implementation, the endpoint will use that to choose it's endpoint.

    For more information about providing custom DestinationChooser implementations see Using a Custom Destination Chooser.

  2. If you did not provide a custom DestinationChooser implementation, the endpoint will use its default DestinationChooser implementation to choose an endpoint.

    The default destination chooser checks the message exchange received from the NMR for a DESTINATION_KEY property. If the message exchange has that property set, it returns that destination.

  3. If the destination chooser does not return a destination, the endpoint will check to see if you configured the destination explicitly.

    You configure a destination using a Spring bean. The recommend way to configure the destination is to configure the bean separately and refer the bean using the endpoint's destination attribute as shown in Example 4.1. You can also add the bean directly to the endpoint by wrapping it in a jms:destination child element.


  4. If the destination chooser does not return a destination and you did not explicitly configure a destination, the endpoint will use the value of the destinationName attribute to choose its destination.

    The destinationName attribute takes a string that is used as the name of the destination to use. The binding component's default behavior when you provide a destination name is to resolve the destination using the standard JMS Session.createTopic() and Session.createQueue() methods to resolve the JMS destination.

    [Note]Note

    You can override the binding component's default behavior by providing a custom DestinationResolver implementation. See Using a Custom Destination Resolver.

An endpoint chooses the destination to use for receiving responses with the following algorithm:

  1. If you provided a custom DestinationChooser implementation, the endpoint will use that to choose it's endpoint.

    For more information about providing custom DestinationChooser implementations see Using a Custom Destination Chooser.

  2. If you did not provide a custom DestinationChooser implementation, the endpoint will use its default DestinationChooser implementation to choose an endpoint.

    The default destination chooser checks the message exchange received from the NMR for a DESTINATION_KEY property. If the message exchange has that property set, it returns that destination.

  3. If the destination chooser does not return a destination, the endpoint will check to see if you configured the destination explicitly.

    You configure a response destination using a Spring bean. The recommend way to configure the destination is to configure the bean separately and refer the bean using the endpoint's replyDestination attribute as shown in Example 4.1. You can also add the bean directly to the endpoint by wrapping it in a jms:replyDestination child element.

  4. If the destination chooser does not return a destination and you did not explicitly configure a destination, the endpoint will use the value of the replyDestinationName attribute to choose its destination.

    The replyDestinationName attribute takes a string that is used as the name of the destination to use. The binding component's default behavior when you provide a destination name is to resolve the destination using the standard JMS Session.createTopic() and Session.createTopic() methods to resolve the JMS destination.

    [Note]Note

    You can override the binding component's default behavior by providing a custom DestinationResolver implementation. See Using a Custom Destination Resolver.

The fragment in Example 5.1 shows the configuration needed for a stateful JMS provider endpoint using MySQL as a JDBC accessible datastore.

Example 5.1. Configuring a Statefull JMS Provider Endpoint

<jms:provider service="tns:widgetServer"
              endpoint="widgetPort"
              storeFactory="#storeFactory"> 1
              stateless="false" /> 2

<bean id="storeFactory" 3
      class="org.apache.servicemix.store.jdbc.JdbcStoreFactory">
  <property name="clustered" value="true"/>
  <property name="dataSource">
    <ref local="mysql-ds"/>
  </property>
</bean>

<bean id="mysql-ds" 4
      class="com.mchange.v2.c3p0.ComboPooledDataSource"
      destroy-method="close">
  <property name="driverClass" value="com.mysql.jdbc.Driver"/>
  <property name="jdbcUrl"
            value="jdbc:mysql://localhost:3306/activemq?relaxAutoCommit=true"/>
  <property name="user" value="activemq"/>
  <property name="password" value="activemq"/>
  <property name="minPoolSize" value="5"/>
  <property name="maxPoolSize" value="10"/>
  <property name="acquireIncrement" value="3"/>
  <property name="autoCommitOnClose" value="false"/>
</bean>

The fragment in Example 5.1 does the following:

1

Configures the endpoint's store factory by providing a reference to the bean configuring the factory.

2

Configures the endpoint to store a copy of the current message in the datastore.

3

Configures the JDBC factory store to create a datastore that can be accessed by a cluster of endpoints.

4

Configures the MySQL JDBC driver.

To create a custom consumer marshaler, you implement the org.apache.servicemix.jms.endpoints.JmsConsumerMarshaler interface. The JmsConsumerMarshaler interface, shown in Example 6.1, has five methods that need implementing:


createContext()

The createContext() method takes the JMS message and returns an object that implements the JmsContext interface.

createExchange()

The createExchange() creates a message exchange using the JMS message and the JBI context. Creating a message exchange entails the creation of the exchange, populating the exchange's in message, specifying the message exchange pattern to use, and setting any other required properties.

createOut()

The createOut() method takes the response message from the message exchange and converts it into a JMS message. The method takes the message exchange, the outgoing message, the active JMS session, and the JMS context.

createFault()

The createFault() method is called if a fault message is returned. It takes the message exchange, the fault message, the active JMS session, and the JMS context and returns a JMS message that encapsulates the fault message.

createError()

The createError() method is called if an exception is thrown while the message exchange is being processed. It takes the message exchange, the exception, the active JMS session, and the JMS context and returns a JMS message that encapsulates the exception.

In addition to implementing the methods, you need to provide an implementation of the JmsContext interface. The JmsContext interface has a single method called getMessage() which returns the JMS message contained in the context.

Example 6.2 shows a simple consumer marshaler implementation.

Example 6.2. Consumer Marshaler Implementation

package com.widgetVendor.example;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import javax.jbi.component.ComponentContext;
import javax.jbi.messaging.Fault;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.NormalizedMessage;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.xml.transform.Source;

import org.apache.servicemix.jbi.jaxp.SourceTransformer;
import org.apache.servicemix.jbi.jaxp.StringSource;
import org.apache.servicemix.jbi.messaging.MessageExchangeSupport;

public class widgetConsumerMarshaler implements JmsConsumerMarshaler 
{
    public JmsContext createContext(Message message) throws Exception
    {
        return new Context(message);
    }

    public MessageExchange createExchange(JmsContext jmsContext, ComponentContext jbiContext) throws Exception 
    {
        Context ctx = (Context) jmsContext;
        MessageExchange exchange = jbiContext.getDeliveryChannel().createExchangeFactory().createExchange(MessageExchangeSupport.IN_ONLY);
        NormalizedMessage inMessage = exchange.createMessage();
        TextMessage textMessage = (TextMessage) ctx.message;
        Source source = new StringSource(textMessage.getText());
        inMessage.setContent(source);
        exchange.setMessage(inMessage, "in");
        return exchange;
    }

    public Message createOut(MessageExchange exchange, NormalizedMessage outMsg, Session session, JmsContext context) throws Exception 
    {
        String text = new SourceTransformer().contentToString(outMsg);
        return session.createTextMessage(text);
    }

    public Message createFault(MessageExchange exchange, Fault fault, Session session, JmsContext context) throws Exception
    {
        String text = new SourceTransformer().contentToString(fault);
        return session.createTextMessage(text);
    }

    public Message createError(MessageExchange exchange, Exception error, Session session, JmsContext context) throws Exception
    {
        throw error;
    }

    protected static class Context implements JmsContext
    {
        Message message;

        Context(Message message)
        {
          this.message = message;
        }

        public Message getMessage()
        {
            return this.message;
        }
    }

}

To create a custom provider marshaler, you implement the org.apache.servicemix.jms.endpoints.JmsProviderMarshaler interface. The JmsProviderMarshaler interface, shown in Example 6.4, has two methods you need to implement:


createMessage()

The createMessage() method uses information from the Fuse ESB Enterprise core to generate a JMS message. Its parameters include the message exchange, the normalized message that is received by the provider, and the active JMS session.

populateMessage()

The populateMessage() method takes a JMS message and adds it to a message exchange for use by the Fuse ESB Enterprise core.

Example 6.5 shows a simple provider marshaler implementation.


It may not always be appropriate to hard code destinations into applications. Instead, you may want to allow the endpoints to dynamically discover the JMS destinations. The Fuse ESB Enterprise JMS binding component provides two mechanisms for endpoints to dynamically discover destinations:

destination choosers

Destination choosers are specific to the Fuse ESB Enterprise JMS binding component. They are the first mechanism used by an endpoint when it trys to pick a JMS destination.

Destination choosers implement the org.apache.servicemix.jms.endpoints.DestinationChooser interface.

destination resolvers

Destination resolvers are part of the Spring JMS framework. They are used when the JMS destination is specified using a string. This can happen if either the destination chooser returns a string or if the endpoint's destination is configured using the destinationName attribute.

Destination resolvers implement the org.springframework.jms.support.destination.DestinationResolver interface.

Destination choosers implement the org.apache.servicemix.jms.endpoints.DestinationChooser interface. This interface has a single method: chooseDestination().

chooseDestination(), whose signature is shown in Example 7.1, takes the JBI message exchange and a copy of the message. It returns either a JMS Destination object or a string representing the destination name.

[Note]Note

If the destination chooser returns a string, the endpoint will use a destination resolver to convert the string into a JMS destination. See Using a Custom Destination Resolver.


The message parameter can be either of the following type of object:

  • javax.jbi.messaging.NormalizedMessage

  • javax.jbi.messaging.Fault

  • Exception

Example 7.2 shows a simple destination chooser implementation. It checks the message for a property that represents the JMS destination on which the request is to be placed.


You can configure an endpoint to use a custom destination chooser in one of two ways. The recommended way is to configure the destination chooser as a bean and have the endpoint reference the destination chooser's bean. The other way is to explicitly include the destination chooser's configuration as a child of the endpoint.

As shown in Example 7.3, configuring an endpoint's destination chooser using a bean reference is a two step process:

  1. Configure a bean element for your destination chooser.

  2. Add a destinationChooser attribute that references the destination chooser's bean to your endpoint.


Example 7.4 shows an example configuration using the jms:destinationChooser element. This method is less flexible than the recommended method because other endpoints cannot reuse the destination chooser's configuration.


You can configure an endpoint to use a custom destination resolver in one of two ways. The recommended way is to configure the destination resolver as a bean and have the endpoint reference the destination resolver's bean. The other way is to explicitly include the destination resolver's configuration as a child of the endpoint.

As shown in Example 7.7, configuring an endpoint's destination resolver using a bean reference is a two step process:

  1. Configure a bean element for your destination resolver.

  2. Add a destinationResolver attribute that references the destination resolver's bean to your endpoint.


Example 7.8 shows an example configuration using the jms:destinationResolver element. This method is less flexible than the recommended method because other endpoints cannot reuse the destination resolver's configuration.




[1] If the value is false, a JMS queue will be returned.

The attributes described in Table A.1 can be used on all elements used to configure a consumer endpoint.

Table A.1. Common Consumer Endpoint Property Attributes

NameTypeDescriptionRequired
connectionFactorystringSpecifies a reference to the bean configuring the connection factory which is to be used by the endpoint.yes
serviceQNameSpecifies the service name of the proxied endpoint.yes
endpointstringSpecifies the endpoint name of the proxied endpoint.yes
interfaceNameQNameSpecifies the interface name of the proxied endpoint.no
jms102 booleanSpecifies if the consumer uses JMS 1.0.2 compliant APIs.no (defaults to false)
pubSubDomaimbooleanSpecifies if the destination is a topic.no
replyDeliveryModeintSpecifies the JMS delivery mode used for the reply.no (defaults to PERSISTENT(2))
replyDestinationNamestringSpecifies the name of the JMS destination to use for the reply.no (if not set replyDestination or destinationChooser is used)
replyExplicitQosEnabledbooleanSpecifies if the QoS values specified for the endpoint are explicitly used when the reply is sent.no (default is false)
replyPriorityintSpecifies the JMS message priority of the reply.no (defaults to 4)
replyTimeToLivelongSpecifies the number of milliseconds the reply message is valid.no (defaults to unlimited)
statelessbooleanSpecifies if the consumer retains state information about the message exchange while it is in process.no
synchronousbooleanSpecifies if the consumer will block while waiting for a response. This means the consumer can only process one message at a time.no (defaults to true)
targetEndpointstringSpecifies the endpoint name of the target endpoint.no (defaults to the endpoint attribute)
targetInterfaceQNameSpecifies the interface name of the target endpoint.no
targetServiceQNameSpecifies the service name of the target endpoint.no (defaults to the service attribute)
targetUristringSpecifies the URI of the target endpoint.no
useMessageIdInResponsebooleanSpecifies if the request message's ID is used as the reply's correlation ID.no (defaults to false meaning the request's correlation ID is used)

The attributes described in Table A.3 are specific to the jms:consumer element and the jms:soap-consumer elements.

Table A.3. Attributes Uses to Configure Standard JMS Consumers and SOAP JMS Consumers

AttributeTypeListener(s)DescriptionRequired
listenerType string allSpecifies the type of Spring JMS message listener to use. Valid values are default, simple, and server.no (defaults to default)
transacted string allSpecifies the type of transaction used to wrap the message exchanges. Valid values are none, xa, and jms.no (defaults to none)
clientId string allSpecifies the JMS client id for a shared Connection created and used by this listener.no
destinationName string allSpecifies the name of the destination used to receive messages.no
durableSubscriptionName string allSpecifies the name used to register the durable subscription.no
messageSelector string allSpecifies the message selector string to use.no
sessionAcknowlegeMode int allSpecifies the acknowledgment mode that is used when creating a Session to send a message.no (defaults to Session.AUTO_ACKNOWLEDGE)
subscriptionDurable boolean allSpecifies if the listener uses a durable subscription to listen form messages.no (defaults to false)
pubSubNoLocal boolean

default

simple

Specifies if messages published by the listener's Connection are suppressed.no (defaults to false)
concurrentConsumers int

default

simple

Specifies the number of concurrent consumers created by the listener.no (defaults to 1)
cacheLevel int defaultSpecifies the level of caching allowed by the listener.no (defaults to 0)
receiveTimeoutlongdefaultSpecifies the timeout for receiving a message in milliseconds.no (default is 1000)
recoveryInterval long defaultSpecifies the interval, in milliseconds, between attempts to recover after a failed listener set-up.no (defaults to 5000)
maxMessagesPerTask int

default

server

Specifies the number of attempts to receive messages per task.no (defaults to -1)

The attributes described in Table B.1 can be used on all elements used to configure a provider endpoint.

Table B.1. Common Provider Endpoint Property Attributes

AttributeTypeDescriptionRequired
connectionFactorystringSpecifies a reference to the bean which configure the connection factory to be used by the endpoint.yes
deliveryModeintSpecifies the JMS delivery mode.no (defaults to persistent)
destinationNamestringSpecifies the JNDI name of the destination used to send messages.no
endpointstringSpecifies the endpoint name of the proxied endpoint.yes
explicitQosEnabledbooleanSpecifies if the JMS messages have the specified properties explicitly applied.no (defaults to false)
interfaceNameQNameSpecifies the interface name of the proxied endpoint.no
jms102booleanSpecifies if the provider is to be JMS 1.0.2 compatible.no (defaults to false)
messageIdEnabledbooleanSpecifies if JMS message IDs are enabled.no (defaults to true)
messageTimeStampEnabledbooleanSpecifies if JMS messages are time stamped.no (defaults to true)
priorityintSpecifies the priority assigned to the JMS messages.no (defaults to 4)
pubSubDomainbooleanSpecifies if the destination is a topic.no (defaults to false
pubSubNoLocalbooleanSpecifies if messages published by the listener's Connection are suppressed.no (defaults to false)
recieveTimeoutlongSpecifies the timeout for receiving a message in milliseconds.no (defaults to unlimited)
replyDestinationNamestringSpecifies the JNDI name of the destination used to receive messages.no
serviceQNameSpecifies the service name of the proxied endpoint.yes
statelessbooleanSpecifies if the consumer retains state information about the message exchange while it is in process.no (defaults to false)
timeToLivelongSpecifies the number of milliseconds the message is valid.no (defaults to unlimited)

Fuse ESB Enterprise provides a Maven plug-in and a number of Maven archetypes that make developing, packaging, and deploying JBI artifacts easier. The tooling provides you with a number of benefits including:

Because Fuse ESB Enterprise only allows you to deploy service assemblies, you will need to do the following when using the Maven JBI tooling:

  1. Set up a top-level project to build all of the service units and the final service assembly.

  2. Create a project for each of your service units..

  3. Create a project for the service assembly.

Example C.2 shows a top-level POM for a project that contains a single service unit.

Example C.2. Top-level POM for a Fuse ESB Enterprise JBI project

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>com.widgets</groupId>
    <artifactId>demos</artifactId>
    <version>1.0</version>
  </parent>

  <groupId>com.widgets.demo</groupId>
  <artifactId>cxf-wsdl-first</artifactId>
  <name>CXF WSDL Fisrt Demo</name>
  <packaging>pom</packaging>
    
  <pluginRepositories> 1
    <pluginRepository>
      <id>fusesource.m2</id>
      <name> Open Source Community Release Repository</name>
      <url>http://repo.fusesource.com/maven2</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <enabled>true</enabled>
      </releases>
    </pluginRepository>
  </pluginRepositories>
  <repositories>
    <repository>
      <id>fusesource.m2</id>
      <name> Open Source Community Release Repository</name>
      <url>http://repo.fusesource.com/maven2</url>
      <snapshots>
         <enabled>false</enabled>
      </snapshots>
      <releases>
        <enabled>true</enabled>
      </releases>
    </repository>
    <repository>
      <id>fusesource.m2-snapshot</id>
      <name> Open Source Community Snapshot Repository</name>
      <url>http://repo.fusesource.com/maven2-snapshot</url>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
      <releases>
        <enabled>false</enabled>
      </releases>
    </repository>
  </repositories>
    
  <modules> 2
    <module>wsdl-first-cxfse-su</module>
     <module>wsdl-first-cxf-sa</module>
  </modules>
    
  <build>
    <plugins>
      <plugin> 3
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
         <version>2.1</version>
         <inherited>false</inherited>
           <executions>
             <execution>
                <id>src</id>
                <phase>package</phase>
                <goals>
                  <goal>single</goal>
                </goals>
                <configuration>
                  <descriptors>
                    <descriptor>src/main/assembly/src.xml</descriptor>
                  </descriptors>
                 </configuration>
               </execution>
             </executions>
           </plugin>
           <plugin> 4
             <groupId>org.apache.servicemix.tooling</groupId>
             <artifactId>jbi-maven-plugin</artifactId>
             <extensions>true</extensions>
           </plugin>
    </plugins>
  </build>
</project>

The top-level POM shown in Example C.2 does the following:

1

Configures Maven to use the repositories for loading the Fuse ESB Enterprise plug-ins.

2

Lists the sub-projects used for this application. The wsdl-first-cxfse-su module is the module for the service unit. The wsdl-first-cxf-sa module is the module for the service assembly

3

Configures the Maven assembly plug-in.

4

Loads the Fuse ESB Enterprise JBI plug-in.

Fuse ESB Enterprise provides Maven artifacts for a number of service unit types. They can be used to seed a project with the smx-arch command. As shown in Example C.3, the smx-arch command takes three arguments. The groupId value and the artifactId values correspond to the project's group ID and artifact ID.


[Important]Important

The double quotes(") are required when using the -DgroupId argument and the -DartifactId argument.

The suArchetypeName specifies the type of service unit to seed. Table C.1 lists the possible values and describes what type of project is seeded.

Table C.1. Service unit archetypes

NameDescription
camelCreates a project for using the Apache Camel service engine
cxf-seCreates a project for developing a Java-first service using the Apache CXF service engine
cxf-se-wsdl-firstCreates a project for developing a WSDL-first service using the Apache CXF service engine
cxf-bcCreates an endpoint project targeted at the Apache CXF binding component
http-consumerCreates a consumer endpoint project targeted at the HTTP binding component
http-providerCreates a provider endpoint project targeted at the HTTP binding component
jms-consumerCreates a consumer endpoint project targeted at the JMS binding component (see Using the JMS Binding Component)
jms-providerCreates a provider endpoint project targeted at the JMS binding component (see Using the JMS Binding Component)
file-pollerCreates a polling (consumer) endpoint project targeted at the file binding component (see Using Poller Endpoints in Using the File Binding Component)
file-senderCreates a sender (provider) endpoint project targeted at the file binding component (see Using Sender Endpoints in Using the File Binding Component)
ftp-pollerCreates a polling (consumer) endpoint project targeted at the FTP binding component
ftp-senderCreates a sender (provider) endpoint project targeted at the FTP binding component
jsr181-annotatedCreates a project for developing an annotated Java service to be run by the JSR181 service engine [a]
jsr181-wsdl-firstCreates a project for developing a WSDL generated Java service to be run by the JSR181 service engine [a]
saxon-xqueryCreates a project for executing xquery statements using the Saxon service engine
saxon-xsltCreates a project for executing XSLT scripts using the Saxon service engine
eipCreates a project for using the EIP service engine. [b]
lwcontainerCreates a project for deploying functionality into the lightweight container [c]
beanCreates a project for deploying a POJO to be executed by the bean service engine
odeCreate a project for deploying a BPEL process into the ODE service engine

[a] The JSR181 has been deprecated. The Apache CXF service engine has superseded it.

[b] The EIP service engine has been deprecated. The Apache Camel service engine has superseded it.

[c] The lightweight container has been deprecated.


To correctly fill in the metadata required for packaging a service unit, the Maven plug-in must be told what component (or components) the service unit is targeting. If your service unit only has a single component dependency, you can specify it in one of two ways:

  • List the targeted component as a dependency

  • Add a componentName property specifying the targeted component

If your service unit has more than one component dependency, you must configure the project as follows:

  1. Add a componentName property specifying the targeted component.

  2. Add the remaining components to the list dependencies.

Example C.5 shows the configuration for a service unit targeting the Apache CXF binding component.


The advantage of using the Maven dependency mechanism is that it allows Maven to verify if the targeted component is deployed in the container. If one of the components is not deployed, Fuse ESB Enterprise will not hold off deploying the service unit until all of the required components are deployed.

[Tip]Tip

Typically, a message identifying the missing component(s) is written to the log.

If your service unit's targeted component is not available as a Maven artifact, you can specify the targeted component using the componentName element. This element is added to the standard Maven properties block and it specifies the name of a targeted component, as specified in Example C.6.


When you use the componentName element, Maven does not check to see if the component is installed, nor does it download the required component.

Example C.7 shows the POM file for a project that is building a service unit targeted to the Apache CXF binding component.

Example C.7. POM file for a service unit project

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent> 1
        <groupId>com.widgets.demo</groupId>
        <artifactId>cxf-wsdl-first</artifactId>
        <version>1.0</version>
    </parent>

  <groupId>com.widgets.demo.cxf-wsdl-first</groupId>
  <artifactId>cxfse-wsdl-first-su</artifactId>
  <name>CXF WSDL Fisrt Demo :: SE Service Unit</name>
  <packaging>jbi-service-unit</packaging> 2

  <dependencies> 3
    <dependency>
      <groupId>org.apache.servicemix</groupId>
      <artifactId>servicemix-cxf-bc</artifactId>
      <version>3.3.1.0-fuse</version>
    </dependency>
  >/dependencies>

  <build>
    <plugins>
      <plugin> 4
        <groupId>org.apache.servicemix.tooling</groupId>
        <artifactId>jbi-maven-plugin</artifactId>
        <extensions>true</extensions>
      </plugin>
    </plugins>
  </build>
</project>

The POM file in Example C.7 does the following:

1

Specifies that it is a part of the top-level project shown in Example C.2

2

Specifies that this project builds a service unit

3

Specifies that the service unit targets the Apache CXF binding component

4

Specifies to use the Fuse ESB Enterprise Maven plug-in



[2] You replace this with the version of Apache CXF you are using.

Example C.11 shows a POM file for a project that is building a service assembly.

Example C.11. POM for a service assembly project

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent> 1
        <groupId>com.widgets.demo</groupId>
        <artifactId>cxf-wsdl-first</artifactId>
        <version>1.0</version>
    </parent>

  <groupId>com.widgets.demo.cxf-wsdl-first</groupId>
  <artifactId>cxf-wsdl-first-sa</artifactId>
  <name>CXF WSDL Fisrt Demo ::  Service Assemby</name>
  <packaging>jbi-service-assembly</packaging> 2

  <dependencies> 3
    <dependency>
      <groupId>com.widgets.demo.cxf-wsdl-first</groupId>
      <artifactId>cxfse-wsdl-first-su</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>com.widgets.demo.cxf-wsdl-first</groupId>
      <artifactId>cxfbc-wsdl-first-su</artifactId>
      <version>1.0</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin> 4
        <groupId>org.apache.servicemix.tooling</groupId>
        <artifactId>jbi-maven-plugin</artifactId>
        <extensions>true</extensions>
      </plugin>
    </plugins>
  </build>
</project>

The POM in Example C.11 does the following:

1

Specifies that it is a part of the top-level project shown in Example C.2

2

Specifies that this project builds a service assembly

3

Specifies the service units being bundled by the service assembly

4

Specifies to use the Fuse ESB Enterprise Maven plug-in

The Fuse ESB Enterprise OSGi tooling uses the Maven bundle plug-in from Apache Felix. The bundle plug-in is based on the bnd tool from Peter Kriens. It automates the construction of OSGi bundle manifests by introspecting the contents of the classes being packaged in the bundle. Using the knowledge of the classes contained in the bundle, the plug-in can calculate the proper values to populate the Import-Packages and the Export-Package properties in the bundle manifest. The plug-in also has default values that are used for other required properties in the bundle manifest.

To use the bundle plug-in, do the following:

  1. Add the bundle plug-in to your project's POM file.

  2. Configure the plug-in to correctly populate your bundle's manifest.

A Maven project for building an OSGi bundle can be a simple single level project. It does not require any sub-projects. However, it does require that you do the following:

  1. Add the bundle plug-in to your POM.

  2. Instruct Maven to package the results as an OSGi bundle.

[Tip]Tip

There are several Maven archetypes you can use to set up your project with the appropriate settings.

Before you can use the bundle plug-in you must add a dependency on Apache Felix. After you add the dependency, you can add the bundle plug-in to the plug-in portion of the POM.

Example D.1 shows the POM entries required to add the bundle plug-in to your project.

Example D.1. Adding an OSGi bundle plug-in to a POM

...
<dependencies>
  <dependency> 1
    <groupId>org.apache.felix</groupId>
    <artifactId>org.osgi.core</artifactId>
    <version>1.0.0</version>
  </dependency>
...
</dependencies>
...
<build>
  <plugins>
    <plugin> 2
      <groupId>org.apache.felix</groupId>
      <artifactId>maven-bundle-plugin</artifactId>
      <configuration>
        <instructions>
          <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName> 3
          <Import-Package>*,org.apache.camel.osgi</Import-Package> 4
          <Private-Package>org.apache.servicemix.examples.camel</Private-Package> 5
        </instructions>
      </configuration> 
    </plugin>
  </plugins>
</build>
...

The entries in Example D.1 do the following:

1

Adds the dependency on Apache Felix

2

Adds the bundle plug-in to your project

3

Configures the plug-in to use the project's artifact ID as the bundle's symbolic name

4

Configures the plug-in to include all Java packages imported by the bundled classes; also imports the org.apache.camel.osgi package

5

Configures the plug-in to bundle the listed class, but not to include them in the list of exported packages

[Note]Note

Edit the configuration to meet the requirements of your project.

For more information on configuring the bundle plug-in, see Configuring the Bundle Plug-In.

By default, the OSGi manifest's Export-Package list is populated by all of the packages in your local Java source code (under src/main/java), except for the deault package, ., and any packages containing .impl or .internal.

[Important]Important

If you use a Private-Package element in your plug-in configuration and you do not specify a list of packages to export, the default behavior includes only the packages listed in the Private-Package element in the bundle. No packages are exported.

The default behavior can result in very large packages and in exporting packages that should be kept private. To change the list of exported packages you can add an Export-Package child to the plug-in's instructions element.

The Export-Package element specifies a list of packages that are to be included in the bundle and that are to be exported. The package names can be specified using the * wildcard symbol. For example, the entry com.fuse.demo.* includes all packages on the project's classpath that start with com.fuse.demo.

You can specify packages to be excluded be prefixing the entry with !. For example, the entry !com.fuse.demo.private excludes the package com.fuse.demo.private.

When excluding packages, the order of entries in the list is important. The list is processed in order from the beginning and any subsequent contradicting entries are ignored.

For example, to include all packages starting with com.fuse.demo except the package com.fuse.demo.private, list the packages using:

!com.fuse.demo.private,com.fuse.demo.*

However, if you list the packages using com.fuse.demo.*,!com.fuse.demo.private, then com.fuse.demo.private is included in the bundle because it matches the first pattern.

A

AMQPool, Using Apache ActiveMQ and Apache ActiveMQ Connection Factories
JCA, JCA pool
simple, Simple pool
XA, XA pool
amqpool:jca-pool, JCA pool
id, JCA pool
maxConnections, JCA pool
maximumActive, JCA pool
name, JCA pool
transactionManager, JCA pool
url, JCA pool
amqpool:pool, Simple pool
id, Simple pool
maxConnections, Simple pool
maximumActive, Simple pool
url, Simple pool
amqpool:xa-pool, XA pool
id, XA pool
maxConnections, XA pool
maximumActive, XA pool
transactionManager, XA pool
url, XA pool

C

componentName, Specifying the target components
connection factory
AMQPool (see AMQPool)
Apache ActiveMQ, Using Apache ActiveMQ and Apache ActiveMQ Connection Factories
pooled (see AMQPool)
ConnectionFactory, Procedure, Procedure, Procedure
consumer, Types of consumer endpoints
cacheLevel, Performace tuning using the listener container
clientId, Performace tuning using the listener container
concurrentConsumers, Performace tuning using the listener container
connectionFactory, Procedure
destination, Configuring a destination
destinationChooser, Determining the reply destination, Configuring an endpoint to use a destination chooser
destinationName, Configuring a destination
destinationResolver, Configuring an endpoint to use a destination resolver
durableSubscriberName, Using durable subscriptions
endpoint, Procedure
generic, Types of consumer endpoints
JCA, Types of consumer endpoints
jms102, Procedure
listenerType, Specifying an endpoint's listener container
marshaler, Configuring the consumer
maxMessagesPerTask, Performace tuning using the listener container
messageSelector, Using message selectors
pubSubDomaim, Procedure
receiveTimeout, Performace tuning using the listener container
recoveryInterval, Performace tuning using the listener container
replyDeliveryMode, Setting the reply message's persistence
replyDestination, Determining the reply destination
replyDestinationName, Determining the reply destination
replyExplicitQosEnabled, Enforcing the configured values
replyPriority, Setting the reply message's priority
replyProperties, Setting custom JMS header properties
replyTimeToLive, Setting a reply message's lifespan
serverSessionFactory, Configuring the server session listener container's session factory
service, Procedure
soap, Types of consumer endpoints
stateless, Activating statefullness
storeFactory, Configuring the datastore
subscriptionDurable, Using durable subscriptions
targetEndpoint, Specifying the target endpoint
targetInterface, Specifying the target endpoint
targetService, Specifying the target endpoint
transacted, Using transactions
consumer endpoint
connection factory, Procedure, Procedure

J

java.util.Map, Defining the property map
JBI wrapper, Using the JBI wrapper, Using the JBI wrapper
jbi.xml, Contents of a JMS service unit
jca-consumer, Types of consumer endpoints
activationSpec, Procedure
connectionFactory, Procedure
destination, Configuring a destination
destinationChooser, Determining the reply destination, Configuring an endpoint to use a destination chooser
destinationName, Configuring a destination
destinationResolver, Configuring an endpoint to use a destination resolver
endpoint, Procedure
marshaler, Configuring the consumer
pubSubDomaim, Procedure
replyDeliveryMode, Setting the reply message's persistence
replyDestination, Determining the reply destination
replyDestinationName, Determining the reply destination
replyExplicitQosEnabled, Enforcing the configured values
replyPriority, Setting the reply message's priority
replyProperties, Setting custom JMS header properties
replyTimeToLive, Setting a reply message's lifespan
resourceAdapter, Procedure
service, Procedure
stateless, Activating statefullness
storeFactory, Configuring the datastore
targetEndpoint, Specifying the target endpoint
targetInterface, Specifying the target endpoint
targetService, Specifying the target endpoint
JdbcStore, Configuring the datastore
JdbcStoreFactory, Configuring the datastore
jee:environment, Spring JEE JNDI lookup
jee:jndi-lookup, Spring JEE JNDI lookup
id, Spring JEE JNDI lookup
jndi-name, Spring JEE JNDI lookup
Jencks AMQPool (see AMQPool)
JmsConsumerMarshaler, Implementing the marshaler
JMSDeliveryMode, Setting the reply message's persistence, Setting a message's persistence
JMSExpirary, Setting a reply message's lifespan, Setting a message's life span
JMSPriority, Setting the reply message's priority, Setting a message's priority
JmsProviderMarshaler, Implementing the marshaler
JmsSoapConsumerMarshaler, Overview
JmsSoapProviderMarshaler, Overview
JndiObjectFactoryBean, Spring JNDI Templates
JndiTemplate, Spring JNDI Templates

M

map, Defining the property map
marshaler, Configuring the consumer
Maven archetypes, Useful Maven archetypes
Maven tooling
adding the bundle plug-in, Adding a bundle plug-in
servicemix-jms-consumer-endpoint, Using the Maven JBI tooling
servicemix-jms-provider-endpoint, Using the Maven JBI tooling
set up, Setting up the Maven tools
MemoryStore, Configuring the datastore
message persistence, Setting the reply message's persistence, Setting a message's persistence
message priority, Setting a message's priority
message selectors, Using message selectors

S

service assembly
seeding, Seeding a project using a Maven artifact
specifying the service units, Specifying the target components
service unit
seeding, Seeding a project using a Maven artifact
specifying the target component, Specifying the target components
smx-arch, Seeding a project using a Maven artifact, Seeding a project using a Maven artifact
soap-consumer, Types of consumer endpoints
cacheLevel, Performace tuning using the listener container
clientId, Performace tuning using the listener container
concurrentConsumers, Performace tuning using the listener container
connectionFactory, Procedure
destination, Configuring a destination
destinationChooser, Determining the reply destination, Configuring an endpoint to use a destination chooser
destinationName, Configuring a destination
destinationResolver, Configuring an endpoint to use a destination resolver
durableSubscriberName, Using durable subscriptions
endpoint, Procedure
jms102, Procedure
listenerType, Specifying an endpoint's listener container
marshaler, Configuring the consumer
maxMessagesPerTask, Performace tuning using the listener container
messageSelector, Using message selectors
pubSubDomaim, Procedure
receiveTimeout, Performace tuning using the listener container
recoveryInterval, Performace tuning using the listener container
replyDeliveryMode, Setting the reply message's persistence
replyDestination, Determining the reply destination
replyDestinationName, Determining the reply destination
replyExplicitQosEnabled, Enforcing the configured values
replyPriority, Setting the reply message's priority
replyProperties, Setting custom JMS header properties
replyTimeToLive, Setting a reply message's lifespan
serverSessionFactory, Configuring the server session listener container's session factory
service, Procedure
stateless, Activating statefullness
storeFactory, Configuring the datastore
subscriptionDurable, Using durable subscriptions
targetEndpoint, Specifying the target endpoint
targetInterface, Specifying the target endpoint
targetService, Specifying the target endpoint
transacted, Using transactions
useJbiWrapper, Using the JBI wrapper
validateWsdl, WSDL verification
wsdl, Procedure
soap-provider, Types of providers
connectionFactory, Procedure
deliveryMode, Setting a message's persistence
destination, Configuring a destination
destinationChooser, Configuring a destination, Configuring the response destination, Configuring an endpoint to use a destination chooser
destinationName, Configuring a destination
destinationResolver, Configuring an endpoint to use a destination resolver
endpoint, Procedure
explicitQosEnabled, Enforcing configured values
jms102, Procedure
marshaler, Configuring the provider
messageIdEnabled, Message IDs
messageTimeStampEnabled, Time stamps
priority, Setting a message's priority
pubSubDomaim, Procedure
recieveTimeout, Configuring the timeout interval
replyDestination, Configuring the response destination
replyDestinationName, Configuring the response destination
service, Procedure
stateless, Activating statefullness
storeFactory, Configuring the datastore
timeToLive, Setting a message's life span
useJbiWrapper, Using the JBI wrapper
validateWsdl, WSDL verification
wsdl, Procedure
Spring map, Defining the property map

W

WS-I basic profile, WSDL verification, WSDL verification