You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/01/06 11:44:08 UTC

[camel] 06/07: CAMEL-15995: camel-sjms - Make it more feature compatible with camel-jms (producer)

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 8c741e27f70785a0add742fad3ee68ec0ea4689a
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Jan 6 12:37:31 2021 +0100

    CAMEL-15995: camel-sjms - Make it more feature compatible with camel-jms (producer)
---
 .../apache/camel/catalog/docs/sjms-component.adoc  |  25 +-
 .../apache/camel/catalog/docs/sjms2-component.adoc |  25 +-
 .../component/sjms/SjmsComponentConfigurer.java    |  12 -
 .../component/sjms/SjmsEndpointConfigurer.java     |  48 +-
 .../component/sjms/SjmsEndpointUriFactory.java     |  48 +-
 .../org/apache/camel/component/sjms/sjms.json      |  25 +-
 .../camel-sjms/src/main/docs/sjms-component.adoc   |  25 +-
 .../sjms/AggregatedExceptionListener.java          |  53 --
 .../camel/component/sjms/SessionCallback.java      |  14 +-
 .../apache/camel/component/sjms/SjmsComponent.java |  54 +-
 .../apache/camel/component/sjms/SjmsEndpoint.java  | 233 ++-----
 .../sjms/SjmsLoggingExceptionListener.java         |  46 --
 .../apache/camel/component/sjms/SjmsProducer.java  |  24 +-
 .../apache/camel/component/sjms/SjmsTemplate.java  |  77 ++-
 .../component/sjms/TransactionCommitStrategy.java  |  44 --
 .../component/sjms/TransactionOnCompletion.java    |  18 +-
 .../sjms/consumer/EndpointMessageListener.java     |  87 ++-
 .../consumer/SimpleMessageListenerContainer.java   |   9 +-
 .../component/sjms/jms/Jms11ObjectFactory.java     |  14 +-
 .../camel/component/sjms/jms/JmsBinding.java       |  58 --
 .../ExclusiveQueueMessageListenerContainer.java    |   7 +
 .../component/sjms/reply/QueueReplyManager.java    |  18 +-
 .../camel/component/sjms/reply/ReplyManager.java   |  15 -
 .../component/sjms/reply/ReplyManagerSupport.java  |  24 +-
 .../TemporaryQueueMessageListenerContainer.java    |   7 +
 .../sjms/reply/TemporaryQueueReplyManager.java     |  16 +-
 .../sjms/SjmsEndpointNameOverrideTest.java         |   1 -
 .../camel/component/sjms/SjmsEndpointTest.java     |   1 -
 .../consumer/InOnlyTopicDurableConsumerTest.java   |  11 +-
 .../sjms/consumer/InOutConsumerQueueTest.java      |   3 +-
 .../component/sjms/support/JmsTestSupport.java     |   1 -
 ....java => TransactedQueueInOutProducerTest.java} |  22 +-
 .../sjms/tx/TransactedQueueProducerTest.java       |  14 +-
 .../sjms/tx/TransactedTopicProducerTest.java       |   2 +-
 components/camel-sjms2/pom.xml                     |  11 +-
 .../component/sjms2/Sjms2EndpointUriFactory.java   |  12 +-
 .../org/apache/camel/component/sjms2/sjms2.json    |  25 +-
 .../camel-sjms2/src/main/docs/sjms2-component.adoc |  25 +-
 .../camel/component/sjms2/Sjms2Endpoint.java       |  22 +-
 .../sjms2/Sjms2EndpointNameOverrideTest.java       |   1 -
 .../camel/component/sjms2/Sjms2EndpointTest.java   |   2 -
 .../consumer/InOnlyTopicDurableConsumerTest.java   |  15 +-
 .../component/sjms2/support/Jms2TestSupport.java   |   1 -
 .../dsl/Sjms2ComponentBuilderFactory.java          |  54 +-
 .../component/dsl/SjmsComponentBuilderFactory.java |  54 +-
 .../endpoint/dsl/Sjms2EndpointBuilderFactory.java  | 716 ++++++---------------
 .../endpoint/dsl/SjmsEndpointBuilderFactory.java   | 716 ++++++---------------
 .../modules/ROOT/pages/sjms-component.adoc         |  25 +-
 .../modules/ROOT/pages/sjms2-component.adoc        |  25 +-
 49 files changed, 798 insertions(+), 1987 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/sjms-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/sjms-component.adoc
index eaf6c55..e77b8ff 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/sjms-component.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/sjms-component.adoc
@@ -79,15 +79,14 @@ You append query options to the URI using the following format,
 == Component Options and Configurations
 
 // component options: START
-The Simple JMS component supports 14 options, which are listed below.
+The Simple JMS component supports 11 options, which are listed below.
 
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *connectionCount* (common) | The maximum number of connections available to endpoints started under this component | 1 | Integer
-| *connectionFactory* (common) | *Autowired* A ConnectionFactory is required to enable the SjmsComponent. It can be set directly or set set as part of a ConnectionResource. |  | ConnectionFactory
+| *connectionFactory* (common) | *Autowired* The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
 | *autowiredEnabled* (advanced) | Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. | true | boolean
@@ -98,8 +97,6 @@ The Simple JMS component supports 14 options, which are listed below.
 | *replyToOnTimeoutMaxConcurrent{zwsp}Consumers* (advanced) | Specifies the maximum number of concurrent consumers for continue routing when timeout occurred when using request/reply over JMS. | 1 | int
 | *requestTimeoutCheckerInterval* (advanced) | Configures how often Camel should check for timed out Exchanges when doing request/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeout occurs, then you can lower this interval, to check more frequently. The timeout is determined by the option requestTimeout. | 1000 | long
 | *headerFilterStrategy* (filter) | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message. |  | HeaderFilterStrategy
-| *password* (security) | Password to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory. |  | String
-| *username* (security) | Username to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory. |  | String
 |===
 // component options: END
 
@@ -124,21 +121,23 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (48 parameters):
+=== Query Parameters (44 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
 | *acknowledgementMode* (common) | The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. There are 4 enums and the value can be one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE | AUTO_ACKNOWLEDGE | SessionAcknowledgementType
+| *connectionFactory* (common) | The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
 | *disableReplyTo* (common) | Specifies whether Camel ignores the JMSReplyTo header in messages. If true, Camel does not send a reply back to the destination specified in the JMSReplyTo header. You can use this option if you want Camel to consume from a route and you do not want Camel to automatically send back a reply message because another component in your code handles the reply message. You can also use this option if you want to use Camel as a proxy between different message broker [...]
 | *replyTo* (common) | Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer). |  | String
 | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean
 | *asyncConsumer* (consumer) | Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transac [...]
 | *autoStartup* (consumer) | Specifies whether the consumer container should auto-startup. | true | boolean
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
+| *clientId* (consumer) | Sets the JMS client ID to use. Note that this value, if specified, must be unique and can only be used by a single JMS connection instance. It is typically only required for durable topic subscriptions. If using Apache ActiveMQ you may prefer to use Virtual Topics instead. |  | String
 | *concurrentConsumers* (consumer) | Specifies the default number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToConcurrentConsumers is used to control number of concurrent consumers on the reply message listener. | 1 | int
-| *durableSubscriptionId* (consumer) | Sets the durable subscription Id required for durable topics. |  | String
+| *durableSubscriptionName* (consumer) | The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well. |  | String
 | *replyToDeliveryPersistent* (consumer) | Specifies whether to use persistent delivery by default for replies. | true | boolean
 | *eagerLoadingOfProperties* (consumer) | Enables eager loading of JMS properties and payload as soon as a message is loaded which generally is inefficient as the JMS properties may not be required but sometimes can catch early any issues with the underlying JMS provider and the use of JMS properties. See also the option eagerPoisonBody. | false | boolean
 | *eagerPoisonBody* (consumer) | If eagerLoadingOfProperties is enabled and the JMS message payload (JMS body or JMS properties) is poison (cannot be read/mapped), then set this text as the message body instead so the message can be processed (the cause of the poison are already stored as exception on the Exchange). This can be turned off by setting eagerPoisonBody=false. See also the option eagerLoadingOfProperties. | Poison JMS message due to ${exception.message} | String
@@ -148,22 +147,19 @@ with the following path and query parameters:
 | *replyToSameDestinationAllowed* (consumer) | Whether a JMS consumer is allowed to send a reply message to the same destination that the consumer is using to consume from. This prevents an endless loop by consuming and sending back the same message to itself. | false | boolean
 | *deliveryMode* (producer) | Specifies the delivery mode to be used. Possible values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT = 2. There are 2 enums and the value can be one of: 1, 2 |  | Integer
 | *deliveryPersistent* (producer) | Specifies whether persistent delivery is used by default. | true | boolean
-| *explicitQosEnabled* (producer) | Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option, which operates at message granularity, reading QoS properties exclusively from the Camel In message headers. | false | Boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
-| *preserveMessageQos* (producer) | Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDeliveryMode, and JMSExpiration. You can provide all or only some of them. If not provided, Camel will fall back to use the values from the endpoint instead. So, when using this option, the headers override the values from the endpoint. The explicitQosEnable [...]
 | *priority* (producer) | Values greater than 1 specify the message priority when sending (where 1 is the lowest priority and 9 is the highest). The explicitQosEnabled option must also be enabled in order for this option to have any effect. There are 9 enums and the value can be one of: 1, 2, 3, 4, 5, 6, 7, 8, 9 | 4 | int
 | *replyToConcurrentConsumers* (producer) | Specifies the default number of concurrent consumers when doing request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. | 1 | int
 | *replyToOverride* (producer) | Provides an explicit ReplyTo destination in the JMS message, which overrides the setting of replyTo. It is useful if you want to forward the message to a remote Queue and receive the reply message from the ReplyTo destination. |  | String
-| *replyToType* (producer) | Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS. Possible values are: Temporary, Shared, or Exclusive. By default Camel will use temporary queues. However if replyTo has been configured, then Shared is used by default. This option allows you to use exclusive queues instead of shared ones. See Camel JMS documentation for more details, and especially the notes about the implications if running  [...]
+| *replyToType* (producer) | Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS. Possible values are: Temporary or Exclusive. By default Camel will use temporary queues. However if replyTo has been configured, then Exclusive is used. There are 2 enums and the value can be one of: Temporary, Exclusive |  | ReplyToType
 | *requestTimeout* (producer) | The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You can include the header CamelJmsRequestTimeout to override this endpoint configured timeout value, and thus have per message individual timeout values. See also the requestTimeoutCheckerInterval option. | 20000 | long
 | *timeToLive* (producer) | When sending messages, specifies the time-to-live of the message (in milliseconds). | -1 | long
 | *allowNullBody* (producer) | Whether to allow sending messages with no body. If this option is false and the message body is null, then an JMSException is thrown. | true | boolean
 | *disableTimeToLive* (producer) | Use this option to force disabling time to live. For example when you do request/reply over JMS, then Camel will by default use the requestTimeout value as time to live on the message being sent. The problem is that the sender and receiver systems have to have their clocks synchronized, so they are in sync. This is not always so easy to archive. So you can use disableTimeToLive=true to not set a time to live value on the sent message. Then the message w [...]
-| *includeSentJMSMessageID* (producer) | Only applicable when sending to JMS destination using InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange with the actual JMSMessageID that was used by the JMS client when the message was sent to the JMS destination. | false | boolean
+| *explicitQosEnabled* (producer) | Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option, which operates at message granularity, reading QoS properties exclusively from the Camel In message headers. | false | Boolean
+| *preserveMessageQos* (producer) | Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDeliveryMode, and JMSExpiration. You can provide all or only some of them. If not provided, Camel will fall back to use the values from the endpoint instead. So, when using this option, the headers override the values from the endpoint. The explicitQosEnable [...]
 | *asyncStartListener* (advanced) | Whether to startup the consumer message listener asynchronously, when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker, then it may block while retrying and/or failover. This will cause Camel to block while starting routes. By setting this option to true, you will let routes startup, while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this option is used, then b [...]
 | *asyncStopListener* (advanced) | Whether to stop the consumer message listener asynchronously, when stopping a route. | false | boolean
-| *connectionCount* (advanced) | *Deprecated* The maximum number of connections available to this endpoint |  | Integer
-| *connectionFactory* (advanced) | Initializes the connectionFactory for the endpoint, which takes precedence over the component's connectionFactory, if any |  | ConnectionFactory
 | *destinationCreationStrategy* (advanced) | To use a custom DestinationCreationStrategy. |  | DestinationCreationStrategy
 | *exceptionListener* (advanced) | Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions. |  | ExceptionListener
 | *headerFilterStrategy* (advanced) | To use a custom HeaderFilterStrategy to filter header to and from Camel message. |  | HeaderFilterStrategy
@@ -174,10 +170,7 @@ with the following path and query parameters:
 | *recoveryInterval* (advanced) | Specifies the interval between recovery attempts, i.e. when a connection is being refreshed, in milliseconds. The default is 5000 ms, that is, 5 seconds. | 5000 | long
 | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
 | *transferException* (advanced) | If enabled and you are using Request Reply messaging (InOut) and an Exchange failed on the consumer side, then the caused Exception will be send back in response as a javax.jms.ObjectMessage. If the client is Camel, the returned Exception is rethrown. This allows you to use Camel JMS as a bridge in your routing - for example, using persistent queues to enable robust routing. Notice that if you also have transferExchange enabled, this option takes preced [...]
-| *errorHandlerLoggingLevel* (logging) | Allows to configure the default errorHandler logging level for logging uncaught exceptions. There are 6 enums and the value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | WARN | LoggingLevel
-| *errorHandlerLogStackTrace* (logging) | Allows to control whether stacktraces should be logged or not, by the default errorHandler. | true | boolean
 | *transacted* (transaction) | Specifies whether to use transacted mode | false | boolean
-| *sharedJMSSession* (transaction) | Specifies whether to share JMS session with other SJMS endpoints. Turn this off if your route is accessing to multiple JMS providers. If you need transaction against multiple JMS providers, use jms component to leverage XA transaction. | true | boolean
 |===
 // endpoint options: END
 
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/sjms2-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/sjms2-component.adoc
index a638296..d589102 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/sjms2-component.adoc
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/sjms2-component.adoc
@@ -79,15 +79,14 @@ You append query options to the URI using the following format,
 == Component Options and Configurations
 
 // component options: START
-The Simple JMS2 component supports 14 options, which are listed below.
+The Simple JMS2 component supports 11 options, which are listed below.
 
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *connectionCount* (common) | The maximum number of connections available to endpoints started under this component | 1 | Integer
-| *connectionFactory* (common) | *Autowired* A ConnectionFactory is required to enable the SjmsComponent. It can be set directly or set set as part of a ConnectionResource. |  | ConnectionFactory
+| *connectionFactory* (common) | *Autowired* The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
 | *autowiredEnabled* (advanced) | Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. | true | boolean
@@ -98,8 +97,6 @@ The Simple JMS2 component supports 14 options, which are listed below.
 | *replyToOnTimeoutMaxConcurrent{zwsp}Consumers* (advanced) | Specifies the maximum number of concurrent consumers for continue routing when timeout occurred when using request/reply over JMS. | 1 | int
 | *requestTimeoutCheckerInterval* (advanced) | Configures how often Camel should check for timed out Exchanges when doing request/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeout occurs, then you can lower this interval, to check more frequently. The timeout is determined by the option requestTimeout. | 1000 | long
 | *headerFilterStrategy* (filter) | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message. |  | HeaderFilterStrategy
-| *password* (security) | Password to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory. |  | String
-| *username* (security) | Username to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory. |  | String
 |===
 // component options: END
 
@@ -124,22 +121,24 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (51 parameters):
+=== Query Parameters (47 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
 | *acknowledgementMode* (common) | The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. There are 4 enums and the value can be one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE | AUTO_ACKNOWLEDGE | SessionAcknowledgementType
+| *connectionFactory* (common) | The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
 | *disableReplyTo* (common) | Specifies whether Camel ignores the JMSReplyTo header in messages. If true, Camel does not send a reply back to the destination specified in the JMSReplyTo header. You can use this option if you want Camel to consume from a route and you do not want Camel to automatically send back a reply message because another component in your code handles the reply message. You can also use this option if you want to use Camel as a proxy between different message broker [...]
 | *replyTo* (common) | Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer). |  | String
 | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean
 | *asyncConsumer* (consumer) | Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transac [...]
 | *autoStartup* (consumer) | Specifies whether the consumer container should auto-startup. | true | boolean
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
+| *clientId* (consumer) | Sets the JMS client ID to use. Note that this value, if specified, must be unique and can only be used by a single JMS connection instance. It is typically only required for durable topic subscriptions. If using Apache ActiveMQ you may prefer to use Virtual Topics instead. |  | String
 | *concurrentConsumers* (consumer) | Specifies the default number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToConcurrentConsumers is used to control number of concurrent consumers on the reply message listener. | 1 | int
 | *durable* (consumer) | Sets topic consumer to durable. | false | boolean
-| *durableSubscriptionId* (consumer) | Sets the durable subscription Id required for durable topics. |  | String
+| *durableSubscriptionName* (consumer) | The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well. |  | String
 | *replyToDeliveryPersistent* (consumer) | Specifies whether to use persistent delivery by default for replies. | true | boolean
 | *shared* (consumer) | Sets the consumer to shared. | false | boolean
 | *subscriptionId* (consumer) | Sets the subscription Id, required for durable or shared topics. |  | String
@@ -151,22 +150,19 @@ with the following path and query parameters:
 | *replyToSameDestinationAllowed* (consumer) | Whether a JMS consumer is allowed to send a reply message to the same destination that the consumer is using to consume from. This prevents an endless loop by consuming and sending back the same message to itself. | false | boolean
 | *deliveryMode* (producer) | Specifies the delivery mode to be used. Possible values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT = 2. There are 2 enums and the value can be one of: 1, 2 |  | Integer
 | *deliveryPersistent* (producer) | Specifies whether persistent delivery is used by default. | true | boolean
-| *explicitQosEnabled* (producer) | Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option, which operates at message granularity, reading QoS properties exclusively from the Camel In message headers. | false | Boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
-| *preserveMessageQos* (producer) | Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDeliveryMode, and JMSExpiration. You can provide all or only some of them. If not provided, Camel will fall back to use the values from the endpoint instead. So, when using this option, the headers override the values from the endpoint. The explicitQosEnable [...]
 | *priority* (producer) | Values greater than 1 specify the message priority when sending (where 1 is the lowest priority and 9 is the highest). The explicitQosEnabled option must also be enabled in order for this option to have any effect. There are 9 enums and the value can be one of: 1, 2, 3, 4, 5, 6, 7, 8, 9 | 4 | int
 | *replyToConcurrentConsumers* (producer) | Specifies the default number of concurrent consumers when doing request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. | 1 | int
 | *replyToOverride* (producer) | Provides an explicit ReplyTo destination in the JMS message, which overrides the setting of replyTo. It is useful if you want to forward the message to a remote Queue and receive the reply message from the ReplyTo destination. |  | String
-| *replyToType* (producer) | Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS. Possible values are: Temporary, Shared, or Exclusive. By default Camel will use temporary queues. However if replyTo has been configured, then Shared is used by default. This option allows you to use exclusive queues instead of shared ones. See Camel JMS documentation for more details, and especially the notes about the implications if running  [...]
+| *replyToType* (producer) | Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS. Possible values are: Temporary or Exclusive. By default Camel will use temporary queues. However if replyTo has been configured, then Exclusive is used. There are 2 enums and the value can be one of: Temporary, Exclusive |  | ReplyToType
 | *requestTimeout* (producer) | The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You can include the header CamelJmsRequestTimeout to override this endpoint configured timeout value, and thus have per message individual timeout values. See also the requestTimeoutCheckerInterval option. | 20000 | long
 | *timeToLive* (producer) | When sending messages, specifies the time-to-live of the message (in milliseconds). | -1 | long
 | *allowNullBody* (producer) | Whether to allow sending messages with no body. If this option is false and the message body is null, then an JMSException is thrown. | true | boolean
 | *disableTimeToLive* (producer) | Use this option to force disabling time to live. For example when you do request/reply over JMS, then Camel will by default use the requestTimeout value as time to live on the message being sent. The problem is that the sender and receiver systems have to have their clocks synchronized, so they are in sync. This is not always so easy to archive. So you can use disableTimeToLive=true to not set a time to live value on the sent message. Then the message w [...]
-| *includeSentJMSMessageID* (producer) | Only applicable when sending to JMS destination using InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange with the actual JMSMessageID that was used by the JMS client when the message was sent to the JMS destination. | false | boolean
+| *explicitQosEnabled* (producer) | Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option, which operates at message granularity, reading QoS properties exclusively from the Camel In message headers. | false | Boolean
+| *preserveMessageQos* (producer) | Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDeliveryMode, and JMSExpiration. You can provide all or only some of them. If not provided, Camel will fall back to use the values from the endpoint instead. So, when using this option, the headers override the values from the endpoint. The explicitQosEnable [...]
 | *asyncStartListener* (advanced) | Whether to startup the consumer message listener asynchronously, when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker, then it may block while retrying and/or failover. This will cause Camel to block while starting routes. By setting this option to true, you will let routes startup, while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this option is used, then b [...]
 | *asyncStopListener* (advanced) | Whether to stop the consumer message listener asynchronously, when stopping a route. | false | boolean
-| *connectionCount* (advanced) | *Deprecated* The maximum number of connections available to this endpoint |  | Integer
-| *connectionFactory* (advanced) | Initializes the connectionFactory for the endpoint, which takes precedence over the component's connectionFactory, if any |  | ConnectionFactory
 | *destinationCreationStrategy* (advanced) | To use a custom DestinationCreationStrategy. |  | DestinationCreationStrategy
 | *exceptionListener* (advanced) | Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions. |  | ExceptionListener
 | *headerFilterStrategy* (advanced) | To use a custom HeaderFilterStrategy to filter header to and from Camel message. |  | HeaderFilterStrategy
@@ -177,10 +173,7 @@ with the following path and query parameters:
 | *recoveryInterval* (advanced) | Specifies the interval between recovery attempts, i.e. when a connection is being refreshed, in milliseconds. The default is 5000 ms, that is, 5 seconds. | 5000 | long
 | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
 | *transferException* (advanced) | If enabled and you are using Request Reply messaging (InOut) and an Exchange failed on the consumer side, then the caused Exception will be send back in response as a javax.jms.ObjectMessage. If the client is Camel, the returned Exception is rethrown. This allows you to use Camel JMS as a bridge in your routing - for example, using persistent queues to enable robust routing. Notice that if you also have transferExchange enabled, this option takes preced [...]
-| *errorHandlerLoggingLevel* (logging) | Allows to configure the default errorHandler logging level for logging uncaught exceptions. There are 6 enums and the value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | WARN | LoggingLevel
-| *errorHandlerLogStackTrace* (logging) | Allows to control whether stacktraces should be logged or not, by the default errorHandler. | true | boolean
 | *transacted* (transaction) | Specifies whether to use transacted mode | false | boolean
-| *sharedJMSSession* (transaction) | Specifies whether to share JMS session with other SJMS endpoints. Turn this off if your route is accessing to multiple JMS providers. If you need transaction against multiple JMS providers, use jms component to leverage XA transaction. | true | boolean
 |===
 // endpoint options: END
 
diff --git a/components/camel-sjms/src/generated/java/org/apache/camel/component/sjms/SjmsComponentConfigurer.java b/components/camel-sjms/src/generated/java/org/apache/camel/component/sjms/SjmsComponentConfigurer.java
index 566e482..ba8c379 100644
--- a/components/camel-sjms/src/generated/java/org/apache/camel/component/sjms/SjmsComponentConfigurer.java
+++ b/components/camel-sjms/src/generated/java/org/apache/camel/component/sjms/SjmsComponentConfigurer.java
@@ -25,8 +25,6 @@ public class SjmsComponentConfigurer extends PropertyConfigurerSupport implement
         case "autowiredEnabled": target.setAutowiredEnabled(property(camelContext, boolean.class, value)); return true;
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
-        case "connectioncount":
-        case "connectionCount": target.setConnectionCount(property(camelContext, java.lang.Integer.class, value)); return true;
         case "connectionfactory":
         case "connectionFactory": target.setConnectionFactory(property(camelContext, javax.jms.ConnectionFactory.class, value)); return true;
         case "destinationcreationstrategy":
@@ -39,14 +37,12 @@ public class SjmsComponentConfigurer extends PropertyConfigurerSupport implement
         case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
         case "messagecreatedstrategy":
         case "messageCreatedStrategy": target.setMessageCreatedStrategy(property(camelContext, org.apache.camel.component.sjms.jms.MessageCreatedStrategy.class, value)); return true;
-        case "password": target.setPassword(property(camelContext, java.lang.String.class, value)); return true;
         case "recoveryinterval":
         case "recoveryInterval": target.setRecoveryInterval(property(camelContext, java.time.Duration.class, value).toMillis()); return true;
         case "replytoontimeoutmaxconcurrentconsumers":
         case "replyToOnTimeoutMaxConcurrentConsumers": target.setReplyToOnTimeoutMaxConcurrentConsumers(property(camelContext, int.class, value)); return true;
         case "requesttimeoutcheckerinterval":
         case "requestTimeoutCheckerInterval": target.setRequestTimeoutCheckerInterval(property(camelContext, java.time.Duration.class, value).toMillis()); return true;
-        case "username": target.setUsername(property(camelContext, java.lang.String.class, value)); return true;
         default: return false;
         }
     }
@@ -63,8 +59,6 @@ public class SjmsComponentConfigurer extends PropertyConfigurerSupport implement
         case "autowiredEnabled": return boolean.class;
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return boolean.class;
-        case "connectioncount":
-        case "connectionCount": return java.lang.Integer.class;
         case "connectionfactory":
         case "connectionFactory": return javax.jms.ConnectionFactory.class;
         case "destinationcreationstrategy":
@@ -77,14 +71,12 @@ public class SjmsComponentConfigurer extends PropertyConfigurerSupport implement
         case "lazyStartProducer": return boolean.class;
         case "messagecreatedstrategy":
         case "messageCreatedStrategy": return org.apache.camel.component.sjms.jms.MessageCreatedStrategy.class;
-        case "password": return java.lang.String.class;
         case "recoveryinterval":
         case "recoveryInterval": return long.class;
         case "replytoontimeoutmaxconcurrentconsumers":
         case "replyToOnTimeoutMaxConcurrentConsumers": return int.class;
         case "requesttimeoutcheckerinterval":
         case "requestTimeoutCheckerInterval": return long.class;
-        case "username": return java.lang.String.class;
         default: return null;
         }
     }
@@ -97,8 +89,6 @@ public class SjmsComponentConfigurer extends PropertyConfigurerSupport implement
         case "autowiredEnabled": return target.isAutowiredEnabled();
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return target.isBridgeErrorHandler();
-        case "connectioncount":
-        case "connectionCount": return target.getConnectionCount();
         case "connectionfactory":
         case "connectionFactory": return target.getConnectionFactory();
         case "destinationcreationstrategy":
@@ -111,14 +101,12 @@ public class SjmsComponentConfigurer extends PropertyConfigurerSupport implement
         case "lazyStartProducer": return target.isLazyStartProducer();
         case "messagecreatedstrategy":
         case "messageCreatedStrategy": return target.getMessageCreatedStrategy();
-        case "password": return target.getPassword();
         case "recoveryinterval":
         case "recoveryInterval": return target.getRecoveryInterval();
         case "replytoontimeoutmaxconcurrentconsumers":
         case "replyToOnTimeoutMaxConcurrentConsumers": return target.getReplyToOnTimeoutMaxConcurrentConsumers();
         case "requesttimeoutcheckerinterval":
         case "requestTimeoutCheckerInterval": return target.getRequestTimeoutCheckerInterval();
-        case "username": return target.getUsername();
         default: return null;
         }
     }
diff --git a/components/camel-sjms/src/generated/java/org/apache/camel/component/sjms/SjmsEndpointConfigurer.java b/components/camel-sjms/src/generated/java/org/apache/camel/component/sjms/SjmsEndpointConfigurer.java
index 9487e58..3b55532 100644
--- a/components/camel-sjms/src/generated/java/org/apache/camel/component/sjms/SjmsEndpointConfigurer.java
+++ b/components/camel-sjms/src/generated/java/org/apache/camel/component/sjms/SjmsEndpointConfigurer.java
@@ -35,10 +35,10 @@ public class SjmsEndpointConfigurer extends PropertyConfigurerSupport implements
         case "autoStartup": target.setAutoStartup(property(camelContext, boolean.class, value)); return true;
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
+        case "clientid":
+        case "clientId": target.setClientId(property(camelContext, java.lang.String.class, value)); return true;
         case "concurrentconsumers":
         case "concurrentConsumers": target.setConcurrentConsumers(property(camelContext, int.class, value)); return true;
-        case "connectioncount":
-        case "connectionCount": target.setConnectionCount(property(camelContext, java.lang.Integer.class, value)); return true;
         case "connectionfactory":
         case "connectionFactory": target.setConnectionFactory(property(camelContext, javax.jms.ConnectionFactory.class, value)); return true;
         case "deliverymode":
@@ -51,16 +51,12 @@ public class SjmsEndpointConfigurer extends PropertyConfigurerSupport implements
         case "disableReplyTo": target.setDisableReplyTo(property(camelContext, boolean.class, value)); return true;
         case "disabletimetolive":
         case "disableTimeToLive": target.setDisableTimeToLive(property(camelContext, boolean.class, value)); return true;
-        case "durablesubscriptionid":
-        case "durableSubscriptionId": target.setDurableSubscriptionId(property(camelContext, java.lang.String.class, value)); return true;
+        case "durablesubscriptionname":
+        case "durableSubscriptionName": target.setDurableSubscriptionName(property(camelContext, java.lang.String.class, value)); return true;
         case "eagerloadingofproperties":
         case "eagerLoadingOfProperties": target.setEagerLoadingOfProperties(property(camelContext, boolean.class, value)); return true;
         case "eagerpoisonbody":
         case "eagerPoisonBody": target.setEagerPoisonBody(property(camelContext, java.lang.String.class, value)); return true;
-        case "errorhandlerlogstacktrace":
-        case "errorHandlerLogStackTrace": target.setErrorHandlerLogStackTrace(property(camelContext, boolean.class, value)); return true;
-        case "errorhandlerlogginglevel":
-        case "errorHandlerLoggingLevel": target.setErrorHandlerLoggingLevel(property(camelContext, org.apache.camel.LoggingLevel.class, value)); return true;
         case "exceptionhandler":
         case "exceptionHandler": target.setExceptionHandler(property(camelContext, org.apache.camel.spi.ExceptionHandler.class, value)); return true;
         case "exceptionlistener":
@@ -73,8 +69,6 @@ public class SjmsEndpointConfigurer extends PropertyConfigurerSupport implements
         case "headerFilterStrategy": target.setHeaderFilterStrategy(property(camelContext, org.apache.camel.spi.HeaderFilterStrategy.class, value)); return true;
         case "includealljmsxproperties":
         case "includeAllJMSXProperties": target.setIncludeAllJMSXProperties(property(camelContext, boolean.class, value)); return true;
-        case "includesentjmsmessageid":
-        case "includeSentJMSMessageID": target.setIncludeSentJMSMessageID(property(camelContext, boolean.class, value)); return true;
         case "jmskeyformatstrategy":
         case "jmsKeyFormatStrategy": target.setJmsKeyFormatStrategy(property(camelContext, org.apache.camel.component.sjms.jms.JmsKeyFormatStrategy.class, value)); return true;
         case "lazystartproducer":
@@ -104,8 +98,6 @@ public class SjmsEndpointConfigurer extends PropertyConfigurerSupport implements
         case "replyToType": target.setReplyToType(property(camelContext, org.apache.camel.component.sjms.ReplyToType.class, value)); return true;
         case "requesttimeout":
         case "requestTimeout": target.setRequestTimeout(property(camelContext, java.time.Duration.class, value).toMillis()); return true;
-        case "sharedjmssession":
-        case "sharedJMSSession": target.setSharedJMSSession(property(camelContext, boolean.class, value)); return true;
         case "synchronous": target.setSynchronous(property(camelContext, boolean.class, value)); return true;
         case "testconnectiononstartup":
         case "testConnectionOnStartup": target.setTestConnectionOnStartup(property(camelContext, boolean.class, value)); return true;
@@ -135,10 +127,10 @@ public class SjmsEndpointConfigurer extends PropertyConfigurerSupport implements
         case "autoStartup": return boolean.class;
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return boolean.class;
+        case "clientid":
+        case "clientId": return java.lang.String.class;
         case "concurrentconsumers":
         case "concurrentConsumers": return int.class;
-        case "connectioncount":
-        case "connectionCount": return java.lang.Integer.class;
         case "connectionfactory":
         case "connectionFactory": return javax.jms.ConnectionFactory.class;
         case "deliverymode":
@@ -151,16 +143,12 @@ public class SjmsEndpointConfigurer extends PropertyConfigurerSupport implements
         case "disableReplyTo": return boolean.class;
         case "disabletimetolive":
         case "disableTimeToLive": return boolean.class;
-        case "durablesubscriptionid":
-        case "durableSubscriptionId": return java.lang.String.class;
+        case "durablesubscriptionname":
+        case "durableSubscriptionName": return java.lang.String.class;
         case "eagerloadingofproperties":
         case "eagerLoadingOfProperties": return boolean.class;
         case "eagerpoisonbody":
         case "eagerPoisonBody": return java.lang.String.class;
-        case "errorhandlerlogstacktrace":
-        case "errorHandlerLogStackTrace": return boolean.class;
-        case "errorhandlerlogginglevel":
-        case "errorHandlerLoggingLevel": return org.apache.camel.LoggingLevel.class;
         case "exceptionhandler":
         case "exceptionHandler": return org.apache.camel.spi.ExceptionHandler.class;
         case "exceptionlistener":
@@ -173,8 +161,6 @@ public class SjmsEndpointConfigurer extends PropertyConfigurerSupport implements
         case "headerFilterStrategy": return org.apache.camel.spi.HeaderFilterStrategy.class;
         case "includealljmsxproperties":
         case "includeAllJMSXProperties": return boolean.class;
-        case "includesentjmsmessageid":
-        case "includeSentJMSMessageID": return boolean.class;
         case "jmskeyformatstrategy":
         case "jmsKeyFormatStrategy": return org.apache.camel.component.sjms.jms.JmsKeyFormatStrategy.class;
         case "lazystartproducer":
@@ -204,8 +190,6 @@ public class SjmsEndpointConfigurer extends PropertyConfigurerSupport implements
         case "replyToType": return org.apache.camel.component.sjms.ReplyToType.class;
         case "requesttimeout":
         case "requestTimeout": return long.class;
-        case "sharedjmssession":
-        case "sharedJMSSession": return boolean.class;
         case "synchronous": return boolean.class;
         case "testconnectiononstartup":
         case "testConnectionOnStartup": return boolean.class;
@@ -236,10 +220,10 @@ public class SjmsEndpointConfigurer extends PropertyConfigurerSupport implements
         case "autoStartup": return target.isAutoStartup();
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return target.isBridgeErrorHandler();
+        case "clientid":
+        case "clientId": return target.getClientId();
         case "concurrentconsumers":
         case "concurrentConsumers": return target.getConcurrentConsumers();
-        case "connectioncount":
-        case "connectionCount": return target.getConnectionCount();
         case "connectionfactory":
         case "connectionFactory": return target.getConnectionFactory();
         case "deliverymode":
@@ -252,16 +236,12 @@ public class SjmsEndpointConfigurer extends PropertyConfigurerSupport implements
         case "disableReplyTo": return target.isDisableReplyTo();
         case "disabletimetolive":
         case "disableTimeToLive": return target.isDisableTimeToLive();
-        case "durablesubscriptionid":
-        case "durableSubscriptionId": return target.getDurableSubscriptionId();
+        case "durablesubscriptionname":
+        case "durableSubscriptionName": return target.getDurableSubscriptionName();
         case "eagerloadingofproperties":
         case "eagerLoadingOfProperties": return target.isEagerLoadingOfProperties();
         case "eagerpoisonbody":
         case "eagerPoisonBody": return target.getEagerPoisonBody();
-        case "errorhandlerlogstacktrace":
-        case "errorHandlerLogStackTrace": return target.isErrorHandlerLogStackTrace();
-        case "errorhandlerlogginglevel":
-        case "errorHandlerLoggingLevel": return target.getErrorHandlerLoggingLevel();
         case "exceptionhandler":
         case "exceptionHandler": return target.getExceptionHandler();
         case "exceptionlistener":
@@ -274,8 +254,6 @@ public class SjmsEndpointConfigurer extends PropertyConfigurerSupport implements
         case "headerFilterStrategy": return target.getHeaderFilterStrategy();
         case "includealljmsxproperties":
         case "includeAllJMSXProperties": return target.isIncludeAllJMSXProperties();
-        case "includesentjmsmessageid":
-        case "includeSentJMSMessageID": return target.isIncludeSentJMSMessageID();
         case "jmskeyformatstrategy":
         case "jmsKeyFormatStrategy": return target.getJmsKeyFormatStrategy();
         case "lazystartproducer":
@@ -305,8 +283,6 @@ public class SjmsEndpointConfigurer extends PropertyConfigurerSupport implements
         case "replyToType": return target.getReplyToType();
         case "requesttimeout":
         case "requestTimeout": return target.getRequestTimeout();
-        case "sharedjmssession":
-        case "sharedJMSSession": return target.isSharedJMSSession();
         case "synchronous": return target.isSynchronous();
         case "testconnectiononstartup":
         case "testConnectionOnStartup": return target.isTestConnectionOnStartup();
diff --git a/components/camel-sjms/src/generated/java/org/apache/camel/component/sjms/SjmsEndpointUriFactory.java b/components/camel-sjms/src/generated/java/org/apache/camel/component/sjms/SjmsEndpointUriFactory.java
index 717a7ff..8cda40d 100644
--- a/components/camel-sjms/src/generated/java/org/apache/camel/component/sjms/SjmsEndpointUriFactory.java
+++ b/components/camel-sjms/src/generated/java/org/apache/camel/component/sjms/SjmsEndpointUriFactory.java
@@ -20,57 +20,53 @@ public class SjmsEndpointUriFactory extends org.apache.camel.support.component.E
     private static final Set<String> PROPERTY_NAMES;
     private static final Set<String> SECRET_PROPERTY_NAMES;
     static {
-        Set<String> props = new HashSet<>(50);
-        props.add("includeSentJMSMessageID");
+        Set<String> props = new HashSet<>(46);
         props.add("asyncConsumer");
         props.add("mapJmsMessage");
         props.add("synchronous");
         props.add("includeAllJMSXProperties");
-        props.add("errorHandlerLogStackTrace");
+        props.add("explicitQosEnabled");
+        props.add("transacted");
         props.add("eagerLoadingOfProperties");
+        props.add("autoStartup");
         props.add("timeToLive");
         props.add("bridgeErrorHandler");
+        props.add("jmsKeyFormatStrategy");
         props.add("deliveryMode");
+        props.add("headerFilterStrategy");
         props.add("transferException");
         props.add("exceptionListener");
+        props.add("destinationName");
+        props.add("messageCreatedStrategy");
+        props.add("asyncStopListener");
         props.add("destinationType");
         props.add("asyncStartListener");
         props.add("eagerPoisonBody");
+        props.add("requestTimeout");
+        props.add("allowNullBody");
+        props.add("replyToDeliveryPersistent");
+        props.add("disableReplyTo");
         props.add("replyToConcurrentConsumers");
+        props.add("clientId");
+        props.add("recoveryInterval");
         props.add("destinationCreationStrategy");
+        props.add("exchangePattern");
         props.add("disableTimeToLive");
         props.add("messageSelector");
         props.add("deliveryPersistent");
         props.add("priority");
+        props.add("preserveMessageQos");
         props.add("concurrentConsumers");
         props.add("acknowledgementMode");
+        props.add("replyToType");
         props.add("lazyStartProducer");
+        props.add("connectionFactory");
+        props.add("testConnectionOnStartup");
         props.add("replyTo");
         props.add("replyToOverride");
-        props.add("errorHandlerLoggingLevel");
-        props.add("durableSubscriptionId");
-        props.add("exceptionHandler");
-        props.add("connectionCount");
-        props.add("explicitQosEnabled");
-        props.add("transacted");
-        props.add("autoStartup");
-        props.add("jmsKeyFormatStrategy");
-        props.add("headerFilterStrategy");
-        props.add("destinationName");
-        props.add("messageCreatedStrategy");
-        props.add("asyncStopListener");
-        props.add("requestTimeout");
-        props.add("allowNullBody");
-        props.add("replyToDeliveryPersistent");
-        props.add("disableReplyTo");
-        props.add("recoveryInterval");
-        props.add("exchangePattern");
-        props.add("preserveMessageQos");
-        props.add("replyToType");
-        props.add("testConnectionOnStartup");
-        props.add("connectionFactory");
+        props.add("durableSubscriptionName");
         props.add("replyToSameDestinationAllowed");
-        props.add("sharedJMSSession");
+        props.add("exceptionHandler");
         PROPERTY_NAMES = Collections.unmodifiableSet(props);
         SECRET_PROPERTY_NAMES = Collections.emptySet();
     }
diff --git a/components/camel-sjms/src/generated/resources/org/apache/camel/component/sjms/sjms.json b/components/camel-sjms/src/generated/resources/org/apache/camel/component/sjms/sjms.json
index 9e065f0..480464c 100644
--- a/components/camel-sjms/src/generated/resources/org/apache/camel/component/sjms/sjms.json
+++ b/components/camel-sjms/src/generated/resources/org/apache/camel/component/sjms/sjms.json
@@ -22,8 +22,7 @@
     "lenientProperties": false
   },
   "componentProperties": {
-    "connectionCount": { "kind": "property", "displayName": "Connection Count", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "1", "description": "The maximum number of connections available to endpoints started under this component" },
-    "connectionFactory": { "kind": "property", "displayName": "Connection Factory", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "javax.jms.ConnectionFactory", "deprecated": false, "autowired": true, "secret": false, "description": "A ConnectionFactory is required to enable the SjmsComponent. It can be set directly or set set as part of a ConnectionResource." },
+    "connectionFactory": { "kind": "property", "displayName": "Connection Factory", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "javax.jms.ConnectionFactory", "deprecated": false, "autowired": true, "secret": false, "description": "The connection factory to be use. A connection factory must be configured either on the component or endpoint." },
     "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a me [...]
     "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during star [...]
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which t [...]
@@ -33,22 +32,22 @@
     "recoveryInterval": { "kind": "property", "displayName": "Recovery Interval", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "5000", "description": "Specifies the interval between recovery attempts, i.e. when a connection is being refreshed, in milliseconds. The default is 5000 ms, that is, 5 seconds." },
     "replyToOnTimeoutMaxConcurrentConsumers": { "kind": "property", "displayName": "Reply To On Timeout Max Concurrent Consumers", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "description": "Specifies the maximum number of concurrent consumers for continue routing when timeout occurred when using request\/reply over JMS." },
     "requestTimeoutCheckerInterval": { "kind": "property", "displayName": "Request Timeout Checker Interval", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "1000", "description": "Configures how often Camel should check for timed out Exchanges when doing request\/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeou [...]
-    "headerFilterStrategy": { "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." },
-    "password": { "kind": "property", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "Password to use with the ConnectionFactory. You can also configure username\/password directly on the ConnectionFactory." },
-    "username": { "kind": "property", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "Username to use with the ConnectionFactory. You can also configure username\/password directly on the ConnectionFactory." }
+    "headerFilterStrategy": { "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." }
   },
   "properties": {
     "destinationType": { "kind": "path", "displayName": "Destination Type", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "queue", "topic" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "queue", "description": "The kind of destination to use" },
     "destinationName": { "kind": "path", "displayName": "Destination Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "DestinationName is a JMS queue or topic name. By default, the destinationName is interpreted as a queue name." },
     "acknowledgementMode": { "kind": "parameter", "displayName": "Acknowledgement Mode", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.sjms.jms.SessionAcknowledgementType", "enum": [ "SESSION_TRANSACTED", "CLIENT_ACKNOWLEDGE", "AUTO_ACKNOWLEDGE", "DUPS_OK_ACKNOWLEDGE" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "AUTO_ACKNOWLEDGE", "description": "The JMS acknowledgement name, which is one of:  [...]
+    "connectionFactory": { "kind": "parameter", "displayName": "Connection Factory", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "javax.jms.ConnectionFactory", "deprecated": false, "autowired": false, "secret": false, "description": "The connection factory to be use. A connection factory must be configured either on the component or endpoint." },
     "disableReplyTo": { "kind": "parameter", "displayName": "Disable Reply To", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Specifies whether Camel ignores the JMSReplyTo header in messages. If true, Camel does not send a reply back to the destination specified in the JMSReplyTo header. You can use this option if you want Camel to consume from  [...]
     "replyTo": { "kind": "parameter", "displayName": "Reply To", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer)." },
     "testConnectionOnStartup": { "kind": "parameter", "displayName": "Test Connection On Startup", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel [...]
     "asyncConsumer": { "kind": "parameter", "displayName": "Async Consumer", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the Asy [...]
     "autoStartup": { "kind": "parameter", "displayName": "Auto Startup", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Specifies whether the consumer container should auto-startup." },
     "bridgeErrorHandler": { "kind": "parameter", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a m [...]
+    "clientId": { "kind": "parameter", "displayName": "Client Id", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the JMS client ID to use. Note that this value, if specified, must be unique and can only be used by a single JMS connection instance. It is typically only required for durable topic subscriptions. If using Apache ActiveMQ you may pref [...]
     "concurrentConsumers": { "kind": "parameter", "displayName": "Concurrent Consumers", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "description": "Specifies the default number of concurrent consumers when consuming from JMS (not for request\/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up\/down of threads. When doing r [...]
-    "durableSubscriptionId": { "kind": "parameter", "displayName": "Durable Subscription Id", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the durable subscription Id required for durable topics." },
+    "durableSubscriptionName": { "kind": "parameter", "displayName": "Durable Subscription Name", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well." },
     "replyToDeliveryPersistent": { "kind": "parameter", "displayName": "Reply To Delivery Persistent", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Specifies whether to use persistent delivery by default for replies." },
     "eagerLoadingOfProperties": { "kind": "parameter", "displayName": "Eager Loading Of Properties", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enables eager loading of JMS properties and payload as soon as a message is loaded which generally is inefficient as the JMS properties may not be required but sometimes c [...]
     "eagerPoisonBody": { "kind": "parameter", "displayName": "Eager Poison Body", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "Poison JMS message due to ${exception.message}", "description": "If eagerLoadingOfProperties is enabled and the JMS message payload (JMS body or JMS properties) is poison (cannot be read\/mapped), then se [...]
@@ -58,22 +57,19 @@
     "replyToSameDestinationAllowed": { "kind": "parameter", "displayName": "Reply To Same Destination Allowed", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether a JMS consumer is allowed to send a reply message to the same destination that the consumer is using to consume from. This prevents an endless loop by c [...]
     "deliveryMode": { "kind": "parameter", "displayName": "Delivery Mode", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "enum": [ "1", "2" ], "deprecated": false, "autowired": false, "secret": false, "description": "Specifies the delivery mode to be used. Possible values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT = 2." },
     "deliveryPersistent": { "kind": "parameter", "displayName": "Delivery Persistent", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Specifies whether persistent delivery is used by default." },
-    "explicitQosEnabled": { "kind": "parameter", "displayName": "Explicit Qos Enabled", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "false", "description": "Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLi [...]
     "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during sta [...]
-    "preserveMessageQos": { "kind": "parameter", "displayName": "Preserve Message Qos", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDelive [...]
     "priority": { "kind": "parameter", "displayName": "Priority", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "int", "enum": [ "1", "2", "3", "4", "5", "6", "7", "8", "9" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": 4, "description": "Values greater than 1 specify the message priority when sending (where 1 is the lowest priority and 9 is the highest). The explicitQosEnabled option must also be enabled in orde [...]
     "replyToConcurrentConsumers": { "kind": "parameter", "displayName": "Reply To Concurrent Consumers", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "description": "Specifies the default number of concurrent consumers when doing request\/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up\/down of threads." },
     "replyToOverride": { "kind": "parameter", "displayName": "Reply To Override", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Provides an explicit ReplyTo destination in the JMS message, which overrides the setting of replyTo. It is useful if you want to forward the message to a remote Queue and receive the reply message from the ReplyTo destination." },
-    "replyToType": { "kind": "parameter", "displayName": "Reply To Type", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.sjms.ReplyToType", "enum": [ "Temporary", "Exclusive" ], "deprecated": false, "autowired": false, "secret": false, "description": "Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request\/reply over JMS. Possible values are: Temporary, Shared, or Exclusi [...]
+    "replyToType": { "kind": "parameter", "displayName": "Reply To Type", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.sjms.ReplyToType", "enum": [ "Temporary", "Exclusive" ], "deprecated": false, "autowired": false, "secret": false, "description": "Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request\/reply over JMS. Possible values are: Temporary or Exclusive. By de [...]
     "requestTimeout": { "kind": "parameter", "displayName": "Request Timeout", "group": "producer", "label": "producer", "required": false, "type": "duration", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "20000", "description": "The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You can include the header CamelJmsRequestTimeout to override this endpoint configured timeou [...]
     "timeToLive": { "kind": "parameter", "displayName": "Time To Live", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": -1, "description": "When sending messages, specifies the time-to-live of the message (in milliseconds)." },
     "allowNullBody": { "kind": "parameter", "displayName": "Allow Null Body", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to allow sending messages with no body. If this option is false and the message body is null, then an JMSException is thrown." },
     "disableTimeToLive": { "kind": "parameter", "displayName": "Disable Time To Live", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Use this option to force disabling time to live. For example when you do request\/reply over JMS, then Camel will by default use the requestTimeout value as time to live on the message  [...]
-    "includeSentJMSMessageID": { "kind": "parameter", "displayName": "Include Sent JMSMessage ID", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Only applicable when sending to JMS destination using InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange with the actual JMSMessageID that was  [...]
+    "explicitQosEnabled": { "kind": "parameter", "displayName": "Explicit Qos Enabled", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "false", "description": "Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, p [...]
+    "preserveMessageQos": { "kind": "parameter", "displayName": "Preserve Message Qos", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JM [...]
     "asyncStartListener": { "kind": "parameter", "displayName": "Async Start Listener", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to startup the consumer message listener asynchronously, when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker, then it may block while retrying and\/o [...]
     "asyncStopListener": { "kind": "parameter", "displayName": "Async Stop Listener", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to stop the consumer message listener asynchronously, when stopping a route." },
-    "connectionCount": { "kind": "parameter", "displayName": "Connection Count", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": true, "autowired": false, "secret": false, "description": "The maximum number of connections available to this endpoint" },
-    "connectionFactory": { "kind": "parameter", "displayName": "Connection Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.jms.ConnectionFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Initializes the connectionFactory for the endpoint, which takes precedence over the component's connectionFactory, if any" },
     "destinationCreationStrategy": { "kind": "parameter", "displayName": "Destination Creation Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.sjms.jms.DestinationCreationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom DestinationCreationStrategy." },
     "exceptionListener": { "kind": "parameter", "displayName": "Exception Listener", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.jms.ExceptionListener", "deprecated": false, "autowired": false, "secret": false, "description": "Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions." },
     "headerFilterStrategy": { "kind": "parameter", "displayName": "Header Filter Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom HeaderFilterStrategy to filter header to and from Camel message." },
@@ -84,9 +80,6 @@
     "recoveryInterval": { "kind": "parameter", "displayName": "Recovery Interval", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "5000", "description": "Specifies the interval between recovery attempts, i.e. when a connection is being refreshed, in milliseconds. The default is 5000 ms, that is, 5 seconds." },
     "synchronous": { "kind": "parameter", "displayName": "Synchronous", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported)." },
     "transferException": { "kind": "parameter", "displayName": "Transfer Exception", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled and you are using Request Reply messaging (InOut) and an Exchange failed on the consumer side, then the caused Exception will be send back in response as a javax.jms.ObjectMessage. If the client i [...]
-    "errorHandlerLoggingLevel": { "kind": "parameter", "displayName": "Error Handler Logging Level", "group": "logging", "label": "consumer,logging", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "WARN", "description": "Allows to configure the default errorHandler logging level for logging uncaught exceptions." },
-    "errorHandlerLogStackTrace": { "kind": "parameter", "displayName": "Error Handler Log Stack Trace", "group": "logging", "label": "consumer,logging", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Allows to control whether stacktraces should be logged or not, by the default errorHandler." },
-    "transacted": { "kind": "parameter", "displayName": "Transacted", "group": "transaction", "label": "transaction", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Specifies whether to use transacted mode" },
-    "sharedJMSSession": { "kind": "parameter", "displayName": "Shared JMSSession", "group": "transaction (advanced)", "label": "transaction,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Specifies whether to share JMS session with other SJMS endpoints. Turn this off if your route is accessing to multiple JMS providers. If you need transaction against multiple JMS provi [...]
+    "transacted": { "kind": "parameter", "displayName": "Transacted", "group": "transaction", "label": "transaction", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Specifies whether to use transacted mode" }
   }
 }
diff --git a/components/camel-sjms/src/main/docs/sjms-component.adoc b/components/camel-sjms/src/main/docs/sjms-component.adoc
index eaf6c55..e77b8ff 100644
--- a/components/camel-sjms/src/main/docs/sjms-component.adoc
+++ b/components/camel-sjms/src/main/docs/sjms-component.adoc
@@ -79,15 +79,14 @@ You append query options to the URI using the following format,
 == Component Options and Configurations
 
 // component options: START
-The Simple JMS component supports 14 options, which are listed below.
+The Simple JMS component supports 11 options, which are listed below.
 
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *connectionCount* (common) | The maximum number of connections available to endpoints started under this component | 1 | Integer
-| *connectionFactory* (common) | *Autowired* A ConnectionFactory is required to enable the SjmsComponent. It can be set directly or set set as part of a ConnectionResource. |  | ConnectionFactory
+| *connectionFactory* (common) | *Autowired* The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
 | *autowiredEnabled* (advanced) | Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. | true | boolean
@@ -98,8 +97,6 @@ The Simple JMS component supports 14 options, which are listed below.
 | *replyToOnTimeoutMaxConcurrent{zwsp}Consumers* (advanced) | Specifies the maximum number of concurrent consumers for continue routing when timeout occurred when using request/reply over JMS. | 1 | int
 | *requestTimeoutCheckerInterval* (advanced) | Configures how often Camel should check for timed out Exchanges when doing request/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeout occurs, then you can lower this interval, to check more frequently. The timeout is determined by the option requestTimeout. | 1000 | long
 | *headerFilterStrategy* (filter) | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message. |  | HeaderFilterStrategy
-| *password* (security) | Password to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory. |  | String
-| *username* (security) | Username to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory. |  | String
 |===
 // component options: END
 
@@ -124,21 +121,23 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (48 parameters):
+=== Query Parameters (44 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
 | *acknowledgementMode* (common) | The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. There are 4 enums and the value can be one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE | AUTO_ACKNOWLEDGE | SessionAcknowledgementType
+| *connectionFactory* (common) | The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
 | *disableReplyTo* (common) | Specifies whether Camel ignores the JMSReplyTo header in messages. If true, Camel does not send a reply back to the destination specified in the JMSReplyTo header. You can use this option if you want Camel to consume from a route and you do not want Camel to automatically send back a reply message because another component in your code handles the reply message. You can also use this option if you want to use Camel as a proxy between different message broker [...]
 | *replyTo* (common) | Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer). |  | String
 | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean
 | *asyncConsumer* (consumer) | Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transac [...]
 | *autoStartup* (consumer) | Specifies whether the consumer container should auto-startup. | true | boolean
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
+| *clientId* (consumer) | Sets the JMS client ID to use. Note that this value, if specified, must be unique and can only be used by a single JMS connection instance. It is typically only required for durable topic subscriptions. If using Apache ActiveMQ you may prefer to use Virtual Topics instead. |  | String
 | *concurrentConsumers* (consumer) | Specifies the default number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToConcurrentConsumers is used to control number of concurrent consumers on the reply message listener. | 1 | int
-| *durableSubscriptionId* (consumer) | Sets the durable subscription Id required for durable topics. |  | String
+| *durableSubscriptionName* (consumer) | The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well. |  | String
 | *replyToDeliveryPersistent* (consumer) | Specifies whether to use persistent delivery by default for replies. | true | boolean
 | *eagerLoadingOfProperties* (consumer) | Enables eager loading of JMS properties and payload as soon as a message is loaded which generally is inefficient as the JMS properties may not be required but sometimes can catch early any issues with the underlying JMS provider and the use of JMS properties. See also the option eagerPoisonBody. | false | boolean
 | *eagerPoisonBody* (consumer) | If eagerLoadingOfProperties is enabled and the JMS message payload (JMS body or JMS properties) is poison (cannot be read/mapped), then set this text as the message body instead so the message can be processed (the cause of the poison are already stored as exception on the Exchange). This can be turned off by setting eagerPoisonBody=false. See also the option eagerLoadingOfProperties. | Poison JMS message due to ${exception.message} | String
@@ -148,22 +147,19 @@ with the following path and query parameters:
 | *replyToSameDestinationAllowed* (consumer) | Whether a JMS consumer is allowed to send a reply message to the same destination that the consumer is using to consume from. This prevents an endless loop by consuming and sending back the same message to itself. | false | boolean
 | *deliveryMode* (producer) | Specifies the delivery mode to be used. Possible values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT = 2. There are 2 enums and the value can be one of: 1, 2 |  | Integer
 | *deliveryPersistent* (producer) | Specifies whether persistent delivery is used by default. | true | boolean
-| *explicitQosEnabled* (producer) | Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option, which operates at message granularity, reading QoS properties exclusively from the Camel In message headers. | false | Boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
-| *preserveMessageQos* (producer) | Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDeliveryMode, and JMSExpiration. You can provide all or only some of them. If not provided, Camel will fall back to use the values from the endpoint instead. So, when using this option, the headers override the values from the endpoint. The explicitQosEnable [...]
 | *priority* (producer) | Values greater than 1 specify the message priority when sending (where 1 is the lowest priority and 9 is the highest). The explicitQosEnabled option must also be enabled in order for this option to have any effect. There are 9 enums and the value can be one of: 1, 2, 3, 4, 5, 6, 7, 8, 9 | 4 | int
 | *replyToConcurrentConsumers* (producer) | Specifies the default number of concurrent consumers when doing request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. | 1 | int
 | *replyToOverride* (producer) | Provides an explicit ReplyTo destination in the JMS message, which overrides the setting of replyTo. It is useful if you want to forward the message to a remote Queue and receive the reply message from the ReplyTo destination. |  | String
-| *replyToType* (producer) | Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS. Possible values are: Temporary, Shared, or Exclusive. By default Camel will use temporary queues. However if replyTo has been configured, then Shared is used by default. This option allows you to use exclusive queues instead of shared ones. See Camel JMS documentation for more details, and especially the notes about the implications if running  [...]
+| *replyToType* (producer) | Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS. Possible values are: Temporary or Exclusive. By default Camel will use temporary queues. However if replyTo has been configured, then Exclusive is used. There are 2 enums and the value can be one of: Temporary, Exclusive |  | ReplyToType
 | *requestTimeout* (producer) | The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You can include the header CamelJmsRequestTimeout to override this endpoint configured timeout value, and thus have per message individual timeout values. See also the requestTimeoutCheckerInterval option. | 20000 | long
 | *timeToLive* (producer) | When sending messages, specifies the time-to-live of the message (in milliseconds). | -1 | long
 | *allowNullBody* (producer) | Whether to allow sending messages with no body. If this option is false and the message body is null, then an JMSException is thrown. | true | boolean
 | *disableTimeToLive* (producer) | Use this option to force disabling time to live. For example when you do request/reply over JMS, then Camel will by default use the requestTimeout value as time to live on the message being sent. The problem is that the sender and receiver systems have to have their clocks synchronized, so they are in sync. This is not always so easy to archive. So you can use disableTimeToLive=true to not set a time to live value on the sent message. Then the message w [...]
-| *includeSentJMSMessageID* (producer) | Only applicable when sending to JMS destination using InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange with the actual JMSMessageID that was used by the JMS client when the message was sent to the JMS destination. | false | boolean
+| *explicitQosEnabled* (producer) | Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option, which operates at message granularity, reading QoS properties exclusively from the Camel In message headers. | false | Boolean
+| *preserveMessageQos* (producer) | Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDeliveryMode, and JMSExpiration. You can provide all or only some of them. If not provided, Camel will fall back to use the values from the endpoint instead. So, when using this option, the headers override the values from the endpoint. The explicitQosEnable [...]
 | *asyncStartListener* (advanced) | Whether to startup the consumer message listener asynchronously, when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker, then it may block while retrying and/or failover. This will cause Camel to block while starting routes. By setting this option to true, you will let routes startup, while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this option is used, then b [...]
 | *asyncStopListener* (advanced) | Whether to stop the consumer message listener asynchronously, when stopping a route. | false | boolean
-| *connectionCount* (advanced) | *Deprecated* The maximum number of connections available to this endpoint |  | Integer
-| *connectionFactory* (advanced) | Initializes the connectionFactory for the endpoint, which takes precedence over the component's connectionFactory, if any |  | ConnectionFactory
 | *destinationCreationStrategy* (advanced) | To use a custom DestinationCreationStrategy. |  | DestinationCreationStrategy
 | *exceptionListener* (advanced) | Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions. |  | ExceptionListener
 | *headerFilterStrategy* (advanced) | To use a custom HeaderFilterStrategy to filter header to and from Camel message. |  | HeaderFilterStrategy
@@ -174,10 +170,7 @@ with the following path and query parameters:
 | *recoveryInterval* (advanced) | Specifies the interval between recovery attempts, i.e. when a connection is being refreshed, in milliseconds. The default is 5000 ms, that is, 5 seconds. | 5000 | long
 | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
 | *transferException* (advanced) | If enabled and you are using Request Reply messaging (InOut) and an Exchange failed on the consumer side, then the caused Exception will be send back in response as a javax.jms.ObjectMessage. If the client is Camel, the returned Exception is rethrown. This allows you to use Camel JMS as a bridge in your routing - for example, using persistent queues to enable robust routing. Notice that if you also have transferExchange enabled, this option takes preced [...]
-| *errorHandlerLoggingLevel* (logging) | Allows to configure the default errorHandler logging level for logging uncaught exceptions. There are 6 enums and the value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | WARN | LoggingLevel
-| *errorHandlerLogStackTrace* (logging) | Allows to control whether stacktraces should be logged or not, by the default errorHandler. | true | boolean
 | *transacted* (transaction) | Specifies whether to use transacted mode | false | boolean
-| *sharedJMSSession* (transaction) | Specifies whether to share JMS session with other SJMS endpoints. Turn this off if your route is accessing to multiple JMS providers. If you need transaction against multiple JMS providers, use jms component to leverage XA transaction. | true | boolean
 |===
 // endpoint options: END
 
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/AggregatedExceptionListener.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/AggregatedExceptionListener.java
deleted file mode 100644
index bed3bc5..0000000
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/AggregatedExceptionListener.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.sjms;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class AggregatedExceptionListener implements ExceptionListener {
-    private static final Logger LOG = LoggerFactory.getLogger(AggregatedExceptionListener.class);
-    private final Set<ExceptionListener> listenerSet;
-
-    public AggregatedExceptionListener(ExceptionListener... exceptionListeners) {
-        this.listenerSet = new HashSet<>(exceptionListeners.length);
-        for (ExceptionListener exceptionListener : exceptionListeners) {
-            if (exceptionListener instanceof AggregatedExceptionListener) {
-                listenerSet.addAll(((AggregatedExceptionListener) exceptionListener).listenerSet); //prevent multiwrapping
-            } else {
-                listenerSet.add(exceptionListener);
-            }
-        }
-    }
-
-    @Override
-    public void onException(JMSException exception) {
-        for (ExceptionListener listener : listenerSet) {
-            try {
-                listener.onException(exception);
-            } catch (Exception ex) {
-                LOG.error("Exception listeners shouldn't throw exceptions", ex);
-            }
-        }
-    }
-}
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SessionCallback.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SessionCallback.java
index 8d9e23d..e2237b9 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SessionCallback.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SessionCallback.java
@@ -16,10 +16,18 @@
  */
 package org.apache.camel.component.sjms;
 
+import javax.jms.Connection;
 import javax.jms.Session;
 
-@FunctionalInterface
-public interface SessionCallback<T> {
+import static org.apache.camel.component.sjms.SjmsHelper.closeConnection;
+import static org.apache.camel.component.sjms.SjmsHelper.closeSession;
 
-    T doInJms(Session session) throws Exception;
+public interface SessionCallback {
+
+    void doInJms(Session session) throws Exception;
+
+    default void onClose(Connection connection, Session session) {
+        closeSession(session);
+        closeConnection(connection);
+    }
 }
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsComponent.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsComponent.java
index e63a069..c5b32b9 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsComponent.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsComponent.java
@@ -24,6 +24,7 @@ import javax.jms.ConnectionFactory;
 import org.apache.camel.CamelException;
 import org.apache.camel.Endpoint;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.component.sjms.jms.DefaultDestinationCreationStrategy;
 import org.apache.camel.component.sjms.jms.DefaultJmsKeyFormatStrategy;
 import org.apache.camel.component.sjms.jms.DestinationCreationStrategy;
 import org.apache.camel.component.sjms.jms.JmsKeyFormatStrategy;
@@ -39,14 +40,8 @@ public class SjmsComponent extends HeaderFilterStrategyComponent {
     private ExecutorService asyncStartStopExecutorService;
 
     @Metadata(label = "common", autowired = true,
-              description = "A ConnectionFactory is required to enable the SjmsComponent. It can be set directly or set set as part of a ConnectionResource.")
+              description = "The connection factory to be use. A connection factory must be configured either on the component or endpoint.")
     private ConnectionFactory connectionFactory;
-    @Metadata(label = "security", secret = true,
-              description = "Username to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory.")
-    private String username;
-    @Metadata(label = "security", secret = true,
-              description = "Password to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory.")
-    private String password;
     @UriParam(description = "Sets the JMS client ID to use. Note that this value, if specified, must be unique and can only be used by a single JMS connection instance."
                             + " It is typically only required for durable topic subscriptions."
                             + " If using Apache ActiveMQ you may prefer to use Virtual Topics instead.")
@@ -57,11 +52,8 @@ public class SjmsComponent extends HeaderFilterStrategyComponent {
                             + " Can be used for JMS brokers which do not care whether JMS header keys contain illegal characters. You can provide your own implementation"
                             + " of the org.apache.camel.component.jms.JmsKeyFormatStrategy and refer to it using the # notation.")
     private JmsKeyFormatStrategy jmsKeyFormatStrategy = new DefaultJmsKeyFormatStrategy();
-    @Metadata(defaultValue = "1",
-              description = "The maximum number of connections available to endpoints started under this component")
-    private Integer connectionCount = 1;
     @Metadata(label = "advanced", description = "To use a custom DestinationCreationStrategy.")
-    private DestinationCreationStrategy destinationCreationStrategy;
+    private DestinationCreationStrategy destinationCreationStrategy = new DefaultDestinationCreationStrategy();
     @Metadata(label = "advanced",
               description = "To use the given MessageCreatedStrategy which are invoked when Camel creates new instances"
                             + " of javax.jms.Message objects when Camel is sending a JMS message.")
@@ -88,20 +80,16 @@ public class SjmsComponent extends HeaderFilterStrategyComponent {
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
         validateMepAndReplyTo(parameters);
+
         SjmsEndpoint endpoint = createSjmsEndpoint(uri, remaining);
-        if (endpoint.isTransacted()) {
-            endpoint.setSynchronous(true);
-        }
-        if (destinationCreationStrategy != null) {
-            endpoint.setDestinationCreationStrategy(destinationCreationStrategy);
-        }
+        endpoint.setConnectionFactory(connectionFactory);
+        endpoint.setDestinationCreationStrategy(destinationCreationStrategy);
+        endpoint.setRecoveryInterval(recoveryInterval);
+        endpoint.setMessageCreatedStrategy(messageCreatedStrategy);
+        endpoint.setClientId(clientId);
         if (getHeaderFilterStrategy() != null) {
             endpoint.setHeaderFilterStrategy(getHeaderFilterStrategy());
         }
-        if (messageCreatedStrategy != null) {
-            endpoint.setMessageCreatedStrategy(messageCreatedStrategy);
-        }
-        endpoint.setRecoveryInterval(recoveryInterval);
         setProperties(endpoint, parameters);
         return endpoint;
     }
@@ -158,14 +146,6 @@ public class SjmsComponent extends HeaderFilterStrategyComponent {
         return connectionFactory;
     }
 
-    public void setConnectionCount(Integer maxConnections) {
-        this.connectionCount = maxConnections;
-    }
-
-    public Integer getConnectionCount() {
-        return connectionCount;
-    }
-
     public void setJmsKeyFormatStrategy(JmsKeyFormatStrategy jmsKeyFormatStrategy) {
         this.jmsKeyFormatStrategy = jmsKeyFormatStrategy;
     }
@@ -190,22 +170,6 @@ public class SjmsComponent extends HeaderFilterStrategyComponent {
         this.messageCreatedStrategy = messageCreatedStrategy;
     }
 
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
     public String getClientId() {
         return clientId;
     }
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
index 5c146a3..d2dd971 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsEndpoint.java
@@ -30,7 +30,6 @@ import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
-import org.apache.camel.LoggingLevel;
 import org.apache.camel.MultipleConsumersSupport;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
@@ -54,7 +53,6 @@ import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriPath;
 import org.apache.camel.support.DefaultEndpoint;
-import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.support.SynchronousDelegateProducer;
 import org.apache.camel.util.StringHelper;
 
@@ -86,20 +84,13 @@ public class SjmsEndpoint extends DefaultEndpoint
     @UriParam(label = "transaction",
               description = "Specifies whether to use transacted mode")
     private boolean transacted;
-    @UriParam(label = "transaction,advanced", defaultValue = "true",
-              description = "Specifies whether to share JMS session with other SJMS endpoints. Turn this off if your route is accessing to multiple JMS providers."
-                            + " If you need transaction against multiple JMS providers, use jms component to leverage XA transaction.")
-    private boolean sharedJMSSession = true;
     @UriParam(label = "common",
               description = "Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer).")
     private String replyTo;
     @UriParam(label = "producer",
               description = "Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS."
-                            + " Possible values are: Temporary, Shared, or Exclusive."
-                            + " By default Camel will use temporary queues. However if replyTo has been configured, then Shared is used by default."
-                            + " This option allows you to use exclusive queues instead of shared ones."
-                            + " See Camel JMS documentation for more details, and especially the notes about the implications if running in a clustered environment,"
-                            + " and the fact that Shared reply queues has lower performance than its alternatives Temporary and Exclusive.")
+                            + " Possible values are: Temporary or Exclusive."
+                            + " By default Camel will use temporary queues. However if replyTo has been configured, then Exclusive is used.")
     private ReplyToType replyToType;
     @UriParam(defaultValue = "AUTO_ACKNOWLEDGE",
               enums = "SESSION_TRANSACTED,CLIENT_ACKNOWLEDGE,AUTO_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE",
@@ -115,13 +106,13 @@ public class SjmsEndpoint extends DefaultEndpoint
               description = "Specifies the default number of concurrent consumers when doing request/reply over JMS."
                             + " See also the maxMessagesPerTask option to control dynamic scaling up/down of threads.")
     private int replyToConcurrentConsumers = 1;
-    @UriParam(label = "producer", defaultValue = "false",
+    @UriParam(label = "producer,advanced", defaultValue = "false",
               description = "Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages."
                             + " This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLive options are applied to the current endpoint."
                             + " This contrasts with the preserveMessageQos option, which operates at message granularity,"
                             + " reading QoS properties exclusively from the Camel In message headers.")
     private Boolean explicitQosEnabled;
-    @UriParam(label = "producer",
+    @UriParam(label = "producer,advanced",
               description = "Set to true, if you want to send message using the QoS settings specified on the message,"
                             + " instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDeliveryMode,"
                             + " and JMSExpiration. You can provide all or only some of them. If not provided, Camel will fall back to use the"
@@ -170,8 +161,13 @@ public class SjmsEndpoint extends DefaultEndpoint
               description = "When sending messages, specifies the time-to-live of the message (in milliseconds).")
     private long timeToLive = -1;
     @UriParam(label = "consumer",
-              description = "Sets the durable subscription Id required for durable topics.")
-    private String durableSubscriptionId;
+              description = "Sets the JMS client ID to use. Note that this value, if specified, must be unique and can only be used by a single JMS connection instance."
+                            + " It is typically only required for durable topic subscriptions."
+                            + " If using Apache ActiveMQ you may prefer to use Virtual Topics instead.")
+    private String clientId;
+    @UriParam(label = "consumer",
+              description = "The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well.")
+    private String durableSubscriptionName;
     @UriParam(defaultValue = "20000", label = "producer", javaType = "java.time.Duration",
               description = "The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds)."
                             + " The default is 20 seconds. You can include the header \"CamelJmsRequestTimeout\" to override this endpoint configured"
@@ -222,23 +218,13 @@ public class SjmsEndpoint extends DefaultEndpoint
                             + " Camel provides two implementations out of the box: default and passthrough. The default strategy will safely marshal dots and hyphens (. and -)."
                             + " The passthrough strategy leaves the key as is. Can be used for JMS brokers which do not care whether JMS header keys contain illegal characters."
                             + " You can provide your own implementation of the org.apache.camel.component.jms.JmsKeyFormatStrategy and refer to it using the # notation.")
-    private JmsKeyFormatStrategy jmsKeyFormatStrategy;
-    @UriParam(label = "advanced",
-              description = "Initializes the connectionFactory for the endpoint, which takes precedence over the component's connectionFactory, if any")
+    private JmsKeyFormatStrategy jmsKeyFormatStrategy = new DefaultJmsKeyFormatStrategy();
+    @UriParam(label = "common",
+              description = "The connection factory to be use. A connection factory must be configured either on the component or endpoint.")
     private ConnectionFactory connectionFactory;
     @UriParam(label = "advanced",
-              description = "The maximum number of connections available to this endpoint")
-    @Deprecated
-    private Integer connectionCount;
-    @UriParam(label = "advanced",
               description = "Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions.")
     private ExceptionListener exceptionListener;
-    @UriParam(defaultValue = "WARN", label = "consumer,logging",
-              description = "Allows to configure the default errorHandler logging level for logging uncaught exceptions.")
-    private LoggingLevel errorHandlerLoggingLevel = LoggingLevel.WARN;
-    @UriParam(defaultValue = "true", label = "consumer,logging",
-              description = "Allows to control whether stacktraces should be logged or not, by the default errorHandler.")
-    private boolean errorHandlerLogStackTrace = true;
     @UriParam(defaultValue = "5000", label = "advanced", javaType = "java.time.Duration",
               description = "Specifies the interval between recovery attempts, i.e. when a connection is being refreshed, in milliseconds."
                             + " The default is 5000 ms, that is, 5 seconds.")
@@ -272,11 +258,6 @@ public class SjmsEndpoint extends DefaultEndpoint
                             + " Note if transacted has been enabled, then asyncConsumer=true does not run asynchronously, as transaction"
                             + "  must be executed synchronously (Camel 3.0 may support async transactions).")
     private boolean asyncConsumer;
-    @UriParam(label = "producer,advanced",
-              description = "Only applicable when sending to JMS destination using InOnly (eg fire and forget)."
-                            + " Enabling this option will enrich the Camel Exchange with the actual JMSMessageID"
-                            + " that was used by the JMS client when the message was sent to the JMS destination.")
-    private boolean includeSentJMSMessageID;
 
     private JmsObjectFactory jmsObjectFactory = new Jms11ObjectFactory();
 
@@ -294,6 +275,15 @@ public class SjmsEndpoint extends DefaultEndpoint
         return (SjmsComponent) super.getComponent();
     }
 
+    @Override
+    protected void doInit() throws Exception {
+        super.doInit();
+
+        if (headerFilterStrategy == null) {
+            headerFilterStrategy = new SjmsHeaderFilterStrategy(includeAllJMSXProperties);
+        }
+    }
+
     /**
      * Gets the destination name which was configured from the endpoint uri.
      *
@@ -364,7 +354,6 @@ public class SjmsEndpoint extends DefaultEndpoint
      * Factory method for creating a new template for InOnly message exchanges
      */
     public SjmsTemplate createInOnlyTemplate() {
-        // TODO: Add isPubSub, Destination as parameters so we can have a default destination
         SjmsTemplate template = new SjmsTemplate(getConnectionFactory(), isTransacted(), getAcknowledgementMode().intValue());
 
         // configure qos if enabled
@@ -384,8 +373,17 @@ public class SjmsEndpoint extends DefaultEndpoint
      * Factory method for creating a new template for InOut message exchanges
      */
     public SjmsTemplate createInOutTemplate() {
-        // TODO: Add isPubSub, Destination as parameters so we can have a default destination
-        SjmsTemplate template = createInOnlyTemplate();
+        // must be auto-ack mode for InOut (request/reply mode)
+        SjmsTemplate template = new SjmsTemplate(getConnectionFactory(), false, Session.AUTO_ACKNOWLEDGE);
+
+        // configure qos if enabled
+        if (isExplicitQosEnabled()) {
+            int dm = isDeliveryPersistent() ? DeliveryMode.PERSISTENT : DeliveryMode.NON_PERSISTENT;
+            if (getDeliveryMode() != null) {
+                dm = getDeliveryMode();
+            }
+            template.setQoSSettings(dm, getPriority(), getTimeToLive());
+        }
         if (getRequestTimeout() > 0) {
             template.setExplicitQosEnabled(true);
 
@@ -442,9 +440,6 @@ public class SjmsEndpoint extends DefaultEndpoint
                 getMessageCreatedStrategy());
     }
 
-    /**
-     * Sets the binding used to convert from a Camel message to and from a JMS message
-     */
     public void setBinding(JmsBinding binding) {
         this.binding = binding;
     }
@@ -458,9 +453,6 @@ public class SjmsEndpoint extends DefaultEndpoint
         return getComponent().getAsyncStartStopExecutorService();
     }
 
-    /**
-     * DestinationName is a JMS queue or topic name. By default, the destinationName is interpreted as a queue name.
-     */
     public void setDestinationName(String destinationName) {
         this.destinationName = destinationName;
     }
@@ -477,9 +469,6 @@ public class SjmsEndpoint extends DefaultEndpoint
         return headerFilterStrategy;
     }
 
-    /**
-     * To use a custom HeaderFilterStrategy to filter header to and from Camel message.
-     */
     @Override
     public void setHeaderFilterStrategy(HeaderFilterStrategy strategy) {
         this.headerFilterStrategy = strategy;
@@ -489,11 +478,6 @@ public class SjmsEndpoint extends DefaultEndpoint
         return includeAllJMSXProperties;
     }
 
-    /**
-     * Whether to include all JMSXxxx properties when mapping from JMS to Camel Message. Setting this to true will
-     * include properties such as JMSXAppID, and JMSXUserID etc. Note: If you are using a custom headerFilterStrategy
-     * then this option does not apply.
-     */
     public void setIncludeAllJMSXProperties(boolean includeAllJMSXProperties) {
         this.includeAllJMSXProperties = includeAllJMSXProperties;
     }
@@ -502,17 +486,10 @@ public class SjmsEndpoint extends DefaultEndpoint
         return acknowledgementMode;
     }
 
-    /**
-     * The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE,
-     * DUPS_OK_ACKNOWLEDGE
-     */
     public void setAcknowledgementMode(SessionAcknowledgementType acknowledgementMode) {
         this.acknowledgementMode = acknowledgementMode;
     }
 
-    /**
-     * Flag set by the endpoint used by consumers and producers to determine if the endpoint is a JMS Topic.
-     */
     public boolean isTopic() {
         return topic;
     }
@@ -621,15 +598,20 @@ public class SjmsEndpoint extends DefaultEndpoint
         configuredQoS();
     }
 
-    public String getDurableSubscriptionId() {
-        return durableSubscriptionId;
+    public String getClientId() {
+        return clientId;
     }
 
-    /**
-     * Sets the durable subscription Id required for durable topics.
-     */
-    public void setDurableSubscriptionId(String durableSubscriptionId) {
-        this.durableSubscriptionId = durableSubscriptionId;
+    public void setClientId(String clientId) {
+        this.clientId = clientId;
+    }
+
+    public String getDurableSubscriptionName() {
+        return durableSubscriptionName;
+    }
+
+    public void setDurableSubscriptionName(String durableSubscriptionName) {
+        this.durableSubscriptionName = durableSubscriptionName;
     }
 
     public long getRequestTimeout() {
@@ -644,9 +626,6 @@ public class SjmsEndpoint extends DefaultEndpoint
         return messageSelector;
     }
 
-    /**
-     * Sets the JMS Message selector syntax.
-     */
     public void setMessageSelector(String messageSelector) {
         this.messageSelector = messageSelector;
     }
@@ -655,9 +634,6 @@ public class SjmsEndpoint extends DefaultEndpoint
         return transacted;
     }
 
-    /**
-     * Specifies whether to use transacted mode
-     */
     public void setTransacted(boolean transacted) {
         if (transacted) {
             setAcknowledgementMode(SessionAcknowledgementType.SESSION_TRANSACTED);
@@ -665,19 +641,6 @@ public class SjmsEndpoint extends DefaultEndpoint
         this.transacted = transacted;
     }
 
-    public boolean isSharedJMSSession() {
-        return sharedJMSSession;
-    }
-
-    /**
-     * Specifies whether to share JMS session with other SJMS endpoints. Turn this off if your route is accessing to
-     * multiple JMS providers. If you need transaction against multiple JMS providers, use jms component to leverage XA
-     * transaction.
-     */
-    public void setSharedJMSSession(boolean share) {
-        this.sharedJMSSession = share;
-    }
-
     public String getReplyTo() {
         return replyTo;
     }
@@ -703,21 +666,10 @@ public class SjmsEndpoint extends DefaultEndpoint
         this.testConnectionOnStartup = testConnectionOnStartup;
     }
 
-    /**
-     * Whether to startup the consumer message listener asynchronously, when starting a route. For example if a
-     * JmsConsumer cannot get a connection to a remote JMS broker, then it may block while retrying and/or failover.
-     * This will cause Camel to block while starting routes. By setting this option to true, you will let routes
-     * startup, while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this
-     * option is used, then beware that if the connection could not be established, then an exception is logged at WARN
-     * level, and the consumer will not be able to receive messages; You can then restart the route to retry.
-     */
     public void setAsyncStartListener(boolean asyncStartListener) {
         this.asyncStartListener = asyncStartListener;
     }
 
-    /**
-     * Whether to stop the consumer message listener asynchronously, when stopping a route.
-     */
     public void setAsyncStopListener(boolean asyncStopListener) {
         this.asyncStopListener = asyncStopListener;
     }
@@ -742,9 +694,6 @@ public class SjmsEndpoint extends DefaultEndpoint
         return destinationCreationStrategy;
     }
 
-    /**
-     * To use a custom DestinationCreationStrategy.
-     */
     public void setDestinationCreationStrategy(DestinationCreationStrategy destinationCreationStrategy) {
         this.destinationCreationStrategy = destinationCreationStrategy;
     }
@@ -761,10 +710,6 @@ public class SjmsEndpoint extends DefaultEndpoint
         return allowNullBody;
     }
 
-    /**
-     * Whether to allow sending messages with no body. If this option is false and the message body is null, then an
-     * JMSException is thrown.
-     */
     public void setAllowNullBody(boolean allowNullBody) {
         this.allowNullBody = allowNullBody;
     }
@@ -773,10 +718,6 @@ public class SjmsEndpoint extends DefaultEndpoint
         return mapJmsMessage;
     }
 
-    /**
-     * Specifies whether Camel should auto map the received JMS message to a suited payload type, such as
-     * javax.jms.TextMessage to a String etc. See section about how mapping works below for more details.
-     */
     public void setMapJmsMessage(boolean mapJmsMessage) {
         this.mapJmsMessage = mapJmsMessage;
     }
@@ -785,106 +726,38 @@ public class SjmsEndpoint extends DefaultEndpoint
         return messageCreatedStrategy;
     }
 
-    /**
-     * To use the given MessageCreatedStrategy which are invoked when Camel creates new instances of
-     * <tt>javax.jms.Message</tt> objects when Camel is sending a JMS message.
-     */
     public void setMessageCreatedStrategy(MessageCreatedStrategy messageCreatedStrategy) {
         this.messageCreatedStrategy = messageCreatedStrategy;
     }
 
     public JmsKeyFormatStrategy getJmsKeyFormatStrategy() {
-        if (jmsKeyFormatStrategy == null) {
-            jmsKeyFormatStrategy = new DefaultJmsKeyFormatStrategy();
-        }
         return jmsKeyFormatStrategy;
     }
 
-    /**
-     * Pluggable strategy for encoding and decoding JMS keys so they can be compliant with the JMS specification. Camel
-     * provides two implementations out of the box: default and passthrough. The default strategy will safely marshal
-     * dots and hyphens (. and -). The passthrough strategy leaves the key as is. Can be used for JMS brokers which do
-     * not care whether JMS header keys contain illegal characters. You can provide your own implementation of the
-     * org.apache.camel.component.jms.JmsKeyFormatStrategy and refer to it using the # notation.
-     */
     public void setJmsKeyFormatStrategy(JmsKeyFormatStrategy jmsKeyFormatStrategy) {
         this.jmsKeyFormatStrategy = jmsKeyFormatStrategy;
     }
 
-    /**
-     * Initializes the connectionFactory for the endpoint, which takes precedence over the component's
-     * connectionFactory, if any
-     */
-    public void setConnectionFactory(ConnectionFactory connectionFactory) {
-        this.connectionFactory = connectionFactory;
-    }
-
-    public void setConnectionFactory(String connectionFactory) {
-        this.connectionFactory
-                = EndpointHelper.resolveReferenceParameter(getCamelContext(), connectionFactory, ConnectionFactory.class);
-    }
-
     public ConnectionFactory getConnectionFactory() {
-        if (connectionFactory != null) {
-            return connectionFactory;
-        }
-        return getComponent().getConnectionFactory();
-    }
-
-    public int getConnectionCount() {
-        if (connectionCount != null) {
-            return connectionCount;
-        }
-        return getComponent().getConnectionCount();
+        return connectionFactory;
     }
 
-    /**
-     * The maximum number of connections available to this endpoint
-     */
-    public void setConnectionCount(Integer connectionCount) {
-        this.connectionCount = connectionCount;
+    public void setConnectionFactory(ConnectionFactory connectionFactory) {
+        this.connectionFactory = connectionFactory;
     }
 
     public ExceptionListener getExceptionListener() {
         return exceptionListener;
     }
 
-    /**
-     * Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions.
-     */
     public void setExceptionListener(ExceptionListener exceptionListener) {
         this.exceptionListener = exceptionListener;
     }
 
-    public LoggingLevel getErrorHandlerLoggingLevel() {
-        return errorHandlerLoggingLevel;
-    }
-
-    /**
-     * Allows to configure the default errorHandler logging level for logging uncaught exceptions.
-     */
-    public void setErrorHandlerLoggingLevel(LoggingLevel errorHandlerLoggingLevel) {
-        this.errorHandlerLoggingLevel = errorHandlerLoggingLevel;
-    }
-
-    public boolean isErrorHandlerLogStackTrace() {
-        return errorHandlerLogStackTrace;
-    }
-
-    /**
-     * Allows to control whether stacktraces should be logged or not, by the default errorHandler.
-     */
-    public void setErrorHandlerLogStackTrace(boolean errorHandlerLogStackTrace) {
-        this.errorHandlerLogStackTrace = errorHandlerLogStackTrace;
-    }
-
     public JmsObjectFactory getJmsObjectFactory() {
         return jmsObjectFactory;
     }
 
-    /**
-     * To use a custom Jms Object factory
-     */
     public void setJmsObjectFactory(JmsObjectFactory jmsObjectFactory) {
         this.jmsObjectFactory = jmsObjectFactory;
     }
@@ -920,12 +793,4 @@ public class SjmsEndpoint extends DefaultEndpoint
     public void setAsyncConsumer(boolean asyncConsumer) {
         this.asyncConsumer = asyncConsumer;
     }
-
-    public boolean isIncludeSentJMSMessageID() {
-        return includeSentJMSMessageID;
-    }
-
-    public void setIncludeSentJMSMessageID(boolean includeSentJMSMessageID) {
-        this.includeSentJMSMessageID = includeSentJMSMessageID;
-    }
 }
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsLoggingExceptionListener.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsLoggingExceptionListener.java
deleted file mode 100644
index 87befd7..0000000
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsLoggingExceptionListener.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.sjms;
-
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-
-import org.apache.camel.spi.ExceptionHandler;
-
-/**
- * A JMS {@link ExceptionListener} which logs all caught exceptions.
- */
-public class SjmsLoggingExceptionListener implements ExceptionListener {
-
-    private final ExceptionHandler handler;
-    private final boolean logStackTrace;
-
-    public SjmsLoggingExceptionListener(ExceptionHandler exceptionHandler, boolean logStackTrace) {
-        this.handler = exceptionHandler;
-        this.logStackTrace = logStackTrace;
-    }
-
-    @Override
-    public void onException(JMSException throwable) {
-        if (logStackTrace) {
-            handler.handleException("Execution of JMS message listener failed", throwable);
-        } else {
-            handler.handleException("Execution of JMS message listener failed. Caused by: [" + throwable.getMessage() + "]",
-                    null);
-        }
-    }
-}
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsProducer.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsProducer.java
index 57ee7ed..539d41c 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsProducer.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsProducer.java
@@ -29,7 +29,6 @@ import javax.jms.Session;
 
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExtendedExchange;
 import org.apache.camel.FailedToCreateProducerException;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.RuntimeExchangeException;
@@ -40,14 +39,11 @@ import org.apache.camel.component.sjms.reply.ReplyManager;
 import org.apache.camel.component.sjms.reply.TemporaryQueueReplyManager;
 import org.apache.camel.spi.UuidGenerator;
 import org.apache.camel.support.DefaultAsyncProducer;
-import org.apache.camel.support.SynchronizationAdapter;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
-import static org.apache.camel.component.sjms.SjmsHelper.*;
 import static org.apache.camel.component.sjms.jms.JmsMessageHelper.*;
 
 public class SjmsProducer extends DefaultAsyncProducer {
@@ -305,14 +301,13 @@ public class SjmsProducer extends DefaultAsyncProducer {
                     throw new RuntimeExchangeException("Failed to resolve replyTo destination", exchange);
                 }
                 JmsMessageHelper.setJMSReplyTo(answer, replyTo);
-                replyManager.setReplyToSelectorHeader(in, answer);
 
                 String correlationId = determineCorrelationId(answer);
                 replyManager.registerReply(replyManager, exchange, callback, originalCorrelationId, correlationId, timeout);
 
                 if (LOG.isDebugEnabled()) {
                     LOG.debug("Using {}: {}, JMSReplyTo destination: {}, with request timeout: {} ms.",
-                            new Object[] { "JMSCorrelationID", correlationId, replyTo, timeout });
+                            "JMSCorrelationID", correlationId, replyTo, timeout);
                 }
 
                 LOG.trace("Created javax.jms.Message: {}", answer);
@@ -321,7 +316,7 @@ public class SjmsProducer extends DefaultAsyncProducer {
         };
 
         try {
-            doSend(true, destinationName, messageCreator);
+            doSend(exchange, true, destinationName, messageCreator);
         } catch (Exception e) {
             exchange.setException(e);
             callback.done(true);
@@ -411,22 +406,13 @@ public class SjmsProducer extends DefaultAsyncProducer {
                     JmsMessageHelper.setJMSReplyTo(answer, null);
                 }
 
-                // if transacted or client ack mode then add uow work to complete after exchange is done
-                if (isTransactionOrClientAcknowledgeMode(session)) {
-                    ExtendedExchange ecc = exchange.adapt(ExtendedExchange.class);
-                    TransactionOnCompletion toc = new TransactionOnCompletion(session, answer);
-                    if (!ecc.containsOnCompletion(toc)) {
-                        ecc.addOnCompletion(toc);
-                    }
-                }
-
                 LOG.trace("Created javax.jms.Message: {}", answer);
                 return answer;
             }
         };
 
         try {
-            doSend(false, destinationName, messageCreator);
+            doSend(exchange, false, destinationName, messageCreator);
         } catch (Exception e) {
             exchange.setException(e);
             callback.done(true);
@@ -515,11 +501,13 @@ public class SjmsProducer extends DefaultAsyncProducer {
     /**
      * Sends the message using the JmsTemplate.
      *
+     * @param exchange        the exchange
      * @param inOut           use inOut or inOnly template
      * @param destinationName the destination
      * @param messageCreator  the creator to create the {@link Message} to send
      */
     protected void doSend(
+            Exchange exchange,
             boolean inOut, String destinationName,
             MessageCreator messageCreator)
             throws Exception {
@@ -530,7 +518,7 @@ public class SjmsProducer extends DefaultAsyncProducer {
             LOG.trace("Using {} jms template", inOut ? "inOut" : "inOnly");
         }
 
-        template.send(destinationName, messageCreator, getEndpoint().isTopic());
+        template.send(exchange, destinationName, messageCreator, getEndpoint().isTopic());
     }
 
 }
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java
index f725b16..3011efd 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/SjmsTemplate.java
@@ -23,6 +23,8 @@ import javax.jms.Message;
 import javax.jms.MessageProducer;
 import javax.jms.Session;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.ExtendedExchange;
 import org.apache.camel.component.sjms.jms.DestinationCreationStrategy;
 import org.apache.camel.component.sjms.jms.MessageCreator;
 import org.apache.camel.util.ObjectHelper;
@@ -76,39 +78,78 @@ public class SjmsTemplate {
         this.explicitQosEnabled = explicitQosEnabled;
     }
 
-    public <T> T execute(SessionCallback<T> sessionCallback) throws Exception {
+    public void execute(SessionCallback sessionCallback) throws Exception {
         Connection con = null;
         Session session = null;
         try {
             con = createConnection();
             session = createSession(con);
-            return sessionCallback.doInJms(session);
+            sessionCallback.doInJms(session);
         } finally {
-            closeSession(session);
-            closeConnection(con);
+            sessionCallback.onClose(con, session);
         }
     }
 
-    public <T> T execute(Session session, SessionCallback<T> sessionCallback) throws Exception {
+    public void execute(Session session, SessionCallback sessionCallback) throws Exception {
         if (session == null) {
-            return execute(sessionCallback);
+            execute(sessionCallback);
         } else {
-            return sessionCallback.doInJms(session);
+            try {
+                sessionCallback.doInJms(session);
+            } finally {
+                sessionCallback.onClose(null, session);
+            }
         }
     }
 
-    public void send(String destinationName, MessageCreator messageCreator, boolean isTopic) throws Exception {
-        execute(session -> {
-            Destination dest = destinationCreationStrategy.createDestination(session, destinationName, isTopic);
-            Message message = messageCreator.createMessage(session);
-            MessageProducer producer = session.createProducer(dest);
-            try {
-                send(producer, message);
-            } finally {
-                closeProducer(producer);
+    public void send(Exchange exchange, String destinationName, MessageCreator messageCreator, boolean isTopic)
+            throws Exception {
+
+        final SessionCallback callback = new SessionCallback() {
+
+            private volatile Message message;
+            private volatile boolean transacted;
+
+            @Override
+            public void doInJms(Session session) throws Exception {
+                this.transacted = isTransactionOrClientAcknowledgeMode(session);
+
+                if (transacted) {
+                    // remember current session if transactional
+                    exchange.setProperty(SjmsConstants.JMS_SESSION, session);
+                }
+
+                Destination dest = destinationCreationStrategy.createDestination(session, destinationName, isTopic);
+                this.message = messageCreator.createMessage(session);
+                MessageProducer producer = session.createProducer(dest);
+                try {
+                    send(producer, message);
+                } finally {
+                    closeProducer(producer);
+                }
             }
-            return null;
-        });
+
+            @Override
+            public void onClose(Connection connection, Session session) {
+                try {
+                    if (transacted) {
+                        // defer closing till end of UoW
+                        ExtendedExchange ecc = exchange.adapt(ExtendedExchange.class);
+                        TransactionOnCompletion toc = new TransactionOnCompletion(session, this.message);
+                        if (!ecc.containsOnCompletion(toc)) {
+                            ecc.addOnCompletion(toc);
+                        }
+                    } else {
+                        closeSession(session);
+                        closeConnection(connection);
+                    }
+                } catch (Exception e) {
+                    // ignore
+                }
+            }
+        };
+
+        execute(callback);
     }
 
     public void send(MessageProducer producer, Message message) throws Exception {
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/TransactionCommitStrategy.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/TransactionCommitStrategy.java
deleted file mode 100644
index 055fd91..0000000
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/TransactionCommitStrategy.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.sjms;
-
-import org.apache.camel.Exchange;
-
-/**
- * Provides a entry point into the transaction {@link org.apache.camel.spi.Synchronization} workflow that will allow a
- * user to control when the {@link javax.jms.Session} commit operation is executed.
- */
-public interface TransactionCommitStrategy {
-
-    /**
-     * Should returns true to allow the commit to proceed. If false, the commit will be skipped. The default should
-     * always be true to avoid messages remaining uncommitted.
-     *
-     * @param  exchange {@link org.apache.camel.Exchange}
-     * @return          true if the {@link javax.jms.Session} should be committed, otherwise false
-     */
-    boolean commit(Exchange exchange) throws Exception;
-
-    /**
-     * Should returns true to allow the commit to proceed. If false, the commit will be skipped. The default should
-     * always be true to avoid messages remaining uncommitted.
-     *
-     * @param  exchange {@link org.apache.camel.Exchange}
-     * @return          true if the {@link javax.jms.Session} should be committed, otherwise false
-     */
-    boolean rollback(Exchange exchange) throws Exception;
-}
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/TransactionOnCompletion.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/TransactionOnCompletion.java
index 3674cde..c4b9489 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/TransactionOnCompletion.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/TransactionOnCompletion.java
@@ -22,14 +22,13 @@ import javax.jms.Session;
 import org.apache.camel.Exchange;
 import org.apache.camel.support.SynchronizationAdapter;
 
-
 import static org.apache.camel.component.sjms.SjmsHelper.*;
 
 /**
- * Completion {@link org.apache.camel.spi.Synchronization} work when
- * processing the message is complete to either commit or rollback the session.
+ * Completion {@link org.apache.camel.spi.Synchronization} work when processing the message is complete to either commit
+ * or rollback the session.
  */
-class TransactionOnCompletion extends SynchronizationAdapter implements Comparable<TransactionOnCompletion> {
+class TransactionOnCompletion extends SynchronizationAdapter {
 
     // TODO: close session, connection
 
@@ -57,12 +56,9 @@ class TransactionOnCompletion extends SynchronizationAdapter implements Comparab
     }
 
     @Override
-    public int compareTo(TransactionOnCompletion o) {
-        // same session and message
-        if (session == o.session && message == o.message) {
-            return 0;
-        } else {
-            return -1;
-        }
+    public boolean equals(Object o) {
+        TransactionOnCompletion that = (TransactionOnCompletion) o;
+        return session == that.session && message == that.message;
     }
+
 }
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/consumer/EndpointMessageListener.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/consumer/EndpointMessageListener.java
index 055365c..079d2fc 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/consumer/EndpointMessageListener.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/consumer/EndpointMessageListener.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.sjms.consumer;
 
+import javax.jms.Connection;
 import javax.jms.Destination;
 import javax.jms.JMSException;
 import javax.jms.Message;
@@ -31,7 +32,9 @@ import org.apache.camel.ExchangePattern;
 import org.apache.camel.Processor;
 import org.apache.camel.RollbackExchangeException;
 import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.component.sjms.SessionCallback;
 import org.apache.camel.component.sjms.SessionMessageListener;
+import org.apache.camel.component.sjms.SjmsConstants;
 import org.apache.camel.component.sjms.SjmsEndpoint;
 import org.apache.camel.component.sjms.SjmsTemplate;
 import org.apache.camel.component.sjms.jms.JmsMessageHelper;
@@ -240,6 +243,10 @@ public class EndpointMessageListener implements SessionMessageListener {
                 exchange.setPattern(ExchangePattern.InOut);
             }
         }
+
+        // store session on exchange as we may need it for transactions support
+        exchange.setProperty(SjmsConstants.JMS_SESSION, session);
+
         return exchange;
     }
 
@@ -252,24 +259,34 @@ public class EndpointMessageListener implements SessionMessageListener {
             return;
         }
         try {
-            getTemplate().execute(session, sc -> {
-                MessageProducer producer = null;
-                try {
-                    Message reply = endpoint.getBinding().makeJmsMessage(exchange, out, sc, cause);
-                    final String correlationID = determineCorrelationId(message);
-                    reply.setJMSCorrelationID(correlationID);
-
-                    if (LOG.isDebugEnabled()) {
-                        LOG.debug("{} sending reply JMS message [correlationId:{}]: {}", endpoint, correlationID, reply);
+            SessionCallback callback = new SessionCallback() {
+                @Override
+                public void doInJms(Session session) throws Exception {
+                    MessageProducer producer = null;
+                    try {
+                        Message reply = endpoint.getBinding().makeJmsMessage(exchange, out, session, cause);
+                        final String correlationID = determineCorrelationId(message);
+                        reply.setJMSCorrelationID(correlationID);
+
+                        if (LOG.isDebugEnabled()) {
+                            LOG.debug("{} sending reply JMS message [correlationId:{}]: {}", endpoint, correlationID, reply);
+                        }
+
+                        producer = endpoint.getJmsObjectFactory().createMessageProducer(session, endpoint, replyDestination);
+                        template.send(producer, reply);
+                    } finally {
+                        close(producer);
                     }
+                }
 
-                    producer = endpoint.getJmsObjectFactory().createMessageProducer(sc, endpoint, replyDestination);
-                    template.send(producer, reply);
-                } finally {
-                    close(producer);
+                @Override
+                public void onClose(Connection connection, Session session) {
+                    // do not close as we use provided session
                 }
-                return null;
-            });
+            };
+
+            getTemplate().execute(session, callback);
+
         } catch (Exception e) {
             exchange.setException(new CamelExchangeException("Unable to send reply JMS message", exchange, e));
         }
@@ -284,24 +301,34 @@ public class EndpointMessageListener implements SessionMessageListener {
             return;
         }
         try {
-            getTemplate().execute(session, sc -> {
-                MessageProducer producer = null;
-                try {
-                    Message reply = endpoint.getBinding().makeJmsMessage(exchange, out, sc, cause);
-                    final String correlationID = determineCorrelationId(message);
-                    reply.setJMSCorrelationID(correlationID);
-
-                    if (LOG.isDebugEnabled()) {
-                        LOG.debug("{} sending reply JMS message [correlationId:{}]: {}", endpoint, correlationID, reply);
+            SessionCallback callback = new SessionCallback() {
+                @Override
+                public void doInJms(Session session) throws Exception {
+                    MessageProducer producer = null;
+                    try {
+                        Message reply = endpoint.getBinding().makeJmsMessage(exchange, out, session, cause);
+                        final String correlationID = determineCorrelationId(message);
+                        reply.setJMSCorrelationID(correlationID);
+
+                        if (LOG.isDebugEnabled()) {
+                            LOG.debug("{} sending reply JMS message [correlationId:{}]: {}", endpoint, correlationID, reply);
+                        }
+
+                        producer = endpoint.getJmsObjectFactory().createMessageProducer(session, endpoint, replyDestination);
+                        template.send(producer, reply);
+                    } finally {
+                        close(producer);
                     }
+                }
 
-                    producer = endpoint.getJmsObjectFactory().createMessageProducer(sc, endpoint, replyDestination);
-                    template.send(producer, reply);
-                } finally {
-                    close(producer);
+                @Override
+                public void onClose(Connection connection, Session session) {
+                    // do not close as we use provided session
                 }
-                return null;
-            });
+            };
+
+            getTemplate().execute(session, callback);
+
         } catch (Exception e) {
             exchange.setException(new CamelExchangeException("Unable to send reply JMS message", exchange, e));
         }
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/consumer/SimpleMessageListenerContainer.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/consumer/SimpleMessageListenerContainer.java
index c2cb3cb..2b15649 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/consumer/SimpleMessageListenerContainer.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/consumer/SimpleMessageListenerContainer.java
@@ -247,8 +247,7 @@ public class SimpleMessageListenerContainer extends ServiceSupport
                 sessions = new HashSet<>(concurrentConsumers);
                 consumers = new HashSet<>(concurrentConsumers);
                 for (int i = 0; i < this.concurrentConsumers; i++) {
-                    Session session
-                            = connection.createSession(endpoint.isTransacted(), endpoint.getAcknowledgementMode().intValue());
+                    Session session = createSession(connection, endpoint);
                     MessageConsumer consumer = createMessageConsumer(session);
                     configureConsumer(consumer, session);
                     sessions.add(session);
@@ -258,6 +257,10 @@ public class SimpleMessageListenerContainer extends ServiceSupport
         }
     }
 
+    protected Session createSession(Connection connection, SjmsEndpoint endpoint) throws Exception {
+        return connection.createSession(endpoint.isTransacted(), endpoint.getAcknowledgementMode().intValue());
+    }
+
     protected MessageConsumer createMessageConsumer(Session session) throws Exception {
         return endpoint.getJmsObjectFactory().createMessageConsumer(session, endpoint);
     }
@@ -285,7 +288,7 @@ public class SimpleMessageListenerContainer extends ServiceSupport
                 Connection con = null;
                 try {
                     con = endpoint.getConnectionFactory().createConnection();
-                    String cid = clientId != null ? clientId : endpoint.getComponent().getClientId();
+                    String cid = clientId != null ? clientId : endpoint.getClientId();
                     if (cid != null) {
                         con.setClientID(cid);
                     }
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/Jms11ObjectFactory.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/Jms11ObjectFactory.java
index 3bc7d69..0dc14ad 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/Jms11ObjectFactory.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/Jms11ObjectFactory.java
@@ -39,7 +39,7 @@ public class Jms11ObjectFactory implements JmsObjectFactory {
         Destination destination = sjmsEndpoint.getDestinationCreationStrategy().createDestination(session,
                 sjmsEndpoint.getDestinationName(), sjmsEndpoint.isTopic());
         return createMessageConsumer(session, destination, sjmsEndpoint.getMessageSelector(), sjmsEndpoint.isTopic(),
-                sjmsEndpoint.getDurableSubscriptionId(), true, false);
+                sjmsEndpoint.getDurableSubscriptionName(), true, false);
     }
 
     @Override
@@ -53,29 +53,29 @@ public class Jms11ObjectFactory implements JmsObjectFactory {
             Destination destination,
             String messageSelector,
             boolean topic,
-            String subscriptionId,
+            String subscriptionName,
             boolean durable,
             boolean shared)
             throws Exception {
         // noLocal is default false according to JMS spec
-        return createMessageConsumer(session, destination, messageSelector, topic, subscriptionId, durable, shared, false);
+        return createMessageConsumer(session, destination, messageSelector, topic, subscriptionName, durable, shared, false);
     }
 
     @Override
     public MessageConsumer createMessageConsumer(
             Session session, Destination destination,
-            String messageSelector, boolean topic, String subscriptionId, boolean durable,
+            String messageSelector, boolean topic, String subscriptionName, boolean durable,
             boolean shared, boolean noLocal)
             throws Exception {
         MessageConsumer messageConsumer;
 
         if (topic) {
-            if (ObjectHelper.isNotEmpty(subscriptionId)) {
+            if (ObjectHelper.isNotEmpty(subscriptionName)) {
                 if (ObjectHelper.isNotEmpty(messageSelector)) {
-                    messageConsumer = session.createDurableSubscriber((Topic) destination, subscriptionId,
+                    messageConsumer = session.createDurableSubscriber((Topic) destination, subscriptionName,
                             messageSelector, noLocal);
                 } else {
-                    messageConsumer = session.createDurableSubscriber((Topic) destination, subscriptionId);
+                    messageConsumer = session.createDurableSubscriber((Topic) destination, subscriptionName);
                 }
             } else {
                 if (ObjectHelper.isNotEmpty(messageSelector)) {
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsBinding.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsBinding.java
index ed88c67..bfd7c29 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsBinding.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/JmsBinding.java
@@ -90,18 +90,6 @@ public class JmsBinding {
      */
     public Object extractBodyFromJms(Exchange exchange, Message message) {
         try {
-
-            // TODO: new options to support
-
-            // is a custom message converter configured on endpoint then use it instead of doing the extraction
-            // based on message type
-            /*            if (endpoint != null && endpoint.getMessageConverter() != null) {
-                if (log.isTraceEnabled()) {
-                    log.trace("Extracting body using a custom MessageConverter: {} from JMS message: {}", endpoint.getMessageConverter(), message);
-                }
-                return endpoint.getMessageConverter().fromMessage(message);
-            }
-            */
             // if we are configured to not map the jms message then return it as body
             if (!mapJmsMessage) {
                 LOG.trace("Option map JMS message is false so using JMS message as body: {}", message);
@@ -218,22 +206,6 @@ public class JmsBinding {
      * Creates a JMS message from the Camel exchange and message
      *
      * @param  exchange     the current exchange
-     * @param  session      the JMS session used to create the message
-     * @return              a newly created JMS Message instance containing the
-     * @throws JMSException if the message could not be created
-     */
-    public Message makeJmsMessage(Exchange exchange, Session session) throws JMSException {
-        Message answer = makeJmsMessage(exchange, exchange.getIn(), session, null);
-        if (answer != null && messageCreatedStrategy != null) {
-            messageCreatedStrategy.onMessageCreated(answer, session, exchange, null);
-        }
-        return answer;
-    }
-
-    /**
-     * Creates a JMS message from the Camel exchange and message
-     *
-     * @param  exchange     the current exchange
      * @param  camelMessage the body to make a javax.jms.Message as
      * @param  session      the JMS session used to create the message
      * @param  cause        optional exception occurred that should be sent as reply instead of a regular body
@@ -434,37 +406,7 @@ public class JmsBinding {
             throws JMSException {
         JmsMessageType type = null;
 
-        // TODO: support some of these options?
-
-        /*        // special for transferExchange
-        if (endpoint != null && endpoint.isTransferExchange()) {
-            log.trace("Option transferExchange=true so we use JmsMessageType: Object");
-            Serializable holder = DefaultExchangeHolder.marshal(exchange);
-            Message answer = session.createObjectMessage(holder);
-            // ensure default delivery mode is used by default
-            answer.setJMSDeliveryMode(Message.DEFAULT_DELIVERY_MODE);
-            return answer;
-        }
-        
-        // use a custom message converter
-        if (endpoint != null && endpoint.getMessageConverter() != null) {
-            if (log.isTraceEnabled()) {
-                log.trace("Creating JmsMessage using a custom MessageConverter: {} with body: {}", endpoint.getMessageConverter(), body);
-            }
-            return endpoint.getMessageConverter().toMessage(body, session);
-        }
-        */
-        // check if header have a type set, if so we force to use it
-        /*
-        if (headers.containsKey(JmsConstants.JMS_MESSAGE_TYPE)) {
-            type = context.getTypeConverter().convertTo(JmsMessageType.class, headers.get(JmsConstants.JMS_MESSAGE_TYPE));
-        } else if (endpoint != null && endpoint.getConfiguration().getJmsMessageType() != null) {
-            // force a specific type from the endpoint configuration
-            type = endpoint.getConfiguration().getJmsMessageType();
-        } else {
-        */
         type = getJMSMessageTypeForBody(exchange, body, headers, session, context);
-        //}
 
         // create the JmsMessage based on the type
         if (type != null) {
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ExclusiveQueueMessageListenerContainer.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ExclusiveQueueMessageListenerContainer.java
index 1c416fc..3fb891c 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ExclusiveQueueMessageListenerContainer.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ExclusiveQueueMessageListenerContainer.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.sjms.reply;
 
+import javax.jms.Connection;
 import javax.jms.Destination;
 import javax.jms.MessageConsumer;
 import javax.jms.Session;
@@ -41,6 +42,12 @@ public class ExclusiveQueueMessageListenerContainer extends SimpleMessageListene
     }
 
     @Override
+    protected Session createSession(Connection connection, SjmsEndpoint endpoint) throws Exception {
+        // cannot be transacted when doing request/reply
+        return connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+    }
+
+    @Override
     protected MessageConsumer createMessageConsumer(Session session) throws Exception {
         Destination destination = getDestinationCreationStrategy().createDestination(session, getDestinationName(), false);
         return getEndpoint().getJmsObjectFactory().createQueueMessageConsumer(session, destination);
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/QueueReplyManager.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/QueueReplyManager.java
index 30ee6ee..7ef7da1 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/QueueReplyManager.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/QueueReplyManager.java
@@ -21,9 +21,7 @@ import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.Session;
 
-import org.apache.camel.AsyncCallback;
 import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
 import org.apache.camel.component.sjms.MessageListenerContainer;
 import org.apache.camel.component.sjms.ReplyToType;
 import org.apache.camel.component.sjms.consumer.SimpleMessageListenerContainer;
@@ -39,20 +37,6 @@ public class QueueReplyManager extends ReplyManagerSupport {
     }
 
     @Override
-    protected ReplyHandler createReplyHandler(
-            ReplyManager replyManager, Exchange exchange, AsyncCallback callback,
-            String originalCorrelationId, String correlationId, long requestTimeout) {
-        return new QueueReplyHandler(
-                replyManager, exchange, callback,
-                originalCorrelationId, correlationId, requestTimeout);
-    }
-
-    @Override
-    public void setReplyToSelectorHeader(org.apache.camel.Message camelMessage, Message jmsMessage) throws JMSException {
-        // noop
-    }
-
-    @Override
     public void updateCorrelationId(String correlationId, String newCorrelationId, long requestTimeout) {
         log.trace("Updated provisional correlationId [{}] to expected correlationId [{}]", correlationId, newCorrelationId);
 
@@ -130,7 +114,7 @@ public class QueueReplyManager extends ReplyManagerSupport {
         answer.setDestinationCreationStrategy(new DestinationResolverDelegate(endpoint.getDestinationCreationStrategy()));
         answer.setDestinationName(endpoint.getReplyTo());
 
-        String clientId = endpoint.getComponent().getClientId();
+        String clientId = endpoint.getClientId();
         if (clientId != null) {
             clientId += ".CamelReplyManager";
             answer.setClientId(clientId);
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ReplyManager.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ReplyManager.java
index 60fdc8e..b0ddc96 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ReplyManager.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ReplyManager.java
@@ -20,8 +20,6 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ScheduledExecutorService;
 
 import javax.jms.Destination;
-import javax.jms.JMSException;
-import javax.jms.Message;
 
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
@@ -58,24 +56,11 @@ public interface ReplyManager extends SessionMessageListener {
     void setOnTimeoutExecutorService(ExecutorService executorService);
 
     /**
-     * Sets the JMS message property used for message correlation. If set message correlation will be performed on the
-     * value of this JMS property, JMSCorrelationID will be ignored.
-     */
-    @Deprecated
-    void setCorrelationProperty(String correlationProperty);
-
-    /**
      * Gets the reply to queue being used
      */
     Destination getReplyTo();
 
     /**
-     * To be used when a reply queue is used with a custom JMS selector is being used.
-     */
-    @Deprecated
-    void setReplyToSelectorHeader(org.apache.camel.Message camelMessage, Message jmsMessage) throws JMSException;
-
-    /**
      * Register a reply
      *
      * @param  replyManager          the reply manager being used
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ReplyManagerSupport.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ReplyManagerSupport.java
index 22a195f..b1342e3 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ReplyManagerSupport.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/ReplyManagerSupport.java
@@ -41,6 +41,8 @@ import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static org.apache.camel.component.sjms.jms.JmsMessageHelper.getJMSCorrelationIDAsBytes;
+
 /**
  * Base class for {@link ReplyManager} implementations.
  */
@@ -56,7 +58,6 @@ public abstract class ReplyManagerSupport extends ServiceSupport implements Repl
     protected final CountDownLatch replyToLatch = new CountDownLatch(1);
     protected final long replyToTimeout = 10000;
     protected CorrelationTimeoutMap correlation;
-    protected String correlationProperty;
 
     public ReplyManagerSupport(CamelContext camelContext) {
         this.camelContext = camelContext;
@@ -86,11 +87,6 @@ public abstract class ReplyManagerSupport extends ServiceSupport implements Repl
     }
 
     @Override
-    public void setCorrelationProperty(final String correlationProperty) {
-        this.correlationProperty = correlationProperty;
-    }
-
-    @Override
     public Destination getReplyTo() {
         if (replyTo != null) {
             return replyTo;
@@ -129,23 +125,9 @@ public abstract class ReplyManagerSupport extends ServiceSupport implements Repl
         return correlationId;
     }
 
-    protected abstract ReplyHandler createReplyHandler(
-            ReplyManager replyManager, Exchange exchange, AsyncCallback callback,
-            String originalCorrelationId, String correlationId, long requestTimeout);
-
     @Override
     public void onMessage(Message message, Session session) throws JMSException {
-        String correlationID = null;
-
-        try {
-            if (correlationProperty == null) {
-                correlationID = message.getJMSCorrelationID();
-            } else {
-                correlationID = message.getStringProperty(correlationProperty);
-            }
-        } catch (JMSException e) {
-            // ignore
-        }
+        String correlationID = getJMSCorrelationIDAsBytes(message);
 
         if (correlationID == null) {
             log.warn("Ignoring message with no correlationID: {}", message);
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/TemporaryQueueMessageListenerContainer.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/TemporaryQueueMessageListenerContainer.java
index 3e1c933..36769c9 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/TemporaryQueueMessageListenerContainer.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/TemporaryQueueMessageListenerContainer.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.sjms.reply;
 
+import javax.jms.Connection;
 import javax.jms.Destination;
 import javax.jms.MessageConsumer;
 import javax.jms.Session;
@@ -36,6 +37,12 @@ public class TemporaryQueueMessageListenerContainer extends SimpleMessageListene
     }
 
     @Override
+    protected Session createSession(Connection connection, SjmsEndpoint endpoint) throws Exception {
+        // cannot be transacted when doing request/reply
+        return connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+    }
+
+    @Override
     protected MessageConsumer createMessageConsumer(Session session) throws Exception {
         Destination destination = getDestinationCreationStrategy().createTemporaryDestination(session, false);
         return getEndpoint().getJmsObjectFactory().createQueueMessageConsumer(session, destination);
diff --git a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/TemporaryQueueReplyManager.java b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/TemporaryQueueReplyManager.java
index 6210d53..7c37807 100644
--- a/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/TemporaryQueueReplyManager.java
+++ b/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/reply/TemporaryQueueReplyManager.java
@@ -25,9 +25,7 @@ import javax.jms.Message;
 import javax.jms.Session;
 import javax.jms.TemporaryQueue;
 
-import org.apache.camel.AsyncCallback;
 import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
 import org.apache.camel.component.sjms.MessageListenerContainer;
 import org.apache.camel.component.sjms.jms.DestinationCreationStrategy;
 
@@ -53,13 +51,6 @@ public class TemporaryQueueReplyManager extends ReplyManagerSupport {
     }
 
     @Override
-    protected ReplyHandler createReplyHandler(
-            ReplyManager replyManager, Exchange exchange, AsyncCallback callback,
-            String originalCorrelationId, String correlationId, long requestTimeout) {
-        return new TemporaryQueueReplyHandler(this, exchange, callback, originalCorrelationId, correlationId, requestTimeout);
-    }
-
-    @Override
     public void updateCorrelationId(String correlationId, String newCorrelationId, long requestTimeout) {
         log.trace("Updated provisional correlationId [{}] to expected correlationId [{}]", correlationId, newCorrelationId);
 
@@ -84,17 +75,12 @@ public class TemporaryQueueReplyManager extends ReplyManagerSupport {
     }
 
     @Override
-    public void setReplyToSelectorHeader(org.apache.camel.Message camelMessage, Message jmsMessage) throws JMSException {
-        // noop
-    }
-
-    @Override
     protected MessageListenerContainer createListenerContainer() throws Exception {
         TemporaryQueueMessageListenerContainer answer
                 = new TemporaryQueueMessageListenerContainer(endpoint);
         answer.setMessageListener(this);
 
-        String clientId = endpoint.getComponent().getClientId();
+        String clientId = endpoint.getClientId();
         if (clientId != null) {
             clientId += ".CamelReplyManager";
             answer.setClientId(clientId);
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/SjmsEndpointNameOverrideTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/SjmsEndpointNameOverrideTest.java
index c689b5b..9d64033 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/SjmsEndpointNameOverrideTest.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/SjmsEndpointNameOverrideTest.java
@@ -69,7 +69,6 @@ public class SjmsEndpointNameOverrideTest extends CamelTestSupport {
         ActiveMQConnectionFactory connectionFactory
                 = new ActiveMQConnectionFactory("vm://broker?broker.persistent=false&broker.useJmx=false");
         SjmsComponent component = new SjmsComponent();
-        component.setConnectionCount(1);
         component.setConnectionFactory(connectionFactory);
         camelContext.addComponent(BEAN_NAME, component);
 
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/SjmsEndpointTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/SjmsEndpointTest.java
index 723226f..f20722c 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/SjmsEndpointTest.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/SjmsEndpointTest.java
@@ -161,7 +161,6 @@ public class SjmsEndpointTest extends CamelTestSupport {
         ActiveMQConnectionFactory connectionFactory
                 = new ActiveMQConnectionFactory("vm://broker?broker.persistent=false&broker.useJmx=false");
         SjmsComponent component = new SjmsComponent();
-        component.setConnectionCount(3);
         component.setConnectionFactory(connectionFactory);
         camelContext.addComponent("sjms", component);
 
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyTopicDurableConsumerTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyTopicDurableConsumerTest.java
index 788d264..f435a57 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyTopicDurableConsumerTest.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOnlyTopicDurableConsumerTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.sjms.consumer;
 
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.activemq.pool.PooledConnectionFactory;
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -47,7 +49,12 @@ public class InOnlyTopicDurableConsumerTest extends JmsTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
         SjmsComponent sjms = context.getComponent("sjms", SjmsComponent.class);
+
+        // need to use a pooled CF so we reuse same connection for multiple client connections
+        PooledConnectionFactory pcf = new PooledConnectionFactory((ActiveMQConnectionFactory) sjms.getConnectionFactory());
+        sjms.setConnectionFactory(pcf);
         sjms.setClientId(CONNECTION_ID);
+
         return context;
     }
 
@@ -56,10 +63,10 @@ public class InOnlyTopicDurableConsumerTest extends JmsTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("sjms:topic:foo?durableSubscriptionId=bar1")
+                from("sjms:topic:foo?durableSubscriptionName=bar1")
                         .to("mock:result");
 
-                from("sjms:topic:foo?durableSubscriptionId=bar2")
+                from("sjms:topic:foo?durableSubscriptionName=bar2")
                         .to("mock:result2");
             }
         };
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerQueueTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerQueueTest.java
index cf0c6c6..ecb3f9a 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerQueueTest.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/consumer/InOutConsumerQueueTest.java
@@ -30,6 +30,7 @@ public class InOutConsumerQueueTest extends JmsTestSupport {
 
         template.sendBody("sjms:start", "Hello Camel");
         template.sendBody("sjms:start", "Hello World");
+
         assertMockEndpointsSatisfied();
     }
 
@@ -41,7 +42,7 @@ public class InOutConsumerQueueTest extends JmsTestSupport {
                         .to("sjms:queue:in.out.queue?exchangePattern=InOut&replyTo=in.out.queue.response")
                         .to("log:response").to("mock:result");
 
-                from("sjms:queue:in.out.queue?exchangePattern=InOut").process(new Processor() {
+                from("sjms:queue:in.out.queue").process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
                         String body = (String) exchange.getIn().getBody();
                         if (body.contains("Camel")) {
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/support/JmsTestSupport.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/support/JmsTestSupport.java
index cf6856d..e99ea8d 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/support/JmsTestSupport.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/support/JmsTestSupport.java
@@ -156,7 +156,6 @@ public class JmsTestSupport extends CamelTestSupport {
         session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         if (addSjmsComponent) {
             SjmsComponent component = new SjmsComponent();
-            component.setConnectionCount(1);
             component.setConnectionFactory(connectionFactory);
             camelContext.addComponent("sjms", component);
         }
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/tx/TransactedQueueProducerTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/tx/TransactedQueueInOutProducerTest.java
similarity index 80%
copy from components/camel-sjms/src/test/java/org/apache/camel/component/sjms/tx/TransactedQueueProducerTest.java
copy to components/camel-sjms/src/test/java/org/apache/camel/component/sjms/tx/TransactedQueueInOutProducerTest.java
index ee0f2c8..c876faa 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/tx/TransactedQueueProducerTest.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/tx/TransactedQueueInOutProducerTest.java
@@ -19,28 +19,27 @@ package org.apache.camel.component.sjms.tx;
 import org.apache.activemq.ActiveMQConnectionFactory;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePattern;
 import org.apache.camel.Processor;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.RollbackExchangeException;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.sjms.SjmsComponent;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.fail;
 
-public class TransactedQueueProducerTest extends CamelTestSupport {
+public class TransactedQueueInOutProducerTest extends CamelTestSupport {
 
     @Produce
     protected ProducerTemplate template;
 
     @Test
     public void testRoute() throws Exception {
-
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedBodiesReceived("Hello World 2");
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World 2");
+        getMockEndpoint("mock:result2").expectedBodiesReceived("Changed Hello World 2");
 
         try {
             template.sendBodyAndHeader("direct:start", "Hello World 1", "isfailed", true);
@@ -50,7 +49,7 @@ public class TransactedQueueProducerTest extends CamelTestSupport {
         }
         template.sendBodyAndHeader("direct:start", "Hello World 2", "isfailed", false);
 
-        mock.assertIsSatisfied();
+        assertMockEndpointsSatisfied();
     }
 
     @Override
@@ -69,9 +68,11 @@ public class TransactedQueueProducerTest extends CamelTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() {
-
                 from("direct:start")
                         .to("sjms:queue:test.queue?transacted=true")
+                        // request/reply is not transacted
+                        .to(ExchangePattern.InOut, "sjms:queue:test.transform")
+                        .to("sjms:queue:test.queue2?transacted=true")
                         .process(
                                 new Processor() {
                                     @Override
@@ -85,9 +86,14 @@ public class TransactedQueueProducerTest extends CamelTestSupport {
                                     }
                                 });
 
-                from("sjms:queue:test.queue?durableSubscriptionId=bar&transacted=true")
+                from("sjms:queue:test.queue?transacted=true")
                         .to("mock:result");
 
+                from("sjms:queue:test.queue2?transacted=true")
+                        .to("mock:result2");
+
+                from("sjms:queue:test.transform")
+                        .transform(body().prepend("Changed "));
             }
         };
     }
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/tx/TransactedQueueProducerTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/tx/TransactedQueueProducerTest.java
index ee0f2c8..fe2184b 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/tx/TransactedQueueProducerTest.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/tx/TransactedQueueProducerTest.java
@@ -24,7 +24,6 @@ import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.RollbackExchangeException;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.sjms.SjmsComponent;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
@@ -38,9 +37,8 @@ public class TransactedQueueProducerTest extends CamelTestSupport {
 
     @Test
     public void testRoute() throws Exception {
-
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedBodiesReceived("Hello World 2");
+        getMockEndpoint("mock:result").expectedBodiesReceived("Hello World 2");
+        getMockEndpoint("mock:result2").expectedBodiesReceived("Hello World 2");
 
         try {
             template.sendBodyAndHeader("direct:start", "Hello World 1", "isfailed", true);
@@ -50,7 +48,7 @@ public class TransactedQueueProducerTest extends CamelTestSupport {
         }
         template.sendBodyAndHeader("direct:start", "Hello World 2", "isfailed", false);
 
-        mock.assertIsSatisfied();
+        assertMockEndpointsSatisfied();
     }
 
     @Override
@@ -69,9 +67,9 @@ public class TransactedQueueProducerTest extends CamelTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() {
-
                 from("direct:start")
                         .to("sjms:queue:test.queue?transacted=true")
+                        .to("sjms:queue:test.queue2?transacted=true")
                         .process(
                                 new Processor() {
                                     @Override
@@ -85,9 +83,11 @@ public class TransactedQueueProducerTest extends CamelTestSupport {
                                     }
                                 });
 
-                from("sjms:queue:test.queue?durableSubscriptionId=bar&transacted=true")
+                from("sjms:queue:test.queue?transacted=true")
                         .to("mock:result");
 
+                from("sjms:queue:test.queue2?transacted=true")
+                        .to("mock:result2");
             }
         };
     }
diff --git a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/tx/TransactedTopicProducerTest.java b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/tx/TransactedTopicProducerTest.java
index dea5a9e..3682237 100644
--- a/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/tx/TransactedTopicProducerTest.java
+++ b/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/tx/TransactedTopicProducerTest.java
@@ -85,7 +85,7 @@ public class TransactedTopicProducerTest extends JmsTestSupport {
                                     }
                                 });
 
-                from("sjms:topic:test.topic?durableSubscriptionId=bar&transacted=true")
+                from("sjms:topic:test.topic?durableSubscriptionName=bar&transacted=true")
                         .to("mock:result");
 
             }
diff --git a/components/camel-sjms2/pom.xml b/components/camel-sjms2/pom.xml
index e124b5e..9c19ee2 100644
--- a/components/camel-sjms2/pom.xml
+++ b/components/camel-sjms2/pom.xml
@@ -45,10 +45,6 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-sjms</artifactId>
         </dependency>
-        <dependency>
-            <groupId>commons-pool</groupId>
-            <artifactId>commons-pool</artifactId>
-        </dependency>
 
         <dependency>
             <groupId>org.apache.geronimo.specs</groupId>
@@ -91,6 +87,13 @@
             <artifactId>activemq-pool</artifactId>
             <scope>test</scope>
         </dependency>
+        <!-- artemis connection pool -->
+        <dependency>
+            <groupId>org.messaginghub</groupId>
+            <artifactId>pooled-jms</artifactId>
+            <version>1.2.1</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>commons-io</groupId>
             <artifactId>commons-io</artifactId>
diff --git a/components/camel-sjms2/src/generated/java/org/apache/camel/component/sjms2/Sjms2EndpointUriFactory.java b/components/camel-sjms2/src/generated/java/org/apache/camel/component/sjms2/Sjms2EndpointUriFactory.java
index 9ac71dc..2531990 100644
--- a/components/camel-sjms2/src/generated/java/org/apache/camel/component/sjms2/Sjms2EndpointUriFactory.java
+++ b/components/camel-sjms2/src/generated/java/org/apache/camel/component/sjms2/Sjms2EndpointUriFactory.java
@@ -20,13 +20,11 @@ public class Sjms2EndpointUriFactory extends org.apache.camel.support.component.
     private static final Set<String> PROPERTY_NAMES;
     private static final Set<String> SECRET_PROPERTY_NAMES;
     static {
-        Set<String> props = new HashSet<>(53);
-        props.add("includeSentJMSMessageID");
+        Set<String> props = new HashSet<>(49);
         props.add("asyncConsumer");
         props.add("mapJmsMessage");
         props.add("synchronous");
         props.add("includeAllJMSXProperties");
-        props.add("errorHandlerLogStackTrace");
         props.add("eagerLoadingOfProperties");
         props.add("timeToLive");
         props.add("bridgeErrorHandler");
@@ -47,12 +45,9 @@ public class Sjms2EndpointUriFactory extends org.apache.camel.support.component.
         props.add("lazyStartProducer");
         props.add("replyTo");
         props.add("replyToOverride");
-        props.add("errorHandlerLoggingLevel");
-        props.add("durableSubscriptionId");
         props.add("subscriptionId");
         props.add("exceptionHandler");
         props.add("shared");
-        props.add("connectionCount");
         props.add("explicitQosEnabled");
         props.add("transacted");
         props.add("autoStartup");
@@ -66,14 +61,15 @@ public class Sjms2EndpointUriFactory extends org.apache.camel.support.component.
         props.add("allowNullBody");
         props.add("replyToDeliveryPersistent");
         props.add("disableReplyTo");
+        props.add("clientId");
         props.add("recoveryInterval");
         props.add("exchangePattern");
         props.add("preserveMessageQos");
         props.add("replyToType");
-        props.add("testConnectionOnStartup");
         props.add("connectionFactory");
+        props.add("testConnectionOnStartup");
+        props.add("durableSubscriptionName");
         props.add("replyToSameDestinationAllowed");
-        props.add("sharedJMSSession");
         PROPERTY_NAMES = Collections.unmodifiableSet(props);
         SECRET_PROPERTY_NAMES = Collections.emptySet();
     }
diff --git a/components/camel-sjms2/src/generated/resources/org/apache/camel/component/sjms2/sjms2.json b/components/camel-sjms2/src/generated/resources/org/apache/camel/component/sjms2/sjms2.json
index 4fe444a..733580a 100644
--- a/components/camel-sjms2/src/generated/resources/org/apache/camel/component/sjms2/sjms2.json
+++ b/components/camel-sjms2/src/generated/resources/org/apache/camel/component/sjms2/sjms2.json
@@ -22,8 +22,7 @@
     "lenientProperties": false
   },
   "componentProperties": {
-    "connectionCount": { "kind": "property", "displayName": "Connection Count", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "1", "description": "The maximum number of connections available to endpoints started under this component" },
-    "connectionFactory": { "kind": "property", "displayName": "Connection Factory", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "javax.jms.ConnectionFactory", "deprecated": false, "autowired": true, "secret": false, "description": "A ConnectionFactory is required to enable the SjmsComponent. It can be set directly or set set as part of a ConnectionResource." },
+    "connectionFactory": { "kind": "property", "displayName": "Connection Factory", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "javax.jms.ConnectionFactory", "deprecated": false, "autowired": true, "secret": false, "description": "The connection factory to be use. A connection factory must be configured either on the component or endpoint." },
     "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a me [...]
     "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during star [...]
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which t [...]
@@ -33,23 +32,23 @@
     "recoveryInterval": { "kind": "property", "displayName": "Recovery Interval", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "5000", "description": "Specifies the interval between recovery attempts, i.e. when a connection is being refreshed, in milliseconds. The default is 5000 ms, that is, 5 seconds." },
     "replyToOnTimeoutMaxConcurrentConsumers": { "kind": "property", "displayName": "Reply To On Timeout Max Concurrent Consumers", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "description": "Specifies the maximum number of concurrent consumers for continue routing when timeout occurred when using request\/reply over JMS." },
     "requestTimeoutCheckerInterval": { "kind": "property", "displayName": "Request Timeout Checker Interval", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "1000", "description": "Configures how often Camel should check for timed out Exchanges when doing request\/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeou [...]
-    "headerFilterStrategy": { "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." },
-    "password": { "kind": "property", "displayName": "Password", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "Password to use with the ConnectionFactory. You can also configure username\/password directly on the ConnectionFactory." },
-    "username": { "kind": "property", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "description": "Username to use with the ConnectionFactory. You can also configure username\/password directly on the ConnectionFactory." }
+    "headerFilterStrategy": { "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." }
   },
   "properties": {
     "destinationType": { "kind": "path", "displayName": "Destination Type", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "queue", "topic" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "queue", "description": "The kind of destination to use" },
     "destinationName": { "kind": "path", "displayName": "Destination Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "DestinationName is a JMS queue or topic name. By default, the destinationName is interpreted as a queue name." },
     "acknowledgementMode": { "kind": "parameter", "displayName": "Acknowledgement Mode", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.sjms.jms.SessionAcknowledgementType", "enum": [ "SESSION_TRANSACTED", "CLIENT_ACKNOWLEDGE", "AUTO_ACKNOWLEDGE", "DUPS_OK_ACKNOWLEDGE" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "AUTO_ACKNOWLEDGE", "description": "The JMS acknowledgement name, which is one of:  [...]
+    "connectionFactory": { "kind": "parameter", "displayName": "Connection Factory", "group": "common", "label": "common", "required": false, "type": "object", "javaType": "javax.jms.ConnectionFactory", "deprecated": false, "autowired": false, "secret": false, "description": "The connection factory to be use. A connection factory must be configured either on the component or endpoint." },
     "disableReplyTo": { "kind": "parameter", "displayName": "Disable Reply To", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Specifies whether Camel ignores the JMSReplyTo header in messages. If true, Camel does not send a reply back to the destination specified in the JMSReplyTo header. You can use this option if you want Camel to consume from  [...]
     "replyTo": { "kind": "parameter", "displayName": "Reply To", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer)." },
     "testConnectionOnStartup": { "kind": "parameter", "displayName": "Test Connection On Startup", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel [...]
     "asyncConsumer": { "kind": "parameter", "displayName": "Async Consumer", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the Asy [...]
     "autoStartup": { "kind": "parameter", "displayName": "Auto Startup", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Specifies whether the consumer container should auto-startup." },
     "bridgeErrorHandler": { "kind": "parameter", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a m [...]
+    "clientId": { "kind": "parameter", "displayName": "Client Id", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the JMS client ID to use. Note that this value, if specified, must be unique and can only be used by a single JMS connection instance. It is typically only required for durable topic subscriptions. If using Apache ActiveMQ you may pref [...]
     "concurrentConsumers": { "kind": "parameter", "displayName": "Concurrent Consumers", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "description": "Specifies the default number of concurrent consumers when consuming from JMS (not for request\/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up\/down of threads. When doing r [...]
     "durable": { "kind": "parameter", "displayName": "Durable", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets topic consumer to durable." },
-    "durableSubscriptionId": { "kind": "parameter", "displayName": "Durable Subscription Id", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the durable subscription Id required for durable topics." },
+    "durableSubscriptionName": { "kind": "parameter", "displayName": "Durable Subscription Name", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well." },
     "replyToDeliveryPersistent": { "kind": "parameter", "displayName": "Reply To Delivery Persistent", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Specifies whether to use persistent delivery by default for replies." },
     "shared": { "kind": "parameter", "displayName": "Shared", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets the consumer to shared." },
     "subscriptionId": { "kind": "parameter", "displayName": "Subscription Id", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the subscription Id, required for durable or shared topics." },
@@ -61,22 +60,19 @@
     "replyToSameDestinationAllowed": { "kind": "parameter", "displayName": "Reply To Same Destination Allowed", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether a JMS consumer is allowed to send a reply message to the same destination that the consumer is using to consume from. This prevents an endless loop by c [...]
     "deliveryMode": { "kind": "parameter", "displayName": "Delivery Mode", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "enum": [ "1", "2" ], "deprecated": false, "autowired": false, "secret": false, "description": "Specifies the delivery mode to be used. Possible values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT = 2." },
     "deliveryPersistent": { "kind": "parameter", "displayName": "Delivery Persistent", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Specifies whether persistent delivery is used by default." },
-    "explicitQosEnabled": { "kind": "parameter", "displayName": "Explicit Qos Enabled", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "false", "description": "Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLi [...]
     "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during sta [...]
-    "preserveMessageQos": { "kind": "parameter", "displayName": "Preserve Message Qos", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDelive [...]
     "priority": { "kind": "parameter", "displayName": "Priority", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "int", "enum": [ "1", "2", "3", "4", "5", "6", "7", "8", "9" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": 4, "description": "Values greater than 1 specify the message priority when sending (where 1 is the lowest priority and 9 is the highest). The explicitQosEnabled option must also be enabled in orde [...]
     "replyToConcurrentConsumers": { "kind": "parameter", "displayName": "Reply To Concurrent Consumers", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 1, "description": "Specifies the default number of concurrent consumers when doing request\/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up\/down of threads." },
     "replyToOverride": { "kind": "parameter", "displayName": "Reply To Override", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Provides an explicit ReplyTo destination in the JMS message, which overrides the setting of replyTo. It is useful if you want to forward the message to a remote Queue and receive the reply message from the ReplyTo destination." },
-    "replyToType": { "kind": "parameter", "displayName": "Reply To Type", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.sjms.ReplyToType", "enum": [ "Temporary", "Exclusive" ], "deprecated": false, "autowired": false, "secret": false, "description": "Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request\/reply over JMS. Possible values are: Temporary, Shared, or Exclusi [...]
+    "replyToType": { "kind": "parameter", "displayName": "Reply To Type", "group": "producer", "label": "producer", "required": false, "type": "object", "javaType": "org.apache.camel.component.sjms.ReplyToType", "enum": [ "Temporary", "Exclusive" ], "deprecated": false, "autowired": false, "secret": false, "description": "Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request\/reply over JMS. Possible values are: Temporary or Exclusive. By de [...]
     "requestTimeout": { "kind": "parameter", "displayName": "Request Timeout", "group": "producer", "label": "producer", "required": false, "type": "duration", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "20000", "description": "The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You can include the header CamelJmsRequestTimeout to override this endpoint configured timeou [...]
     "timeToLive": { "kind": "parameter", "displayName": "Time To Live", "group": "producer", "label": "producer", "required": false, "type": "integer", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": -1, "description": "When sending messages, specifies the time-to-live of the message (in milliseconds)." },
     "allowNullBody": { "kind": "parameter", "displayName": "Allow Null Body", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to allow sending messages with no body. If this option is false and the message body is null, then an JMSException is thrown." },
     "disableTimeToLive": { "kind": "parameter", "displayName": "Disable Time To Live", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Use this option to force disabling time to live. For example when you do request\/reply over JMS, then Camel will by default use the requestTimeout value as time to live on the message  [...]
-    "includeSentJMSMessageID": { "kind": "parameter", "displayName": "Include Sent JMSMessage ID", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Only applicable when sending to JMS destination using InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange with the actual JMSMessageID that was  [...]
+    "explicitQosEnabled": { "kind": "parameter", "displayName": "Explicit Qos Enabled", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "false", "description": "Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, p [...]
+    "preserveMessageQos": { "kind": "parameter", "displayName": "Preserve Message Qos", "group": "producer (advanced)", "label": "producer,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JM [...]
     "asyncStartListener": { "kind": "parameter", "displayName": "Async Start Listener", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to startup the consumer message listener asynchronously, when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker, then it may block while retrying and\/o [...]
     "asyncStopListener": { "kind": "parameter", "displayName": "Async Stop Listener", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to stop the consumer message listener asynchronously, when stopping a route." },
-    "connectionCount": { "kind": "parameter", "displayName": "Connection Count", "group": "advanced", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": true, "autowired": false, "secret": false, "description": "The maximum number of connections available to this endpoint" },
-    "connectionFactory": { "kind": "parameter", "displayName": "Connection Factory", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.jms.ConnectionFactory", "deprecated": false, "autowired": false, "secret": false, "description": "Initializes the connectionFactory for the endpoint, which takes precedence over the component's connectionFactory, if any" },
     "destinationCreationStrategy": { "kind": "parameter", "displayName": "Destination Creation Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.sjms.jms.DestinationCreationStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom DestinationCreationStrategy." },
     "exceptionListener": { "kind": "parameter", "displayName": "Exception Listener", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "javax.jms.ExceptionListener", "deprecated": false, "autowired": false, "secret": false, "description": "Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions." },
     "headerFilterStrategy": { "kind": "parameter", "displayName": "Header Filter Strategy", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom HeaderFilterStrategy to filter header to and from Camel message." },
@@ -87,9 +83,6 @@
     "recoveryInterval": { "kind": "parameter", "displayName": "Recovery Interval", "group": "advanced", "label": "advanced", "required": false, "type": "duration", "javaType": "long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "5000", "description": "Specifies the interval between recovery attempts, i.e. when a connection is being refreshed, in milliseconds. The default is 5000 ms, that is, 5 seconds." },
     "synchronous": { "kind": "parameter", "displayName": "Synchronous", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported)." },
     "transferException": { "kind": "parameter", "displayName": "Transfer Exception", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled and you are using Request Reply messaging (InOut) and an Exchange failed on the consumer side, then the caused Exception will be send back in response as a javax.jms.ObjectMessage. If the client i [...]
-    "errorHandlerLoggingLevel": { "kind": "parameter", "displayName": "Error Handler Logging Level", "group": "logging", "label": "consumer,logging", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "WARN", "description": "Allows to configure the default errorHandler logging level for logging uncaught exceptions." },
-    "errorHandlerLogStackTrace": { "kind": "parameter", "displayName": "Error Handler Log Stack Trace", "group": "logging", "label": "consumer,logging", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Allows to control whether stacktraces should be logged or not, by the default errorHandler." },
-    "transacted": { "kind": "parameter", "displayName": "Transacted", "group": "transaction", "label": "transaction", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Specifies whether to use transacted mode" },
-    "sharedJMSSession": { "kind": "parameter", "displayName": "Shared JMSSession", "group": "transaction (advanced)", "label": "transaction,advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Specifies whether to share JMS session with other SJMS endpoints. Turn this off if your route is accessing to multiple JMS providers. If you need transaction against multiple JMS provi [...]
+    "transacted": { "kind": "parameter", "displayName": "Transacted", "group": "transaction", "label": "transaction", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Specifies whether to use transacted mode" }
   }
 }
diff --git a/components/camel-sjms2/src/main/docs/sjms2-component.adoc b/components/camel-sjms2/src/main/docs/sjms2-component.adoc
index a638296..d589102 100644
--- a/components/camel-sjms2/src/main/docs/sjms2-component.adoc
+++ b/components/camel-sjms2/src/main/docs/sjms2-component.adoc
@@ -79,15 +79,14 @@ You append query options to the URI using the following format,
 == Component Options and Configurations
 
 // component options: START
-The Simple JMS2 component supports 14 options, which are listed below.
+The Simple JMS2 component supports 11 options, which are listed below.
 
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *connectionCount* (common) | The maximum number of connections available to endpoints started under this component | 1 | Integer
-| *connectionFactory* (common) | *Autowired* A ConnectionFactory is required to enable the SjmsComponent. It can be set directly or set set as part of a ConnectionResource. |  | ConnectionFactory
+| *connectionFactory* (common) | *Autowired* The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
 | *autowiredEnabled* (advanced) | Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. | true | boolean
@@ -98,8 +97,6 @@ The Simple JMS2 component supports 14 options, which are listed below.
 | *replyToOnTimeoutMaxConcurrent{zwsp}Consumers* (advanced) | Specifies the maximum number of concurrent consumers for continue routing when timeout occurred when using request/reply over JMS. | 1 | int
 | *requestTimeoutCheckerInterval* (advanced) | Configures how often Camel should check for timed out Exchanges when doing request/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeout occurs, then you can lower this interval, to check more frequently. The timeout is determined by the option requestTimeout. | 1000 | long
 | *headerFilterStrategy* (filter) | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message. |  | HeaderFilterStrategy
-| *password* (security) | Password to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory. |  | String
-| *username* (security) | Username to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory. |  | String
 |===
 // component options: END
 
@@ -124,22 +121,24 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (51 parameters):
+=== Query Parameters (47 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
 | *acknowledgementMode* (common) | The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. There are 4 enums and the value can be one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE | AUTO_ACKNOWLEDGE | SessionAcknowledgementType
+| *connectionFactory* (common) | The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
 | *disableReplyTo* (common) | Specifies whether Camel ignores the JMSReplyTo header in messages. If true, Camel does not send a reply back to the destination specified in the JMSReplyTo header. You can use this option if you want Camel to consume from a route and you do not want Camel to automatically send back a reply message because another component in your code handles the reply message. You can also use this option if you want to use Camel as a proxy between different message broker [...]
 | *replyTo* (common) | Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer). |  | String
 | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean
 | *asyncConsumer* (consumer) | Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transac [...]
 | *autoStartup* (consumer) | Specifies whether the consumer container should auto-startup. | true | boolean
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
+| *clientId* (consumer) | Sets the JMS client ID to use. Note that this value, if specified, must be unique and can only be used by a single JMS connection instance. It is typically only required for durable topic subscriptions. If using Apache ActiveMQ you may prefer to use Virtual Topics instead. |  | String
 | *concurrentConsumers* (consumer) | Specifies the default number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToConcurrentConsumers is used to control number of concurrent consumers on the reply message listener. | 1 | int
 | *durable* (consumer) | Sets topic consumer to durable. | false | boolean
-| *durableSubscriptionId* (consumer) | Sets the durable subscription Id required for durable topics. |  | String
+| *durableSubscriptionName* (consumer) | The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well. |  | String
 | *replyToDeliveryPersistent* (consumer) | Specifies whether to use persistent delivery by default for replies. | true | boolean
 | *shared* (consumer) | Sets the consumer to shared. | false | boolean
 | *subscriptionId* (consumer) | Sets the subscription Id, required for durable or shared topics. |  | String
@@ -151,22 +150,19 @@ with the following path and query parameters:
 | *replyToSameDestinationAllowed* (consumer) | Whether a JMS consumer is allowed to send a reply message to the same destination that the consumer is using to consume from. This prevents an endless loop by consuming and sending back the same message to itself. | false | boolean
 | *deliveryMode* (producer) | Specifies the delivery mode to be used. Possible values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT = 2. There are 2 enums and the value can be one of: 1, 2 |  | Integer
 | *deliveryPersistent* (producer) | Specifies whether persistent delivery is used by default. | true | boolean
-| *explicitQosEnabled* (producer) | Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option, which operates at message granularity, reading QoS properties exclusively from the Camel In message headers. | false | Boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
-| *preserveMessageQos* (producer) | Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDeliveryMode, and JMSExpiration. You can provide all or only some of them. If not provided, Camel will fall back to use the values from the endpoint instead. So, when using this option, the headers override the values from the endpoint. The explicitQosEnable [...]
 | *priority* (producer) | Values greater than 1 specify the message priority when sending (where 1 is the lowest priority and 9 is the highest). The explicitQosEnabled option must also be enabled in order for this option to have any effect. There are 9 enums and the value can be one of: 1, 2, 3, 4, 5, 6, 7, 8, 9 | 4 | int
 | *replyToConcurrentConsumers* (producer) | Specifies the default number of concurrent consumers when doing request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. | 1 | int
 | *replyToOverride* (producer) | Provides an explicit ReplyTo destination in the JMS message, which overrides the setting of replyTo. It is useful if you want to forward the message to a remote Queue and receive the reply message from the ReplyTo destination. |  | String
-| *replyToType* (producer) | Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS. Possible values are: Temporary, Shared, or Exclusive. By default Camel will use temporary queues. However if replyTo has been configured, then Shared is used by default. This option allows you to use exclusive queues instead of shared ones. See Camel JMS documentation for more details, and especially the notes about the implications if running  [...]
+| *replyToType* (producer) | Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS. Possible values are: Temporary or Exclusive. By default Camel will use temporary queues. However if replyTo has been configured, then Exclusive is used. There are 2 enums and the value can be one of: Temporary, Exclusive |  | ReplyToType
 | *requestTimeout* (producer) | The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You can include the header CamelJmsRequestTimeout to override this endpoint configured timeout value, and thus have per message individual timeout values. See also the requestTimeoutCheckerInterval option. | 20000 | long
 | *timeToLive* (producer) | When sending messages, specifies the time-to-live of the message (in milliseconds). | -1 | long
 | *allowNullBody* (producer) | Whether to allow sending messages with no body. If this option is false and the message body is null, then an JMSException is thrown. | true | boolean
 | *disableTimeToLive* (producer) | Use this option to force disabling time to live. For example when you do request/reply over JMS, then Camel will by default use the requestTimeout value as time to live on the message being sent. The problem is that the sender and receiver systems have to have their clocks synchronized, so they are in sync. This is not always so easy to archive. So you can use disableTimeToLive=true to not set a time to live value on the sent message. Then the message w [...]
-| *includeSentJMSMessageID* (producer) | Only applicable when sending to JMS destination using InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange with the actual JMSMessageID that was used by the JMS client when the message was sent to the JMS destination. | false | boolean
+| *explicitQosEnabled* (producer) | Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option, which operates at message granularity, reading QoS properties exclusively from the Camel In message headers. | false | Boolean
+| *preserveMessageQos* (producer) | Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDeliveryMode, and JMSExpiration. You can provide all or only some of them. If not provided, Camel will fall back to use the values from the endpoint instead. So, when using this option, the headers override the values from the endpoint. The explicitQosEnable [...]
 | *asyncStartListener* (advanced) | Whether to startup the consumer message listener asynchronously, when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker, then it may block while retrying and/or failover. This will cause Camel to block while starting routes. By setting this option to true, you will let routes startup, while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this option is used, then b [...]
 | *asyncStopListener* (advanced) | Whether to stop the consumer message listener asynchronously, when stopping a route. | false | boolean
-| *connectionCount* (advanced) | *Deprecated* The maximum number of connections available to this endpoint |  | Integer
-| *connectionFactory* (advanced) | Initializes the connectionFactory for the endpoint, which takes precedence over the component's connectionFactory, if any |  | ConnectionFactory
 | *destinationCreationStrategy* (advanced) | To use a custom DestinationCreationStrategy. |  | DestinationCreationStrategy
 | *exceptionListener* (advanced) | Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions. |  | ExceptionListener
 | *headerFilterStrategy* (advanced) | To use a custom HeaderFilterStrategy to filter header to and from Camel message. |  | HeaderFilterStrategy
@@ -177,10 +173,7 @@ with the following path and query parameters:
 | *recoveryInterval* (advanced) | Specifies the interval between recovery attempts, i.e. when a connection is being refreshed, in milliseconds. The default is 5000 ms, that is, 5 seconds. | 5000 | long
 | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
 | *transferException* (advanced) | If enabled and you are using Request Reply messaging (InOut) and an Exchange failed on the consumer side, then the caused Exception will be send back in response as a javax.jms.ObjectMessage. If the client is Camel, the returned Exception is rethrown. This allows you to use Camel JMS as a bridge in your routing - for example, using persistent queues to enable robust routing. Notice that if you also have transferExchange enabled, this option takes preced [...]
-| *errorHandlerLoggingLevel* (logging) | Allows to configure the default errorHandler logging level for logging uncaught exceptions. There are 6 enums and the value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | WARN | LoggingLevel
-| *errorHandlerLogStackTrace* (logging) | Allows to control whether stacktraces should be logged or not, by the default errorHandler. | true | boolean
 | *transacted* (transaction) | Specifies whether to use transacted mode | false | boolean
-| *sharedJMSSession* (transaction) | Specifies whether to share JMS session with other SJMS endpoints. Turn this off if your route is accessing to multiple JMS providers. If you need transaction against multiple JMS providers, use jms component to leverage XA transaction. | true | boolean
 |===
 // endpoint options: END
 
diff --git a/components/camel-sjms2/src/main/java/org/apache/camel/component/sjms2/Sjms2Endpoint.java b/components/camel-sjms2/src/main/java/org/apache/camel/component/sjms2/Sjms2Endpoint.java
index e1a2e89..1902517 100644
--- a/components/camel-sjms2/src/main/java/org/apache/camel/component/sjms2/Sjms2Endpoint.java
+++ b/components/camel-sjms2/src/main/java/org/apache/camel/component/sjms2/Sjms2Endpoint.java
@@ -33,11 +33,11 @@ import org.apache.camel.spi.UriParam;
              syntax = "sjms2:destinationType:destinationName", category = { Category.MESSAGING })
 public class Sjms2Endpoint extends SjmsEndpoint implements AsyncEndpoint {
 
-    @UriParam(label = "consumer")
+    @UriParam(label = "consumer", description = "Sets the subscription Id, required for durable or shared topics.")
     private String subscriptionId;
-    @UriParam(label = "consumer")
+    @UriParam(label = "consumer", description = "Sets topic consumer to durable.")
     private boolean durable;
-    @UriParam(label = "consumer")
+    @UriParam(label = "consumer", description = "Sets the consumer to shared.")
     private boolean shared;
 
     public Sjms2Endpoint() {
@@ -53,12 +53,9 @@ public class Sjms2Endpoint extends SjmsEndpoint implements AsyncEndpoint {
         return (Sjms2Component) super.getComponent();
     }
 
-    /**
-     * Sets the durable subscription Id required for durable topics.
-     */
     @Override
-    public void setDurableSubscriptionId(String durableSubscriptionId) {
-        super.setDurableSubscriptionId(durableSubscriptionId);
+    public void setDurableSubscriptionName(String durableSubscriptionId) {
+        super.setDurableSubscriptionName(durableSubscriptionId);
         subscriptionId = durableSubscriptionId;
         durable = true;
     }
@@ -67,9 +64,6 @@ public class Sjms2Endpoint extends SjmsEndpoint implements AsyncEndpoint {
         return subscriptionId;
     }
 
-    /**
-     * Sets the subscription Id, required for durable or shared topics.
-     */
     public void setSubscriptionId(String subscriptionId) {
         this.subscriptionId = subscriptionId;
     }
@@ -78,9 +72,6 @@ public class Sjms2Endpoint extends SjmsEndpoint implements AsyncEndpoint {
         return durable;
     }
 
-    /**
-     * Sets topic consumer to durable.
-     */
     public void setDurable(boolean durable) {
         this.durable = durable;
     }
@@ -89,9 +80,6 @@ public class Sjms2Endpoint extends SjmsEndpoint implements AsyncEndpoint {
         return shared;
     }
 
-    /**
-     * Sets the consumer to shared.
-     */
     public void setShared(boolean shared) {
         this.shared = shared;
     }
diff --git a/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/Sjms2EndpointNameOverrideTest.java b/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/Sjms2EndpointNameOverrideTest.java
index a9ea8d6..9fd58c3 100644
--- a/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/Sjms2EndpointNameOverrideTest.java
+++ b/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/Sjms2EndpointNameOverrideTest.java
@@ -69,7 +69,6 @@ public class Sjms2EndpointNameOverrideTest extends CamelTestSupport {
         ActiveMQConnectionFactory connectionFactory
                 = new ActiveMQConnectionFactory("vm://broker?broker.persistent=false&broker.useJmx=false");
         Sjms2Component component = new Sjms2Component();
-        component.setConnectionCount(1);
         component.setConnectionFactory(connectionFactory);
         camelContext.addComponent(BEAN_NAME, component);
 
diff --git a/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/Sjms2EndpointTest.java b/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/Sjms2EndpointTest.java
index fa9f377..5e9a8c8 100644
--- a/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/Sjms2EndpointTest.java
+++ b/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/Sjms2EndpointTest.java
@@ -93,7 +93,6 @@ public class Sjms2EndpointTest extends CamelTestSupport {
             Sjms2Endpoint sjms = (Sjms2Endpoint) context.getEndpoint("sjms2:queue:test");
             assertNotNull(sjms);
             assertEquals(ExchangePattern.InOnly, sjms.getExchangePattern());
-            // assertTrue(sjms.createExchange().getPattern().equals(ExchangePattern.InOnly));
         } catch (Exception e) {
             fail("Exception thrown: " + e.getLocalizedMessage());
         }
@@ -149,7 +148,6 @@ public class Sjms2EndpointTest extends CamelTestSupport {
         ActiveMQConnectionFactory connectionFactory
                 = new ActiveMQConnectionFactory("vm://broker?broker.persistent=false&broker.useJmx=false");
         Sjms2Component component = new Sjms2Component();
-        component.setConnectionCount(3);
         component.setConnectionFactory(connectionFactory);
         camelContext.addComponent("sjms2", component);
 
diff --git a/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/consumer/InOnlyTopicDurableConsumerTest.java b/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/consumer/InOnlyTopicDurableConsumerTest.java
index 73a41cd..b38747c 100644
--- a/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/consumer/InOnlyTopicDurableConsumerTest.java
+++ b/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/consumer/InOnlyTopicDurableConsumerTest.java
@@ -20,10 +20,11 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.component.sjms2.Sjms2Component;
-import org.apache.camel.test.junit5.CamelTestSupport;
+import org.apache.camel.component.sjms2.support.Jms2TestSupport;
 import org.junit.jupiter.api.Test;
+import org.messaginghub.pooled.jms.JmsPoolConnectionFactory;
 
-public class InOnlyTopicDurableConsumerTest extends CamelTestSupport {
+public class InOnlyTopicDurableConsumerTest extends Jms2TestSupport {
 
     private static final String CONNECTION_ID = "test-connection-1";
 
@@ -52,7 +53,13 @@ public class InOnlyTopicDurableConsumerTest extends CamelTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
         Sjms2Component sjms = context.getComponent("sjms2", Sjms2Component.class);
+
+        // need to use a pooled CF so we reuse same connection for multiple client connections
+        JmsPoolConnectionFactory pcf = new JmsPoolConnectionFactory();
+        pcf.setConnectionFactory(sjms.getConnectionFactory());
+        sjms.setConnectionFactory(pcf);
         sjms.setClientId(CONNECTION_ID);
+
         return context;
     }
 
@@ -61,10 +68,10 @@ public class InOnlyTopicDurableConsumerTest extends CamelTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("sjms2:topic:foo?durableSubscriptionId=bar1")
+                from("sjms2:topic:foo?durableSubscriptionName=bar1")
                         .to("mock:result");
 
-                from("sjms2:topic:foo?durableSubscriptionId=bar2")
+                from("sjms2:topic:foo?durableSubscriptionName=bar2")
                         .to("mock:result2");
             }
         };
diff --git a/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/support/Jms2TestSupport.java b/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/support/Jms2TestSupport.java
index 851ed58..33f0b5c 100644
--- a/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/support/Jms2TestSupport.java
+++ b/components/camel-sjms2/src/test/java/org/apache/camel/component/sjms2/support/Jms2TestSupport.java
@@ -130,7 +130,6 @@ public class Jms2TestSupport extends CamelTestSupport {
         connection.start();
         session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
         Sjms2Component component = new Sjms2Component();
-        component.setConnectionCount(1);
         component.setConnectionFactory(connectionFactory);
         camelContext.addComponent("sjms2", component);
         return camelContext;
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/Sjms2ComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/Sjms2ComponentBuilderFactory.java
index 6e01843..f9e8a93 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/Sjms2ComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/Sjms2ComponentBuilderFactory.java
@@ -51,25 +51,8 @@ public interface Sjms2ComponentBuilderFactory {
      */
     interface Sjms2ComponentBuilder extends ComponentBuilder<Sjms2Component> {
         /**
-         * The maximum number of connections available to endpoints started
-         * under this component.
-         * 
-         * The option is a: &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Default: 1
-         * Group: common
-         * 
-         * @param connectionCount the value to set
-         * @return the dsl builder
-         */
-        default Sjms2ComponentBuilder connectionCount(
-                java.lang.Integer connectionCount) {
-            doSetProperty("connectionCount", connectionCount);
-            return this;
-        }
-        /**
-         * A ConnectionFactory is required to enable the SjmsComponent. It can
-         * be set directly or set set as part of a ConnectionResource.
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
          * 
          * The option is a: &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt;
          * type.
@@ -279,36 +262,6 @@ public interface Sjms2ComponentBuilderFactory {
             doSetProperty("headerFilterStrategy", headerFilterStrategy);
             return this;
         }
-        /**
-         * Password to use with the ConnectionFactory. You can also configure
-         * username/password directly on the ConnectionFactory.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: security
-         * 
-         * @param password the value to set
-         * @return the dsl builder
-         */
-        default Sjms2ComponentBuilder password(java.lang.String password) {
-            doSetProperty("password", password);
-            return this;
-        }
-        /**
-         * Username to use with the ConnectionFactory. You can also configure
-         * username/password directly on the ConnectionFactory.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: security
-         * 
-         * @param username the value to set
-         * @return the dsl builder
-         */
-        default Sjms2ComponentBuilder username(java.lang.String username) {
-            doSetProperty("username", username);
-            return this;
-        }
     }
 
     class Sjms2ComponentBuilderImpl
@@ -326,7 +279,6 @@ public interface Sjms2ComponentBuilderFactory {
                 String name,
                 Object value) {
             switch (name) {
-            case "connectionCount": ((Sjms2Component) component).setConnectionCount((java.lang.Integer) value); return true;
             case "connectionFactory": ((Sjms2Component) component).setConnectionFactory((javax.jms.ConnectionFactory) value); return true;
             case "bridgeErrorHandler": ((Sjms2Component) component).setBridgeErrorHandler((boolean) value); return true;
             case "lazyStartProducer": ((Sjms2Component) component).setLazyStartProducer((boolean) value); return true;
@@ -338,8 +290,6 @@ public interface Sjms2ComponentBuilderFactory {
             case "replyToOnTimeoutMaxConcurrentConsumers": ((Sjms2Component) component).setReplyToOnTimeoutMaxConcurrentConsumers((int) value); return true;
             case "requestTimeoutCheckerInterval": ((Sjms2Component) component).setRequestTimeoutCheckerInterval((long) value); return true;
             case "headerFilterStrategy": ((Sjms2Component) component).setHeaderFilterStrategy((org.apache.camel.spi.HeaderFilterStrategy) value); return true;
-            case "password": ((Sjms2Component) component).setPassword((java.lang.String) value); return true;
-            case "username": ((Sjms2Component) component).setUsername((java.lang.String) value); return true;
             default: return false;
             }
         }
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SjmsComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SjmsComponentBuilderFactory.java
index 7d64cd5..a9e1d59 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SjmsComponentBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/SjmsComponentBuilderFactory.java
@@ -51,25 +51,8 @@ public interface SjmsComponentBuilderFactory {
      */
     interface SjmsComponentBuilder extends ComponentBuilder<SjmsComponent> {
         /**
-         * The maximum number of connections available to endpoints started
-         * under this component.
-         * 
-         * The option is a: &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Default: 1
-         * Group: common
-         * 
-         * @param connectionCount the value to set
-         * @return the dsl builder
-         */
-        default SjmsComponentBuilder connectionCount(
-                java.lang.Integer connectionCount) {
-            doSetProperty("connectionCount", connectionCount);
-            return this;
-        }
-        /**
-         * A ConnectionFactory is required to enable the SjmsComponent. It can
-         * be set directly or set set as part of a ConnectionResource.
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
          * 
          * The option is a: &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt;
          * type.
@@ -278,36 +261,6 @@ public interface SjmsComponentBuilderFactory {
             doSetProperty("headerFilterStrategy", headerFilterStrategy);
             return this;
         }
-        /**
-         * Password to use with the ConnectionFactory. You can also configure
-         * username/password directly on the ConnectionFactory.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: security
-         * 
-         * @param password the value to set
-         * @return the dsl builder
-         */
-        default SjmsComponentBuilder password(java.lang.String password) {
-            doSetProperty("password", password);
-            return this;
-        }
-        /**
-         * Username to use with the ConnectionFactory. You can also configure
-         * username/password directly on the ConnectionFactory.
-         * 
-         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
-         * 
-         * Group: security
-         * 
-         * @param username the value to set
-         * @return the dsl builder
-         */
-        default SjmsComponentBuilder username(java.lang.String username) {
-            doSetProperty("username", username);
-            return this;
-        }
     }
 
     class SjmsComponentBuilderImpl
@@ -325,7 +278,6 @@ public interface SjmsComponentBuilderFactory {
                 String name,
                 Object value) {
             switch (name) {
-            case "connectionCount": ((SjmsComponent) component).setConnectionCount((java.lang.Integer) value); return true;
             case "connectionFactory": ((SjmsComponent) component).setConnectionFactory((javax.jms.ConnectionFactory) value); return true;
             case "bridgeErrorHandler": ((SjmsComponent) component).setBridgeErrorHandler((boolean) value); return true;
             case "lazyStartProducer": ((SjmsComponent) component).setLazyStartProducer((boolean) value); return true;
@@ -337,8 +289,6 @@ public interface SjmsComponentBuilderFactory {
             case "replyToOnTimeoutMaxConcurrentConsumers": ((SjmsComponent) component).setReplyToOnTimeoutMaxConcurrentConsumers((int) value); return true;
             case "requestTimeoutCheckerInterval": ((SjmsComponent) component).setRequestTimeoutCheckerInterval((long) value); return true;
             case "headerFilterStrategy": ((SjmsComponent) component).setHeaderFilterStrategy((org.apache.camel.spi.HeaderFilterStrategy) value); return true;
-            case "password": ((SjmsComponent) component).setPassword((java.lang.String) value); return true;
-            case "username": ((SjmsComponent) component).setUsername((java.lang.String) value); return true;
             default: return false;
             }
         }
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Sjms2EndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Sjms2EndpointBuilderFactory.java
index 1ea44be..06b69d8 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Sjms2EndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Sjms2EndpointBuilderFactory.java
@@ -18,7 +18,6 @@ package org.apache.camel.builder.endpoint.dsl;
 
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
-import org.apache.camel.LoggingLevel;
 import org.apache.camel.builder.EndpointConsumerBuilder;
 import org.apache.camel.builder.EndpointProducerBuilder;
 import org.apache.camel.builder.endpoint.AbstractEndpointBuilder;
@@ -81,6 +80,40 @@ public interface Sjms2EndpointBuilderFactory {
             return this;
         }
         /**
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
+         * 
+         * The option is a: &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt;
+         * type.
+         * 
+         * Group: common
+         * 
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default Sjms2EndpointConsumerBuilder connectionFactory(
+                Object connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default Sjms2EndpointConsumerBuilder connectionFactory(
+                String connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
          * Specifies whether Camel ignores the JMSReplyTo header in messages. If
          * true, Camel does not send a reply back to the destination specified
          * in the JMSReplyTo header. You can use this option if you want Camel
@@ -309,6 +342,24 @@ public interface Sjms2EndpointBuilderFactory {
             return this;
         }
         /**
+         * Sets the JMS client ID to use. Note that this value, if specified,
+         * must be unique and can only be used by a single JMS connection
+         * instance. It is typically only required for durable topic
+         * subscriptions. If using Apache ActiveMQ you may prefer to use Virtual
+         * Topics instead.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: consumer
+         * 
+         * @param clientId the value to set
+         * @return the dsl builder
+         */
+        default Sjms2EndpointConsumerBuilder clientId(String clientId) {
+            doSetProperty("clientId", clientId);
+            return this;
+        }
+        /**
          * Specifies the default number of concurrent consumers when consuming
          * from JMS (not for request/reply over JMS). See also the
          * maxMessagesPerTask option to control dynamic scaling up/down of
@@ -382,18 +433,19 @@ public interface Sjms2EndpointBuilderFactory {
             return this;
         }
         /**
-         * Sets the durable subscription Id required for durable topics.
+         * The durable subscriber name for specifying durable topic
+         * subscriptions. The clientId option must be configured as well.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
          * Group: consumer
          * 
-         * @param durableSubscriptionId the value to set
+         * @param durableSubscriptionName the value to set
          * @return the dsl builder
          */
-        default Sjms2EndpointConsumerBuilder durableSubscriptionId(
-                String durableSubscriptionId) {
-            doSetProperty("durableSubscriptionId", durableSubscriptionId);
+        default Sjms2EndpointConsumerBuilder durableSubscriptionName(
+                String durableSubscriptionName) {
+            doSetProperty("durableSubscriptionName", durableSubscriptionName);
             return this;
         }
         /**
@@ -476,77 +528,6 @@ public interface Sjms2EndpointBuilderFactory {
             return this;
         }
         /**
-         * Allows to configure the default errorHandler logging level for
-         * logging uncaught exceptions.
-         * 
-         * The option is a:
-         * &lt;code&gt;org.apache.camel.LoggingLevel&lt;/code&gt; type.
-         * 
-         * Default: WARN
-         * Group: logging
-         * 
-         * @param errorHandlerLoggingLevel the value to set
-         * @return the dsl builder
-         */
-        default Sjms2EndpointConsumerBuilder errorHandlerLoggingLevel(
-                LoggingLevel errorHandlerLoggingLevel) {
-            doSetProperty("errorHandlerLoggingLevel", errorHandlerLoggingLevel);
-            return this;
-        }
-        /**
-         * Allows to configure the default errorHandler logging level for
-         * logging uncaught exceptions.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;org.apache.camel.LoggingLevel&lt;/code&gt; type.
-         * 
-         * Default: WARN
-         * Group: logging
-         * 
-         * @param errorHandlerLoggingLevel the value to set
-         * @return the dsl builder
-         */
-        default Sjms2EndpointConsumerBuilder errorHandlerLoggingLevel(
-                String errorHandlerLoggingLevel) {
-            doSetProperty("errorHandlerLoggingLevel", errorHandlerLoggingLevel);
-            return this;
-        }
-        /**
-         * Allows to control whether stacktraces should be logged or not, by the
-         * default errorHandler.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: logging
-         * 
-         * @param errorHandlerLogStackTrace the value to set
-         * @return the dsl builder
-         */
-        default Sjms2EndpointConsumerBuilder errorHandlerLogStackTrace(
-                boolean errorHandlerLogStackTrace) {
-            doSetProperty("errorHandlerLogStackTrace", errorHandlerLogStackTrace);
-            return this;
-        }
-        /**
-         * Allows to control whether stacktraces should be logged or not, by the
-         * default errorHandler.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: logging
-         * 
-         * @param errorHandlerLogStackTrace the value to set
-         * @return the dsl builder
-         */
-        default Sjms2EndpointConsumerBuilder errorHandlerLogStackTrace(
-                String errorHandlerLogStackTrace) {
-            doSetProperty("errorHandlerLogStackTrace", errorHandlerLogStackTrace);
-            return this;
-        }
-        /**
          * Specifies whether to use transacted mode.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
@@ -861,73 +842,6 @@ public interface Sjms2EndpointBuilderFactory {
             return this;
         }
         /**
-         * The maximum number of connections available to this endpoint.
-         * 
-         * The option is a: &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionCount the value to set
-         * @return the dsl builder
-         */
-        @Deprecated
-        default AdvancedSjms2EndpointConsumerBuilder connectionCount(
-                Integer connectionCount) {
-            doSetProperty("connectionCount", connectionCount);
-            return this;
-        }
-        /**
-         * The maximum number of connections available to this endpoint.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionCount the value to set
-         * @return the dsl builder
-         */
-        @Deprecated
-        default AdvancedSjms2EndpointConsumerBuilder connectionCount(
-                String connectionCount) {
-            doSetProperty("connectionCount", connectionCount);
-            return this;
-        }
-        /**
-         * Initializes the connectionFactory for the endpoint, which takes
-         * precedence over the component's connectionFactory, if any.
-         * 
-         * The option is a: &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt;
-         * type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactory the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjms2EndpointConsumerBuilder connectionFactory(
-                Object connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
-            return this;
-        }
-        /**
-         * Initializes the connectionFactory for the endpoint, which takes
-         * precedence over the component's connectionFactory, if any.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactory the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjms2EndpointConsumerBuilder connectionFactory(
-                String connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
-            return this;
-        }
-        /**
          * To use a custom DestinationCreationStrategy.
          * 
          * The option is a:
@@ -1319,45 +1233,6 @@ public interface Sjms2EndpointBuilderFactory {
             doSetProperty("transferException", transferException);
             return this;
         }
-        /**
-         * Specifies whether to share JMS session with other SJMS endpoints.
-         * Turn this off if your route is accessing to multiple JMS providers.
-         * If you need transaction against multiple JMS providers, use jms
-         * component to leverage XA transaction.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: transaction (advanced)
-         * 
-         * @param sharedJMSSession the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjms2EndpointConsumerBuilder sharedJMSSession(
-                boolean sharedJMSSession) {
-            doSetProperty("sharedJMSSession", sharedJMSSession);
-            return this;
-        }
-        /**
-         * Specifies whether to share JMS session with other SJMS endpoints.
-         * Turn this off if your route is accessing to multiple JMS providers.
-         * If you need transaction against multiple JMS providers, use jms
-         * component to leverage XA transaction.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: transaction (advanced)
-         * 
-         * @param sharedJMSSession the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjms2EndpointConsumerBuilder sharedJMSSession(
-                String sharedJMSSession) {
-            doSetProperty("sharedJMSSession", sharedJMSSession);
-            return this;
-        }
     }
 
     /**
@@ -1406,6 +1281,40 @@ public interface Sjms2EndpointBuilderFactory {
             return this;
         }
         /**
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
+         * 
+         * The option is a: &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt;
+         * type.
+         * 
+         * Group: common
+         * 
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default Sjms2EndpointProducerBuilder connectionFactory(
+                Object connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default Sjms2EndpointProducerBuilder connectionFactory(
+                String connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
          * Specifies whether Camel ignores the JMSReplyTo header in messages. If
          * true, Camel does not send a reply back to the destination specified
          * in the JMSReplyTo header. You can use this option if you want Camel
@@ -1575,49 +1484,6 @@ public interface Sjms2EndpointBuilderFactory {
             return this;
         }
         /**
-         * Set if the deliveryMode, priority or timeToLive qualities of service
-         * should be used when sending messages. This option is based on
-         * Spring's JmsTemplate. The deliveryMode, priority and timeToLive
-         * options are applied to the current endpoint. This contrasts with the
-         * preserveMessageQos option, which operates at message granularity,
-         * reading QoS properties exclusively from the Camel In message headers.
-         * 
-         * The option is a: &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param explicitQosEnabled the value to set
-         * @return the dsl builder
-         */
-        default Sjms2EndpointProducerBuilder explicitQosEnabled(
-                Boolean explicitQosEnabled) {
-            doSetProperty("explicitQosEnabled", explicitQosEnabled);
-            return this;
-        }
-        /**
-         * Set if the deliveryMode, priority or timeToLive qualities of service
-         * should be used when sending messages. This option is based on
-         * Spring's JmsTemplate. The deliveryMode, priority and timeToLive
-         * options are applied to the current endpoint. This contrasts with the
-         * preserveMessageQos option, which operates at message granularity,
-         * reading QoS properties exclusively from the Camel In message headers.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param explicitQosEnabled the value to set
-         * @return the dsl builder
-         */
-        default Sjms2EndpointProducerBuilder explicitQosEnabled(
-                String explicitQosEnabled) {
-            doSetProperty("explicitQosEnabled", explicitQosEnabled);
-            return this;
-        }
-        /**
          * Whether the producer should be started lazy (on the first message).
          * By starting lazy you can use this to allow CamelContext and routes to
          * startup in situations where a producer may otherwise fail during
@@ -1667,55 +1533,6 @@ public interface Sjms2EndpointBuilderFactory {
             return this;
         }
         /**
-         * Set to true, if you want to send message using the QoS settings
-         * specified on the message, instead of the QoS settings on the JMS
-         * endpoint. The following three headers are considered JMSPriority,
-         * JMSDeliveryMode, and JMSExpiration. You can provide all or only some
-         * of them. If not provided, Camel will fall back to use the values from
-         * the endpoint instead. So, when using this option, the headers
-         * override the values from the endpoint. The explicitQosEnabled option,
-         * by contrast, will only use options set on the endpoint, and not
-         * values from the message header.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param preserveMessageQos the value to set
-         * @return the dsl builder
-         */
-        default Sjms2EndpointProducerBuilder preserveMessageQos(
-                boolean preserveMessageQos) {
-            doSetProperty("preserveMessageQos", preserveMessageQos);
-            return this;
-        }
-        /**
-         * Set to true, if you want to send message using the QoS settings
-         * specified on the message, instead of the QoS settings on the JMS
-         * endpoint. The following three headers are considered JMSPriority,
-         * JMSDeliveryMode, and JMSExpiration. You can provide all or only some
-         * of them. If not provided, Camel will fall back to use the values from
-         * the endpoint instead. So, when using this option, the headers
-         * override the values from the endpoint. The explicitQosEnabled option,
-         * by contrast, will only use options set on the endpoint, and not
-         * values from the message header.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param preserveMessageQos the value to set
-         * @return the dsl builder
-         */
-        default Sjms2EndpointProducerBuilder preserveMessageQos(
-                String preserveMessageQos) {
-            doSetProperty("preserveMessageQos", preserveMessageQos);
-            return this;
-        }
-        /**
          * Values greater than 1 specify the message priority when sending
          * (where 1 is the lowest priority and 9 is the highest). The
          * explicitQosEnabled option must also be enabled in order for this
@@ -1808,13 +1625,9 @@ public interface Sjms2EndpointBuilderFactory {
         /**
          * Allows for explicitly specifying which kind of strategy to use for
          * replyTo queues when doing request/reply over JMS. Possible values
-         * are: Temporary, Shared, or Exclusive. By default Camel will use
-         * temporary queues. However if replyTo has been configured, then Shared
-         * is used by default. This option allows you to use exclusive queues
-         * instead of shared ones. See Camel JMS documentation for more details,
-         * and especially the notes about the implications if running in a
-         * clustered environment, and the fact that Shared reply queues has
-         * lower performance than its alternatives Temporary and Exclusive.
+         * are: Temporary or Exclusive. By default Camel will use temporary
+         * queues. However if replyTo has been configured, then Exclusive is
+         * used.
          * 
          * The option is a:
          * &lt;code&gt;org.apache.camel.component.sjms.ReplyToType&lt;/code&gt;
@@ -1832,13 +1645,9 @@ public interface Sjms2EndpointBuilderFactory {
         /**
          * Allows for explicitly specifying which kind of strategy to use for
          * replyTo queues when doing request/reply over JMS. Possible values
-         * are: Temporary, Shared, or Exclusive. By default Camel will use
-         * temporary queues. However if replyTo has been configured, then Shared
-         * is used by default. This option allows you to use exclusive queues
-         * instead of shared ones. See Camel JMS documentation for more details,
-         * and especially the notes about the implications if running in a
-         * clustered environment, and the fact that Shared reply queues has
-         * lower performance than its alternatives Temporary and Exclusive.
+         * are: Temporary or Exclusive. By default Camel will use temporary
+         * queues. However if replyTo has been configured, then Exclusive is
+         * used.
          * 
          * The option will be converted to a
          * &lt;code&gt;org.apache.camel.component.sjms.ReplyToType&lt;/code&gt;
@@ -2051,29 +1860,82 @@ public interface Sjms2EndpointBuilderFactory {
             return this;
         }
         /**
-         * Only applicable when sending to JMS destination using InOnly (eg fire
-         * and forget). Enabling this option will enrich the Camel Exchange with
-         * the actual JMSMessageID that was used by the JMS client when the
-         * message was sent to the JMS destination.
+         * Set if the deliveryMode, priority or timeToLive qualities of service
+         * should be used when sending messages. This option is based on
+         * Spring's JmsTemplate. The deliveryMode, priority and timeToLive
+         * options are applied to the current endpoint. This contrasts with the
+         * preserveMessageQos option, which operates at message granularity,
+         * reading QoS properties exclusively from the Camel In message headers.
+         * 
+         * The option is a: &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         * 
+         * @param explicitQosEnabled the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSjms2EndpointProducerBuilder explicitQosEnabled(
+                Boolean explicitQosEnabled) {
+            doSetProperty("explicitQosEnabled", explicitQosEnabled);
+            return this;
+        }
+        /**
+         * Set if the deliveryMode, priority or timeToLive qualities of service
+         * should be used when sending messages. This option is based on
+         * Spring's JmsTemplate. The deliveryMode, priority and timeToLive
+         * options are applied to the current endpoint. This contrasts with the
+         * preserveMessageQos option, which operates at message granularity,
+         * reading QoS properties exclusively from the Camel In message headers.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         * 
+         * @param explicitQosEnabled the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSjms2EndpointProducerBuilder explicitQosEnabled(
+                String explicitQosEnabled) {
+            doSetProperty("explicitQosEnabled", explicitQosEnabled);
+            return this;
+        }
+        /**
+         * Set to true, if you want to send message using the QoS settings
+         * specified on the message, instead of the QoS settings on the JMS
+         * endpoint. The following three headers are considered JMSPriority,
+         * JMSDeliveryMode, and JMSExpiration. You can provide all or only some
+         * of them. If not provided, Camel will fall back to use the values from
+         * the endpoint instead. So, when using this option, the headers
+         * override the values from the endpoint. The explicitQosEnabled option,
+         * by contrast, will only use options set on the endpoint, and not
+         * values from the message header.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
          * Default: false
          * Group: producer (advanced)
          * 
-         * @param includeSentJMSMessageID the value to set
+         * @param preserveMessageQos the value to set
          * @return the dsl builder
          */
-        default AdvancedSjms2EndpointProducerBuilder includeSentJMSMessageID(
-                boolean includeSentJMSMessageID) {
-            doSetProperty("includeSentJMSMessageID", includeSentJMSMessageID);
+        default AdvancedSjms2EndpointProducerBuilder preserveMessageQos(
+                boolean preserveMessageQos) {
+            doSetProperty("preserveMessageQos", preserveMessageQos);
             return this;
         }
         /**
-         * Only applicable when sending to JMS destination using InOnly (eg fire
-         * and forget). Enabling this option will enrich the Camel Exchange with
-         * the actual JMSMessageID that was used by the JMS client when the
-         * message was sent to the JMS destination.
+         * Set to true, if you want to send message using the QoS settings
+         * specified on the message, instead of the QoS settings on the JMS
+         * endpoint. The following three headers are considered JMSPriority,
+         * JMSDeliveryMode, and JMSExpiration. You can provide all or only some
+         * of them. If not provided, Camel will fall back to use the values from
+         * the endpoint instead. So, when using this option, the headers
+         * override the values from the endpoint. The explicitQosEnabled option,
+         * by contrast, will only use options set on the endpoint, and not
+         * values from the message header.
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
@@ -2081,12 +1943,12 @@ public interface Sjms2EndpointBuilderFactory {
          * Default: false
          * Group: producer (advanced)
          * 
-         * @param includeSentJMSMessageID the value to set
+         * @param preserveMessageQos the value to set
          * @return the dsl builder
          */
-        default AdvancedSjms2EndpointProducerBuilder includeSentJMSMessageID(
-                String includeSentJMSMessageID) {
-            doSetProperty("includeSentJMSMessageID", includeSentJMSMessageID);
+        default AdvancedSjms2EndpointProducerBuilder preserveMessageQos(
+                String preserveMessageQos) {
+            doSetProperty("preserveMessageQos", preserveMessageQos);
             return this;
         }
         /**
@@ -2176,73 +2038,6 @@ public interface Sjms2EndpointBuilderFactory {
             return this;
         }
         /**
-         * The maximum number of connections available to this endpoint.
-         * 
-         * The option is a: &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionCount the value to set
-         * @return the dsl builder
-         */
-        @Deprecated
-        default AdvancedSjms2EndpointProducerBuilder connectionCount(
-                Integer connectionCount) {
-            doSetProperty("connectionCount", connectionCount);
-            return this;
-        }
-        /**
-         * The maximum number of connections available to this endpoint.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionCount the value to set
-         * @return the dsl builder
-         */
-        @Deprecated
-        default AdvancedSjms2EndpointProducerBuilder connectionCount(
-                String connectionCount) {
-            doSetProperty("connectionCount", connectionCount);
-            return this;
-        }
-        /**
-         * Initializes the connectionFactory for the endpoint, which takes
-         * precedence over the component's connectionFactory, if any.
-         * 
-         * The option is a: &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt;
-         * type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactory the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjms2EndpointProducerBuilder connectionFactory(
-                Object connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
-            return this;
-        }
-        /**
-         * Initializes the connectionFactory for the endpoint, which takes
-         * precedence over the component's connectionFactory, if any.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactory the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjms2EndpointProducerBuilder connectionFactory(
-                String connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
-            return this;
-        }
-        /**
          * To use a custom DestinationCreationStrategy.
          * 
          * The option is a:
@@ -2634,45 +2429,6 @@ public interface Sjms2EndpointBuilderFactory {
             doSetProperty("transferException", transferException);
             return this;
         }
-        /**
-         * Specifies whether to share JMS session with other SJMS endpoints.
-         * Turn this off if your route is accessing to multiple JMS providers.
-         * If you need transaction against multiple JMS providers, use jms
-         * component to leverage XA transaction.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: transaction (advanced)
-         * 
-         * @param sharedJMSSession the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjms2EndpointProducerBuilder sharedJMSSession(
-                boolean sharedJMSSession) {
-            doSetProperty("sharedJMSSession", sharedJMSSession);
-            return this;
-        }
-        /**
-         * Specifies whether to share JMS session with other SJMS endpoints.
-         * Turn this off if your route is accessing to multiple JMS providers.
-         * If you need transaction against multiple JMS providers, use jms
-         * component to leverage XA transaction.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: transaction (advanced)
-         * 
-         * @param sharedJMSSession the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjms2EndpointProducerBuilder sharedJMSSession(
-                String sharedJMSSession) {
-            doSetProperty("sharedJMSSession", sharedJMSSession);
-            return this;
-        }
     }
 
     /**
@@ -2722,6 +2478,38 @@ public interface Sjms2EndpointBuilderFactory {
             return this;
         }
         /**
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
+         * 
+         * The option is a: &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt;
+         * type.
+         * 
+         * Group: common
+         * 
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default Sjms2EndpointBuilder connectionFactory(Object connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default Sjms2EndpointBuilder connectionFactory(String connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
          * Specifies whether Camel ignores the JMSReplyTo header in messages. If
          * true, Camel does not send a reply back to the destination specified
          * in the JMSReplyTo header. You can use this option if you want Camel
@@ -2952,73 +2740,6 @@ public interface Sjms2EndpointBuilderFactory {
             return this;
         }
         /**
-         * The maximum number of connections available to this endpoint.
-         * 
-         * The option is a: &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionCount the value to set
-         * @return the dsl builder
-         */
-        @Deprecated
-        default AdvancedSjms2EndpointBuilder connectionCount(
-                Integer connectionCount) {
-            doSetProperty("connectionCount", connectionCount);
-            return this;
-        }
-        /**
-         * The maximum number of connections available to this endpoint.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionCount the value to set
-         * @return the dsl builder
-         */
-        @Deprecated
-        default AdvancedSjms2EndpointBuilder connectionCount(
-                String connectionCount) {
-            doSetProperty("connectionCount", connectionCount);
-            return this;
-        }
-        /**
-         * Initializes the connectionFactory for the endpoint, which takes
-         * precedence over the component's connectionFactory, if any.
-         * 
-         * The option is a: &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt;
-         * type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactory the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjms2EndpointBuilder connectionFactory(
-                Object connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
-            return this;
-        }
-        /**
-         * Initializes the connectionFactory for the endpoint, which takes
-         * precedence over the component's connectionFactory, if any.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactory the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjms2EndpointBuilder connectionFactory(
-                String connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
-            return this;
-        }
-        /**
          * To use a custom DestinationCreationStrategy.
          * 
          * The option is a:
@@ -3406,45 +3127,6 @@ public interface Sjms2EndpointBuilderFactory {
             doSetProperty("transferException", transferException);
             return this;
         }
-        /**
-         * Specifies whether to share JMS session with other SJMS endpoints.
-         * Turn this off if your route is accessing to multiple JMS providers.
-         * If you need transaction against multiple JMS providers, use jms
-         * component to leverage XA transaction.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: transaction (advanced)
-         * 
-         * @param sharedJMSSession the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjms2EndpointBuilder sharedJMSSession(
-                boolean sharedJMSSession) {
-            doSetProperty("sharedJMSSession", sharedJMSSession);
-            return this;
-        }
-        /**
-         * Specifies whether to share JMS session with other SJMS endpoints.
-         * Turn this off if your route is accessing to multiple JMS providers.
-         * If you need transaction against multiple JMS providers, use jms
-         * component to leverage XA transaction.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: transaction (advanced)
-         * 
-         * @param sharedJMSSession the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjms2EndpointBuilder sharedJMSSession(
-                String sharedJMSSession) {
-            doSetProperty("sharedJMSSession", sharedJMSSession);
-            return this;
-        }
     }
 
     /**
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SjmsEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SjmsEndpointBuilderFactory.java
index 69e6025..d153a6e 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SjmsEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SjmsEndpointBuilderFactory.java
@@ -18,7 +18,6 @@ package org.apache.camel.builder.endpoint.dsl;
 
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
-import org.apache.camel.LoggingLevel;
 import org.apache.camel.builder.EndpointConsumerBuilder;
 import org.apache.camel.builder.EndpointProducerBuilder;
 import org.apache.camel.builder.endpoint.AbstractEndpointBuilder;
@@ -81,6 +80,40 @@ public interface SjmsEndpointBuilderFactory {
             return this;
         }
         /**
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
+         * 
+         * The option is a: &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt;
+         * type.
+         * 
+         * Group: common
+         * 
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default SjmsEndpointConsumerBuilder connectionFactory(
+                Object connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default SjmsEndpointConsumerBuilder connectionFactory(
+                String connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
          * Specifies whether Camel ignores the JMSReplyTo header in messages. If
          * true, Camel does not send a reply back to the destination specified
          * in the JMSReplyTo header. You can use this option if you want Camel
@@ -308,6 +341,24 @@ public interface SjmsEndpointBuilderFactory {
             return this;
         }
         /**
+         * Sets the JMS client ID to use. Note that this value, if specified,
+         * must be unique and can only be used by a single JMS connection
+         * instance. It is typically only required for durable topic
+         * subscriptions. If using Apache ActiveMQ you may prefer to use Virtual
+         * Topics instead.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: consumer
+         * 
+         * @param clientId the value to set
+         * @return the dsl builder
+         */
+        default SjmsEndpointConsumerBuilder clientId(String clientId) {
+            doSetProperty("clientId", clientId);
+            return this;
+        }
+        /**
          * Specifies the default number of concurrent consumers when consuming
          * from JMS (not for request/reply over JMS). See also the
          * maxMessagesPerTask option to control dynamic scaling up/down of
@@ -350,18 +401,19 @@ public interface SjmsEndpointBuilderFactory {
             return this;
         }
         /**
-         * Sets the durable subscription Id required for durable topics.
+         * The durable subscriber name for specifying durable topic
+         * subscriptions. The clientId option must be configured as well.
          * 
          * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
          * 
          * Group: consumer
          * 
-         * @param durableSubscriptionId the value to set
+         * @param durableSubscriptionName the value to set
          * @return the dsl builder
          */
-        default SjmsEndpointConsumerBuilder durableSubscriptionId(
-                String durableSubscriptionId) {
-            doSetProperty("durableSubscriptionId", durableSubscriptionId);
+        default SjmsEndpointConsumerBuilder durableSubscriptionName(
+                String durableSubscriptionName) {
+            doSetProperty("durableSubscriptionName", durableSubscriptionName);
             return this;
         }
         /**
@@ -398,77 +450,6 @@ public interface SjmsEndpointBuilderFactory {
             return this;
         }
         /**
-         * Allows to configure the default errorHandler logging level for
-         * logging uncaught exceptions.
-         * 
-         * The option is a:
-         * &lt;code&gt;org.apache.camel.LoggingLevel&lt;/code&gt; type.
-         * 
-         * Default: WARN
-         * Group: logging
-         * 
-         * @param errorHandlerLoggingLevel the value to set
-         * @return the dsl builder
-         */
-        default SjmsEndpointConsumerBuilder errorHandlerLoggingLevel(
-                LoggingLevel errorHandlerLoggingLevel) {
-            doSetProperty("errorHandlerLoggingLevel", errorHandlerLoggingLevel);
-            return this;
-        }
-        /**
-         * Allows to configure the default errorHandler logging level for
-         * logging uncaught exceptions.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;org.apache.camel.LoggingLevel&lt;/code&gt; type.
-         * 
-         * Default: WARN
-         * Group: logging
-         * 
-         * @param errorHandlerLoggingLevel the value to set
-         * @return the dsl builder
-         */
-        default SjmsEndpointConsumerBuilder errorHandlerLoggingLevel(
-                String errorHandlerLoggingLevel) {
-            doSetProperty("errorHandlerLoggingLevel", errorHandlerLoggingLevel);
-            return this;
-        }
-        /**
-         * Allows to control whether stacktraces should be logged or not, by the
-         * default errorHandler.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: logging
-         * 
-         * @param errorHandlerLogStackTrace the value to set
-         * @return the dsl builder
-         */
-        default SjmsEndpointConsumerBuilder errorHandlerLogStackTrace(
-                boolean errorHandlerLogStackTrace) {
-            doSetProperty("errorHandlerLogStackTrace", errorHandlerLogStackTrace);
-            return this;
-        }
-        /**
-         * Allows to control whether stacktraces should be logged or not, by the
-         * default errorHandler.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: logging
-         * 
-         * @param errorHandlerLogStackTrace the value to set
-         * @return the dsl builder
-         */
-        default SjmsEndpointConsumerBuilder errorHandlerLogStackTrace(
-                String errorHandlerLogStackTrace) {
-            doSetProperty("errorHandlerLogStackTrace", errorHandlerLogStackTrace);
-            return this;
-        }
-        /**
          * Specifies whether to use transacted mode.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
@@ -783,73 +764,6 @@ public interface SjmsEndpointBuilderFactory {
             return this;
         }
         /**
-         * The maximum number of connections available to this endpoint.
-         * 
-         * The option is a: &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionCount the value to set
-         * @return the dsl builder
-         */
-        @Deprecated
-        default AdvancedSjmsEndpointConsumerBuilder connectionCount(
-                Integer connectionCount) {
-            doSetProperty("connectionCount", connectionCount);
-            return this;
-        }
-        /**
-         * The maximum number of connections available to this endpoint.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionCount the value to set
-         * @return the dsl builder
-         */
-        @Deprecated
-        default AdvancedSjmsEndpointConsumerBuilder connectionCount(
-                String connectionCount) {
-            doSetProperty("connectionCount", connectionCount);
-            return this;
-        }
-        /**
-         * Initializes the connectionFactory for the endpoint, which takes
-         * precedence over the component's connectionFactory, if any.
-         * 
-         * The option is a: &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt;
-         * type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactory the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjmsEndpointConsumerBuilder connectionFactory(
-                Object connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
-            return this;
-        }
-        /**
-         * Initializes the connectionFactory for the endpoint, which takes
-         * precedence over the component's connectionFactory, if any.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactory the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjmsEndpointConsumerBuilder connectionFactory(
-                String connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
-            return this;
-        }
-        /**
          * To use a custom DestinationCreationStrategy.
          * 
          * The option is a:
@@ -1241,45 +1155,6 @@ public interface SjmsEndpointBuilderFactory {
             doSetProperty("transferException", transferException);
             return this;
         }
-        /**
-         * Specifies whether to share JMS session with other SJMS endpoints.
-         * Turn this off if your route is accessing to multiple JMS providers.
-         * If you need transaction against multiple JMS providers, use jms
-         * component to leverage XA transaction.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: transaction (advanced)
-         * 
-         * @param sharedJMSSession the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjmsEndpointConsumerBuilder sharedJMSSession(
-                boolean sharedJMSSession) {
-            doSetProperty("sharedJMSSession", sharedJMSSession);
-            return this;
-        }
-        /**
-         * Specifies whether to share JMS session with other SJMS endpoints.
-         * Turn this off if your route is accessing to multiple JMS providers.
-         * If you need transaction against multiple JMS providers, use jms
-         * component to leverage XA transaction.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: transaction (advanced)
-         * 
-         * @param sharedJMSSession the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjmsEndpointConsumerBuilder sharedJMSSession(
-                String sharedJMSSession) {
-            doSetProperty("sharedJMSSession", sharedJMSSession);
-            return this;
-        }
     }
 
     /**
@@ -1328,6 +1203,40 @@ public interface SjmsEndpointBuilderFactory {
             return this;
         }
         /**
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
+         * 
+         * The option is a: &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt;
+         * type.
+         * 
+         * Group: common
+         * 
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default SjmsEndpointProducerBuilder connectionFactory(
+                Object connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default SjmsEndpointProducerBuilder connectionFactory(
+                String connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
          * Specifies whether Camel ignores the JMSReplyTo header in messages. If
          * true, Camel does not send a reply back to the destination specified
          * in the JMSReplyTo header. You can use this option if you want Camel
@@ -1496,49 +1405,6 @@ public interface SjmsEndpointBuilderFactory {
             return this;
         }
         /**
-         * Set if the deliveryMode, priority or timeToLive qualities of service
-         * should be used when sending messages. This option is based on
-         * Spring's JmsTemplate. The deliveryMode, priority and timeToLive
-         * options are applied to the current endpoint. This contrasts with the
-         * preserveMessageQos option, which operates at message granularity,
-         * reading QoS properties exclusively from the Camel In message headers.
-         * 
-         * The option is a: &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param explicitQosEnabled the value to set
-         * @return the dsl builder
-         */
-        default SjmsEndpointProducerBuilder explicitQosEnabled(
-                Boolean explicitQosEnabled) {
-            doSetProperty("explicitQosEnabled", explicitQosEnabled);
-            return this;
-        }
-        /**
-         * Set if the deliveryMode, priority or timeToLive qualities of service
-         * should be used when sending messages. This option is based on
-         * Spring's JmsTemplate. The deliveryMode, priority and timeToLive
-         * options are applied to the current endpoint. This contrasts with the
-         * preserveMessageQos option, which operates at message granularity,
-         * reading QoS properties exclusively from the Camel In message headers.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param explicitQosEnabled the value to set
-         * @return the dsl builder
-         */
-        default SjmsEndpointProducerBuilder explicitQosEnabled(
-                String explicitQosEnabled) {
-            doSetProperty("explicitQosEnabled", explicitQosEnabled);
-            return this;
-        }
-        /**
          * Whether the producer should be started lazy (on the first message).
          * By starting lazy you can use this to allow CamelContext and routes to
          * startup in situations where a producer may otherwise fail during
@@ -1588,55 +1454,6 @@ public interface SjmsEndpointBuilderFactory {
             return this;
         }
         /**
-         * Set to true, if you want to send message using the QoS settings
-         * specified on the message, instead of the QoS settings on the JMS
-         * endpoint. The following three headers are considered JMSPriority,
-         * JMSDeliveryMode, and JMSExpiration. You can provide all or only some
-         * of them. If not provided, Camel will fall back to use the values from
-         * the endpoint instead. So, when using this option, the headers
-         * override the values from the endpoint. The explicitQosEnabled option,
-         * by contrast, will only use options set on the endpoint, and not
-         * values from the message header.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param preserveMessageQos the value to set
-         * @return the dsl builder
-         */
-        default SjmsEndpointProducerBuilder preserveMessageQos(
-                boolean preserveMessageQos) {
-            doSetProperty("preserveMessageQos", preserveMessageQos);
-            return this;
-        }
-        /**
-         * Set to true, if you want to send message using the QoS settings
-         * specified on the message, instead of the QoS settings on the JMS
-         * endpoint. The following three headers are considered JMSPriority,
-         * JMSDeliveryMode, and JMSExpiration. You can provide all or only some
-         * of them. If not provided, Camel will fall back to use the values from
-         * the endpoint instead. So, when using this option, the headers
-         * override the values from the endpoint. The explicitQosEnabled option,
-         * by contrast, will only use options set on the endpoint, and not
-         * values from the message header.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param preserveMessageQos the value to set
-         * @return the dsl builder
-         */
-        default SjmsEndpointProducerBuilder preserveMessageQos(
-                String preserveMessageQos) {
-            doSetProperty("preserveMessageQos", preserveMessageQos);
-            return this;
-        }
-        /**
          * Values greater than 1 specify the message priority when sending
          * (where 1 is the lowest priority and 9 is the highest). The
          * explicitQosEnabled option must also be enabled in order for this
@@ -1729,13 +1546,9 @@ public interface SjmsEndpointBuilderFactory {
         /**
          * Allows for explicitly specifying which kind of strategy to use for
          * replyTo queues when doing request/reply over JMS. Possible values
-         * are: Temporary, Shared, or Exclusive. By default Camel will use
-         * temporary queues. However if replyTo has been configured, then Shared
-         * is used by default. This option allows you to use exclusive queues
-         * instead of shared ones. See Camel JMS documentation for more details,
-         * and especially the notes about the implications if running in a
-         * clustered environment, and the fact that Shared reply queues has
-         * lower performance than its alternatives Temporary and Exclusive.
+         * are: Temporary or Exclusive. By default Camel will use temporary
+         * queues. However if replyTo has been configured, then Exclusive is
+         * used.
          * 
          * The option is a:
          * &lt;code&gt;org.apache.camel.component.sjms.ReplyToType&lt;/code&gt;
@@ -1753,13 +1566,9 @@ public interface SjmsEndpointBuilderFactory {
         /**
          * Allows for explicitly specifying which kind of strategy to use for
          * replyTo queues when doing request/reply over JMS. Possible values
-         * are: Temporary, Shared, or Exclusive. By default Camel will use
-         * temporary queues. However if replyTo has been configured, then Shared
-         * is used by default. This option allows you to use exclusive queues
-         * instead of shared ones. See Camel JMS documentation for more details,
-         * and especially the notes about the implications if running in a
-         * clustered environment, and the fact that Shared reply queues has
-         * lower performance than its alternatives Temporary and Exclusive.
+         * are: Temporary or Exclusive. By default Camel will use temporary
+         * queues. However if replyTo has been configured, then Exclusive is
+         * used.
          * 
          * The option will be converted to a
          * &lt;code&gt;org.apache.camel.component.sjms.ReplyToType&lt;/code&gt;
@@ -1971,29 +1780,82 @@ public interface SjmsEndpointBuilderFactory {
             return this;
         }
         /**
-         * Only applicable when sending to JMS destination using InOnly (eg fire
-         * and forget). Enabling this option will enrich the Camel Exchange with
-         * the actual JMSMessageID that was used by the JMS client when the
-         * message was sent to the JMS destination.
+         * Set if the deliveryMode, priority or timeToLive qualities of service
+         * should be used when sending messages. This option is based on
+         * Spring's JmsTemplate. The deliveryMode, priority and timeToLive
+         * options are applied to the current endpoint. This contrasts with the
+         * preserveMessageQos option, which operates at message granularity,
+         * reading QoS properties exclusively from the Camel In message headers.
+         * 
+         * The option is a: &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         * 
+         * @param explicitQosEnabled the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSjmsEndpointProducerBuilder explicitQosEnabled(
+                Boolean explicitQosEnabled) {
+            doSetProperty("explicitQosEnabled", explicitQosEnabled);
+            return this;
+        }
+        /**
+         * Set if the deliveryMode, priority or timeToLive qualities of service
+         * should be used when sending messages. This option is based on
+         * Spring's JmsTemplate. The deliveryMode, priority and timeToLive
+         * options are applied to the current endpoint. This contrasts with the
+         * preserveMessageQos option, which operates at message granularity,
+         * reading QoS properties exclusively from the Camel In message headers.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;java.lang.Boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: producer (advanced)
+         * 
+         * @param explicitQosEnabled the value to set
+         * @return the dsl builder
+         */
+        default AdvancedSjmsEndpointProducerBuilder explicitQosEnabled(
+                String explicitQosEnabled) {
+            doSetProperty("explicitQosEnabled", explicitQosEnabled);
+            return this;
+        }
+        /**
+         * Set to true, if you want to send message using the QoS settings
+         * specified on the message, instead of the QoS settings on the JMS
+         * endpoint. The following three headers are considered JMSPriority,
+         * JMSDeliveryMode, and JMSExpiration. You can provide all or only some
+         * of them. If not provided, Camel will fall back to use the values from
+         * the endpoint instead. So, when using this option, the headers
+         * override the values from the endpoint. The explicitQosEnabled option,
+         * by contrast, will only use options set on the endpoint, and not
+         * values from the message header.
          * 
          * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
          * 
          * Default: false
          * Group: producer (advanced)
          * 
-         * @param includeSentJMSMessageID the value to set
+         * @param preserveMessageQos the value to set
          * @return the dsl builder
          */
-        default AdvancedSjmsEndpointProducerBuilder includeSentJMSMessageID(
-                boolean includeSentJMSMessageID) {
-            doSetProperty("includeSentJMSMessageID", includeSentJMSMessageID);
+        default AdvancedSjmsEndpointProducerBuilder preserveMessageQos(
+                boolean preserveMessageQos) {
+            doSetProperty("preserveMessageQos", preserveMessageQos);
             return this;
         }
         /**
-         * Only applicable when sending to JMS destination using InOnly (eg fire
-         * and forget). Enabling this option will enrich the Camel Exchange with
-         * the actual JMSMessageID that was used by the JMS client when the
-         * message was sent to the JMS destination.
+         * Set to true, if you want to send message using the QoS settings
+         * specified on the message, instead of the QoS settings on the JMS
+         * endpoint. The following three headers are considered JMSPriority,
+         * JMSDeliveryMode, and JMSExpiration. You can provide all or only some
+         * of them. If not provided, Camel will fall back to use the values from
+         * the endpoint instead. So, when using this option, the headers
+         * override the values from the endpoint. The explicitQosEnabled option,
+         * by contrast, will only use options set on the endpoint, and not
+         * values from the message header.
          * 
          * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
          * type.
@@ -2001,12 +1863,12 @@ public interface SjmsEndpointBuilderFactory {
          * Default: false
          * Group: producer (advanced)
          * 
-         * @param includeSentJMSMessageID the value to set
+         * @param preserveMessageQos the value to set
          * @return the dsl builder
          */
-        default AdvancedSjmsEndpointProducerBuilder includeSentJMSMessageID(
-                String includeSentJMSMessageID) {
-            doSetProperty("includeSentJMSMessageID", includeSentJMSMessageID);
+        default AdvancedSjmsEndpointProducerBuilder preserveMessageQos(
+                String preserveMessageQos) {
+            doSetProperty("preserveMessageQos", preserveMessageQos);
             return this;
         }
         /**
@@ -2096,73 +1958,6 @@ public interface SjmsEndpointBuilderFactory {
             return this;
         }
         /**
-         * The maximum number of connections available to this endpoint.
-         * 
-         * The option is a: &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionCount the value to set
-         * @return the dsl builder
-         */
-        @Deprecated
-        default AdvancedSjmsEndpointProducerBuilder connectionCount(
-                Integer connectionCount) {
-            doSetProperty("connectionCount", connectionCount);
-            return this;
-        }
-        /**
-         * The maximum number of connections available to this endpoint.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionCount the value to set
-         * @return the dsl builder
-         */
-        @Deprecated
-        default AdvancedSjmsEndpointProducerBuilder connectionCount(
-                String connectionCount) {
-            doSetProperty("connectionCount", connectionCount);
-            return this;
-        }
-        /**
-         * Initializes the connectionFactory for the endpoint, which takes
-         * precedence over the component's connectionFactory, if any.
-         * 
-         * The option is a: &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt;
-         * type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactory the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjmsEndpointProducerBuilder connectionFactory(
-                Object connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
-            return this;
-        }
-        /**
-         * Initializes the connectionFactory for the endpoint, which takes
-         * precedence over the component's connectionFactory, if any.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactory the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjmsEndpointProducerBuilder connectionFactory(
-                String connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
-            return this;
-        }
-        /**
          * To use a custom DestinationCreationStrategy.
          * 
          * The option is a:
@@ -2554,45 +2349,6 @@ public interface SjmsEndpointBuilderFactory {
             doSetProperty("transferException", transferException);
             return this;
         }
-        /**
-         * Specifies whether to share JMS session with other SJMS endpoints.
-         * Turn this off if your route is accessing to multiple JMS providers.
-         * If you need transaction against multiple JMS providers, use jms
-         * component to leverage XA transaction.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: transaction (advanced)
-         * 
-         * @param sharedJMSSession the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjmsEndpointProducerBuilder sharedJMSSession(
-                boolean sharedJMSSession) {
-            doSetProperty("sharedJMSSession", sharedJMSSession);
-            return this;
-        }
-        /**
-         * Specifies whether to share JMS session with other SJMS endpoints.
-         * Turn this off if your route is accessing to multiple JMS providers.
-         * If you need transaction against multiple JMS providers, use jms
-         * component to leverage XA transaction.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: transaction (advanced)
-         * 
-         * @param sharedJMSSession the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjmsEndpointProducerBuilder sharedJMSSession(
-                String sharedJMSSession) {
-            doSetProperty("sharedJMSSession", sharedJMSSession);
-            return this;
-        }
     }
 
     /**
@@ -2642,6 +2398,38 @@ public interface SjmsEndpointBuilderFactory {
             return this;
         }
         /**
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
+         * 
+         * The option is a: &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt;
+         * type.
+         * 
+         * Group: common
+         * 
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default SjmsEndpointBuilder connectionFactory(Object connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
+         * The connection factory to be use. A connection factory must be
+         * configured either on the component or endpoint.
+         * 
+         * The option will be converted to a
+         * &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt; type.
+         * 
+         * Group: common
+         * 
+         * @param connectionFactory the value to set
+         * @return the dsl builder
+         */
+        default SjmsEndpointBuilder connectionFactory(String connectionFactory) {
+            doSetProperty("connectionFactory", connectionFactory);
+            return this;
+        }
+        /**
          * Specifies whether Camel ignores the JMSReplyTo header in messages. If
          * true, Camel does not send a reply back to the destination specified
          * in the JMSReplyTo header. You can use this option if you want Camel
@@ -2872,73 +2660,6 @@ public interface SjmsEndpointBuilderFactory {
             return this;
         }
         /**
-         * The maximum number of connections available to this endpoint.
-         * 
-         * The option is a: &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionCount the value to set
-         * @return the dsl builder
-         */
-        @Deprecated
-        default AdvancedSjmsEndpointBuilder connectionCount(
-                Integer connectionCount) {
-            doSetProperty("connectionCount", connectionCount);
-            return this;
-        }
-        /**
-         * The maximum number of connections available to this endpoint.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;java.lang.Integer&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionCount the value to set
-         * @return the dsl builder
-         */
-        @Deprecated
-        default AdvancedSjmsEndpointBuilder connectionCount(
-                String connectionCount) {
-            doSetProperty("connectionCount", connectionCount);
-            return this;
-        }
-        /**
-         * Initializes the connectionFactory for the endpoint, which takes
-         * precedence over the component's connectionFactory, if any.
-         * 
-         * The option is a: &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt;
-         * type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactory the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjmsEndpointBuilder connectionFactory(
-                Object connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
-            return this;
-        }
-        /**
-         * Initializes the connectionFactory for the endpoint, which takes
-         * precedence over the component's connectionFactory, if any.
-         * 
-         * The option will be converted to a
-         * &lt;code&gt;javax.jms.ConnectionFactory&lt;/code&gt; type.
-         * 
-         * Group: advanced
-         * 
-         * @param connectionFactory the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjmsEndpointBuilder connectionFactory(
-                String connectionFactory) {
-            doSetProperty("connectionFactory", connectionFactory);
-            return this;
-        }
-        /**
          * To use a custom DestinationCreationStrategy.
          * 
          * The option is a:
@@ -3326,45 +3047,6 @@ public interface SjmsEndpointBuilderFactory {
             doSetProperty("transferException", transferException);
             return this;
         }
-        /**
-         * Specifies whether to share JMS session with other SJMS endpoints.
-         * Turn this off if your route is accessing to multiple JMS providers.
-         * If you need transaction against multiple JMS providers, use jms
-         * component to leverage XA transaction.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: true
-         * Group: transaction (advanced)
-         * 
-         * @param sharedJMSSession the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjmsEndpointBuilder sharedJMSSession(
-                boolean sharedJMSSession) {
-            doSetProperty("sharedJMSSession", sharedJMSSession);
-            return this;
-        }
-        /**
-         * Specifies whether to share JMS session with other SJMS endpoints.
-         * Turn this off if your route is accessing to multiple JMS providers.
-         * If you need transaction against multiple JMS providers, use jms
-         * component to leverage XA transaction.
-         * 
-         * The option will be converted to a &lt;code&gt;boolean&lt;/code&gt;
-         * type.
-         * 
-         * Default: true
-         * Group: transaction (advanced)
-         * 
-         * @param sharedJMSSession the value to set
-         * @return the dsl builder
-         */
-        default AdvancedSjmsEndpointBuilder sharedJMSSession(
-                String sharedJMSSession) {
-            doSetProperty("sharedJMSSession", sharedJMSSession);
-            return this;
-        }
     }
 
     /**
diff --git a/docs/components/modules/ROOT/pages/sjms-component.adoc b/docs/components/modules/ROOT/pages/sjms-component.adoc
index 41ea4af..d1a2d59 100644
--- a/docs/components/modules/ROOT/pages/sjms-component.adoc
+++ b/docs/components/modules/ROOT/pages/sjms-component.adoc
@@ -81,15 +81,14 @@ You append query options to the URI using the following format,
 == Component Options and Configurations
 
 // component options: START
-The Simple JMS component supports 14 options, which are listed below.
+The Simple JMS component supports 11 options, which are listed below.
 
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *connectionCount* (common) | The maximum number of connections available to endpoints started under this component | 1 | Integer
-| *connectionFactory* (common) | *Autowired* A ConnectionFactory is required to enable the SjmsComponent. It can be set directly or set set as part of a ConnectionResource. |  | ConnectionFactory
+| *connectionFactory* (common) | *Autowired* The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
 | *autowiredEnabled* (advanced) | Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. | true | boolean
@@ -100,8 +99,6 @@ The Simple JMS component supports 14 options, which are listed below.
 | *replyToOnTimeoutMaxConcurrent{zwsp}Consumers* (advanced) | Specifies the maximum number of concurrent consumers for continue routing when timeout occurred when using request/reply over JMS. | 1 | int
 | *requestTimeoutCheckerInterval* (advanced) | Configures how often Camel should check for timed out Exchanges when doing request/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeout occurs, then you can lower this interval, to check more frequently. The timeout is determined by the option requestTimeout. | 1000 | long
 | *headerFilterStrategy* (filter) | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message. |  | HeaderFilterStrategy
-| *password* (security) | Password to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory. |  | String
-| *username* (security) | Username to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory. |  | String
 |===
 // component options: END
 
@@ -126,21 +123,23 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (48 parameters):
+=== Query Parameters (44 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
 | *acknowledgementMode* (common) | The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. There are 4 enums and the value can be one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE | AUTO_ACKNOWLEDGE | SessionAcknowledgementType
+| *connectionFactory* (common) | The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
 | *disableReplyTo* (common) | Specifies whether Camel ignores the JMSReplyTo header in messages. If true, Camel does not send a reply back to the destination specified in the JMSReplyTo header. You can use this option if you want Camel to consume from a route and you do not want Camel to automatically send back a reply message because another component in your code handles the reply message. You can also use this option if you want to use Camel as a proxy between different message broker [...]
 | *replyTo* (common) | Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer). |  | String
 | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean
 | *asyncConsumer* (consumer) | Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transac [...]
 | *autoStartup* (consumer) | Specifies whether the consumer container should auto-startup. | true | boolean
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
+| *clientId* (consumer) | Sets the JMS client ID to use. Note that this value, if specified, must be unique and can only be used by a single JMS connection instance. It is typically only required for durable topic subscriptions. If using Apache ActiveMQ you may prefer to use Virtual Topics instead. |  | String
 | *concurrentConsumers* (consumer) | Specifies the default number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToConcurrentConsumers is used to control number of concurrent consumers on the reply message listener. | 1 | int
-| *durableSubscriptionId* (consumer) | Sets the durable subscription Id required for durable topics. |  | String
+| *durableSubscriptionName* (consumer) | The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well. |  | String
 | *replyToDeliveryPersistent* (consumer) | Specifies whether to use persistent delivery by default for replies. | true | boolean
 | *eagerLoadingOfProperties* (consumer) | Enables eager loading of JMS properties and payload as soon as a message is loaded which generally is inefficient as the JMS properties may not be required but sometimes can catch early any issues with the underlying JMS provider and the use of JMS properties. See also the option eagerPoisonBody. | false | boolean
 | *eagerPoisonBody* (consumer) | If eagerLoadingOfProperties is enabled and the JMS message payload (JMS body or JMS properties) is poison (cannot be read/mapped), then set this text as the message body instead so the message can be processed (the cause of the poison are already stored as exception on the Exchange). This can be turned off by setting eagerPoisonBody=false. See also the option eagerLoadingOfProperties. | Poison JMS message due to ${exception.message} | String
@@ -150,22 +149,19 @@ with the following path and query parameters:
 | *replyToSameDestinationAllowed* (consumer) | Whether a JMS consumer is allowed to send a reply message to the same destination that the consumer is using to consume from. This prevents an endless loop by consuming and sending back the same message to itself. | false | boolean
 | *deliveryMode* (producer) | Specifies the delivery mode to be used. Possible values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT = 2. There are 2 enums and the value can be one of: 1, 2 |  | Integer
 | *deliveryPersistent* (producer) | Specifies whether persistent delivery is used by default. | true | boolean
-| *explicitQosEnabled* (producer) | Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option, which operates at message granularity, reading QoS properties exclusively from the Camel In message headers. | false | Boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
-| *preserveMessageQos* (producer) | Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDeliveryMode, and JMSExpiration. You can provide all or only some of them. If not provided, Camel will fall back to use the values from the endpoint instead. So, when using this option, the headers override the values from the endpoint. The explicitQosEnable [...]
 | *priority* (producer) | Values greater than 1 specify the message priority when sending (where 1 is the lowest priority and 9 is the highest). The explicitQosEnabled option must also be enabled in order for this option to have any effect. There are 9 enums and the value can be one of: 1, 2, 3, 4, 5, 6, 7, 8, 9 | 4 | int
 | *replyToConcurrentConsumers* (producer) | Specifies the default number of concurrent consumers when doing request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. | 1 | int
 | *replyToOverride* (producer) | Provides an explicit ReplyTo destination in the JMS message, which overrides the setting of replyTo. It is useful if you want to forward the message to a remote Queue and receive the reply message from the ReplyTo destination. |  | String
-| *replyToType* (producer) | Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS. Possible values are: Temporary, Shared, or Exclusive. By default Camel will use temporary queues. However if replyTo has been configured, then Shared is used by default. This option allows you to use exclusive queues instead of shared ones. See Camel JMS documentation for more details, and especially the notes about the implications if running  [...]
+| *replyToType* (producer) | Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS. Possible values are: Temporary or Exclusive. By default Camel will use temporary queues. However if replyTo has been configured, then Exclusive is used. There are 2 enums and the value can be one of: Temporary, Exclusive |  | ReplyToType
 | *requestTimeout* (producer) | The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You can include the header CamelJmsRequestTimeout to override this endpoint configured timeout value, and thus have per message individual timeout values. See also the requestTimeoutCheckerInterval option. | 20000 | long
 | *timeToLive* (producer) | When sending messages, specifies the time-to-live of the message (in milliseconds). | -1 | long
 | *allowNullBody* (producer) | Whether to allow sending messages with no body. If this option is false and the message body is null, then an JMSException is thrown. | true | boolean
 | *disableTimeToLive* (producer) | Use this option to force disabling time to live. For example when you do request/reply over JMS, then Camel will by default use the requestTimeout value as time to live on the message being sent. The problem is that the sender and receiver systems have to have their clocks synchronized, so they are in sync. This is not always so easy to archive. So you can use disableTimeToLive=true to not set a time to live value on the sent message. Then the message w [...]
-| *includeSentJMSMessageID* (producer) | Only applicable when sending to JMS destination using InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange with the actual JMSMessageID that was used by the JMS client when the message was sent to the JMS destination. | false | boolean
+| *explicitQosEnabled* (producer) | Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option, which operates at message granularity, reading QoS properties exclusively from the Camel In message headers. | false | Boolean
+| *preserveMessageQos* (producer) | Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDeliveryMode, and JMSExpiration. You can provide all or only some of them. If not provided, Camel will fall back to use the values from the endpoint instead. So, when using this option, the headers override the values from the endpoint. The explicitQosEnable [...]
 | *asyncStartListener* (advanced) | Whether to startup the consumer message listener asynchronously, when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker, then it may block while retrying and/or failover. This will cause Camel to block while starting routes. By setting this option to true, you will let routes startup, while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this option is used, then b [...]
 | *asyncStopListener* (advanced) | Whether to stop the consumer message listener asynchronously, when stopping a route. | false | boolean
-| *connectionCount* (advanced) | *Deprecated* The maximum number of connections available to this endpoint |  | Integer
-| *connectionFactory* (advanced) | Initializes the connectionFactory for the endpoint, which takes precedence over the component's connectionFactory, if any |  | ConnectionFactory
 | *destinationCreationStrategy* (advanced) | To use a custom DestinationCreationStrategy. |  | DestinationCreationStrategy
 | *exceptionListener* (advanced) | Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions. |  | ExceptionListener
 | *headerFilterStrategy* (advanced) | To use a custom HeaderFilterStrategy to filter header to and from Camel message. |  | HeaderFilterStrategy
@@ -176,10 +172,7 @@ with the following path and query parameters:
 | *recoveryInterval* (advanced) | Specifies the interval between recovery attempts, i.e. when a connection is being refreshed, in milliseconds. The default is 5000 ms, that is, 5 seconds. | 5000 | long
 | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
 | *transferException* (advanced) | If enabled and you are using Request Reply messaging (InOut) and an Exchange failed on the consumer side, then the caused Exception will be send back in response as a javax.jms.ObjectMessage. If the client is Camel, the returned Exception is rethrown. This allows you to use Camel JMS as a bridge in your routing - for example, using persistent queues to enable robust routing. Notice that if you also have transferExchange enabled, this option takes preced [...]
-| *errorHandlerLoggingLevel* (logging) | Allows to configure the default errorHandler logging level for logging uncaught exceptions. There are 6 enums and the value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | WARN | LoggingLevel
-| *errorHandlerLogStackTrace* (logging) | Allows to control whether stacktraces should be logged or not, by the default errorHandler. | true | boolean
 | *transacted* (transaction) | Specifies whether to use transacted mode | false | boolean
-| *sharedJMSSession* (transaction) | Specifies whether to share JMS session with other SJMS endpoints. Turn this off if your route is accessing to multiple JMS providers. If you need transaction against multiple JMS providers, use jms component to leverage XA transaction. | true | boolean
 |===
 // endpoint options: END
 
diff --git a/docs/components/modules/ROOT/pages/sjms2-component.adoc b/docs/components/modules/ROOT/pages/sjms2-component.adoc
index db22c0a..9bdbeae 100644
--- a/docs/components/modules/ROOT/pages/sjms2-component.adoc
+++ b/docs/components/modules/ROOT/pages/sjms2-component.adoc
@@ -81,15 +81,14 @@ You append query options to the URI using the following format,
 == Component Options and Configurations
 
 // component options: START
-The Simple JMS2 component supports 14 options, which are listed below.
+The Simple JMS2 component supports 11 options, which are listed below.
 
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *connectionCount* (common) | The maximum number of connections available to endpoints started under this component | 1 | Integer
-| *connectionFactory* (common) | *Autowired* A ConnectionFactory is required to enable the SjmsComponent. It can be set directly or set set as part of a ConnectionResource. |  | ConnectionFactory
+| *connectionFactory* (common) | *Autowired* The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
 | *autowiredEnabled* (advanced) | Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. | true | boolean
@@ -100,8 +99,6 @@ The Simple JMS2 component supports 14 options, which are listed below.
 | *replyToOnTimeoutMaxConcurrent{zwsp}Consumers* (advanced) | Specifies the maximum number of concurrent consumers for continue routing when timeout occurred when using request/reply over JMS. | 1 | int
 | *requestTimeoutCheckerInterval* (advanced) | Configures how often Camel should check for timed out Exchanges when doing request/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeout occurs, then you can lower this interval, to check more frequently. The timeout is determined by the option requestTimeout. | 1000 | long
 | *headerFilterStrategy* (filter) | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message. |  | HeaderFilterStrategy
-| *password* (security) | Password to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory. |  | String
-| *username* (security) | Username to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory. |  | String
 |===
 // component options: END
 
@@ -126,22 +123,24 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (51 parameters):
+=== Query Parameters (47 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
 | *acknowledgementMode* (common) | The JMS acknowledgement name, which is one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE. There are 4 enums and the value can be one of: SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE | AUTO_ACKNOWLEDGE | SessionAcknowledgementType
+| *connectionFactory* (common) | The connection factory to be use. A connection factory must be configured either on the component or endpoint. |  | ConnectionFactory
 | *disableReplyTo* (common) | Specifies whether Camel ignores the JMSReplyTo header in messages. If true, Camel does not send a reply back to the destination specified in the JMSReplyTo header. You can use this option if you want Camel to consume from a route and you do not want Camel to automatically send back a reply message because another component in your code handles the reply message. You can also use this option if you want to use Camel as a proxy between different message broker [...]
 | *replyTo* (common) | Provides an explicit ReplyTo destination (overrides any incoming value of Message.getJMSReplyTo() in consumer). |  | String
 | *testConnectionOnStartup* (common) | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well. | false | boolean
 | *asyncConsumer* (consumer) | Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue, while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100% strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transac [...]
 | *autoStartup* (consumer) | Specifies whether the consumer container should auto-startup. | true | boolean
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
+| *clientId* (consumer) | Sets the JMS client ID to use. Note that this value, if specified, must be unique and can only be used by a single JMS connection instance. It is typically only required for durable topic subscriptions. If using Apache ActiveMQ you may prefer to use Virtual Topics instead. |  | String
 | *concurrentConsumers* (consumer) | Specifies the default number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToConcurrentConsumers is used to control number of concurrent consumers on the reply message listener. | 1 | int
 | *durable* (consumer) | Sets topic consumer to durable. | false | boolean
-| *durableSubscriptionId* (consumer) | Sets the durable subscription Id required for durable topics. |  | String
+| *durableSubscriptionName* (consumer) | The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well. |  | String
 | *replyToDeliveryPersistent* (consumer) | Specifies whether to use persistent delivery by default for replies. | true | boolean
 | *shared* (consumer) | Sets the consumer to shared. | false | boolean
 | *subscriptionId* (consumer) | Sets the subscription Id, required for durable or shared topics. |  | String
@@ -153,22 +152,19 @@ with the following path and query parameters:
 | *replyToSameDestinationAllowed* (consumer) | Whether a JMS consumer is allowed to send a reply message to the same destination that the consumer is using to consume from. This prevents an endless loop by consuming and sending back the same message to itself. | false | boolean
 | *deliveryMode* (producer) | Specifies the delivery mode to be used. Possible values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT = 2. There are 2 enums and the value can be one of: 1, 2 |  | Integer
 | *deliveryPersistent* (producer) | Specifies whether persistent delivery is used by default. | true | boolean
-| *explicitQosEnabled* (producer) | Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option, which operates at message granularity, reading QoS properties exclusively from the Camel In message headers. | false | Boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
-| *preserveMessageQos* (producer) | Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDeliveryMode, and JMSExpiration. You can provide all or only some of them. If not provided, Camel will fall back to use the values from the endpoint instead. So, when using this option, the headers override the values from the endpoint. The explicitQosEnable [...]
 | *priority* (producer) | Values greater than 1 specify the message priority when sending (where 1 is the lowest priority and 9 is the highest). The explicitQosEnabled option must also be enabled in order for this option to have any effect. There are 9 enums and the value can be one of: 1, 2, 3, 4, 5, 6, 7, 8, 9 | 4 | int
 | *replyToConcurrentConsumers* (producer) | Specifies the default number of concurrent consumers when doing request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. | 1 | int
 | *replyToOverride* (producer) | Provides an explicit ReplyTo destination in the JMS message, which overrides the setting of replyTo. It is useful if you want to forward the message to a remote Queue and receive the reply message from the ReplyTo destination. |  | String
-| *replyToType* (producer) | Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS. Possible values are: Temporary, Shared, or Exclusive. By default Camel will use temporary queues. However if replyTo has been configured, then Shared is used by default. This option allows you to use exclusive queues instead of shared ones. See Camel JMS documentation for more details, and especially the notes about the implications if running  [...]
+| *replyToType* (producer) | Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS. Possible values are: Temporary or Exclusive. By default Camel will use temporary queues. However if replyTo has been configured, then Exclusive is used. There are 2 enums and the value can be one of: Temporary, Exclusive |  | ReplyToType
 | *requestTimeout* (producer) | The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You can include the header CamelJmsRequestTimeout to override this endpoint configured timeout value, and thus have per message individual timeout values. See also the requestTimeoutCheckerInterval option. | 20000 | long
 | *timeToLive* (producer) | When sending messages, specifies the time-to-live of the message (in milliseconds). | -1 | long
 | *allowNullBody* (producer) | Whether to allow sending messages with no body. If this option is false and the message body is null, then an JMSException is thrown. | true | boolean
 | *disableTimeToLive* (producer) | Use this option to force disabling time to live. For example when you do request/reply over JMS, then Camel will by default use the requestTimeout value as time to live on the message being sent. The problem is that the sender and receiver systems have to have their clocks synchronized, so they are in sync. This is not always so easy to archive. So you can use disableTimeToLive=true to not set a time to live value on the sent message. Then the message w [...]
-| *includeSentJMSMessageID* (producer) | Only applicable when sending to JMS destination using InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange with the actual JMSMessageID that was used by the JMS client when the message was sent to the JMS destination. | false | boolean
+| *explicitQosEnabled* (producer) | Set if the deliveryMode, priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode, priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option, which operates at message granularity, reading QoS properties exclusively from the Camel In message headers. | false | Boolean
+| *preserveMessageQos* (producer) | Set to true, if you want to send message using the QoS settings specified on the message, instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority, JMSDeliveryMode, and JMSExpiration. You can provide all or only some of them. If not provided, Camel will fall back to use the values from the endpoint instead. So, when using this option, the headers override the values from the endpoint. The explicitQosEnable [...]
 | *asyncStartListener* (advanced) | Whether to startup the consumer message listener asynchronously, when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker, then it may block while retrying and/or failover. This will cause Camel to block while starting routes. By setting this option to true, you will let routes startup, while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this option is used, then b [...]
 | *asyncStopListener* (advanced) | Whether to stop the consumer message listener asynchronously, when stopping a route. | false | boolean
-| *connectionCount* (advanced) | *Deprecated* The maximum number of connections available to this endpoint |  | Integer
-| *connectionFactory* (advanced) | Initializes the connectionFactory for the endpoint, which takes precedence over the component's connectionFactory, if any |  | ConnectionFactory
 | *destinationCreationStrategy* (advanced) | To use a custom DestinationCreationStrategy. |  | DestinationCreationStrategy
 | *exceptionListener* (advanced) | Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions. |  | ExceptionListener
 | *headerFilterStrategy* (advanced) | To use a custom HeaderFilterStrategy to filter header to and from Camel message. |  | HeaderFilterStrategy
@@ -179,10 +175,7 @@ with the following path and query parameters:
 | *recoveryInterval* (advanced) | Specifies the interval between recovery attempts, i.e. when a connection is being refreshed, in milliseconds. The default is 5000 ms, that is, 5 seconds. | 5000 | long
 | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
 | *transferException* (advanced) | If enabled and you are using Request Reply messaging (InOut) and an Exchange failed on the consumer side, then the caused Exception will be send back in response as a javax.jms.ObjectMessage. If the client is Camel, the returned Exception is rethrown. This allows you to use Camel JMS as a bridge in your routing - for example, using persistent queues to enable robust routing. Notice that if you also have transferExchange enabled, this option takes preced [...]
-| *errorHandlerLoggingLevel* (logging) | Allows to configure the default errorHandler logging level for logging uncaught exceptions. There are 6 enums and the value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | WARN | LoggingLevel
-| *errorHandlerLogStackTrace* (logging) | Allows to control whether stacktraces should be logged or not, by the default errorHandler. | true | boolean
 | *transacted* (transaction) | Specifies whether to use transacted mode | false | boolean
-| *sharedJMSSession* (transaction) | Specifies whether to share JMS session with other SJMS endpoints. Turn this off if your route is accessing to multiple JMS providers. If you need transaction against multiple JMS providers, use jms component to leverage XA transaction. | true | boolean
 |===
 // endpoint options: END