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

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


The following commit(s) were added to refs/heads/main by this push:
     new 8721f2ccccc CAMEL-21474: camel-smb - Add disconnect option
8721f2ccccc is described below

commit 8721f2ccccc5ad9b93fb521ab4dde9407deae52b
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Fri Nov 29 18:25:02 2024 +0100

    CAMEL-21474: camel-smb - Add disconnect option
---
 .../org/apache/camel/catalog/components/smb.json   | 49 +++++++++++-----------
 .../camel/component/smb/SmbEndpointConfigurer.java |  3 ++
 .../camel/component/smb/SmbEndpointUriFactory.java |  3 +-
 .../org/apache/camel/component/smb/smb.json        | 49 +++++++++++-----------
 .../camel/component/smb/SmbConfiguration.java      | 24 +++++++----
 .../apache/camel/component/smb/SmbProducer.java    | 35 +++++++++++-----
 .../camel-smb/src/test/resources/log4j2.properties | 23 +++++-----
 .../endpoint/dsl/SmbEndpointBuilderFactory.java    | 39 +++++++++++++++--
 8 files changed, 141 insertions(+), 84 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/smb.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/smb.json
index 776ad9f6cc9..496dbe03b1a 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/smb.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/smb.json
@@ -32,7 +32,7 @@
     "hostname": { "index": 0, "kind": "path", "displayName": "Hostname", 
"group": "common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The share hostname or IP address" },
     "port": { "index": 1, "kind": "path", "displayName": "Port", "group": 
"common", "label": "", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 445, 
"description": "The share port number" },
     "shareName": { "index": 2, "kind": "path", "displayName": "Share Name", 
"group": "common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The name of the share to connect to." },
-    "path": { "index": 3, "kind": "parameter", "displayName": "Path", "group": 
"common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The path, within the share, to consume the 
files from" },
+    "path": { "index": 3, "kind": "parameter", "displayName": "Path", "group": 
"common", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "The path, within the 
share, to consume the files from" },
     "searchPattern": { "index": 4, "kind": "parameter", "displayName": "Search 
Pattern", "group": "common", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "*.txt", "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The search pattern used to list the files" },
     "recursive": { "index": 5, "kind": "parameter", "displayName": 
"Recursive", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "If a directory, will look for files in all the 
sub-directories as well." },
     "sendEmptyMessageWhenIdle": { "index": 6, "kind": "parameter", 
"displayName": "Send Empty Message When Idle", "group": "consumer", "label": 
"consumer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "If the polling consumer did not poll any files, you can 
enable this option to send an empty message (no body) instead." },
@@ -41,28 +41,29 @@
     "exchangePattern": { "index": 9, "kind": "parameter", "displayName": 
"Exchange Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the exchange pattern when the consumer creates an exchange." },
     "pollStrategy": { "index": 10, "kind": "parameter", "displayName": "Poll 
Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, 
"autowired": false, "secret": false, "description": "A pluggable 
org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your 
custom implementation to control error handling usually occurred during the po 
[...]
     "autoCreate": { "index": 11, "kind": "parameter", "displayName": "Auto 
Create", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "Whether to create parent 
directory if it does not exist" },
-    "fileExist": { "index": 12, "kind": "parameter", "displayName": "File 
Exist", "group": "producer", "label": "producer", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.file.GenericFileExist", 
"enum": [ "Override", "Append", "Fail", "Ignore", "Move", "TryRename" ], 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "defaultValue": "Ignore", "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configuration [...]
-    "readBufferSize": { "index": 13, "kind": "parameter", "displayName": "Read 
Buffer Size", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": 
"", "autowired": false, "secret": false, "defaultValue": 2048, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "Read buffer size when 
for file being produced" },
-    "lazyStartProducer": { "index": 14, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "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 produ [...]
-    "idempotentRepository": { "index": 15, "kind": "parameter", "displayName": 
"Idempotent Repository", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.IdempotentRepository", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "A pluggable repository 
org.apache.camel.spi.IdempotentRepository w [...]
-    "smbConfig": { "index": 16, "kind": "parameter", "displayName": "Smb 
Config", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "com.hierynomus.smbj.SmbConfig", "deprecated": false, 
"deprecationNote": "", "autowired": true, "secret": false, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "An optional SMB client 
configuration, can be used to configure client specific [...]
-    "smbIoBean": { "index": 17, "kind": "parameter", "displayName": "Smb Io 
Bean", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.smb.SmbIOBean", "deprecated": 
false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "An optional SMB I\/O bean to use to setup the 
file access attributes when reading\/writi [...]
-    "backoffErrorThreshold": { "index": 18, "kind": "parameter", 
"displayName": "Backoff Error Threshold", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": "The 
number of subsequent error polls (failed due some error) that should happen 
before the backoffMultipler should kick-in." },
-    "backoffIdleThreshold": { "index": 19, "kind": "parameter", "displayName": 
"Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "The number of subsequent 
idle polls that should happen before the backoffMultipler should kick-in." },
-    "backoffMultiplier": { "index": 20, "kind": "parameter", "displayName": 
"Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "To let the scheduled 
polling consumer backoff if there has been a number of subsequent idles\/errors 
in a row. The multiplier is then the number of polls that will be skipped 
before the next actual attempt is h [...]
-    "delay": { "index": 21, "kind": "parameter", "displayName": "Delay", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 500, "description": "Milliseconds before the 
next poll." },
-    "greedy": { "index": 22, "kind": "parameter", "displayName": "Greedy", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "If greedy is enabled, 
then the ScheduledPollConsumer will run immediately again, if the previous run 
polled 1 or more messages." },
-    "initialDelay": { "index": 23, "kind": "parameter", "displayName": 
"Initial Delay", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "long", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": 1000, "description": 
"Milliseconds before the first poll starts." },
-    "repeatCount": { "index": 24, "kind": "parameter", "displayName": "Repeat 
Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 0, "description": "Specifies a maximum limit 
of number of fires. So if you set it to 1, the scheduler will only fire once. 
If you set it to 5, it will only fire five times. A value of zero or negative 
means fire forever." },
-    "runLoggingLevel": { "index": 25, "kind": "parameter", "displayName": "Run 
Logging Level", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", 
"ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "TRACE", "description": "The consumer logs a start\/complete 
log line when it polls. This option allows you to configure the l [...]
-    "scheduledExecutorService": { "index": 26, "kind": "parameter", 
"displayName": "Scheduled Executor Service", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "object", "javaType": 
"java.util.concurrent.ScheduledExecutorService", "deprecated": false, 
"autowired": false, "secret": false, "description": "Allows for configuring a 
custom\/shared thread pool to use for the consumer. By default each consumer 
has its own single threaded thread pool." },
-    "scheduler": { "index": 27, "kind": "parameter", "displayName": 
"Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "none", "description": "To 
use a cron scheduler from either camel-spring or camel-quartz component. Use 
value spring or quartz for built in scheduler" },
-    "schedulerProperties": { "index": 28, "kind": "parameter", "displayName": 
"Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", 
"multiValue": true, "deprecated": false, "autowired": false, "secret": false, 
"description": "To configure additional properties when using a custom 
scheduler or any of the Quartz, Spring based scheduler." },
-    "startScheduler": { "index": 29, "kind": "parameter", "displayName": 
"Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether the scheduler should be auto started." },
-    "timeUnit": { "index": 30, "kind": "parameter", "displayName": "Time 
Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "object", "javaType": "java.util.concurrent.TimeUnit", "enum": [ 
"NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", 
"DAYS" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and 
delay options." },
-    "useFixedDelay": { "index": 31, "kind": "parameter", "displayName": "Use 
Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in 
JDK for details." },
-    "domain": { "index": 32, "kind": "parameter", "displayName": "Domain", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The user domain" },
-    "password": { "index": 33, "kind": "parameter", "displayName": "Password", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The password to access the share" },
-    "username": { "index": 34, "kind": "parameter", "displayName": "Username", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The username required to access the share" }
+    "disconnect": { "index": 12, "kind": "parameter", "displayName": 
"Disconnect", "group": "producer", "label": "producer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "Whether or not to disconnect from remote SMB 
server right after use. Disconnect will only disconn [...]
+    "fileExist": { "index": 13, "kind": "parameter", "displayName": "File 
Exist", "group": "producer", "label": "producer", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.file.GenericFileExist", 
"enum": [ "Override", "Append", "Fail", "Ignore", "Move", "TryRename" ], 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"Ignore", "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration" [...]
+    "readBufferSize": { "index": 14, "kind": "parameter", "displayName": "Read 
Buffer Size", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": 
"", "autowired": false, "secret": false, "defaultValue": 2048, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "Read buffer size when 
for file being produced" },
+    "lazyStartProducer": { "index": 15, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "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 produ [...]
+    "idempotentRepository": { "index": 16, "kind": "parameter", "displayName": 
"Idempotent Repository", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.IdempotentRepository", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "A pluggable repository 
org.apache.camel.spi.IdempotentRepository w [...]
+    "smbConfig": { "index": 17, "kind": "parameter", "displayName": "Smb 
Config", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "com.hierynomus.smbj.SmbConfig", "deprecated": false, 
"deprecationNote": "", "autowired": true, "secret": false, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "An optional SMB client 
configuration, can be used to configure client specific [...]
+    "smbIoBean": { "index": 18, "kind": "parameter", "displayName": "Smb Io 
Bean", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.smb.SmbIOBean", "deprecated": 
false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "An optional SMB I\/O bean to use to setup the 
file access attributes when reading\/writi [...]
+    "backoffErrorThreshold": { "index": 19, "kind": "parameter", 
"displayName": "Backoff Error Threshold", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": "The 
number of subsequent error polls (failed due some error) that should happen 
before the backoffMultipler should kick-in." },
+    "backoffIdleThreshold": { "index": 20, "kind": "parameter", "displayName": 
"Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "The number of subsequent 
idle polls that should happen before the backoffMultipler should kick-in." },
+    "backoffMultiplier": { "index": 21, "kind": "parameter", "displayName": 
"Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "To let the scheduled 
polling consumer backoff if there has been a number of subsequent idles\/errors 
in a row. The multiplier is then the number of polls that will be skipped 
before the next actual attempt is h [...]
+    "delay": { "index": 22, "kind": "parameter", "displayName": "Delay", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 500, "description": "Milliseconds before the 
next poll." },
+    "greedy": { "index": 23, "kind": "parameter", "displayName": "Greedy", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "If greedy is enabled, 
then the ScheduledPollConsumer will run immediately again, if the previous run 
polled 1 or more messages." },
+    "initialDelay": { "index": 24, "kind": "parameter", "displayName": 
"Initial Delay", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "long", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": 1000, "description": 
"Milliseconds before the first poll starts." },
+    "repeatCount": { "index": 25, "kind": "parameter", "displayName": "Repeat 
Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 0, "description": "Specifies a maximum limit 
of number of fires. So if you set it to 1, the scheduler will only fire once. 
If you set it to 5, it will only fire five times. A value of zero or negative 
means fire forever." },
+    "runLoggingLevel": { "index": 26, "kind": "parameter", "displayName": "Run 
Logging Level", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", 
"ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "TRACE", "description": "The consumer logs a start\/complete 
log line when it polls. This option allows you to configure the l [...]
+    "scheduledExecutorService": { "index": 27, "kind": "parameter", 
"displayName": "Scheduled Executor Service", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "object", "javaType": 
"java.util.concurrent.ScheduledExecutorService", "deprecated": false, 
"autowired": false, "secret": false, "description": "Allows for configuring a 
custom\/shared thread pool to use for the consumer. By default each consumer 
has its own single threaded thread pool." },
+    "scheduler": { "index": 28, "kind": "parameter", "displayName": 
"Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "none", "description": "To 
use a cron scheduler from either camel-spring or camel-quartz component. Use 
value spring or quartz for built in scheduler" },
+    "schedulerProperties": { "index": 29, "kind": "parameter", "displayName": 
"Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", 
"multiValue": true, "deprecated": false, "autowired": false, "secret": false, 
"description": "To configure additional properties when using a custom 
scheduler or any of the Quartz, Spring based scheduler." },
+    "startScheduler": { "index": 30, "kind": "parameter", "displayName": 
"Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether the scheduler should be auto started." },
+    "timeUnit": { "index": 31, "kind": "parameter", "displayName": "Time 
Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "object", "javaType": "java.util.concurrent.TimeUnit", "enum": [ 
"NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", 
"DAYS" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and 
delay options." },
+    "useFixedDelay": { "index": 32, "kind": "parameter", "displayName": "Use 
Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in 
JDK for details." },
+    "domain": { "index": 33, "kind": "parameter", "displayName": "Domain", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The user domain" },
+    "password": { "index": 34, "kind": "parameter", "displayName": "Password", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The password to access the share" },
+    "username": { "index": 35, "kind": "parameter", "displayName": "Username", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The username required to access the share" }
   }
 }
diff --git 
a/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointConfigurer.java
 
b/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointConfigurer.java
index d8efbcdb041..cdfc3cf96d3 100644
--- 
a/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointConfigurer.java
+++ 
b/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointConfigurer.java
@@ -34,6 +34,7 @@ public class SmbEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": 
target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); 
return true;
         case "delay": target.setDelay(property(camelContext, long.class, 
value)); return true;
+        case "disconnect": 
target.getConfiguration().setDisconnect(property(camelContext, boolean.class, 
value)); return true;
         case "domain": 
target.getConfiguration().setDomain(property(camelContext, 
java.lang.String.class, value)); return true;
         case "exceptionhandler":
         case "exceptionHandler": 
target.setExceptionHandler(property(camelContext, 
org.apache.camel.spi.ExceptionHandler.class, value)); return true;
@@ -102,6 +103,7 @@ public class SmbEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return boolean.class;
         case "delay": return long.class;
+        case "disconnect": return boolean.class;
         case "domain": return java.lang.String.class;
         case "exceptionhandler":
         case "exceptionHandler": return 
org.apache.camel.spi.ExceptionHandler.class;
@@ -166,6 +168,7 @@ public class SmbEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return target.isBridgeErrorHandler();
         case "delay": return target.getDelay();
+        case "disconnect": return target.getConfiguration().isDisconnect();
         case "domain": return target.getConfiguration().getDomain();
         case "exceptionhandler":
         case "exceptionHandler": return target.getExceptionHandler();
diff --git 
a/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointUriFactory.java
 
b/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointUriFactory.java
index fd2922cc47d..544bb1cdef0 100644
--- 
a/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointUriFactory.java
+++ 
b/components/camel-smb/src/generated/java/org/apache/camel/component/smb/SmbEndpointUriFactory.java
@@ -23,13 +23,14 @@ public class SmbEndpointUriFactory extends 
org.apache.camel.support.component.En
     private static final Set<String> SECRET_PROPERTY_NAMES;
     private static final Set<String> MULTI_VALUE_PREFIXES;
     static {
-        Set<String> props = new HashSet<>(35);
+        Set<String> props = new HashSet<>(36);
         props.add("autoCreate");
         props.add("backoffErrorThreshold");
         props.add("backoffIdleThreshold");
         props.add("backoffMultiplier");
         props.add("bridgeErrorHandler");
         props.add("delay");
+        props.add("disconnect");
         props.add("domain");
         props.add("exceptionHandler");
         props.add("exchangePattern");
diff --git 
a/components/camel-smb/src/generated/resources/META-INF/org/apache/camel/component/smb/smb.json
 
b/components/camel-smb/src/generated/resources/META-INF/org/apache/camel/component/smb/smb.json
index 776ad9f6cc9..496dbe03b1a 100644
--- 
a/components/camel-smb/src/generated/resources/META-INF/org/apache/camel/component/smb/smb.json
+++ 
b/components/camel-smb/src/generated/resources/META-INF/org/apache/camel/component/smb/smb.json
@@ -32,7 +32,7 @@
     "hostname": { "index": 0, "kind": "path", "displayName": "Hostname", 
"group": "common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The share hostname or IP address" },
     "port": { "index": 1, "kind": "path", "displayName": "Port", "group": 
"common", "label": "", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 445, 
"description": "The share port number" },
     "shareName": { "index": 2, "kind": "path", "displayName": "Share Name", 
"group": "common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "description": "The name of the share to connect to." },
-    "path": { "index": 3, "kind": "parameter", "displayName": "Path", "group": 
"common", "label": "", "required": true, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The path, within the share, to consume the 
files from" },
+    "path": { "index": 3, "kind": "parameter", "displayName": "Path", "group": 
"common", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "The path, within the 
share, to consume the files from" },
     "searchPattern": { "index": 4, "kind": "parameter", "displayName": "Search 
Pattern", "group": "common", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "*.txt", "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The search pattern used to list the files" },
     "recursive": { "index": 5, "kind": "parameter", "displayName": 
"Recursive", "group": "consumer", "label": "consumer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "If a directory, will look for files in all the 
sub-directories as well." },
     "sendEmptyMessageWhenIdle": { "index": 6, "kind": "parameter", 
"displayName": "Send Empty Message When Idle", "group": "consumer", "label": 
"consumer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "If the polling consumer did not poll any files, you can 
enable this option to send an empty message (no body) instead." },
@@ -41,28 +41,29 @@
     "exchangePattern": { "index": 9, "kind": "parameter", "displayName": 
"Exchange Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the exchange pattern when the consumer creates an exchange." },
     "pollStrategy": { "index": 10, "kind": "parameter", "displayName": "Poll 
Strategy", "group": "consumer (advanced)", "label": "consumer,advanced", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.spi.PollingConsumerPollStrategy", "deprecated": false, 
"autowired": false, "secret": false, "description": "A pluggable 
org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your 
custom implementation to control error handling usually occurred during the po 
[...]
     "autoCreate": { "index": 11, "kind": "parameter", "displayName": "Auto 
Create", "group": "producer", "label": "producer", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "defaultValue": false, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "Whether to create parent 
directory if it does not exist" },
-    "fileExist": { "index": 12, "kind": "parameter", "displayName": "File 
Exist", "group": "producer", "label": "producer", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.file.GenericFileExist", 
"enum": [ "Override", "Append", "Fail", "Ignore", "Move", "TryRename" ], 
"deprecated": false, "deprecationNote": "", "autowired": false, "secret": 
false, "defaultValue": "Ignore", "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configuration [...]
-    "readBufferSize": { "index": 13, "kind": "parameter", "displayName": "Read 
Buffer Size", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": 
"", "autowired": false, "secret": false, "defaultValue": 2048, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "Read buffer size when 
for file being produced" },
-    "lazyStartProducer": { "index": 14, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "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 produ [...]
-    "idempotentRepository": { "index": 15, "kind": "parameter", "displayName": 
"Idempotent Repository", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.IdempotentRepository", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "A pluggable repository 
org.apache.camel.spi.IdempotentRepository w [...]
-    "smbConfig": { "index": 16, "kind": "parameter", "displayName": "Smb 
Config", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "com.hierynomus.smbj.SmbConfig", "deprecated": false, 
"deprecationNote": "", "autowired": true, "secret": false, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "An optional SMB client 
configuration, can be used to configure client specific [...]
-    "smbIoBean": { "index": 17, "kind": "parameter", "displayName": "Smb Io 
Bean", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.smb.SmbIOBean", "deprecated": 
false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "An optional SMB I\/O bean to use to setup the 
file access attributes when reading\/writi [...]
-    "backoffErrorThreshold": { "index": 18, "kind": "parameter", 
"displayName": "Backoff Error Threshold", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": "The 
number of subsequent error polls (failed due some error) that should happen 
before the backoffMultipler should kick-in." },
-    "backoffIdleThreshold": { "index": 19, "kind": "parameter", "displayName": 
"Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "The number of subsequent 
idle polls that should happen before the backoffMultipler should kick-in." },
-    "backoffMultiplier": { "index": 20, "kind": "parameter", "displayName": 
"Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "To let the scheduled 
polling consumer backoff if there has been a number of subsequent idles\/errors 
in a row. The multiplier is then the number of polls that will be skipped 
before the next actual attempt is h [...]
-    "delay": { "index": 21, "kind": "parameter", "displayName": "Delay", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 500, "description": "Milliseconds before the 
next poll." },
-    "greedy": { "index": 22, "kind": "parameter", "displayName": "Greedy", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "If greedy is enabled, 
then the ScheduledPollConsumer will run immediately again, if the previous run 
polled 1 or more messages." },
-    "initialDelay": { "index": 23, "kind": "parameter", "displayName": 
"Initial Delay", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "long", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": 1000, "description": 
"Milliseconds before the first poll starts." },
-    "repeatCount": { "index": 24, "kind": "parameter", "displayName": "Repeat 
Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 0, "description": "Specifies a maximum limit 
of number of fires. So if you set it to 1, the scheduler will only fire once. 
If you set it to 5, it will only fire five times. A value of zero or negative 
means fire forever." },
-    "runLoggingLevel": { "index": 25, "kind": "parameter", "displayName": "Run 
Logging Level", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", 
"ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "TRACE", "description": "The consumer logs a start\/complete 
log line when it polls. This option allows you to configure the l [...]
-    "scheduledExecutorService": { "index": 26, "kind": "parameter", 
"displayName": "Scheduled Executor Service", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "object", "javaType": 
"java.util.concurrent.ScheduledExecutorService", "deprecated": false, 
"autowired": false, "secret": false, "description": "Allows for configuring a 
custom\/shared thread pool to use for the consumer. By default each consumer 
has its own single threaded thread pool." },
-    "scheduler": { "index": 27, "kind": "parameter", "displayName": 
"Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "none", "description": "To 
use a cron scheduler from either camel-spring or camel-quartz component. Use 
value spring or quartz for built in scheduler" },
-    "schedulerProperties": { "index": 28, "kind": "parameter", "displayName": 
"Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", 
"multiValue": true, "deprecated": false, "autowired": false, "secret": false, 
"description": "To configure additional properties when using a custom 
scheduler or any of the Quartz, Spring based scheduler." },
-    "startScheduler": { "index": 29, "kind": "parameter", "displayName": 
"Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether the scheduler should be auto started." },
-    "timeUnit": { "index": 30, "kind": "parameter", "displayName": "Time 
Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "object", "javaType": "java.util.concurrent.TimeUnit", "enum": [ 
"NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", 
"DAYS" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and 
delay options." },
-    "useFixedDelay": { "index": 31, "kind": "parameter", "displayName": "Use 
Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in 
JDK for details." },
-    "domain": { "index": 32, "kind": "parameter", "displayName": "Domain", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The user domain" },
-    "password": { "index": 33, "kind": "parameter", "displayName": "Password", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The password to access the share" },
-    "username": { "index": 34, "kind": "parameter", "displayName": "Username", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The username required to access the share" }
+    "disconnect": { "index": 12, "kind": "parameter", "displayName": 
"Disconnect", "group": "producer", "label": "producer", "required": false, 
"type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "Whether or not to disconnect from remote SMB 
server right after use. Disconnect will only disconn [...]
+    "fileExist": { "index": 13, "kind": "parameter", "displayName": "File 
Exist", "group": "producer", "label": "producer", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.file.GenericFileExist", 
"enum": [ "Override", "Append", "Fail", "Ignore", "Move", "TryRename" ], 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"Ignore", "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration" [...]
+    "readBufferSize": { "index": 14, "kind": "parameter", "displayName": "Read 
Buffer Size", "group": "producer", "label": "producer", "required": false, 
"type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": 
"", "autowired": false, "secret": false, "defaultValue": 2048, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "Read buffer size when 
for file being produced" },
+    "lazyStartProducer": { "index": 15, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "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 produ [...]
+    "idempotentRepository": { "index": 16, "kind": "parameter", "displayName": 
"Idempotent Repository", "group": "advanced", "label": "advanced", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.spi.IdempotentRepository", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "A pluggable repository 
org.apache.camel.spi.IdempotentRepository w [...]
+    "smbConfig": { "index": 17, "kind": "parameter", "displayName": "Smb 
Config", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "com.hierynomus.smbj.SmbConfig", "deprecated": false, 
"deprecationNote": "", "autowired": true, "secret": false, 
"configurationClass": "org.apache.camel.component.smb.SmbConfiguration", 
"configurationField": "configuration", "description": "An optional SMB client 
configuration, can be used to configure client specific [...]
+    "smbIoBean": { "index": 18, "kind": "parameter", "displayName": "Smb Io 
Bean", "group": "advanced", "label": "advanced", "required": false, "type": 
"object", "javaType": "org.apache.camel.component.smb.SmbIOBean", "deprecated": 
false, "autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "An optional SMB I\/O bean to use to setup the 
file access attributes when reading\/writi [...]
+    "backoffErrorThreshold": { "index": 19, "kind": "parameter", 
"displayName": "Backoff Error Threshold", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "integer", "javaType": "int", 
"deprecated": false, "autowired": false, "secret": false, "description": "The 
number of subsequent error polls (failed due some error) that should happen 
before the backoffMultipler should kick-in." },
+    "backoffIdleThreshold": { "index": 20, "kind": "parameter", "displayName": 
"Backoff Idle Threshold", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "The number of subsequent 
idle polls that should happen before the backoffMultipler should kick-in." },
+    "backoffMultiplier": { "index": 21, "kind": "parameter", "displayName": 
"Backoff Multiplier", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "int", "deprecated": false, 
"autowired": false, "secret": false, "description": "To let the scheduled 
polling consumer backoff if there has been a number of subsequent idles\/errors 
in a row. The multiplier is then the number of polls that will be skipped 
before the next actual attempt is h [...]
+    "delay": { "index": 22, "kind": "parameter", "displayName": "Delay", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 500, "description": "Milliseconds before the 
next poll." },
+    "greedy": { "index": 23, "kind": "parameter", "displayName": "Greedy", 
"group": "scheduler", "label": "consumer,scheduler", "required": false, "type": 
"boolean", "javaType": "boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "If greedy is enabled, 
then the ScheduledPollConsumer will run immediately again, if the previous run 
polled 1 or more messages." },
+    "initialDelay": { "index": 24, "kind": "parameter", "displayName": 
"Initial Delay", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "integer", "javaType": "long", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": 1000, "description": 
"Milliseconds before the first poll starts." },
+    "repeatCount": { "index": 25, "kind": "parameter", "displayName": "Repeat 
Count", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "integer", "javaType": "long", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": 0, "description": "Specifies a maximum limit 
of number of fires. So if you set it to 1, the scheduler will only fire once. 
If you set it to 5, it will only fire five times. A value of zero or negative 
means fire forever." },
+    "runLoggingLevel": { "index": 26, "kind": "parameter", "displayName": "Run 
Logging Level", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", 
"ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "TRACE", "description": "The consumer logs a start\/complete 
log line when it polls. This option allows you to configure the l [...]
+    "scheduledExecutorService": { "index": 27, "kind": "parameter", 
"displayName": "Scheduled Executor Service", "group": "scheduler", "label": 
"consumer,scheduler", "required": false, "type": "object", "javaType": 
"java.util.concurrent.ScheduledExecutorService", "deprecated": false, 
"autowired": false, "secret": false, "description": "Allows for configuring a 
custom\/shared thread pool to use for the consumer. By default each consumer 
has its own single threaded thread pool." },
+    "scheduler": { "index": 28, "kind": "parameter", "displayName": 
"Scheduler", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "object", "javaType": "java.lang.Object", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "none", "description": "To 
use a cron scheduler from either camel-spring or camel-quartz component. Use 
value spring or quartz for built in scheduler" },
+    "schedulerProperties": { "index": 29, "kind": "parameter", "displayName": 
"Scheduler Properties", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "object", "javaType": 
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "scheduler.", 
"multiValue": true, "deprecated": false, "autowired": false, "secret": false, 
"description": "To configure additional properties when using a custom 
scheduler or any of the Quartz, Spring based scheduler." },
+    "startScheduler": { "index": 30, "kind": "parameter", "displayName": 
"Start Scheduler", "group": "scheduler", "label": "consumer,scheduler", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": true, 
"description": "Whether the scheduler should be auto started." },
+    "timeUnit": { "index": 31, "kind": "parameter", "displayName": "Time 
Unit", "group": "scheduler", "label": "consumer,scheduler", "required": false, 
"type": "object", "javaType": "java.util.concurrent.TimeUnit", "enum": [ 
"NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", 
"DAYS" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "MILLISECONDS", "description": "Time unit for initialDelay and 
delay options." },
+    "useFixedDelay": { "index": 32, "kind": "parameter", "displayName": "Use 
Fixed Delay", "group": "scheduler", "label": "consumer,scheduler", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in 
JDK for details." },
+    "domain": { "index": 33, "kind": "parameter", "displayName": "Domain", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The user domain" },
+    "password": { "index": 34, "kind": "parameter", "displayName": "Password", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The password to access the share" },
+    "username": { "index": 35, "kind": "parameter", "displayName": "Username", 
"group": "security", "label": "security", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": true, "configurationClass": 
"org.apache.camel.component.smb.SmbConfiguration", "configurationField": 
"configuration", "description": "The username required to access the share" }
   }
 }
diff --git 
a/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbConfiguration.java
 
b/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbConfiguration.java
index 40845490c1b..173b49f2669 100644
--- 
a/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbConfiguration.java
+++ 
b/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbConfiguration.java
@@ -29,23 +29,23 @@ public class SmbConfiguration {
 
     protected static final int DEFAULT_IDEMPOTENT_CACHE_SIZE = 1000;
 
-    @Metadata(required = false)
+    @UriParam(description = "The path, within the share, to consume the files 
from")
+    private String path;
+
     @UriParam(label = "producer", description = "What action to take if the 
SMB file already exists",
               defaultValue = "Ignore", enums = 
"Override,Append,Fail,Ignore,Move,TryRename")
     private GenericFileExist fileExist;
-
-    @Metadata(required = false, defaultValue = "false")
+    @Metadata(defaultValue = "false")
     @UriParam(label = "producer", description = "Whether to create parent 
directory if it does not exist",
               defaultValue = "false")
     private boolean autoCreate;
-
-    @Metadata(required = false, defaultValue = "2048")
+    @Metadata(defaultValue = "2048")
     @UriParam(label = "producer", description = "Read buffer size when for 
file being produced", defaultValue = "2048")
     private int readBufferSize;
+    @UriParam(label = "producer", defaultValue = "false",
+              description = "Whether or not to disconnect from remote SMB 
server right after use. Disconnect will only disconnect the current connection 
to the SMB server. If you have a consumer which you want to stop, then you need 
to stop the consumer route instead.")
+    protected boolean disconnect;
 
-    @Metadata(required = true)
-    @UriParam(description = "The path, within the share, to consume the files 
from")
-    private String path;
     @UriParam(defaultValue = "*.txt", description = "The search pattern used 
to list the files")
     private String searchPattern;
     @UriParam(label = "security", description = "The username required to 
access the share", secret = true)
@@ -102,6 +102,14 @@ public class SmbConfiguration {
         this.recursive = Boolean.valueOf(recursiveString);
     }
 
+    public boolean isDisconnect() {
+        return disconnect;
+    }
+
+    public void setDisconnect(boolean disconnect) {
+        this.disconnect = disconnect;
+    }
+
     public void setDomain(String domain) {
         this.domain = domain;
     }
diff --git 
a/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbProducer.java
 
b/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbProducer.java
index 998e304688a..9b77a9fb564 100644
--- 
a/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbProducer.java
+++ 
b/components/camel-smb/src/main/java/org/apache/camel/component/smb/SmbProducer.java
@@ -51,7 +51,7 @@ public class SmbProducer extends DefaultProducer {
 
     private boolean loggedIn;
     private Session session;
-    private final SMBClient smbClient;
+    private SMBClient smbClient;
 
     HashSet<AccessMask> GENERIC_ALL_ACCESSMASK = new 
HashSet<AccessMask>(Arrays.asList(AccessMask.GENERIC_ALL));
     HashSet<AccessMask> FILE_WRITE_DATA_ACCESSMASK = new 
HashSet<AccessMask>(Arrays.asList(AccessMask.FILE_WRITE_DATA));
@@ -62,6 +62,11 @@ public class SmbProducer extends DefaultProducer {
 
     protected SmbProducer(final SmbEndpoint endpoint) {
         super(endpoint);
+    }
+
+    @Override
+    protected void doInit() throws Exception {
+        super.doInit();
 
         if (getEndpoint().getConfiguration().getSmbConfig() != null) {
             smbClient = new 
SMBClient(getEndpoint().getConfiguration().getSmbConfig());
@@ -72,14 +77,14 @@ public class SmbProducer extends DefaultProducer {
 
     @Override
     protected void doStop() throws Exception {
-        LOGGER.debug("Producer SMB client stopped");
         super.doStop();
-    }
 
-    @Override
-    protected void doStart() throws Exception {
-        LOGGER.debug("Producer SMB client started");
-        super.doStart();
+        disconnect();
+
+        if (smbClient != null) {
+            smbClient.close();
+            smbClient = null;
+        }
     }
 
     /*
@@ -94,7 +99,6 @@ public class SmbProducer extends DefaultProducer {
     private int getReadBufferSize() {
         int readBufferSize = 
getEndpoint().getConfiguration().getReadBufferSize();
         readBufferSize = (readBufferSize <= 0) ? 2048 : readBufferSize;
-
         return readBufferSize;
     }
 
@@ -118,9 +122,10 @@ public class SmbProducer extends DefaultProducer {
         loggedIn = false;
         LOGGER.debug("Disconnecting from: {}", getEndpoint());
 
-        session.close();
-
-        session = null;
+        if (session != null) {
+            session.close();
+            session = null;
+        }
     }
 
     public void createDirectory(DiskShare share, java.io.File file) {
@@ -251,6 +256,14 @@ public class SmbProducer extends DefaultProducer {
         } catch (IOException ioe) {
             throw new RuntimeCamelException(ioe);
         }
+
+        if (configuration.isDisconnect()) {
+            try {
+                disconnect();
+            } catch (Exception e) {
+                // ignore
+            }
+        }
     }
 
     @Override
diff --git a/components/camel-smb/src/test/resources/log4j2.properties 
b/components/camel-smb/src/test/resources/log4j2.properties
index 38b39e5b760..fd484058b67 100644
--- a/components/camel-smb/src/test/resources/log4j2.properties
+++ b/components/camel-smb/src/test/resources/log4j2.properties
@@ -15,21 +15,18 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 
-appender.out.type = File
+appender.file.type = File
+appender.file.name = file
+appender.file.fileName = target/camel-test-smb.log
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+appender.out.type = Console
 appender.out.name = out
-appender.out.fileName = target/camel-smb-test.log
 appender.out.layout.type = PatternLayout
 appender.out.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
-appender.stdout.type = Console
-appender.stdout.name = stdout
-appender.stdout.layout.type = PatternLayout
-appender.stdout.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
 
-rootLogger.level = WARN
-rootLogger.appenderRef.out.ref = out
+rootLogger.level = INFO
+rootLogger.appenderRef.file.ref = file
 
-logger.camel.name=org.apache.camel
-logger.camel.level=INFO
-
-logger.camel-smb.name=org.apache.camel.component.smb
-logger.camel-smb.level=DEBUG
\ No newline at end of file
+#logger.camel-smb.name=org.apache.camel.component.smb
+#logger.camel-smb.level=DEBUG
\ No newline at end of file
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SmbEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SmbEndpointBuilderFactory.java
index 8d28700b7ad..fe2afc7a0d6 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SmbEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SmbEndpointBuilderFactory.java
@@ -48,7 +48,6 @@ public interface SmbEndpointBuilderFactory {
          * 
          * The option is a: <code>java.lang.String</code> type.
          * 
-         * Required: true
          * Group: common
          * 
          * @param path the value to set
@@ -910,7 +909,6 @@ public interface SmbEndpointBuilderFactory {
          * 
          * The option is a: <code>java.lang.String</code> type.
          * 
-         * Required: true
          * Group: common
          * 
          * @param path the value to set
@@ -965,6 +963,42 @@ public interface SmbEndpointBuilderFactory {
             doSetProperty("autoCreate", autoCreate);
             return this;
         }
+        /**
+         * Whether or not to disconnect from remote SMB server right after use.
+         * Disconnect will only disconnect the current connection to the SMB
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer route instead.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         * 
+         * @param disconnect the value to set
+         * @return the dsl builder
+         */
+        default SmbEndpointProducerBuilder disconnect(boolean disconnect) {
+            doSetProperty("disconnect", disconnect);
+            return this;
+        }
+        /**
+         * Whether or not to disconnect from remote SMB server right after use.
+         * Disconnect will only disconnect the current connection to the SMB
+         * server. If you have a consumer which you want to stop, then you need
+         * to stop the consumer route instead.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         * 
+         * @param disconnect the value to set
+         * @return the dsl builder
+         */
+        default SmbEndpointProducerBuilder disconnect(String disconnect) {
+            doSetProperty("disconnect", disconnect);
+            return this;
+        }
         /**
          * What action to take if the SMB file already exists.
          * 
@@ -1238,7 +1272,6 @@ public interface SmbEndpointBuilderFactory {
          * 
          * The option is a: <code>java.lang.String</code> type.
          * 
-         * Required: true
          * Group: common
          * 
          * @param path the value to set

Reply via email to