You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2016/06/21 19:12:43 UTC
karaf git commit: [KARAF-4569] OSGi framework is not shut-down
gracefully on SIGTERM
Repository: karaf
Updated Branches:
refs/heads/karaf-4.0.x f2026c5b3 -> f2ad08df8
[KARAF-4569] OSGi framework is not shut-down gracefully on SIGTERM
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/f2ad08df
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/f2ad08df
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/f2ad08df
Branch: refs/heads/karaf-4.0.x
Commit: f2ad08df8f3dd06384964ccdbc1db53f915e43a0
Parents: f2026c5
Author: lburgazzoli <lb...@gmail.com>
Authored: Mon Jun 13 20:08:10 2016 +0200
Committer: Jean-Baptiste Onofr� <jb...@apache.org>
Committed: Tue Jun 21 21:12:24 2016 +0200
----------------------------------------------------------------------
.../main/java/org/apache/karaf/main/Main.java | 37 ++++++++++++++++++--
1 file changed, 35 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/f2ad08df/main/src/main/java/org/apache/karaf/main/Main.java
----------------------------------------------------------------------
diff --git a/main/src/main/java/org/apache/karaf/main/Main.java b/main/src/main/java/org/apache/karaf/main/Main.java
index 7f9bfff..9498082 100644
--- a/main/src/main/java/org/apache/karaf/main/Main.java
+++ b/main/src/main/java/org/apache/karaf/main/Main.java
@@ -23,6 +23,9 @@ import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
import java.net.URI;
import java.net.URL;
import java.net.URLClassLoader;
@@ -30,12 +33,11 @@ import java.security.Provider;
import java.security.Security;
import java.util.ArrayList;
import java.util.List;
-import org.apache.felix.utils.properties.Properties;
-
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.apache.felix.utils.properties.Properties;
import org.apache.karaf.info.ServerInfo;
import org.apache.karaf.main.lock.Lock;
import org.apache.karaf.main.lock.LockCallBack;
@@ -320,6 +322,37 @@ public class Main {
new StartupListener(LOG, framework.getBundleContext());
}
monitor();
+ registerSignalHandler();
+ }
+
+ private void registerSignalHandler() {
+ if (!Boolean.valueOf(System.getProperty("karaf.handle.sigterm", "true"))) {
+ return;
+ }
+
+ try {
+ final Class<?> signalClass = Class.forName("sun.misc.Signal");
+ final Class<?> signalHandlerClass = Class.forName("sun.misc.SignalHandler");
+
+ Object signalHandler = Proxy.newProxyInstance(getClass().getClassLoader(),
+ new Class<?>[] {
+ signalHandlerClass
+ },
+ new InvocationHandler() {
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ Main.this.destroy();
+ return null;
+ }
+ }
+ );
+
+ signalClass.getMethod("handle", signalClass, signalHandlerClass).invoke(
+ null,
+ signalClass.getConstructor(String.class).newInstance("TERM"),
+ signalHandler
+ );
+ } catch (Exception e) {
+ }
}
private void monitor() {