org.mule.transport.jms
Class JmsConnector

java.lang.Object
  extended by org.mule.transport.AbstractConnector
      extended by org.mule.transport.jms.JmsConnector
All Implemented Interfaces:
EventListener, ExceptionListener, javax.resource.spi.work.WorkListener, Disposable, Initialisable, Lifecycle, LifecycleStateEnabled, Startable, Stoppable, NameableObject, NamedObject, Connectable, Connector
Direct Known Subclasses:
ActiveMQJmsConnector, MuleMQJmsConnector, WeblogicJmsConnector, WebsphereJmsConnector

public class JmsConnector
extends AbstractConnector
implements ExceptionListener

JmsConnector is a JMS 1.0.2b compliant connector that can be used by a Mule endpoint. The connector supports all JMS functionality including topics and queues, durable subscribers, acknowledgement modes and local transactions.


Field Summary
static String JMS
           
 String password
           
static int REDELIVERY_FAIL_ON_FIRST
          Indicates that Mule should throw an exception on any redelivery attempt.
static int REDELIVERY_IGNORE
           
 String username
           
 
Fields inherited from class org.mule.transport.AbstractConnector
createMultipleTransactedReceivers, DEFAULT_NUM_CONCURRENT_TX_RECEIVERS, dispatcherFactory, dispatcherPoolFactory, dispatchers, initialStateStopped, lifecycleManager, logger, muleContext, muleMessageFactory, name, numberOfConcurrentTransactedReceivers, PROPERTY_POLLING_FREQUENCY, receivers, requesterFactory, requesters, serviceDescriptor, serviceOverrides, sessionHandler, startOnConnect
 
Fields inherited from interface org.mule.api.transport.Connector
INT_VALUE_NOT_SET
 
Fields inherited from interface org.mule.api.lifecycle.Disposable
PHASE_NAME
 
Constructor Summary
JmsConnector(MuleContext context)
           
 
Method Summary
 void close(MessageConsumer consumer)
          Closes the MessageConsumer
 void close(MessageProducer producer)
          Closes the MessageProducer
 void close(Session session)
          Closes the MuleSession
 void close(TemporaryQueue tempQueue)
          Closes the TemporaryQueue
 void close(TemporaryTopic tempTopic)
          Closes the TemporaryTopic
 void closeQuietly(MessageConsumer consumer)
          Closes the MessageConsumer without throwing an exception (an error message is logged instead).
 void closeQuietly(MessageProducer producer)
          Closes the MessageProducer without throwing an exception (an error message is logged instead).
 void closeQuietly(Session session)
          Closes the MuleSession without throwing an exception (an error message is logged instead).
 void closeQuietly(TemporaryQueue tempQueue)
          Closes the TemporaryQueue without throwing an exception (an error message is logged instead).
 void closeQuietly(TemporaryTopic tempTopic)
          Closes the TemporaryTopic without throwing an exception (an error message is logged instead).
 void closeSessionIfNoTransactionActive(Session session)
          Closes a session if there is no active transaction in the current thread, otherwise the session will continue active until there is a direct call to close it.
protected  Connection createConnection()
           
protected  ConnectionFactory createConnectionFactory()
           
protected  JmsSupport createJmsSupport()
          A factory method to create various JmsSupport class versions.
protected  Session createOperationResource(ImmutableEndpoint endpoint)
           
 Session createSession(ImmutableEndpoint endpoint)
           
protected  void doConnect()
          Template method where any connections should be made for the connector
protected  void doDisconnect()
          Template method where any connected resources used by the connector should be disconnected
protected  void doDispose()
          Template method to perform any work when destroying the connectoe
protected  void doInitialise()
           
protected  void doStart()
          Template method to perform any work when starting the connectoe
protected  void doStop()
          Template method to perform any work when stopping the connectoe
 int getAcknowledgementMode()
           
 String getClientId()
           
 Connection getConnection()
           
 ConnectionFactory getConnectionFactory()
           
 String getConnectionFactoryJndiName()
           
 Map getConnectionFactoryProperties()
           
protected  ConnectionFactory getDefaultConnectionFactory()
          Override this method to provide a default ConnectionFactory for a vendor-specific JMS Connector.
 JmsSupport getJmsSupport()
           
 String getJndiInitialFactory()
          Deprecated. use a JndiNameResolver instead of access this property
 JndiNameResolver getJndiNameResolver()
           
 Map getJndiProviderProperties()
          Deprecated. use a JndiNameResolver instead of access this property
 String getJndiProviderUrl()
          Deprecated. use a JndiNameResolver instead of access this property
 int getMaxRedelivery()
           
 int getNumberOfConsumers()
          A synonym for AbstractConnector.numberOfConcurrentTransactedReceivers.
protected  Object getOperationResourceFactory()
           
 String getPassword()
           
 String getProtocol()
           
protected  Object getReceiverKey(FlowConstruct flowConstruct, InboundEndpoint endpoint)
          The method determines the key used to store the receiver against.
 RedeliveryHandlerFactory getRedeliveryHandlerFactory()
           
 ReplyToHandler getReplyToHandler(ImmutableEndpoint endpoint)
          Getter for property 'replyToHandler'.
 Boolean getSameRMOverrideValue()
           
 JmsSelectorFilter getSelector(ImmutableEndpoint endpoint)
           
 Session getSession(boolean transacted, boolean topic)
           
 Session getSession(ImmutableEndpoint endpoint)
           
 Session getSessionFromTransaction()
           
 String getSpecification()
           
 JmsTopicResolver getTopicResolver()
          Getter for property 'topicResolver'.
 String getUsername()
           
 boolean isCacheJmsSessions()
           
 boolean isDisableTemporaryReplyToDestinations()
           
 boolean isDurable()
           
 boolean isEagerConsumer()
          Getter for property 'eagerConsumer'.
 boolean isEmbeddedMode()
           
 boolean isForceJndiDestinations()
           
 boolean isHonorQosHeaders()
          Gets the value of honorQosHeaders property.
 boolean isJndiDestinations()
           
 boolean isNoLocal()
           
 boolean isPersistentDelivery()
           
 boolean isResponseEnabled()
           
 boolean isReturnOriginalMessageAsReply()
           
protected  Object lookupFromJndi(String jndiName)
           
 void onException(JMSException jmsException)
           
 Message preProcessMessage(Message message, Session session)
          This method may be overridden in order to apply pre-processing to the message as soon as it arrives.
 void setAcknowledgementMode(int acknowledgementMode)
           
 void setCacheJmsSessions(boolean cacheJmsSessions)
           
 void setClientId(String clientId)
           
protected  void setConnection(Connection connection)
           
 void setConnectionFactory(ConnectionFactory connectionFactory)
           
 void setConnectionFactoryJndiName(String connectionFactoryJndiName)
           
 void setConnectionFactoryProperties(Map connectionFactoryProperties)
           
 void setDisableTemporaryReplyToDestinations(boolean disableTemporaryReplyToDestinations)
           
 void setDurable(boolean durable)
           
 void setEagerConsumer(boolean eagerConsumer)
          A value of true will create a consumer on connect, in contrast to lazy instantiation in the poll loop.
 void setEmbeddedMode(boolean embeddedMode)
           
 void setForceJndiDestinations(boolean forceJndiDestinations)
           
 void setHonorQosHeaders(boolean honorQosHeaders)
          Sets the honorQosHeaders property, which determines whether JmsMessageDispatcher should honor incoming message's QoS headers (JMSPriority, JMSDeliveryMode).
 void setJmsSupport(JmsSupport jmsSupport)
           
 void setJndiDestinations(boolean jndiDestinations)
           
 void setJndiInitialFactory(String jndiInitialFactory)
          Deprecated. use a JndiNameResolver instead of access this property
 void setJndiNameResolver(JndiNameResolver jndiNameResolver)
           
 void setJndiProviderProperties(Map jndiProviderProperties)
          Deprecated. use a JndiNameResolver instead of access this property
 void setJndiProviderUrl(String jndiProviderUrl)
          Deprecated. use a JndiNameResolver instead of access this property
 void setMaxRedelivery(int maxRedelivery)
           
 void setNoLocal(boolean noLocal)
           
 void setNumberOfConsumers(int count)
          A synonym for AbstractConnector.numberOfConcurrentTransactedReceivers.
 void setPassword(String password)
           
 void setPersistentDelivery(boolean persistentDelivery)
           
 void setRedeliveryHandlerFactory(RedeliveryHandlerFactory redeliveryHandlerFactory)
           
 void setReturnOriginalMessageAsReply(boolean returnOriginalMessageAsReply)
           
 void setSameRMOverrideValue(Boolean sameRMOverrideValue)
           
 void setSpecification(String specification)
           
 void setTopicResolver(JmsTopicResolver topicResolver)
          Setter for property 'topicResolver'.
 void setUsername(String username)
           
 boolean supportsProperty(String property)
          This method may be overridden in case a certain JMS implementation does not support all the standard JMS properties.
 
Methods inherited from class org.mule.transport.AbstractConnector
clearDispatchers, clearRequesters, configureDispatcherPool, connect, createDefaultRedeliveryPolicy, createDispatcherMessageProcessor, createMuleMessageFactory, createReceiver, createScheduler, destroyReceiver, disconnect, dispose, disposeReceivers, disposeWorkManagers, doUnregisterListener, fireNotification, getConnectEventId, getConnectionDescription, getDefaultExchangePattern, getDefaultInboundTransformers, getDefaultOutboundTransformers, getDefaultResponseTransformers, getDispatcherFactory, getDispatcherPoolFactory, getDispatcherThreadingProfile, getDispatcherWorkManager, getInboundExchangePatterns, getLifecycleState, getMaxDispatchersActive, getMaxRequestersActive, getMaxTotalDispatchers, getMuleContext, getMuleMessageFactory, getName, getNumberOfConcurrentTransactedReceivers, getOutboundExchangePatterns, getOutputStream, getReceiver, getReceivers, getReceivers, getReceiverThreadingProfile, getReceiverWorkManager, getRequesterFactory, getRequesterThreadingProfile, getRequesterWorkManager, getRetryPolicyTemplate, getScheduler, getServiceDescriptor, getServiceOverrides, getSessionHandler, getSupportedProtocols, getTransactionalResource, handleWorkException, initFromServiceDescriptor, initialise, initialiseFromUrl, initWorkManagers, isConnected, isConnecting, isCreateMultipleTransactedReceivers, isDisposed, isEnableMessageEvents, isInitialised, isInitialStateStopped, isStarted, isStarting, isStopped, isStopping, isValidateConnections, lookupReceiver, registerListener, registerSupportedMetaProtocol, registerSupportedProtocol, registerSupportedProtocolWithoutPrefix, request, request, setConnected, setConnecting, setCreateMultipleTransactedReceivers, setDispatcherFactory, setDispatcherPoolFactory, setDispatcherPoolMaxWait, setDispatcherPoolWhenExhaustedAction, setDispatcherThreadingProfile, setDynamicNotification, setInitialStateStopped, setMaxDispatchersActive, setMaxRequestersActive, setName, setNumberOfConcurrentTransactedReceivers, setReceiverThreadingProfile, setRequesterFactory, setRequesterPoolMaxWait, setRequesterPoolWhenExhaustedAction, setRequesterThreadingProfile, setRetryPolicyTemplate, setServiceOverrides, setSessionHandler, setSupportedProtocols, setupDispatchReturn, setupRequestReturn, setValidateConnections, shutdownScheduler, start, startAfterConnect, stop, supportsProtocol, toString, unregisterListener, unregisterSupportedProtocol, updateCachedNotificationHandler, validateConnection, workAccepted, workCompleted, workRejected, workStarted
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

JMS

public static final String JMS
See Also:
Constant Field Values

REDELIVERY_FAIL_ON_FIRST

public static final int REDELIVERY_FAIL_ON_FIRST
Indicates that Mule should throw an exception on any redelivery attempt.

See Also:
Constant Field Values

REDELIVERY_IGNORE

public static final int REDELIVERY_IGNORE
See Also:
Constant Field Values

username

public String username

password

public String password
Constructor Detail

JmsConnector

public JmsConnector(MuleContext context)
Method Detail

getProtocol

public String getProtocol()
Specified by:
getProtocol in interface Connector
Returns:
the primary protocol name for endpoints of this connector

doInitialise

protected void doInitialise()
                     throws InitialisationException
Specified by:
doInitialise in class AbstractConnector
Throws:
InitialisationException

createJmsSupport

protected JmsSupport createJmsSupport()
A factory method to create various JmsSupport class versions.

Returns:
JmsSupport instance
See Also:
JmsSupport

createConnectionFactory

protected ConnectionFactory createConnectionFactory()
                                             throws InitialisationException,
                                                    NamingException
Throws:
InitialisationException
NamingException

getDefaultConnectionFactory

protected ConnectionFactory getDefaultConnectionFactory()
                                                 throws Exception
Override this method to provide a default ConnectionFactory for a vendor-specific JMS Connector.

Throws:
Exception

doDispose

protected void doDispose()
Description copied from class: AbstractConnector
Template method to perform any work when destroying the connectoe

Specified by:
doDispose in class AbstractConnector

lookupFromJndi

protected Object lookupFromJndi(String jndiName)
                         throws NamingException
Throws:
NamingException

createConnection

protected Connection createConnection()
                               throws NamingException,
                                      JMSException,
                                      InitialisationException
Throws:
NamingException
JMSException
InitialisationException

onException

public void onException(JMSException jmsException)
Specified by:
onException in interface ExceptionListener

doConnect

protected void doConnect()
                  throws Exception
Description copied from class: AbstractConnector
Template method where any connections should be made for the connector

Specified by:
doConnect in class AbstractConnector
Throws:
Exception

doDisconnect

protected void doDisconnect()
                     throws Exception
Description copied from class: AbstractConnector
Template method where any connected resources used by the connector should be disconnected

Specified by:
doDisconnect in class AbstractConnector
Throws:
Exception

getReceiverKey

protected Object getReceiverKey(FlowConstruct flowConstruct,
                                InboundEndpoint endpoint)
Description copied from class: AbstractConnector
The method determines the key used to store the receiver against.

Overrides:
getReceiverKey in class AbstractConnector
Parameters:
flowConstruct - the service for which the endpoint is being registered
endpoint - the endpoint being registered for the service
Returns:
the key to store the newly created receiver against

getSessionFromTransaction

public Session getSessionFromTransaction()

getSession

public Session getSession(ImmutableEndpoint endpoint)
                   throws JMSException
Throws:
JMSException

createSession

public Session createSession(ImmutableEndpoint endpoint)
                      throws JMSException
Throws:
JMSException

getSession

public Session getSession(boolean transacted,
                          boolean topic)
                   throws JMSException
Throws:
JMSException

doStart

protected void doStart()
                throws MuleException
Description copied from class: AbstractConnector
Template method to perform any work when starting the connectoe

Specified by:
doStart in class AbstractConnector
Throws:
MuleException - if the method fails

closeSessionIfNoTransactionActive

public void closeSessionIfNoTransactionActive(Session session)
Closes a session if there is no active transaction in the current thread, otherwise the session will continue active until there is a direct call to close it.

Parameters:
session - the session that ill be closed if there is an active transaction.

doStop

protected void doStop()
               throws MuleException
Description copied from class: AbstractConnector
Template method to perform any work when stopping the connectoe

Specified by:
doStop in class AbstractConnector
Throws:
MuleException - if the method fails

getReplyToHandler

public ReplyToHandler getReplyToHandler(ImmutableEndpoint endpoint)
Description copied from class: AbstractConnector
Getter for property 'replyToHandler'.

Overrides:
getReplyToHandler in class AbstractConnector
Returns:
Value for property 'replyToHandler'.

supportsProperty

public boolean supportsProperty(String property)
This method may be overridden in case a certain JMS implementation does not support all the standard JMS properties.


preProcessMessage

public Message preProcessMessage(Message message,
                                 Session session)
                          throws Exception
This method may be overridden in order to apply pre-processing to the message as soon as it arrives.

Parameters:
message - - the incoming message
session - - the JMS session
Returns:
the preprocessed message
Throws:
Exception

close

public void close(MessageProducer producer)
           throws JMSException
Closes the MessageProducer

Parameters:
producer -
Throws:
JMSException

closeQuietly

public void closeQuietly(MessageProducer producer)
Closes the MessageProducer without throwing an exception (an error message is logged instead).

Parameters:
producer -

close

public void close(MessageConsumer consumer)
           throws JMSException
Closes the MessageConsumer

Parameters:
consumer -
Throws:
JMSException

closeQuietly

public void closeQuietly(MessageConsumer consumer)
Closes the MessageConsumer without throwing an exception (an error message is logged instead).

Parameters:
consumer -

close

public void close(Session session)
           throws JMSException
Closes the MuleSession

Parameters:
session -
Throws:
JMSException

closeQuietly

public void closeQuietly(Session session)
Closes the MuleSession without throwing an exception (an error message is logged instead).

Parameters:
session -

close

public void close(TemporaryQueue tempQueue)
           throws JMSException
Closes the TemporaryQueue

Parameters:
tempQueue -
Throws:
JMSException

closeQuietly

public void closeQuietly(TemporaryQueue tempQueue)
Closes the TemporaryQueue without throwing an exception (an error message is logged instead).

Parameters:
tempQueue -

close

public void close(TemporaryTopic tempTopic)
           throws JMSException
Closes the TemporaryTopic

Parameters:
tempTopic -
Throws:
JMSException

closeQuietly

public void closeQuietly(TemporaryTopic tempTopic)
Closes the TemporaryTopic without throwing an exception (an error message is logged instead).

Parameters:
tempTopic -

getConnection

public Connection getConnection()
Returns:
Returns the connection.

setConnection

protected void setConnection(Connection connection)

getAcknowledgementMode

public int getAcknowledgementMode()
Returns:
Returns the acknowledgeMode.

setAcknowledgementMode

public void setAcknowledgementMode(int acknowledgementMode)
Parameters:
acknowledgementMode - The acknowledgementMode to set.

isDurable

public boolean isDurable()
Returns:
Returns the durable.

setDurable

public void setDurable(boolean durable)
Parameters:
durable - The durable to set.

isNoLocal

public boolean isNoLocal()
Returns:
Returns the noLocal.

setNoLocal

public void setNoLocal(boolean noLocal)
Parameters:
noLocal - The noLocal to set.

isPersistentDelivery

public boolean isPersistentDelivery()
Returns:
Returns the persistentDelivery.

setPersistentDelivery

public void setPersistentDelivery(boolean persistentDelivery)
Parameters:
persistentDelivery - The persistentDelivery to set.

getJmsSupport

public JmsSupport getJmsSupport()

setJmsSupport

public void setJmsSupport(JmsSupport jmsSupport)

getSpecification

public String getSpecification()

setSpecification

public void setSpecification(String specification)

getUsername

public String getUsername()

setUsername

public void setUsername(String username)

getPassword

public String getPassword()

setPassword

public void setPassword(String password)

getClientId

public String getClientId()

setClientId

public void setClientId(String clientId)

getMaxRedelivery

public int getMaxRedelivery()

setMaxRedelivery

public void setMaxRedelivery(int maxRedelivery)

isResponseEnabled

public boolean isResponseEnabled()
Specified by:
isResponseEnabled in interface Connector
Overrides:
isResponseEnabled in class AbstractConnector

getTopicResolver

public JmsTopicResolver getTopicResolver()
Getter for property 'topicResolver'.

Returns:
Value for property 'topicResolver'.

setTopicResolver

public void setTopicResolver(JmsTopicResolver topicResolver)
Setter for property 'topicResolver'.

Parameters:
topicResolver - Value to set for property 'topicResolver'.

isEagerConsumer

public boolean isEagerConsumer()
Getter for property 'eagerConsumer'. Default is true.

Returns:
Value for property 'eagerConsumer'.
See Also:
eagerConsumer

setEagerConsumer

public void setEagerConsumer(boolean eagerConsumer)
A value of true will create a consumer on connect, in contrast to lazy instantiation in the poll loop. This setting very much depends on the JMS vendor. Affects transactional receivers, typical symptoms are:

Parameters:
eagerConsumer - Value to set for property 'eagerConsumer'.
See Also:
eagerConsumer, XaTransactedJmsMessageReceiver

isCacheJmsSessions

public boolean isCacheJmsSessions()

setCacheJmsSessions

public void setCacheJmsSessions(boolean cacheJmsSessions)

getConnectionFactory

public ConnectionFactory getConnectionFactory()

setConnectionFactory

public void setConnectionFactory(ConnectionFactory connectionFactory)

getRedeliveryHandlerFactory

public RedeliveryHandlerFactory getRedeliveryHandlerFactory()

setRedeliveryHandlerFactory

public void setRedeliveryHandlerFactory(RedeliveryHandlerFactory redeliveryHandlerFactory)

setHonorQosHeaders

public void setHonorQosHeaders(boolean honorQosHeaders)
Sets the honorQosHeaders property, which determines whether JmsMessageDispatcher should honor incoming message's QoS headers (JMSPriority, JMSDeliveryMode).

Parameters:
honorQosHeaders - true if JmsMessageDispatcher should honor incoming message's QoS headers; otherwise false Default is false, meaning that connector settings will override message headers.

isHonorQosHeaders

public boolean isHonorQosHeaders()
Gets the value of honorQosHeaders property.

Returns:
true if JmsMessageDispatcher should honor incoming message's QoS headers; otherwise false Default is false, meaning that connector settings will override message headers.

getJndiInitialFactory

@Deprecated
public String getJndiInitialFactory()
Deprecated. use a JndiNameResolver instead of access this property


setJndiInitialFactory

@Deprecated
public void setJndiInitialFactory(String jndiInitialFactory)
Deprecated. use a JndiNameResolver instead of access this property


getJndiProviderUrl

@Deprecated
public String getJndiProviderUrl()
Deprecated. use a JndiNameResolver instead of access this property


setJndiProviderUrl

@Deprecated
public void setJndiProviderUrl(String jndiProviderUrl)
Deprecated. use a JndiNameResolver instead of access this property


getJndiProviderProperties

@Deprecated
public Map getJndiProviderProperties()
Deprecated. use a JndiNameResolver instead of access this property


setJndiProviderProperties

@Deprecated
public void setJndiProviderProperties(Map jndiProviderProperties)
Deprecated. use a JndiNameResolver instead of access this property


getJndiNameResolver

public JndiNameResolver getJndiNameResolver()

setJndiNameResolver

public void setJndiNameResolver(JndiNameResolver jndiNameResolver)

getConnectionFactoryJndiName

public String getConnectionFactoryJndiName()

setConnectionFactoryJndiName

public void setConnectionFactoryJndiName(String connectionFactoryJndiName)

isJndiDestinations

public boolean isJndiDestinations()

setJndiDestinations

public void setJndiDestinations(boolean jndiDestinations)

isForceJndiDestinations

public boolean isForceJndiDestinations()

setForceJndiDestinations

public void setForceJndiDestinations(boolean forceJndiDestinations)

isDisableTemporaryReplyToDestinations

public boolean isDisableTemporaryReplyToDestinations()

setDisableTemporaryReplyToDestinations

public void setDisableTemporaryReplyToDestinations(boolean disableTemporaryReplyToDestinations)

isReturnOriginalMessageAsReply

public boolean isReturnOriginalMessageAsReply()

setReturnOriginalMessageAsReply

public void setReturnOriginalMessageAsReply(boolean returnOriginalMessageAsReply)

getConnectionFactoryProperties

public Map getConnectionFactoryProperties()
Returns:
Returns underlying connection factory properties.

setConnectionFactoryProperties

public void setConnectionFactoryProperties(Map connectionFactoryProperties)
Parameters:
connectionFactoryProperties - properties to be set on the underlying ConnectionFactory.

setNumberOfConsumers

public void setNumberOfConsumers(int count)
A synonym for AbstractConnector.numberOfConcurrentTransactedReceivers. Note that it affects both transactional and non-transactional scenarios.

Parameters:
count - number of consumers

getNumberOfConsumers

public int getNumberOfConsumers()
A synonym for AbstractConnector.numberOfConcurrentTransactedReceivers.

Returns:
number of consumers

isEmbeddedMode

public boolean isEmbeddedMode()

setEmbeddedMode

public void setEmbeddedMode(boolean embeddedMode)

getSameRMOverrideValue

public Boolean getSameRMOverrideValue()

setSameRMOverrideValue

public void setSameRMOverrideValue(Boolean sameRMOverrideValue)

getSelector

public JmsSelectorFilter getSelector(ImmutableEndpoint endpoint)

createOperationResource

protected Session createOperationResource(ImmutableEndpoint endpoint)
                                   throws MuleException
Overrides:
createOperationResource in class AbstractConnector
Throws:
MuleException

getOperationResourceFactory

protected Object getOperationResourceFactory()
Overrides:
getOperationResourceFactory in class AbstractConnector


Copyright © 2003-2012 MuleSoft, Inc.. All Rights Reserved.