diff --git a/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrConsumer.java b/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrConsumer.java index 63d628337de80..c01cb229b8e6b 100644 --- a/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrConsumer.java +++ b/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrConsumer.java @@ -18,7 +18,6 @@ import java.util.Arrays; import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import javax.jcr.RepositoryException; @@ -40,7 +39,7 @@ public class JcrConsumer extends DefaultConsumer { private Session session; private EventListener eventListener; - private ScheduledFuture sessionListenerCheckerScheduledFuture; + private ScheduledExecutorService sessionListenerCheckerExecutor; public JcrConsumer(JcrEndpoint endpoint, Processor processor) { super(endpoint, processor); @@ -157,20 +156,23 @@ private void unregisterListenerAndLogoutSession() throws RepositoryException { } private void cancelSessionListenerChecker() { - if (sessionListenerCheckerScheduledFuture != null) { - sessionListenerCheckerScheduledFuture.cancel(true); + if (sessionListenerCheckerExecutor != null) { + getJcrEndpoint().getCamelContext().getExecutorServiceManager() + .shutdownNow(sessionListenerCheckerExecutor); + sessionListenerCheckerExecutor = null; } } private void scheduleSessionListenerChecker() { String name = "JcrConsumerSessionChecker[" + getJcrEndpoint().getEndpointConfiguredDestinationName() + "]"; - ScheduledExecutorService executor = getJcrEndpoint().getCamelContext().getExecutorServiceManager() + sessionListenerCheckerExecutor = getJcrEndpoint().getCamelContext().getExecutorServiceManager() .newSingleThreadScheduledExecutor(this, name); JcrConsumerSessionListenerChecker sessionListenerChecker = new JcrConsumerSessionListenerChecker(); long sessionLiveCheckIntervalOnStart = JcrConsumer.this.getJcrEndpoint().getSessionLiveCheckIntervalOnStart(); long sessionLiveCheckInterval = JcrConsumer.this.getJcrEndpoint().getSessionLiveCheckInterval(); - sessionListenerCheckerScheduledFuture = executor.scheduleWithFixedDelay(sessionListenerChecker, - sessionLiveCheckIntervalOnStart, sessionLiveCheckInterval, TimeUnit.MILLISECONDS); + sessionListenerCheckerExecutor.scheduleWithFixedDelay( + sessionListenerChecker, sessionLiveCheckIntervalOnStart, sessionLiveCheckInterval, + TimeUnit.MILLISECONDS); } private class JcrConsumerSessionListenerChecker implements Runnable { diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java index 8224c736f6931..7766a18ab09e1 100644 --- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java +++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/SalesforceComponent.java @@ -963,7 +963,8 @@ static SalesforceHttpClient createHttpClient( int workerPoolMaxSize) { SecurityUtils.adaptToIBMCipherNames(sslContextFactory); - final SalesforceHttpClient httpClient = new SalesforceHttpClient( + // ExecutorService lifecycle is managed by SalesforceHttpClient + final SalesforceHttpClient httpClient = new SalesforceHttpClient( // NOSONAR context, context.getExecutorServiceManager().newThreadPool(source, "SalesforceHttpClient", workerPoolSize, workerPoolMaxSize), sslContextFactory); diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/AggregateReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/AggregateReifier.java index 55f2a12c05344..d3f2f4744e675 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/AggregateReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/AggregateReifier.java @@ -76,6 +76,8 @@ protected AggregateProcessor createAggregator() throws Exception { boolean parallel = parseBoolean(definition.getParallelProcessing(), false); boolean shutdownThreadPool = willCreateNewThreadPool(definition, parallel); + // ExecutorService lifecycle is managed by AggregateProcessor via shutdownThreadPool flag + @SuppressWarnings("java:S2095") ExecutorService threadPool = getConfiguredExecutorService("Aggregator", definition, parallel); if (threadPool == null && !parallel) { // executor service is mandatory for the Aggregator diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ThreadsReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ThreadsReifier.java index 67db283c8f555..62636c656649c 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ThreadsReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ThreadsReifier.java @@ -43,6 +43,8 @@ public Processor createProcessor() throws Exception { } // prefer any explicit configured executor service boolean shutdownThreadPool = willCreateNewThreadPool(definition, true); + // ExecutorService lifecycle is managed by ThreadsProcessor via shutdownThreadPool flag + @SuppressWarnings("java:S2095") ExecutorService threadPool = getConfiguredExecutorService(name, definition, false); // resolve what rejected policy to use diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/main/java/org/apache/camel/dsl/yaml/validator/CamelYamlParser.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/main/java/org/apache/camel/dsl/yaml/validator/CamelYamlParser.java index b8444f4b30bd3..bf2975578880f 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/main/java/org/apache/camel/dsl/yaml/validator/CamelYamlParser.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/main/java/org/apache/camel/dsl/yaml/validator/CamelYamlParser.java @@ -50,12 +50,10 @@ public class CamelYamlParser { public List parse(File file) throws Exception { - CamelContext camelContext = null; - try { - DefaultRegistry registry = new DefaultRegistry(); - registry.addBeanRepository(new StubBeanRepository("*")); + DefaultRegistry registry = new DefaultRegistry(); + registry.addBeanRepository(new StubBeanRepository("*")); - camelContext = new DefaultCamelContext(registry); + try (CamelContext camelContext = new DefaultCamelContext(registry)) { camelContext.setAutoStartup(false); camelContext.getCamelContextExtension().addContextPlugin(ComponentResolver.class, (name, context) -> new StubComponent()); @@ -101,10 +99,6 @@ public List parse(File file) throws Exception { ValidationMessage vm = ValidationMessage.builder().type("parser") .messageSupplier(() -> e.getClass().getName() + ": " + e.getMessage()).build(); return List.of(vm); - } finally { - if (camelContext != null) { - camelContext.stop(); - } } } diff --git a/pom.xml b/pom.xml index 994f1d1d320a1..84310ee4e2a1e 100644 --- a/pom.xml +++ b/pom.xml @@ -120,6 +120,8 @@ 2026-02-17T16:11:10Z + + ${jdk.version} diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelWriterGeneratorMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelWriterGeneratorMojo.java index 4ccebcfaa24af..276208ad04618 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelWriterGeneratorMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelWriterGeneratorMojo.java @@ -113,13 +113,17 @@ String getModelPackage() { abstract String getWriterPackage(); protected String generateWriter() throws MojoExecutionException { - ClassLoader classLoader; - try { - classLoader = DynamicClassLoader.createDynamicClassLoader(project.getCompileClasspathElements()); + try (DynamicClassLoader classLoader + = DynamicClassLoader.createDynamicClassLoader(project.getCompileClasspathElements())) { + return doGenerateWriter(classLoader); } catch (DependencyResolutionRequiredException e) { throw new MojoExecutionException("DependencyResolutionRequiredException: " + e.getMessage(), e); + } catch (IOException e) { + throw new MojoExecutionException("IOException: " + e.getMessage(), e); } + } + private String doGenerateWriter(ClassLoader classLoader) throws MojoExecutionException { List jsonFiles; try (Stream stream = PackageHelper.findJsonFiles(modelDir.toPath())) { jsonFiles = stream.toList();