All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.sourceforge.squirrel_sql.client.session.SessionConnectionKeepAlive Maven / Gradle / Ivy

/*
 * Copyright (C) 2009 Rob Manning
 * [email protected]
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package net.sourceforge.squirrel_sql.client.session;

import java.sql.Statement;

import net.sourceforge.squirrel_sql.fw.sql.ISQLConnection;
import net.sourceforge.squirrel_sql.fw.sql.SQLUtilities;
import net.sourceforge.squirrel_sql.fw.util.Utilities;
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;

/**
 * This class will loop continuously, pausing for a configurable amount of time and executing a configurable
 * SQL statement against a given SQLConnection.
 */
public class SessionConnectionKeepAlive implements Runnable
{
	/** Logger for this class. */
	private static final ILogger s_log = LoggerController.createLogger(SessionConnectionKeepAlive.class);

	private final long sleepMillis;

	private final ISQLConnection sqlConn;

	private final String sql;

	private volatile boolean isStopped = false;

	private final String aliasName;
	
	public SessionConnectionKeepAlive(ISQLConnection con, long sleepMillis, String sql, String aliasName)
	{
		if (sleepMillis < 1000) { 
			throw new IllegalArgumentException("Sleep time must be at least 1000ms(1 second)"); 
		}
		this.sleepMillis = sleepMillis;
		Utilities.checkNull("SessionConnectionKeepAlive", "con", con, "sql", sql);
		sqlConn = con;
		this.sql = sql;
		this.aliasName = aliasName;
	}

	public void setStopped(boolean isStopped)
	{
		this.isStopped = isStopped;
	}

	@Override
	public void run()
	{
		while (!isStopped)
		{
			Statement stmt = null;
			try
			{
				stmt = sqlConn.createStatement();
				if (s_log.isInfoEnabled()) {
					s_log.info("SessionConnectionKeepAlive ("+aliasName+") running SQL: "+sql);
				}
				stmt.executeQuery(sql);
			}
			catch (Throwable t)
			{
				s_log.error("run: unexpected exception while executing sql (" + sql + "): " + t.getMessage(), t);
			}
			finally
			{
				SQLUtilities.closeStatement(stmt);
			}
			// Always sleep at the end of the loop. In case we are stopped, we want to know that
			// immediately before executing the sql statement.
			Utilities.sleep(sleepMillis);
		}

	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy