Project

General

Profile

1
/**
2
 *  '$RCSfile$'
3
 *    Purpose: A Class that manages database access of scheduled task 
4
 *             information.
5
 *  Copyright: 2009 Regents of the University of California and the
6
 *             National Center for Ecological Analysis and Synthesis
7
 *    Authors: Michael Daigle
8
 * 
9
 *   '$Author: daigle $'
10
 *     '$Date: 2009-03-23 13:56:56 -0800 (Mon, 23 Mar 2009) $'
11
 * '$Revision: 4854 $'
12
 *
13
 * This program is free software; you can redistribute it and/or modify
14
 * it under the terms of the GNU General Public License as published by
15
 * the Free Software Foundation; either version 2 of the License, or
16
 * (at your option) any later version.
17
 *
18
 * This program is distributed in the hope that it will be useful,
19
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21
 * GNU General Public License for more details.
22
 *
23
 * You should have received a copy of the GNU General Public License
24
 * along with this program; if not, write to the Free Software
25
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
26
 */
27

    
28
package edu.ucsb.nceas.metacat.scheduler;
29

    
30
import java.sql.PreparedStatement;
31
import java.sql.ResultSet;
32
import java.sql.SQLException;
33
import java.sql.Timestamp;
34
import java.util.Calendar;
35
import java.util.Hashtable;
36

    
37
import org.apache.log4j.Logger;
38
import org.quartz.Job;
39

    
40
import edu.ucsb.nceas.shared.AccessException;
41
import edu.ucsb.nceas.shared.BaseAccess;
42

    
43
public class ScheduledJobAccess extends BaseAccess {
44
	
45
	private Logger logMetacat = Logger.getLogger(ScheduledJobAccess.class);
46
	
47
	public ScheduledJobAccess() throws AccessException {
48
		super("ScheduledJobAccess");
49
	}
50
	
51
	public ScheduledJobDAO getJobByName(String jobName) throws AccessException {
52
		ScheduledJobDAO jobDAO = null;
53

    
54
		try {
55
			String sql = "SELECT * FROM scheduled_job WHERE name = ? "; 
56
			PreparedStatement pstmt = conn.prepareStatement(sql);
57

    
58
			pstmt.setString(1, jobName);
59
			
60
			logMetacat.info("SQL getJobByName - " + sql);
61
			logMetacat.info("SQL params: [" + jobName + "]");
62
			
63
			pstmt.execute();
64
			
65
			ResultSet resultSet = pstmt.getResultSet();
66
			if(resultSet.next()) {
67
				jobDAO = new ScheduledJobDAO();
68
				jobDAO.setId(resultSet.getLong("id"));
69
				jobDAO.setCreateTime(resultSet.getTimestamp("date_created"));
70
				jobDAO.setModTime(resultSet.getTimestamp("date_updated"));
71
				jobDAO.setStatus(resultSet.getString("status"));
72
				jobDAO.setName(resultSet.getString("name"));
73
				jobDAO.setTriggerName(resultSet.getString("trigger_name"));
74
				jobDAO.setTriggerName(resultSet.getString("group_name"));
75
				jobDAO.setClassName(resultSet.getString("class_name"));
76
				jobDAO.setStartTime(resultSet.getTimestamp("start_time"));
77
				jobDAO.setInterval(resultSet.getInt("interval"));
78
			}
79
			
80
		} catch (SQLException sqle) {
81
			throw new AccessException("ScheduledJobAccess.getJobByName - SQL error when getting scheduled job by name: " 
82
					+ jobName  + " : "  + sqle.getMessage());
83
		}	
84
		
85
		return jobDAO;		
86
	}
87
	
88
	public void createJob(String name, Class<Job> jobClass, Calendar startTime, int interval, Hashtable<String, String> jobParams) throws AccessException {
89
		ScheduledJobDAO jobDAO = new ScheduledJobDAO();
90
		jobDAO.setStatus(ScheduledJobInterface.STATE_SCHEDULED);
91
		jobDAO.setName(name);
92
		jobDAO.setClassName(jobClass.getName());
93
		jobDAO.setStartTime(new Timestamp(startTime.getTimeInMillis()));
94
		jobDAO.setInterval(interval);
95
		
96
		createJob(jobDAO, jobParams);
97
	}
98
		
99
	public void createJob(ScheduledJobDAO jobDAO, Hashtable<String, String> jobParams) throws AccessException {			
100
		try {
101
			String sql = 
102
				"INSERT INTO scheduled_job (date_created, date_updated, status, name, class_name, start_time, interval) " 
103
				+ "VALUES(now(), now(), ?, ?, ?, ?, ?)";		
104
			PreparedStatement pstmt = conn.prepareStatement(sql);
105
		
106
			pstmt.setString(1, jobDAO.getStatus());
107
			pstmt.setString(2, jobDAO.getName());
108
			pstmt.setString(3, jobDAO.getClassName());
109
			pstmt.setTimestamp(4, jobDAO.getStartTime());
110
			pstmt.setInt(5, jobDAO.getInterval());
111
			
112
			logMetacat.info("SQL createJob - " + sql);
113
			logMetacat.info("SQL params:  [" + jobDAO.getStatus() + ","
114
					+ jobDAO.getName() + ","
115
					+ jobDAO.getClassName() + ",(Timestamp)"
116
					+ jobDAO.getStartTime().toString() + ","
117
					+ jobDAO.getInterval() + "]");
118
			pstmt.execute();
119
			
120
		} catch (SQLException sqle) {
121
			throw new AccessException("ScheduledJobAccess.createJob - SQL error when creating scheduled job " 
122
					+ jobDAO.getName()  + " : "  + sqle.getMessage());
123
		}	
124
		
125
		if (jobParams.size() > 0) {
126
			ScheduledJobParamsAccess scheduledJobParamsAccess = null;
127
			ScheduledJobDAO updatedJobDAO = null;
128
			try {
129
				updatedJobDAO = getJobByName(jobDAO.getName());
130
				scheduledJobParamsAccess = new ScheduledJobParamsAccess();
131
				scheduledJobParamsAccess.createJobParams(updatedJobDAO.getId(), jobParams);
132
			} catch (AccessException ae) {
133
				if (updatedJobDAO != null) {
134
					deleteJob(updatedJobDAO);
135
					scheduledJobParamsAccess.deleteJobParams(updatedJobDAO.getId());
136
				} else {
137
					logMetacat.warn("ScheduledJobAccess.createJob - Tried to delete non-existant scheduled job: " 
138
							+ jobDAO.getName());
139
				}
140
			}
141
		}
142
	}
143
	
144
	public void deleteJob(ScheduledJobDAO jobDAO) throws AccessException {	
145
		ScheduledJobParamsAccess scheduledJobParamsAccess = new ScheduledJobParamsAccess();
146
		
147
		if (jobDAO == null) {
148
			throw new AccessException("ScheduledJobAccess.deleteJob - job DAO cannot be null.");
149
		}
150
		scheduledJobParamsAccess.deleteJobParams(jobDAO.getId());
151
		
152
		try {
153
			String sql = "UPDATE scheduled_job SET status = ? WHERE id = ?";	
154
			pstmt.setString(1, ScheduledJobInterface.STATE_DELETED);
155
			pstmt.setLong(2, jobDAO.getId());
156
			
157
			logMetacat.info("ScheduledJobAccess.deleteJob - " + sql);
158
			
159
			logMetacat.info("SQL params:  [" + ScheduledJobInterface.STATE_DELETED + ","
160
					+ jobDAO.getId() + "]");
161

    
162
			pstmt.execute();
163
		} catch (SQLException sqle) {
164
			throw new AccessException("ScheduledJobAccess.deleteJob - SQL error when " 
165
					+ "deleting scheduled job " + jobDAO.getName()  + " : "  + sqle.getMessage());
166
		}			
167
	}
168
	
169
	public void updateJobStatus(ScheduledJobDAO jobDAO) throws AccessException {	
170
		
171
		if (jobDAO == null) {
172
			throw new AccessException("ScheduledJobAccess.updateJobStatus - job DAO cannot be null.");
173
		}
174
		
175
		try {
176
			String sql = "UPDATE scheduled_job SET status = ? WHERE id = ?";	
177
			pstmt.setString(1, jobDAO.getStatus());
178
			pstmt.setLong(2, jobDAO.getId());
179
			
180
			logMetacat.info("ScheduledJobAccess.deleteJob - " + sql);
181
			
182
			logMetacat.info("SQL params:  [" + jobDAO.getStatus() + ","
183
					+ jobDAO.getId() + "]");
184

    
185
			pstmt.execute();
186
		} catch (SQLException sqle) {
187
			throw new AccessException("ScheduledJobAccess.deleteJob - SQL error when " 
188
					+ "deleting scheduled job " + jobDAO.getName()  + " : "  + sqle.getMessage());
189
		}	
190
		
191
	}
192
	
193
}
(1-1/6)