/** * This Source Code Form is subject to the terms of the Mozilla Public License, * v. 2.0. If a copy of the MPL was not distributed with this file, You can * obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under * the terms of the Healthcare Disclaimer located at http://openmrs.org/license. * * Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS * graphic logo is a trademark of OpenMRS Inc. */ package org.openmrs.web; import javax.servlet.ServletContext; import org.openmrs.api.context.Context; import org.openmrs.api.context.Daemon; import org.openmrs.module.ModuleException; import org.openmrs.util.DatabaseUpdateException; import org.openmrs.util.InputRequiredException; /** * This class provides {@link Daemon} functionality in a web context. * * @since 1.9 */ public class WebDaemon extends Daemon { /** * Start openmrs in a new thread that is authenticated as the daemon user. * * @param servletContext the servlet context. */ public static void startOpenmrs(final ServletContext servletContext) throws DatabaseUpdateException, InputRequiredException { // create a new thread and start openmrs in it. DaemonThread startOpenmrsThread = new DaemonThread() { @Override public void run() { isDaemonThread.set(true); try { Listener.startOpenmrs(servletContext); } catch (Exception e) { exceptionThrown = e; } finally { Context.closeSession(); } } }; startOpenmrsThread.start(); // wait for the "startOpenmrs" thread to finish try { startOpenmrsThread.join(); } catch (InterruptedException e) { // ignore } if (startOpenmrsThread.getExceptionThrown() != null) { throw new ModuleException("Unable to start OpenMRS. Error thrown was: " + startOpenmrsThread.getExceptionThrown().getMessage(), startOpenmrsThread.getExceptionThrown()); } } }