New servicemix-jms Endpoints
These newer JMS endpoints reuse some of the Spring JMS features including the message listener container, JMS transactions and the JMS template. Using these new endpoints can be achieved by using the jms:consumer
and jms:provider
in the xbean.xml file for the servicemix-jms component.
Consumer endpoints
Simple examples
<jms:consumer service="my:ConsumerService" endpoint="jbi" destinationName="my.queue" connectionFactory="#connectionFactory" concurrentConsumers="8" />
<jms:soap-consumer wsdl="classpath:service.wsdl" destinationName="my.queue" connectionFactory="#connectionFactory" concurrentConsumers="8" />
<jms:jca-consumer service="my:ConsumerService" endpoint="jbi" destinationName="my.queue" connectionFactory="#connectionFactory" resourceAdapter="#ra" activationSpec="#as" />
Connection Factory
ActiveMQ
We recommend jencks specific ActiveMQ connection pool if you use ActiveMQ.
Just add jencks-amqpool to your classpath. Then you can define a connection pool the following way:
<beans xmlns:amqpool="http://jencks.org/amqpool/2.0"> <amqpool:xa-pool id="connectionFactory" url="tcp://localhost:61616" transactionManager="#transactionManager" /> </beans>
Take a look at the documentation from the Jencks project for more informations
Other JMS providers
For other JMS providers, the ConnectionFactory is usually retrieved using JNDI.
<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>
<bean id="connectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory"> <property name="transportType"> <util:constant static-field="com.ibm.mq.jms.JMSC.MQJMS_TP_CLIENT_MQ_TCPIP" /> </property> <property name="queueManager" value="foo.queue.mgr" /> <property name="hostName" value="hostname" /> <property name="channel" value="channelname" /> <property name="port" value="12345" /> </bean>
Check your JMS provider for the specific configuration needed.
Tips
Using a marshaler
The org.apache.servicemix.jms.endpoints.JmsConsumerMarshaler interface defines the way the incoming JMS message is transformed. There are two implementations:
- DefaultConsumerMarshaler for
<jms:consumer/>
and<jms:jca-consumer/>
endpoints - JmsSoapConsumerMarshaler for
<jms:soap-consumer/>
endpoints
For soap enabled endpoints, there is not particular need to modify the way the marshaling is done. But the DefaultConsumerMarshaler does not support the whole range of messages. So from time to time, you will need to process JMS properties or receive a Map based message. In such a case, you would create your own class implementing the JmsConsumerMarshaler
interface and configure it on the endpoint:
<jms:consumer service="my:ConsumerService" endpoint="jbi" destinationName="my.queue" connectionFactory="#connectionFactory" marshaler="#marshaler" /> <bean id="marshaler" class="my.package.MyMarshaler" />
Reference
ServiceMix uses JMS support from the Spring Framework, hence most of the following properties are fully documented at the following locations:
- http://static.springframework.org/spring/docs/2.0.x/reference/jms.html
- http://static.springframework.org/spring/docs/2.0.x/api/org/springframework/jms/listener/package-summary.html
Common properties
Name |
Type |
Bean |
Description |
Required |
---|---|---|---|---|
service |
QName |
no |
The service name of the proxied endpoint |
yes |
endpoint |
String |
no |
The endpoint name of the proxied endpoint |
yes |
interfaceName |
QName |
no |
The interface name of the proxied endpoint |
|
|
|
|
|
|
targetService |
QName |
no |
The service name of the target endpoint |
no (defaults to the service attribute) |
targetEndpoint |
String |
no |
The endpoint name of the target endpoint |
no (defaults to the endpoint attribute) |
targetInterface |
QName |
no |
The interface name of the target endpoint |
no |
targetUri |
String |
no |
The URI of the target endpoint |
no |
|
|
|
|
|
marshaler |
JmsConsumerMarshaler |
yes |
The class implementing the message marshaler |
no (defaults to |
synchronous |
boolean |
no |
Specifies if the consumer will block while waiting for a response |
no (defaults to true) |
destinationChooser |
DestinationChooser |
yes |
A class implementing logic for choosing among JMS destinations |
|
destinationResolver |
DestinationResolver |
yes |
A class implementing logic for converting strings into destination IDs |
no (defaults to |
pubSubDomaim |
boolean |
no |
Specifies if the destination is a topic |
|
connectionFactory |
ConnectionFactory |
yes |
The |
|
|
|
|
|
|
useMessageIdInResponse |
Boolean |
yes |
Specifies if the request message's ID is used as the reply's correlation ID |
no (if not set the request's correlation ID is used) |
replyDestination |
Destination |
yes |
Specifies the JMS destination for the reply |
no (if not set either the replyDestination or the destinationChooser is used) |
replyDestinationName |
String |
no |
Specifies the name of the JMS destination to use for the reply |
no (if not set the replyDestination or the destinationChooser is used) |
replyExplicitQosEnabled |
boolean |
no |
Specifies if the QoS values specified for the endpoint are explicity used when the reply is sent |
no (default is false) |
replyDeliveryMode |
int |
no |
Specifies the JMS delivery mode used for the reply |
no (defaults to persistent) |
replyPriority |
int |
no |
Specifies the JMS message priority of the reply |
no (defaults to 4) |
replyTimeToLive |
long |
no |
Specifies the number of milliseconds the reply message is valid |
no (defaults to unlimited) |
replyProperties |
Map |
yes |
Specifies custom properties to be placed in the reply's JMS header |
no |
|
|
|
|
|
stateless |
boolean |
no |
Specifies if the consumer retains state information about the message exchange while it is in process |
|
storeFactory |
StoreFactory |
yes |
The factory class used to create the data store for state information |
no (defaults to |
store |
Store |
yes |
The data store used to store state information |
no |
<jms:consumer/>
and <jms:soap-consumer/>
Name |
Type |
Description |
Required |
---|---|---|---|
listenerType |
String |
Specifies the type of Spring JMS message listener to use |
|
jms102 |
boolean |
Specifies if the consumer is to be use JMS 1.0.2 |
no (defaults to |
transacted |
String |
Specifies the type of transaction to wrap the message exchanges |
|
Name |
Type |
Simple |
Default |
Server |
Description |
Required |
---|---|---|---|---|---|---|
clientId |
String |
X |
X |
X |
The JMS client id for a shared |
|
destination |
Destination |
X |
X |
X |
The destination used to receive messages |
|
destinationName |
String |
X |
X |
X |
The name of the destination used to receive messages |
|
durableSubscriptionName |
String |
X |
X |
X |
The durable subscriber name |
no |
exceptionListener |
ExceptionListener |
X |
X |
X |
The |
|
messageSelector |
String |
X |
X |
X |
The message selector string to use |
no |
sessionAcknowlegeMode |
int |
X |
X |
X |
The acknowledgment mode that is used when creating a Session to send a message |
no (defaults to |
subscriptionDurable |
boolean |
X |
X |
X |
Specifies if the listener uses a durable subscription to listen form messages |
no (defaults to false) |
pubSubNoLocal |
boolean |
X |
X |
|
Specifies if messages published by the listener's |
no (defaults to false) |
concurrentConsumers |
int |
X |
X |
|
The number of concurrent consumers created by the listener |
no (defaults to 1) |
cacheLevel |
int |
|
X |
|
The level of caching allowed by the listener |
no (defaults to |
receiveTimeout |
long |
|
X |
|
The timeout for receiving a message in milliseconds |
no (default is 1000) |
recoveryInterval |
long |
|
X |
|
The interval, in milliseconds, between attempts to recover after a failed listener set-up |
no (defaults to 5000) |
maxMessagesPerTask |
int |
|
X |
X |
The number of attempts to receive messages per task |
no |
serverSessionFactory |
ServerSessionFactory |
|
|
X |
The |
no (defaults to |
Soap specific properties
Note that when deploying a soap consumer, the service and endpoint name are optional and can be inferred from the given WSDL (if the WSDL only contains a single port definition). If the service and/or endpoint attributes are given, they must match the service and port name of the WSDL.
Name |
Type |
Description |
Required |
---|---|---|---|
wsdl |
Resource |
WSDL describing the service |
yes |
useJbiWrapper |
boolean |
Specifies if the JBI wrapper is sent in the body of the message |
no (defaults to true) |
validateWsdl |
boolan |
Checks WSI-BP compliance |
no (defaults to true) |
policies |
Policy[] |
A list of interceptors that will process the message |
no |
<jms:jca-consumer/>
Name |
Type |
Description |
Required |
---|---|---|---|
resourceAdapter |
ResourceAdapter |
The resource adapter used for the endpoint |
yes |
activationSpec |
ActivationSpec |
The activation information needed for the endpoint |
yes |
bootstrapContext |
BootstrapContext |
The bootstrap context used when starting the resource adapter |
no (a default one will be created) |
Provider endpoints
Simple examples
<jms:provider service="my:ProviderService" endpoint="jbi" destinationName="my.queue" connectionFactory="#connectionFactory" />
<jms:soap-provider wsdl="classpath:service.wsdl" destinationName="my.queue" connectionFactory="#connectionFactory" />
Connection Factory
ActiveMQ
We recommend jencks specific ActiveMQ connection pool if you use ActiveMQ.
Just add jencks-amqpool to your classpath. Then you can define a connection pool the following way:
<beans xmlns:amqpool="http://jencks.org/amqpool/2.0"> <amqpool:xa-pool id="connectionFactory" url="tcp://localhost:61616" transactionManager="#transactionManager" /> </beans>
Take a look at the documentation from the Jencks project for more informations
Other JMS providers
For other JMS providers, the ConnectionFactory is usually retrieved using JNDI.
<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>
<bean id="connectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory"> <property name="transportType"> <util:constant static-field="com.ibm.mq.jms.JMSC.MQJMS_TP_CLIENT_MQ_TCPIP" /> </property> <property name="queueManager" value="foo.queue.mgr" /> <property name="hostName" value="hostname" /> <property name="channel" value="channelname" /> <property name="port" value="12345" /> </bean>
Check your JMS provider for the specific configuration needed.
Tips
Using a marshaler
The org.apache.servicemix.jms.endpoints.JmsProviderMarshaler
interface defines the way incoming and outgoing JMS messages are transformed. There are two implementations:
DefaultProviderMarshaler
for<jms:provider />
endpointsJmsSoapProviderMarshaler
for<jms:soap-provider />
endpoints
For soap enabled endpoints, there is not particular need to modify the way the marshaling is done. But the DefaultProvierMarshaler
does not support the whole range of messages. So from time to time, you will need to process JMS properties or receive a Map based message. In such a case, you would create your own class implementing the JmsProviderMarshaler
interface and configure it on the endpoint:
<jms:proivder service="my:ProviderService" endpoint="jbi" destinationName="my.queue" connectionFactory="#connectionFactory" marshaler="#marshaler" /> <bean id="marshaler" class="my.package.MyMarshaler" />
Reference
Common Properties
Attributes
Name |
Type |
Description |
Required |
---|---|---|---|
deliveryMode |
|
|
|
destinationName |
|
|
|
endpoint |
|
|
|
explicitQosEnabled |
|
|
|
interfaceName |
|
|
|
jms102 |
|
|
|
messageIdEnabled |
|
|
|
messageTimeStampEnabled |
|
|
|
priority |
|
|
|
pubSubDomain |
|
|
|
pubSubNoLocal |
|
|
|
recieveTimeout |
|
|
|
replyDestinationName |
|
|
|
service |
|
|
|
stateless |
|
|
|
timeToLive |
|
|
|
Beans
Name |
Type |
Description |
Required |
---|---|---|---|
connectionFactory |
|
|
|
definition |
|
|
|
destination |
|
|
|
destinationChooser |
|
|
|
destinationResolver |
|
|
|
marshaler |
|
|
|
replyDestination |
|
|
|
serviceUnit |
|
|
|
store |
|
|
|
storeFactory |
|
|
|
SOAP Specific Properties
The following are only applicable to <jms:soap-provider />
.
Attributes
Name |
Type |
Description |
Required |
---|---|---|---|
useJbiWrapper |
|
|
|
validateWsdl |
|
|
|
wsdl |
|
|
|
Beans
Name |
Type |
Description |
Required |
---|---|---|---|
policies |
|
|
|