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 48f0448f54a CAMEL-18425: camel-cli - Make regular Camel applications
work with Camel CLI
48f0448f54a is described below
commit 48f0448f54ad4f2df1802ba87b783a7758da5b1b
Author: Claus Ibsen <[email protected]>
AuthorDate: Sat Aug 27 09:00:32 2022 +0200
CAMEL-18425: camel-cli - Make regular Camel applications work with Camel CLI
---
.../java/org/apache/camel/spi/CliConnector.java | 26 +++++++++++++++
.../org/apache/camel/spi/CliConnectorFactory.java | 2 +-
.../camel/cli/connector/LocalCliConnector.java | 39 ++++++++++++++++------
3 files changed, 55 insertions(+), 12 deletions(-)
diff --git
a/core/camel-api/src/main/java/org/apache/camel/spi/CliConnector.java
b/core/camel-api/src/main/java/org/apache/camel/spi/CliConnector.java
index 3baf3ae682a..ded99a33e06 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/CliConnector.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/CliConnector.java
@@ -1,8 +1,34 @@
+/*
+ * 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.spi;
import org.apache.camel.NonManagedService;
import org.apache.camel.StaticService;
+/**
+ * Local {@link CliConnector} that allows Camel CLI to manage local running
Camel integrations.
+ */
public interface CliConnector extends StaticService, NonManagedService {
+ /**
+ * Signal to terminate Camel and the JVM.
+ *
+ * The Camel CLI can trigger this by the command: camel stop PID
+ */
+ void sigterm();
+
}
diff --git
a/core/camel-api/src/main/java/org/apache/camel/spi/CliConnectorFactory.java
b/core/camel-api/src/main/java/org/apache/camel/spi/CliConnectorFactory.java
index 2a3710e1f03..e3caf59c108 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/CliConnectorFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/CliConnectorFactory.java
@@ -21,7 +21,7 @@ import org.apache.camel.Service;
/**
* Factory for creating connector to CLI tooling.
* <p/>
- * Such as a local connector that allows Camel CLI to manage local running
Camel integrations.
+ * Such as a local {@link CliConnector} that allows Camel CLI to manage local
running Camel integrations.
*/
public interface CliConnectorFactory {
diff --git
a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
index 7a3ca9fc88c..f1b557df341 100644
---
a/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
+++
b/dsl/camel-cli-connector/src/main/java/org/apache/camel/cli/connector/LocalCliConnector.java
@@ -22,6 +22,7 @@ import java.util.Locale;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
@@ -31,6 +32,7 @@ import org.apache.camel.health.HealthCheck;
import org.apache.camel.health.HealthCheckHelper;
import org.apache.camel.spi.CliConnector;
import org.apache.camel.spi.CliConnectorFactory;
+import org.apache.camel.support.service.ServiceHelper;
import org.apache.camel.support.service.ServiceSupport;
import org.apache.camel.util.FileUtil;
import org.apache.camel.util.IOHelper;
@@ -51,6 +53,7 @@ public class LocalCliConnector extends ServiceSupport
implements CliConnector, C
private String platform;
private String platformVersion;
private String mainClass;
+ private final AtomicBoolean terminating = new AtomicBoolean();
private ScheduledExecutorService executor;
private File lockFile;
private File statusFile;
@@ -67,6 +70,8 @@ public class LocalCliConnector extends ServiceSupport
implements CliConnector, C
@Override
protected void doStart() throws Exception {
+ terminating.set(false);
+
// what platform are we running
CliConnectorFactory ccf =
camelContext.adapt(ExtendedCamelContext.class).getCliConnectorFactory();
mainClass = ccf.getRuntimeStartClass();
@@ -112,19 +117,31 @@ public class LocalCliConnector extends ServiceSupport
implements CliConnector, C
}
}
+ @Override
+ public void sigterm() {
+ // we are terminating
+ terminating.set(true);
+
+ try {
+ camelContext.stop();
+ } finally {
+ if (lockFile != null) {
+ FileUtil.deleteFile(lockFile);
+ }
+ if (statusFile != null) {
+ FileUtil.deleteFile(statusFile);
+ }
+ ServiceHelper.stopAndShutdownService(this);
+ }
+ }
+
protected void statusTask() {
- // if the lock file is deleted then stop
+ if (terminating.get()) {
+ return; // terminating in progress
+ }
if (!lockFile.exists()) {
- try {
- camelContext.stop();
- } finally {
- if (lockFile != null) {
- FileUtil.deleteFile(lockFile);
- }
- if (statusFile != null) {
- FileUtil.deleteFile(statusFile);
- }
- }
+ // if the lock file is deleted then stop
+ sigterm();
return;
}
try {