//----------------------------BEGIN LICENSE----------------------------
/*
* Willow : the Open Source WorkFlow Project
* Distributable under GNU LGPL license by gun.org
*
* Copyright (C) 2004-2010 huihoo.org
* Copyright (C) 2004-2010 ZosaTapo <dertyang@hotmail.com>
*
* ====================================================================
* Project Homepage : http://www.huihoo.org/willow
* Source Forge : http://sourceforge.net/projects/huihoo
* Mailing list : willow@lists.sourceforge.net
*/
//----------------------------END LICENSE-----------------------------
package org.huihoo.workflow.impl.monitor;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.huihoo.workflow.store.CaseDatabase;
import org.huihoo.workflow.store.SchemaContext;
import org.huihoo.workflow.runtime.Constants;
import org.huihoo.workflow.runtime.WorkflowService;
import com.zosatapo.commons.store.ConnUtils;
/**
* @author reic
*
* To change the template for this generated type comment go to
* Window - Preferences - Java - Code Generation - Code and Comments
*/
public class LitterCleaner
{
private static Log log =LogFactory.getLog(LitterCleaner.class);
public static void clear(WorkflowService workflowService)
{
CaseDatabase caseDatabase = workflowService.getCaseDatabase();
Connection conn = null;
String strSQL = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
PreparedStatement pstmt1 = null;
PreparedStatement pstmt2 = null;
if(caseDatabase!=null && caseDatabase.getStore()==null)
{
return;
}
try
{
conn = ConnUtils.getConnection(caseDatabase.getStore());
strSQL =
"SELECT vc_packageid,vc_processid,vc_uuid FROM "
+ caseDatabase.getSchemaContext().getTableName(SchemaContext.SCHEMA_CASE)
+ " "
+ "WHERE int_status=? OR int_status=?";
pstmt=conn.prepareStatement(strSQL);
pstmt.setInt(1,Constants.CASE_STATUS_CLOSED);
pstmt.setInt(2,Constants.CASE_STATUS_CANCELED);
rs=pstmt.executeQuery();
String strSQL1 =
"DELETE FROM "
+ caseDatabase.getSchemaContext().getTableName(SchemaContext.SCHEMA_CASE_DATAFIELD)
+ " "
+ "WHERE vc_packageId=? "
+ "AND vc_processid=? "
+ "AND vc_caseid=?";
String strSQL2 =
"DELETE FROM "
+ caseDatabase.getSchemaContext().getTableName(SchemaContext.SCHEMA_ACTIVITY_DISPATCH)
+ " "
+ "WHERE vc_packageId=? "
+ "AND vc_processid=? "
+ "AND vc_caseid=?";
pstmt1 = conn.prepareStatement(strSQL1);
pstmt2 = conn.prepareStatement(strSQL2);
while(rs.next())
{
pstmt1.setString(1, rs.getString("vc_packageId"));
pstmt1.setString(2, rs.getString("vc_processid"));
pstmt1.setString(3, rs.getString("vc_uuid"));
pstmt1.executeUpdate();
pstmt2.setString(1, rs.getString("vc_packageId"));
pstmt2.setString(2, rs.getString("vc_processid"));
pstmt2.setString(3, rs.getString("vc_uuid"));
pstmt2.executeUpdate();
}
}
catch (Throwable t)
{
log.error("Exception invoking periodic operation: ", t);
}
finally
{
ConnUtils.cleanupNoThrow(pstmt1);
ConnUtils.cleanupNoThrow(pstmt2);
ConnUtils.cleanupNoThrow(conn,pstmt);
}
}
}