/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * http://www.dspace.org/license/ */ package org.dspace.app.util; import java.sql.SQLException; import java.sql.Timestamp; import java.util.Date; import org.dspace.app.util.factory.UtilServiceFactory; import org.dspace.app.util.service.WebAppService; import org.dspace.core.ConfigurationManager; import org.dspace.core.Context; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Represent a DSpace application while it is running. This helps us report * which applications *are* running, by exposing a record that can be viewed * externally. * * @author mwood */ abstract public class AbstractDSpaceWebapp implements DSpaceWebappMXBean { private static final Logger log = LoggerFactory.getLogger(AbstractDSpaceWebapp.class); protected final WebAppService webAppService = UtilServiceFactory.getInstance().getWebAppService(); protected String kind; protected Date started; protected String url; protected WebApp webApp; /** Prevent null instantiation. */ protected AbstractDSpaceWebapp() { } /** * Construct a particular kind of DSpace application. * * @param kind what kind of application is this? (XMLUI, JSPUI, etc.) */ public AbstractDSpaceWebapp(String kind) { this.kind = kind; started = new Date(); url = ConfigurationManager.getProperty("dspace.url"); if (null == url) { throw new IllegalStateException("dspace.url is undefined"); } } /** Record that this application is running. */ public void register() { // Create the database entry Timestamp now = new Timestamp(started.getTime()); try { Context context = new Context(); webApp = webAppService.create(context, kind, url, now, isUI() ? 1 : 0); context.complete(); } catch (SQLException e) { log.error("Failed to record startup in Webapp table.", e); } } /** Record that this application is not running. */ public void deregister() { // Remove the database entry try { Context context = new Context(); webAppService.delete(context, webApp); context.complete(); } catch (SQLException e) { log.error("Failed to record shutdown in Webapp table.", e); } } @Override public String getKind() { return kind; } @Override public String getURL() { return url; } @Override public String getStarted() { return started.toString(); } }