/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.monitor.hib;
import java.util.Arrays;
import java.util.logging.Logger;
import org.geoserver.config.GeoServer;
import org.geoserver.config.GeoServerInitializer;
import org.geoserver.hibernate.HibUtil;
import org.geoserver.monitor.InternalHostname;
import org.geoserver.monitor.Monitor;
import org.geoserver.monitor.Query;
import org.geoserver.monitor.Query.Comparison;
import org.geoserver.monitor.RequestData;
import org.geoserver.monitor.RequestData.Status;
import org.geoserver.monitor.hib.HibernateMonitorDAO2;
import org.geotools.util.logging.Logging;
import org.hibernate.SessionFactory;
public class MonitorHibernateInitializer implements GeoServerInitializer {
static Logger LOGGER = Logging.getLogger(Monitor.class);
Monitor monitor;
public MonitorHibernateInitializer(Monitor monitor) {
this.monitor = monitor;
}
public void initialize(GeoServer geoServer) throws Exception {
if (!monitor.isEnabled()) return;
//special case for hibernate, we need to have a session in order to make this work
SessionFactory sessionFactory = null;
if (monitor.getDAO() instanceof HibernateMonitorDAO2) {
sessionFactory = ((HibernateMonitorDAO2)monitor.getDAO()).getSessionFactory();
HibUtil.setUpSession(sessionFactory);
}
try {
//clear out any requests that were left in an inconsistent state
Query query = new Query().filter("status",
Arrays.asList(Status.RUNNING, Status.WAITING, Status.CANCELLING), Comparison.IN);
for (RequestData data : monitor.getDAO().getRequests(query)) {
if (InternalHostname.get().equals(data.getInternalHost())) {
//mark start as INTERRUPTED
data.setStatus(Status.INTERRUPTED);
monitor.getDAO().save(data);
}
}
}
finally {
if (sessionFactory != null) {
HibUtil.tearDownSession(sessionFactory, null);
}
}
LOGGER.info("Monitor hibernate extension enabled");
}
}