head	1.3;
access;
symbols;
locks; strict;
comment	@# @;


1.3
date	2000.12.01.19.05.21;	author leonardr;	state dead;
branches;
next	1.2;

1.2
date	2000.12.01.16.25.01;	author edk;	state Exp;
branches;
next	1.1;

1.1
date	2000.11.30.23.56.41;	author leonardr;	state Exp;
branches;
next	;


desc
@@


1.3
log
@My side of the changes edk made.
@
text
@/* ================================================================
 * Copyright (c) 2000 CollabNet.  All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 * 
 * 1. Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * 
 * 2. Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * 
 * 3. The end-user documentation included with the redistribution, if
 * any, must include the following acknowlegement: "This product includes
 * software developed by CollabNet (http://www.Collab.Net/)."
 * Alternately, this acknowlegement may appear in the software itself, if
 * and wherever such third-party acknowlegements normally appear.
 * 
 * 4. The hosted project names must not be used to endorse or promote
 * products derived from this software without prior written
 * permission. For written permission, please contact info@@collab.net.
 * 
 * 5. Products derived from this software may not use the "Tigris" name
 * nor may "Tigris" appear in their names without prior written
 * permission of CollabNet.
 * 
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL COLLAB.NET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * ====================================================================
 * 
 * This software consists of voluntary contributions made by many
 * individuals on behalf of CollabNet.
 */


package org.tigris.helm.tool;

import java.sql.Connection;
import java.util.*;

import org.apache.turbine.services.db.PoolBrokerService;
import org.apache.turbine.util.db.pool.DBConnection;

import org.joist.database.DataManager;

import org.webmacro.util.Log;
import org.tigris.helm.tool.TigrisUpdate;
import org.tigris.helm.tool.HelmEmailer;

/**
 * HelmTaskRunner runs as a thread 
 *
 * <p>Access to the program is synchronized, so only one access at a
 * time. Hopefully this will prevent data corruption. 
 */
public class HelmTaskRunner extends Thread
{
    static public Log log = new Log("HTask", "Helm Task Runner");
    static private boolean debug = true;

    public void run()
    {        
        List tasksToRun = null;
        DBConnection dbConn = null;
        Connection connection = null;
        DataManager dMgr = new DataManager();
        while (true)
        {
            try 
            {
                dbConn = PoolBrokerService.getInstance().getConnection();
                connection = dbConn.getConnection();
                tasksToRun = TigrisTask.getTasks(connection, dMgr);
            } catch (Exception e) {
                log.exception(e);
            }
           
            if (tasksToRun.isEmpty())
            {
                try 
                {
                    if (dbConn != null)
                    {
                        PoolBrokerService.getInstance()
                            .releaseConnection(dbConn);
                    }
                } catch (Exception f) {
                    log.warning("Could not release connection.");
                }

                try 
                {
                    sleep(5000);
                } catch (InterruptedException e) {
                    //Do nothing.
                }
            } else { 
                try {
                    TigrisUpdate.runTasks(tasksToRun);
                } catch (UpdateException e) {
                    //Send email to the host admin(s).
                    String subject = "Update script failed.";
                    String body = 
                        "Execution of the following script failed: \n\n" 
                        + e.getMessage();
                    
                    HelmEmailer emailer = new 
                        HelmEmailer(connection, new DataManager());
                    emailer.sendError(subject, body);                        
                }
                
                try 
                {
                    if (dbConn != null)
                    {
                        PoolBrokerService.getInstance()
                            .releaseConnection(dbConn);
                    }
                } catch (Exception f) {
                    log.warning("Could not release connection.");
                }
            }
        }
    }
} /* end class QueueHandler */

@


1.2
log
@steps towards providing for different kinds of tasks.  if this pattern
is used, TigrisTask should probably be broken down into an abstract base
class and a HelmCommandTask (or somesuch) -- but this involves lots
of changes elsewhere.  HelmAnzuTask will be used for anzu mailing
list creation during project creation, though it's not being used
that way yet.
@
text
@@


1.1
log
@Mega patch which makes script data persistent and which provides a general framework for tasks to be run (which will be used by anzu eventually)
@
text
@d85 1
a85 2
                tasksToRun = TigrisTask.getTasksForComponent
                    (connection, dMgr, TigrisTask.HELM_COMPONENT);
@

