X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FCmsShutdown.java;h=bfc58501c48ee1b4c0b8f5766524b6c4d18ccb9e;hb=9ec85110269f8be5c83ea26e283359bb451a67b7;hp=a62ee7f10a541d3ce035bf2003bc0148e8d12a84;hpb=5b5c2b97eee9edd037e198acadf8b416a973863f;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsShutdown.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsShutdown.java index a62ee7f10..bfc58501c 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsShutdown.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsShutdown.java @@ -1,11 +1,8 @@ package org.argeo.cms.internal.kernel; -import java.io.IOException; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkEvent; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.launch.Framework; @@ -27,38 +24,42 @@ class CmsShutdown extends Thread { public CmsShutdown() { super("CMS Shutdown Hook"); - framework = (Framework) FrameworkUtil.getBundle(CmsShutdown.class).getBundleContext().getBundle(0); + framework = FrameworkUtil.getBundle(CmsShutdown.class) != null + ? (Framework) FrameworkUtil.getBundle(CmsShutdown.class).getBundleContext().getBundle(0) + : null; } @Override public void run() { - if (framework.getState() != Bundle.ACTIVE) { + if (framework != null && framework.getState() != Bundle.ACTIVE) { return; } - + if (log.isDebugEnabled()) log.debug("Shutting down OSGi framework..."); try { - // shutdown framework - framework.stop(); - // wait for shutdown - FrameworkEvent shutdownEvent = framework.waitForStop(timeout); - int stoppedType = shutdownEvent.getType(); - Runtime runtime = Runtime.getRuntime(); - if (stoppedType == FrameworkEvent.STOPPED) { - // close VM - //System.exit(EXIT_OK); - } else if (stoppedType == FrameworkEvent.ERROR) { - log.error("The OSGi framework stopped with an error"); - runtime.halt(EXIT_ERROR); - } else if (stoppedType == FrameworkEvent.WAIT_TIMEDOUT) { - log.error("The OSGi framework hasn't stopped after " + timeout + "ms." - + " Forcibly terminating the JVM..."); - runtime.halt(EXIT_TIMEOUT); - } else { - log.error("Unknown state of OSGi framework after " + timeout + "ms." - + " Forcibly terminating the JVM... (" + shutdownEvent + ")"); - runtime.halt(EXIT_UNKNOWN); + if (framework != null) { + // shutdown framework + framework.stop(); + // wait for shutdown + FrameworkEvent shutdownEvent = framework.waitForStop(timeout); + int stoppedType = shutdownEvent.getType(); + Runtime runtime = Runtime.getRuntime(); + if (stoppedType == FrameworkEvent.STOPPED) { + // close VM + // System.exit(EXIT_OK); + } else if (stoppedType == FrameworkEvent.ERROR) { + log.error("The OSGi framework stopped with an error"); + runtime.halt(EXIT_ERROR); + } else if (stoppedType == FrameworkEvent.WAIT_TIMEDOUT) { + log.error("The OSGi framework hasn't stopped after " + timeout + "ms." + + " Forcibly terminating the JVM..."); + runtime.halt(EXIT_TIMEOUT); + } else { + log.error("Unknown state of OSGi framework after " + timeout + "ms." + + " Forcibly terminating the JVM... (" + shutdownEvent + ")"); + runtime.halt(EXIT_UNKNOWN); + } } } catch (Exception e) { e.printStackTrace();