+++ /dev/null
-package org.argeo.cms.internal.kernel;
-
-import org.argeo.api.cms.CmsLog;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.FrameworkEvent;
-import org.osgi.framework.FrameworkUtil;
-import org.osgi.framework.launch.Framework;
-
-/** Shutdowns the OSGi framework */
-class CmsShutdown extends Thread {
- public final int EXIT_OK = 0;
- public final int EXIT_ERROR = 1;
- public final int EXIT_TIMEOUT = 2;
- public final int EXIT_UNKNOWN = 3;
-
- private final CmsLog log = CmsLog.getLog(CmsShutdown.class);
- // private final BundleContext bc =
- // FrameworkUtil.getBundle(CmsShutdown.class).getBundleContext();
- private final Framework framework;
-
- /** Shutdown timeout in ms */
- private long timeout = 10 * 60 * 1000;
-
- public CmsShutdown() {
- super("CMS Shutdown Hook");
- framework = FrameworkUtil.getBundle(CmsShutdown.class) != null
- ? (Framework) FrameworkUtil.getBundle(CmsShutdown.class).getBundleContext().getBundle(0)
- : null;
- }
-
- @Override
- public void run() {
- if (framework != null && framework.getState() != Bundle.ACTIVE) {
- return;
- }
-
- if (log.isDebugEnabled())
- log.debug("Shutting down OSGi framework...");
- try {
- 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();
- log.error("Unexpected exception " + e + " in shutdown hook. " + " Forcibly terminating the JVM...");
- Runtime.getRuntime().halt(EXIT_UNKNOWN);
- }
- }
-
-}