You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 25 Next »

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:

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 DefaultConsumerMarshaler)

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 DynamicDestinationResolver)

pubSubDomaim

boolean

no

Specifies if the destination is a topic

 

connectionFactory

ConnectionFactory

yes

The ConnectionFactory used to connect with the destination

 

 

 

 

 

 

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 MemoryStoreFactory)

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

default, simple, server (defaults to default)

jms102

boolean

Specifies if the consumer is to be use JMS 1.0.2

no (defaults to false)

transacted

String

Specifies the type of transaction to wrap the message exchanges

none, xa, jms (defaults to none)

Name

Type

Simple

Default

Server

Description

Required

clientId

String

X

X

X

The JMS client id for a shared Connection created and used by this listener

 

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 ExceptionListener to notify in case of a JMSException thrown by the registered message listener or the invocation infrastructure

 

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 Session.AUTO_ACKNOWLEDGE)

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 Connection are suppressed

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 CACHE_NONE)

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 ServerSessionFactory to use

no (defaults to SimpleServerSessionFactory)

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 /> endpoints
  • JmsSoapProviderMarshaler 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

 

 

 

  • No labels