Quartz存储与持久化--mysql--建表

Quartz提供两种基本作业存储类型。

第一种类型叫做RAMJobStore。

第二种类型叫做JDBC作业存储。

在默认情况下Quartz将任务调度的运行信息保存在内存中,这种方法提供了最佳的性能,因为内存中数据访问最快。不足之处是缺乏数据的持久性,当程序路途停止或系统崩溃时,所有运行的信息都会丢失。

         比如我们希望安排一个执行100次的任务,如果执行到50次时系统崩溃了,系统重启时任务的执行计数器将从0开始。在大多数实际的应用中,我们往往并不需要保存任务调度的现场数据,因为很少需要规划一个指定执行次数的任务。对于仅执行一次的任务来说,其执行条件信息本身应该是已经持久化的业务数据(如锁定到期解锁任务,解锁的时间应该是业务数据),当执行完成后,条件信息也会相应改变。当然调度现场信息不仅仅是记录运行次数,还包括调度规则、JobDataMap中的数据等等。

        如果确实需要持久化任务调度信息,Quartz允许你通过调整其属性文件,将这些信息保存到数据库中。使用数据库保存任务调度信息后,即使系统崩溃后重新启动,任务的调度信息将得到恢复。如前面所说的例子,执行50次崩溃后重新运行,计数器将从51开始计数。使用了数据库保存信息的任务称为持久化任务。

对比

类型

优点

缺点

RAMJobStore

不要外部数据库,配置容易,运行速度快

因为调度程序信息是存储在被分配给JVM的内存里面,所以,当应用程序停止运行时,所有调度信息将被丢失。另外因为存储到JVM内存里面,所以可以存储多少个Job和Trigger将会受到限制

JDBC作业存储

支持集群,因为所有的任务信息都会保存到数据库中,可以控制事物,还有就是如果应用服务器关闭或者重启,任务信息都不会丢失,并且可以恢复因服务器关闭或者重启而导致执行失败的任务

运行速度的快慢取决与连接数据库的快慢

 1:建立数据存储表

因为需要把quartz的数据保存到数据库,所以要建立相关的数据库。这个可以从下载到的quartz包里面找到对应的sql脚本,目前可以支持mysql,DB2,oracle等主流的数据库,自己可以根据项目需要选择合适的脚本运行。

        我的项目是mysql的,就在数据中建立了一个quartzdb的database,因为我们用的是mysql,所以执行tables_mysql_innodb.sql脚本建表。其中脚本 文件位于:quartz-2.2.3\docs\dbTables(根据你Quartz放置的目录会不同)

2:里面就是quartz框架需要的表,因为我们用到的是mysql数据库,可以看驱动类StdJDBCDelegate.class:

quartz.properties:
# 驱动器方言 mysql驱动
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate

里面也就是jdbc 连接数据库 固定的sql语句、表

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.quartz.impl.jdbcjobstore;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.NotSerializableException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.math.BigDecimal;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.Map.Entry;
import org.quartz.Calendar;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.JobPersistenceException;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.JobDetailImpl;
import org.quartz.impl.jdbcjobstore.TriggerPersistenceDelegate.TriggerPropertyBundle;
import org.quartz.impl.matchers.GroupMatcher;
import org.quartz.impl.matchers.StringMatcher.StringOperatorName;
import org.quartz.impl.triggers.SimpleTriggerImpl;
import org.quartz.spi.ClassLoadHelper;
import org.quartz.spi.OperableTrigger;
import org.slf4j.Logger;

public class StdJDBCDelegate implements DriverDelegate, StdJDBCConstants {
    protected Logger logger = null;
    protected String tablePrefix = "QRTZ_";
    protected String instanceId;
    protected String schedName;
    protected boolean useProperties;
    protected ClassLoadHelper classLoadHelper;
    protected List<TriggerPersistenceDelegate> triggerPersistenceDelegates = new LinkedList();
    private String schedNameLiteral = null;

    public StdJDBCDelegate() {
    }

    public void initialize(Logger logger, String tablePrefix, String schedName, String instanceId, ClassLoadHelper classLoadHelper, boolean useProperties, String initString) throws NoSuchDelegateException {
        this.logger = logger;
        this.tablePrefix = tablePrefix;
        this.schedName = schedName;
        this.instanceId = instanceId;
        this.useProperties = useProperties;
        this.classLoadHelper = classLoadHelper;
        this.addDefaultTriggerPersistenceDelegates();
        if (initString != null) {
            String[] settings = initString.split("\\|");
            String[] arr$ = settings;
            int len$ = settings.length;

            for(int i$ = 0; i$ < len$; ++i$) {
                String setting = arr$[i$];
                String[] parts = setting.split("=");
                String name = parts[0];
                if (parts.length != 1 && parts[1] != null && !parts[1].equals("")) {
                    if (!name.equals("triggerPersistenceDelegateClasses")) {
                        throw new NoSuchDelegateException("Unknown setting: '" + name + "'");
                    }

                    String[] trigDelegates = parts[1].split(",");
                    String[] arr$ = trigDelegates;
                    int len$ = trigDelegates.length;

                    for(int i$ = 0; i$ < len$; ++i$) {
                        String trigDelClassName = arr$[i$];

                        try {
                            Class<?> trigDelClass = classLoadHelper.loadClass(trigDelClassName);
                            this.addTriggerPersistenceDelegate((TriggerPersistenceDelegate)trigDelClass.newInstance());
                        } catch (Exception var21) {
                            throw new NoSuchDelegateException("Error instantiating TriggerPersistenceDelegate of type: " + trigDelClassName, var21);
                        }
                    }
                }
            }

        }
    }

    protected void addDefaultTriggerPersistenceDelegates() {
        this.addTriggerPersistenceDelegate(new SimpleTriggerPersistenceDelegate());
        this.addTriggerPersistenceDelegate(new CronTriggerPersistenceDelegate());
        this.addTriggerPersistenceDelegate(new CalendarIntervalTriggerPersistenceDelegate());
        this.addTriggerPersistenceDelegate(new DailyTimeIntervalTriggerPersistenceDelegate());
    }

    protected boolean canUseProperties() {
        return this.useProperties;
    }

    public void addTriggerPersistenceDelegate(TriggerPersistenceDelegate delegate) {
        this.logger.debug("Adding TriggerPersistenceDelegate of type: " + delegate.getClass().getCanonicalName());
        delegate.initialize(this.tablePrefix, this.schedName);
        this.triggerPersistenceDelegates.add(delegate);
    }

    public TriggerPersistenceDelegate findTriggerPersistenceDelegate(OperableTrigger trigger) {
        Iterator i$ = this.triggerPersistenceDelegates.iterator();

        TriggerPersistenceDelegate delegate;
        do {
            if (!i$.hasNext()) {
                return null;
            }

            delegate = (TriggerPersistenceDelegate)i$.next();
        } while(!delegate.canHandleTriggerType(trigger));

        return delegate;
    }

    public TriggerPersistenceDelegate findTriggerPersistenceDelegate(String discriminator) {
        Iterator i$ = this.triggerPersistenceDelegates.iterator();

        TriggerPersistenceDelegate delegate;
        do {
            if (!i$.hasNext()) {
                return null;
            }

            delegate = (TriggerPersistenceDelegate)i$.next();
        } while(!delegate.getHandledTriggerTypeDiscriminator().equals(discriminator));

        return delegate;
    }

    public int updateTriggerStatesFromOtherStates(Connection conn, String newState, String oldState1, String oldState2) throws SQLException {
        PreparedStatement ps = null;

        int var6;
        try {
            ps = conn.prepareStatement(this.rtp("UPDATE {0}TRIGGERS SET TRIGGER_STATE = ? WHERE SCHED_NAME = {1} AND (TRIGGER_STATE = ? OR TRIGGER_STATE = ?)"));
            ps.setString(1, newState);
            ps.setString(2, oldState1);
            ps.setString(3, oldState2);
            var6 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var6;
    }

    public List<TriggerKey> selectMisfiredTriggers(Connection conn, long ts) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            ps = conn.prepareStatement(this.rtp("SELECT * FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND NOT (MISFIRE_INSTR = -1) AND NEXT_FIRE_TIME < ? ORDER BY NEXT_FIRE_TIME ASC, PRIORITY DESC"));
            ps.setBigDecimal(1, new BigDecimal(String.valueOf(ts)));
            rs = ps.executeQuery();
            LinkedList list = new LinkedList();

            while(rs.next()) {
                String triggerName = rs.getString("TRIGGER_NAME");
                String groupName = rs.getString("TRIGGER_GROUP");
                list.add(TriggerKey.triggerKey(triggerName, groupName));
            }

            LinkedList var12 = list;
            return var12;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public List<TriggerKey> selectTriggersInState(Connection conn, String state) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_STATE = ?"));
            ps.setString(1, state);
            rs = ps.executeQuery();
            LinkedList list = new LinkedList();

            while(rs.next()) {
                list.add(TriggerKey.triggerKey(rs.getString(1), rs.getString(2)));
            }

            LinkedList var6 = list;
            return var6;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public List<TriggerKey> selectMisfiredTriggersInState(Connection conn, String state, long ts) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND NOT (MISFIRE_INSTR = -1) AND NEXT_FIRE_TIME < ? AND TRIGGER_STATE = ? ORDER BY NEXT_FIRE_TIME ASC, PRIORITY DESC"));
            ps.setBigDecimal(1, new BigDecimal(String.valueOf(ts)));
            ps.setString(2, state);
            rs = ps.executeQuery();
            LinkedList list = new LinkedList();

            while(rs.next()) {
                String triggerName = rs.getString("TRIGGER_NAME");
                String groupName = rs.getString("TRIGGER_GROUP");
                list.add(TriggerKey.triggerKey(triggerName, groupName));
            }

            LinkedList var13 = list;
            return var13;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public boolean hasMisfiredTriggersInState(Connection conn, String state1, long ts, int count, List<TriggerKey> resultList) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND NOT (MISFIRE_INSTR = -1) AND NEXT_FIRE_TIME < ? AND TRIGGER_STATE = ? ORDER BY NEXT_FIRE_TIME ASC, PRIORITY DESC"));
            ps.setBigDecimal(1, new BigDecimal(String.valueOf(ts)));
            ps.setString(2, state1);
            rs = ps.executeQuery();
            boolean hasReachedLimit = false;

            while(rs.next() && !hasReachedLimit) {
                if (resultList.size() == count) {
                    hasReachedLimit = true;
                } else {
                    String triggerName = rs.getString("TRIGGER_NAME");
                    String groupName = rs.getString("TRIGGER_GROUP");
                    resultList.add(TriggerKey.triggerKey(triggerName, groupName));
                }
            }

            boolean var15 = hasReachedLimit;
            return var15;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public int countMisfiredTriggersInState(Connection conn, String state1, long ts) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        int var7;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT COUNT(TRIGGER_NAME) FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND NOT (MISFIRE_INSTR = -1) AND NEXT_FIRE_TIME < ? AND TRIGGER_STATE = ?"));
            ps.setBigDecimal(1, new BigDecimal(String.valueOf(ts)));
            ps.setString(2, state1);
            rs = ps.executeQuery();
            if (!rs.next()) {
                throw new SQLException("No misfired trigger count returned.");
            }

            var7 = rs.getInt(1);
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var7;
    }

    public List<TriggerKey> selectMisfiredTriggersInGroupInState(Connection conn, String groupName, String state, long ts) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_NAME FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND NOT (MISFIRE_INSTR = -1) AND NEXT_FIRE_TIME < ? AND TRIGGER_GROUP = ? AND TRIGGER_STATE = ? ORDER BY NEXT_FIRE_TIME ASC, PRIORITY DESC"));
            ps.setBigDecimal(1, new BigDecimal(String.valueOf(ts)));
            ps.setString(2, groupName);
            ps.setString(3, state);
            rs = ps.executeQuery();
            LinkedList list = new LinkedList();

            while(rs.next()) {
                String triggerName = rs.getString("TRIGGER_NAME");
                list.add(TriggerKey.triggerKey(triggerName, groupName));
            }

            LinkedList var13 = list;
            return var13;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public List<OperableTrigger> selectTriggersForRecoveringJobs(Connection conn) throws SQLException, IOException, ClassNotFoundException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            ps = conn.prepareStatement(this.rtp("SELECT * FROM {0}FIRED_TRIGGERS WHERE SCHED_NAME = {1} AND INSTANCE_NAME = ? AND REQUESTS_RECOVERY = ?"));
            ps.setString(1, this.instanceId);
            this.setBoolean(ps, 2, true);
            rs = ps.executeQuery();
            long dumId = System.currentTimeMillis();
            LinkedList list = new LinkedList();

            while(rs.next()) {
                String jobName = rs.getString("JOB_NAME");
                String jobGroup = rs.getString("JOB_GROUP");
                String trigName = rs.getString("TRIGGER_NAME");
                String trigGroup = rs.getString("TRIGGER_GROUP");
                long firedTime = rs.getLong("FIRED_TIME");
                long scheduledTime = rs.getLong("SCHED_TIME");
                int priority = rs.getInt("PRIORITY");
                SimpleTriggerImpl rcvryTrig = new SimpleTriggerImpl("recover_" + this.instanceId + "_" + dumId++, "RECOVERING_JOBS", new Date(scheduledTime));
                rcvryTrig.setJobName(jobName);
                rcvryTrig.setJobGroup(jobGroup);
                rcvryTrig.setPriority(priority);
                rcvryTrig.setMisfireInstruction(-1);
                JobDataMap jd = this.selectTriggerJobDataMap(conn, trigName, trigGroup);
                jd.put("QRTZ_FAILED_JOB_ORIG_TRIGGER_NAME", trigName);
                jd.put("QRTZ_FAILED_JOB_ORIG_TRIGGER_GROUP", trigGroup);
                jd.put("QRTZ_FAILED_JOB_ORIG_TRIGGER_FIRETIME_IN_MILLISECONDS_AS_STRING", String.valueOf(firedTime));
                jd.put("QRTZ_FAILED_JOB_ORIG_TRIGGER_SCHEDULED_FIRETIME_IN_MILLISECONDS_AS_STRING", String.valueOf(scheduledTime));
                rcvryTrig.setJobDataMap(jd);
                list.add(rcvryTrig);
            }

            LinkedList var21 = list;
            return var21;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public int deleteFiredTriggers(Connection conn) throws SQLException {
        PreparedStatement ps = null;

        int var3;
        try {
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}FIRED_TRIGGERS WHERE SCHED_NAME = {1}"));
            var3 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var3;
    }

    public int deleteFiredTriggers(Connection conn, String theInstanceId) throws SQLException {
        PreparedStatement ps = null;

        int var4;
        try {
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}FIRED_TRIGGERS WHERE SCHED_NAME = {1} AND INSTANCE_NAME = ?"));
            ps.setString(1, theInstanceId);
            var4 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var4;
    }

    public void clearData(Connection conn) throws SQLException {
        PreparedStatement ps = null;

        try {
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}SIMPLE_TRIGGERS  WHERE SCHED_NAME = {1}"));
            ps.executeUpdate();
            ps.close();
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}SIMPROP_TRIGGERS  WHERE SCHED_NAME = {1}"));
            ps.executeUpdate();
            ps.close();
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}CRON_TRIGGERS WHERE SCHED_NAME = {1}"));
            ps.executeUpdate();
            ps.close();
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}BLOB_TRIGGERS WHERE SCHED_NAME = {1}"));
            ps.executeUpdate();
            ps.close();
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}TRIGGERS WHERE SCHED_NAME = {1}"));
            ps.executeUpdate();
            ps.close();
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1}"));
            ps.executeUpdate();
            ps.close();
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}CALENDARS WHERE SCHED_NAME = {1}"));
            ps.executeUpdate();
            ps.close();
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}PAUSED_TRIGGER_GRPS WHERE SCHED_NAME = {1}"));
            ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

    }

    public int insertJobDetail(Connection conn, JobDetail job) throws IOException, SQLException {
        ByteArrayOutputStream baos = this.serializeJobData(job.getJobDataMap());
        PreparedStatement ps = null;
        boolean var5 = false;

        int insertResult;
        try {
            ps = conn.prepareStatement(this.rtp("INSERT INTO {0}JOB_DETAILS (SCHED_NAME, JOB_NAME, JOB_GROUP, DESCRIPTION, JOB_CLASS_NAME, IS_DURABLE, IS_NONCONCURRENT, IS_UPDATE_DATA, REQUESTS_RECOVERY, JOB_DATA)  VALUES({1}, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
            ps.setString(1, job.getKey().getName());
            ps.setString(2, job.getKey().getGroup());
            ps.setString(3, job.getDescription());
            ps.setString(4, job.getJobClass().getName());
            this.setBoolean(ps, 5, job.isDurable());
            this.setBoolean(ps, 6, job.isConcurrentExectionDisallowed());
            this.setBoolean(ps, 7, job.isPersistJobDataAfterExecution());
            this.setBoolean(ps, 8, job.requestsRecovery());
            this.setBytes(ps, 9, baos);
            insertResult = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return insertResult;
    }

    public int updateJobDetail(Connection conn, JobDetail job) throws IOException, SQLException {
        ByteArrayOutputStream baos = this.serializeJobData(job.getJobDataMap());
        PreparedStatement ps = null;
        boolean var5 = false;

        int insertResult;
        try {
            ps = conn.prepareStatement(this.rtp("UPDATE {0}JOB_DETAILS SET DESCRIPTION = ?, JOB_CLASS_NAME = ?, IS_DURABLE = ?, IS_NONCONCURRENT = ?, IS_UPDATE_DATA = ?, REQUESTS_RECOVERY = ?, JOB_DATA = ?  WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
            ps.setString(1, job.getDescription());
            ps.setString(2, job.getJobClass().getName());
            this.setBoolean(ps, 3, job.isDurable());
            this.setBoolean(ps, 4, job.isConcurrentExectionDisallowed());
            this.setBoolean(ps, 5, job.isPersistJobDataAfterExecution());
            this.setBoolean(ps, 6, job.requestsRecovery());
            this.setBytes(ps, 7, baos);
            ps.setString(8, job.getKey().getName());
            ps.setString(9, job.getKey().getGroup());
            insertResult = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return insertResult;
    }

    public List<TriggerKey> selectTriggerKeysForJob(Connection conn, JobKey jobKey) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
            ps.setString(1, jobKey.getName());
            ps.setString(2, jobKey.getGroup());
            rs = ps.executeQuery();
            LinkedList list = new LinkedList();

            while(rs.next()) {
                String trigName = rs.getString("TRIGGER_NAME");
                String trigGroup = rs.getString("TRIGGER_GROUP");
                list.add(TriggerKey.triggerKey(trigName, trigGroup));
            }

            LinkedList var11 = list;
            return var11;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public int deleteJobDetail(Connection conn, JobKey jobKey) throws SQLException {
        PreparedStatement ps = null;

        int var4;
        try {
            if (this.logger.isDebugEnabled()) {
                this.logger.debug("Deleting job: " + jobKey);
            }

            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
            ps.setString(1, jobKey.getName());
            ps.setString(2, jobKey.getGroup());
            var4 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var4;
    }

    public boolean isJobNonConcurrent(Connection conn, JobKey jobKey) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        boolean var5;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT IS_NONCONCURRENT FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
            ps.setString(1, jobKey.getName());
            ps.setString(2, jobKey.getGroup());
            rs = ps.executeQuery();
            if (rs.next()) {
                var5 = this.getBoolean(rs, "IS_NONCONCURRENT");
                return var5;
            }

            var5 = false;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var5;
    }

    public boolean jobExists(Connection conn, JobKey jobKey) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        boolean var5;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT JOB_NAME FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
            ps.setString(1, jobKey.getName());
            ps.setString(2, jobKey.getGroup());
            rs = ps.executeQuery();
            if (!rs.next()) {
                var5 = false;
                return var5;
            }

            var5 = true;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var5;
    }

    public int updateJobData(Connection conn, JobDetail job) throws IOException, SQLException {
        ByteArrayOutputStream baos = this.serializeJobData(job.getJobDataMap());
        PreparedStatement ps = null;

        int var5;
        try {
            ps = conn.prepareStatement(this.rtp("UPDATE {0}JOB_DETAILS SET JOB_DATA = ?  WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
            this.setBytes(ps, 1, baos);
            ps.setString(2, job.getKey().getName());
            ps.setString(3, job.getKey().getGroup());
            var5 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var5;
    }

    public JobDetail selectJobDetail(Connection conn, JobKey jobKey, ClassLoadHelper loadHelper) throws ClassNotFoundException, IOException, SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        JobDetailImpl var11;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT * FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
            ps.setString(1, jobKey.getName());
            ps.setString(2, jobKey.getGroup());
            rs = ps.executeQuery();
            JobDetailImpl job = null;
            if (rs.next()) {
                job = new JobDetailImpl();
                job.setName(rs.getString("JOB_NAME"));
                job.setGroup(rs.getString("JOB_GROUP"));
                job.setDescription(rs.getString("DESCRIPTION"));
                job.setJobClass(loadHelper.loadClass(rs.getString("JOB_CLASS_NAME"), Job.class));
                job.setDurability(this.getBoolean(rs, "IS_DURABLE"));
                job.setRequestsRecovery(this.getBoolean(rs, "REQUESTS_RECOVERY"));
                Map<?, ?> map = null;
                if (this.canUseProperties()) {
                    map = this.getMapFromProperties(rs);
                } else {
                    map = (Map)this.getObjectFromBlob(rs, "JOB_DATA");
                }

                if (null != map) {
                    job.setJobDataMap(new JobDataMap(map));
                }
            }

            var11 = job;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var11;
    }

    private Map<?, ?> getMapFromProperties(ResultSet rs) throws ClassNotFoundException, IOException, SQLException {
        InputStream is = (InputStream)this.getJobDataFromBlob(rs, "JOB_DATA");
        if (is == null) {
            return null;
        } else {
            Properties properties = new Properties();
            if (is != null) {
                try {
                    properties.load(is);
                } finally {
                    is.close();
                }
            }

            Map<?, ?> map = this.convertFromProperty(properties);
            return map;
        }
    }

    public int selectNumJobs(Connection conn) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        int var5;
        try {
            int count = 0;
            ps = conn.prepareStatement(this.rtp("SELECT COUNT(JOB_NAME)  FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1}"));
            rs = ps.executeQuery();
            if (rs.next()) {
                count = rs.getInt(1);
            }

            var5 = count;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var5;
    }

    public List<String> selectJobGroups(Connection conn) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            ps = conn.prepareStatement(this.rtp("SELECT DISTINCT(JOB_GROUP) FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1}"));
            rs = ps.executeQuery();
            LinkedList list = new LinkedList();

            while(rs.next()) {
                list.add(rs.getString(1));
            }

            LinkedList var5 = list;
            return var5;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public Set<JobKey> selectJobsInGroup(Connection conn, GroupMatcher<JobKey> matcher) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            if (this.isMatcherEquals(matcher)) {
                ps = conn.prepareStatement(this.rtp("SELECT JOB_NAME, JOB_GROUP FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1} AND JOB_GROUP = ?"));
                ps.setString(1, this.toSqlEqualsClause(matcher));
            } else {
                ps = conn.prepareStatement(this.rtp("SELECT JOB_NAME, JOB_GROUP FROM {0}JOB_DETAILS WHERE SCHED_NAME = {1} AND JOB_GROUP LIKE ?"));
                ps.setString(1, this.toSqlLikeClause(matcher));
            }

            rs = ps.executeQuery();
            LinkedList list = new LinkedList();

            while(rs.next()) {
                list.add(JobKey.jobKey(rs.getString(1), rs.getString(2)));
            }

            HashSet var6 = new HashSet(list);
            return var6;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    protected boolean isMatcherEquals(GroupMatcher<?> matcher) {
        return matcher.getCompareWithOperator().equals(StringOperatorName.EQUALS);
    }

    protected String toSqlEqualsClause(GroupMatcher<?> matcher) {
        return matcher.getCompareToValue();
    }

    protected String toSqlLikeClause(GroupMatcher<?> matcher) {
        String groupName;
        switch(matcher.getCompareWithOperator()) {
        case EQUALS:
            groupName = matcher.getCompareToValue();
            break;
        case CONTAINS:
            groupName = "%" + matcher.getCompareToValue() + "%";
            break;
        case ENDS_WITH:
            groupName = "%" + matcher.getCompareToValue();
            break;
        case STARTS_WITH:
            groupName = matcher.getCompareToValue() + "%";
            break;
        case ANYTHING:
            groupName = "%";
            break;
        default:
            throw new UnsupportedOperationException("Don't know how to translate " + matcher.getCompareWithOperator() + " into SQL");
        }

        return groupName;
    }

    public int insertTrigger(Connection conn, OperableTrigger trigger, String state, JobDetail jobDetail) throws SQLException, IOException {
        ByteArrayOutputStream baos = null;
        if (trigger.getJobDataMap().size() > 0) {
            baos = this.serializeJobData(trigger.getJobDataMap());
        }

        PreparedStatement ps = null;
        boolean var7 = false;

        int insertResult;
        try {
            ps = conn.prepareStatement(this.rtp("INSERT INTO {0}TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP, JOB_NAME, JOB_GROUP, DESCRIPTION, NEXT_FIRE_TIME, PREV_FIRE_TIME, TRIGGER_STATE, TRIGGER_TYPE, START_TIME, END_TIME, CALENDAR_NAME, MISFIRE_INSTR, JOB_DATA, PRIORITY)  VALUES({1}, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
            ps.setString(1, trigger.getKey().getName());
            ps.setString(2, trigger.getKey().getGroup());
            ps.setString(3, trigger.getJobKey().getName());
            ps.setString(4, trigger.getJobKey().getGroup());
            ps.setString(5, trigger.getDescription());
            if (trigger.getNextFireTime() != null) {
                ps.setBigDecimal(6, new BigDecimal(String.valueOf(trigger.getNextFireTime().getTime())));
            } else {
                ps.setBigDecimal(6, (BigDecimal)null);
            }

            long prevFireTime = -1L;
            if (trigger.getPreviousFireTime() != null) {
                prevFireTime = trigger.getPreviousFireTime().getTime();
            }

            ps.setBigDecimal(7, new BigDecimal(String.valueOf(prevFireTime)));
            ps.setString(8, state);
            TriggerPersistenceDelegate tDel = this.findTriggerPersistenceDelegate(trigger);
            String type = "BLOB";
            if (tDel != null) {
                type = tDel.getHandledTriggerTypeDiscriminator();
            }

            ps.setString(9, type);
            ps.setBigDecimal(10, new BigDecimal(String.valueOf(trigger.getStartTime().getTime())));
            long endTime = 0L;
            if (trigger.getEndTime() != null) {
                endTime = trigger.getEndTime().getTime();
            }

            ps.setBigDecimal(11, new BigDecimal(String.valueOf(endTime)));
            ps.setString(12, trigger.getCalendarName());
            ps.setInt(13, trigger.getMisfireInstruction());
            this.setBytes(ps, 14, baos);
            ps.setInt(15, trigger.getPriority());
            insertResult = ps.executeUpdate();
            if (tDel == null) {
                this.insertBlobTrigger(conn, trigger);
            } else {
                tDel.insertExtendedTriggerProperties(conn, trigger, state, jobDetail);
            }
        } finally {
            closeStatement(ps);
        }

        return insertResult;
    }

    public int insertBlobTrigger(Connection conn, OperableTrigger trigger) throws SQLException, IOException {
        PreparedStatement ps = null;
        ByteArrayOutputStream os = null;

        int var8;
        try {
            os = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(os);
            oos.writeObject(trigger);
            oos.close();
            byte[] buf = os.toByteArray();
            ByteArrayInputStream is = new ByteArrayInputStream(buf);
            ps = conn.prepareStatement(this.rtp("INSERT INTO {0}BLOB_TRIGGERS (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP, BLOB_DATA)  VALUES({1}, ?, ?, ?)"));
            ps.setString(1, trigger.getKey().getName());
            ps.setString(2, trigger.getKey().getGroup());
            ps.setBinaryStream(3, is, buf.length);
            var8 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var8;
    }

    public int updateTrigger(Connection conn, OperableTrigger trigger, String state, JobDetail jobDetail) throws SQLException, IOException {
        boolean updateJobData = trigger.getJobDataMap().isDirty();
        ByteArrayOutputStream baos = null;
        if (updateJobData && trigger.getJobDataMap().size() > 0) {
            baos = this.serializeJobData(trigger.getJobDataMap());
        }

        PreparedStatement ps = null;
        boolean var8 = false;

        int insertResult;
        try {
            if (updateJobData) {
                ps = conn.prepareStatement(this.rtp("UPDATE {0}TRIGGERS SET JOB_NAME = ?, JOB_GROUP = ?, DESCRIPTION = ?, NEXT_FIRE_TIME = ?, PREV_FIRE_TIME = ?, TRIGGER_STATE = ?, TRIGGER_TYPE = ?, START_TIME = ?, END_TIME = ?, CALENDAR_NAME = ?, MISFIRE_INSTR = ?, PRIORITY = ?, JOB_DATA = ? WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
            } else {
                ps = conn.prepareStatement(this.rtp("UPDATE {0}TRIGGERS SET JOB_NAME = ?, JOB_GROUP = ?, DESCRIPTION = ?, NEXT_FIRE_TIME = ?, PREV_FIRE_TIME = ?, TRIGGER_STATE = ?, TRIGGER_TYPE = ?, START_TIME = ?, END_TIME = ?, CALENDAR_NAME = ?, MISFIRE_INSTR = ?, PRIORITY = ? WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
            }

            ps.setString(1, trigger.getJobKey().getName());
            ps.setString(2, trigger.getJobKey().getGroup());
            ps.setString(3, trigger.getDescription());
            long nextFireTime = -1L;
            if (trigger.getNextFireTime() != null) {
                nextFireTime = trigger.getNextFireTime().getTime();
            }

            ps.setBigDecimal(4, new BigDecimal(String.valueOf(nextFireTime)));
            long prevFireTime = -1L;
            if (trigger.getPreviousFireTime() != null) {
                prevFireTime = trigger.getPreviousFireTime().getTime();
            }

            ps.setBigDecimal(5, new BigDecimal(String.valueOf(prevFireTime)));
            ps.setString(6, state);
            TriggerPersistenceDelegate tDel = this.findTriggerPersistenceDelegate(trigger);
            String type = "BLOB";
            if (tDel != null) {
                type = tDel.getHandledTriggerTypeDiscriminator();
            }

            ps.setString(7, type);
            ps.setBigDecimal(8, new BigDecimal(String.valueOf(trigger.getStartTime().getTime())));
            long endTime = 0L;
            if (trigger.getEndTime() != null) {
                endTime = trigger.getEndTime().getTime();
            }

            ps.setBigDecimal(9, new BigDecimal(String.valueOf(endTime)));
            ps.setString(10, trigger.getCalendarName());
            ps.setInt(11, trigger.getMisfireInstruction());
            ps.setInt(12, trigger.getPriority());
            if (updateJobData) {
                this.setBytes(ps, 13, baos);
                ps.setString(14, trigger.getKey().getName());
                ps.setString(15, trigger.getKey().getGroup());
            } else {
                ps.setString(13, trigger.getKey().getName());
                ps.setString(14, trigger.getKey().getGroup());
            }

            insertResult = ps.executeUpdate();
            if (tDel == null) {
                this.updateBlobTrigger(conn, trigger);
            } else {
                tDel.updateExtendedTriggerProperties(conn, trigger, state, jobDetail);
            }
        } finally {
            closeStatement(ps);
        }

        return insertResult;
    }

    public int updateBlobTrigger(Connection conn, OperableTrigger trigger) throws SQLException, IOException {
        PreparedStatement ps = null;
        ByteArrayOutputStream os = null;

        int var8;
        try {
            os = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(os);
            oos.writeObject(trigger);
            oos.close();
            byte[] buf = os.toByteArray();
            ByteArrayInputStream is = new ByteArrayInputStream(buf);
            ps = conn.prepareStatement(this.rtp("UPDATE {0}BLOB_TRIGGERS SET BLOB_DATA = ? WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
            ps.setBinaryStream(1, is, buf.length);
            ps.setString(2, trigger.getKey().getName());
            ps.setString(3, trigger.getKey().getGroup());
            var8 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
            if (os != null) {
                os.close();
            }

        }

        return var8;
    }

    public boolean triggerExists(Connection conn, TriggerKey triggerKey) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        boolean var5;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_NAME FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
            ps.setString(1, triggerKey.getName());
            ps.setString(2, triggerKey.getGroup());
            rs = ps.executeQuery();
            if (!rs.next()) {
                var5 = false;
                return var5;
            }

            var5 = true;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var5;
    }

    public int updateTriggerState(Connection conn, TriggerKey triggerKey, String state) throws SQLException {
        PreparedStatement ps = null;

        int var5;
        try {
            ps = conn.prepareStatement(this.rtp("UPDATE {0}TRIGGERS SET TRIGGER_STATE = ? WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
            ps.setString(1, state);
            ps.setString(2, triggerKey.getName());
            ps.setString(3, triggerKey.getGroup());
            var5 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var5;
    }

    public int updateTriggerStateFromOtherStates(Connection conn, TriggerKey triggerKey, String newState, String oldState1, String oldState2, String oldState3) throws SQLException {
        PreparedStatement ps = null;

        int var8;
        try {
            ps = conn.prepareStatement(this.rtp("UPDATE {0}TRIGGERS SET TRIGGER_STATE = ? WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ? AND (TRIGGER_STATE = ? OR TRIGGER_STATE = ? OR TRIGGER_STATE = ?)"));
            ps.setString(1, newState);
            ps.setString(2, triggerKey.getName());
            ps.setString(3, triggerKey.getGroup());
            ps.setString(4, oldState1);
            ps.setString(5, oldState2);
            ps.setString(6, oldState3);
            var8 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var8;
    }

    public int updateTriggerGroupStateFromOtherStates(Connection conn, GroupMatcher<TriggerKey> matcher, String newState, String oldState1, String oldState2, String oldState3) throws SQLException {
        PreparedStatement ps = null;

        int var8;
        try {
            ps = conn.prepareStatement(this.rtp("UPDATE {0}TRIGGERS SET TRIGGER_STATE = ? WHERE SCHED_NAME = {1} AND TRIGGER_GROUP LIKE ? AND (TRIGGER_STATE = ? OR TRIGGER_STATE = ? OR TRIGGER_STATE = ?)"));
            ps.setString(1, newState);
            ps.setString(2, this.toSqlLikeClause(matcher));
            ps.setString(3, oldState1);
            ps.setString(4, oldState2);
            ps.setString(5, oldState3);
            var8 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var8;
    }

    public int updateTriggerStateFromOtherState(Connection conn, TriggerKey triggerKey, String newState, String oldState) throws SQLException {
        PreparedStatement ps = null;

        int var6;
        try {
            ps = conn.prepareStatement(this.rtp("UPDATE {0}TRIGGERS SET TRIGGER_STATE = ? WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ? AND TRIGGER_STATE = ?"));
            ps.setString(1, newState);
            ps.setString(2, triggerKey.getName());
            ps.setString(3, triggerKey.getGroup());
            ps.setString(4, oldState);
            var6 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var6;
    }

    public int updateTriggerGroupStateFromOtherState(Connection conn, GroupMatcher<TriggerKey> matcher, String newState, String oldState) throws SQLException {
        PreparedStatement ps = null;

        int var6;
        try {
            ps = conn.prepareStatement(this.rtp("UPDATE {0}TRIGGERS SET TRIGGER_STATE = ? WHERE SCHED_NAME = {1} AND TRIGGER_GROUP LIKE ? AND TRIGGER_STATE = ?"));
            ps.setString(1, newState);
            ps.setString(2, this.toSqlLikeClause(matcher));
            ps.setString(3, oldState);
            var6 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var6;
    }

    public int updateTriggerStatesForJob(Connection conn, JobKey jobKey, String state) throws SQLException {
        PreparedStatement ps = null;

        int var5;
        try {
            ps = conn.prepareStatement(this.rtp("UPDATE {0}TRIGGERS SET TRIGGER_STATE = ? WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
            ps.setString(1, state);
            ps.setString(2, jobKey.getName());
            ps.setString(3, jobKey.getGroup());
            var5 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var5;
    }

    public int updateTriggerStatesForJobFromOtherState(Connection conn, JobKey jobKey, String state, String oldState) throws SQLException {
        PreparedStatement ps = null;

        int var6;
        try {
            ps = conn.prepareStatement(this.rtp("UPDATE {0}TRIGGERS SET TRIGGER_STATE = ? WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ? AND TRIGGER_STATE = ?"));
            ps.setString(1, state);
            ps.setString(2, jobKey.getName());
            ps.setString(3, jobKey.getGroup());
            ps.setString(4, oldState);
            var6 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var6;
    }

    public int deleteBlobTrigger(Connection conn, TriggerKey triggerKey) throws SQLException {
        PreparedStatement ps = null;

        int var4;
        try {
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}BLOB_TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
            ps.setString(1, triggerKey.getName());
            ps.setString(2, triggerKey.getGroup());
            var4 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var4;
    }

    public int deleteTrigger(Connection conn, TriggerKey triggerKey) throws SQLException {
        PreparedStatement ps = null;
        this.deleteTriggerExtension(conn, triggerKey);

        int var4;
        try {
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
            ps.setString(1, triggerKey.getName());
            ps.setString(2, triggerKey.getGroup());
            var4 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var4;
    }

    protected void deleteTriggerExtension(Connection conn, TriggerKey triggerKey) throws SQLException {
        Iterator i$ = this.triggerPersistenceDelegates.iterator();

        TriggerPersistenceDelegate tDel;
        do {
            if (!i$.hasNext()) {
                this.deleteBlobTrigger(conn, triggerKey);
                return;
            }

            tDel = (TriggerPersistenceDelegate)i$.next();
        } while(tDel.deleteExtendedTriggerProperties(conn, triggerKey) <= 0);

    }

    public int selectNumTriggersForJob(Connection conn, JobKey jobKey) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        int var5;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT COUNT(TRIGGER_NAME) FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
            ps.setString(1, jobKey.getName());
            ps.setString(2, jobKey.getGroup());
            rs = ps.executeQuery();
            if (!rs.next()) {
                byte var9 = 0;
                return var9;
            }

            var5 = rs.getInt(1);
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var5;
    }

    public JobDetail selectJobForTrigger(Connection conn, ClassLoadHelper loadHelper, TriggerKey triggerKey) throws ClassNotFoundException, SQLException {
        return this.selectJobForTrigger(conn, loadHelper, triggerKey, true);
    }

    public JobDetail selectJobForTrigger(Connection conn, ClassLoadHelper loadHelper, TriggerKey triggerKey, boolean loadJobClass) throws ClassNotFoundException, SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        JobDetailImpl var8;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT J.JOB_NAME, J.JOB_GROUP, J.IS_DURABLE, J.JOB_CLASS_NAME, J.REQUESTS_RECOVERY FROM {0}TRIGGERS T, {0}JOB_DETAILS J WHERE T.SCHED_NAME = {1} AND J.SCHED_NAME = {1} AND T.TRIGGER_NAME = ? AND T.TRIGGER_GROUP = ? AND T.JOB_NAME = J.JOB_NAME AND T.JOB_GROUP = J.JOB_GROUP"));
            ps.setString(1, triggerKey.getName());
            ps.setString(2, triggerKey.getGroup());
            rs = ps.executeQuery();
            JobDetailImpl job;
            if (!rs.next()) {
                if (this.logger.isDebugEnabled()) {
                    this.logger.debug("No job for trigger '" + triggerKey + "'.");
                }

                job = null;
                return job;
            }

            job = new JobDetailImpl();
            job.setName(rs.getString(1));
            job.setGroup(rs.getString(2));
            job.setDurability(this.getBoolean(rs, 3));
            if (loadJobClass) {
                job.setJobClass(loadHelper.loadClass(rs.getString(4), Job.class));
            }

            job.setRequestsRecovery(this.getBoolean(rs, 5));
            var8 = job;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var8;
    }

    public List<OperableTrigger> selectTriggersForJob(Connection conn, JobKey jobKey) throws SQLException, ClassNotFoundException, IOException, JobPersistenceException {
        LinkedList<OperableTrigger> trigList = new LinkedList();
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
            ps.setString(1, jobKey.getName());
            ps.setString(2, jobKey.getGroup());
            rs = ps.executeQuery();

            while(rs.next()) {
                OperableTrigger t = this.selectTrigger(conn, TriggerKey.triggerKey(rs.getString("TRIGGER_NAME"), rs.getString("TRIGGER_GROUP")));
                if (t != null) {
                    trigList.add(t);
                }
            }
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return trigList;
    }

    public List<OperableTrigger> selectTriggersForCalendar(Connection conn, String calName) throws SQLException, ClassNotFoundException, IOException, JobPersistenceException {
        LinkedList<OperableTrigger> trigList = new LinkedList();
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND CALENDAR_NAME = ?"));
            ps.setString(1, calName);
            rs = ps.executeQuery();

            while(rs.next()) {
                trigList.add(this.selectTrigger(conn, TriggerKey.triggerKey(rs.getString("TRIGGER_NAME"), rs.getString("TRIGGER_GROUP"))));
            }
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return trigList;
    }

    public OperableTrigger selectTrigger(Connection conn, TriggerKey triggerKey) throws SQLException, ClassNotFoundException, IOException, JobPersistenceException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            OperableTrigger trigger = null;
            ps = conn.prepareStatement(this.rtp("SELECT * FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
            ps.setString(1, triggerKey.getName());
            ps.setString(2, triggerKey.getGroup());
            rs = ps.executeQuery();
            if (rs.next()) {
                String jobName = rs.getString("JOB_NAME");
                String jobGroup = rs.getString("JOB_GROUP");
                String description = rs.getString("DESCRIPTION");
                long nextFireTime = rs.getLong("NEXT_FIRE_TIME");
                long prevFireTime = rs.getLong("PREV_FIRE_TIME");
                String triggerType = rs.getString("TRIGGER_TYPE");
                long startTime = rs.getLong("START_TIME");
                long endTime = rs.getLong("END_TIME");
                String calendarName = rs.getString("CALENDAR_NAME");
                int misFireInstr = rs.getInt("MISFIRE_INSTR");
                int priority = rs.getInt("PRIORITY");
                Map<?, ?> map = null;
                if (this.canUseProperties()) {
                    map = this.getMapFromProperties(rs);
                } else {
                    map = (Map)this.getObjectFromBlob(rs, "JOB_DATA");
                }

                Date nft = null;
                if (nextFireTime > 0L) {
                    nft = new Date(nextFireTime);
                }

                Date pft = null;
                if (prevFireTime > 0L) {
                    pft = new Date(prevFireTime);
                }

                Date startTimeD = new Date(startTime);
                Date endTimeD = null;
                if (endTime > 0L) {
                    endTimeD = new Date(endTime);
                }

                if (triggerType.equals("BLOB")) {
                    rs.close();
                    rs = null;
                    ps.close();
                    ps = null;
                    ps = conn.prepareStatement(this.rtp("SELECT * FROM {0}BLOB_TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
                    ps.setString(1, triggerKey.getName());
                    ps.setString(2, triggerKey.getGroup());
                    rs = ps.executeQuery();
                    if (rs.next()) {
                        trigger = (OperableTrigger)this.getObjectFromBlob(rs, "BLOB_DATA");
                    }
                } else {
                    TriggerPersistenceDelegate tDel = this.findTriggerPersistenceDelegate(triggerType);
                    if (tDel == null) {
                        throw new JobPersistenceException("No TriggerPersistenceDelegate for trigger discriminator type: " + triggerType);
                    }

                    TriggerPropertyBundle triggerProps = null;

                    try {
                        triggerProps = tDel.loadExtendedTriggerProperties(conn, triggerKey);
                    } catch (IllegalStateException var33) {
                        if (this.isTriggerStillPresent(ps)) {
                            throw var33;
                        }

                        Object var29 = null;
                        return (OperableTrigger)var29;
                    }

                    TriggerBuilder<?> tb = TriggerBuilder.newTrigger().withDescription(description).withPriority(priority).startAt(startTimeD).endAt(endTimeD).withIdentity(triggerKey).modifiedByCalendar(calendarName).withSchedule(triggerProps.getScheduleBuilder()).forJob(JobKey.jobKey(jobName, jobGroup));
                    if (null != map) {
                        tb.usingJobData(new JobDataMap(map));
                    }

                    trigger = (OperableTrigger)tb.build();
                    trigger.setMisfireInstruction(misFireInstr);
                    trigger.setNextFireTime(nft);
                    trigger.setPreviousFireTime(pft);
                    this.setTriggerStateProperties(trigger, triggerProps);
                }
            }

            OperableTrigger var35 = trigger;
            return var35;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    private boolean isTriggerStillPresent(PreparedStatement ps) throws SQLException {
        ResultSet rs = null;

        boolean var3;
        try {
            rs = ps.executeQuery();
            var3 = rs.next();
        } finally {
            closeResultSet(rs);
        }

        return var3;
    }

    private void setTriggerStateProperties(OperableTrigger trigger, TriggerPropertyBundle props) throws JobPersistenceException {
        if (props.getStatePropertyNames() != null) {
            Util.setBeanProps(trigger, props.getStatePropertyNames(), props.getStatePropertyValues());
        }
    }

    public JobDataMap selectTriggerJobDataMap(Connection conn, String triggerName, String groupName) throws SQLException, ClassNotFoundException, IOException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        JobDataMap var7;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT JOB_DATA FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
            ps.setString(1, triggerName);
            ps.setString(2, groupName);
            rs = ps.executeQuery();
            if (!rs.next()) {
                return new JobDataMap();
            }

            Map<?, ?> map = null;
            if (this.canUseProperties()) {
                map = this.getMapFromProperties(rs);
            } else {
                map = (Map)this.getObjectFromBlob(rs, "JOB_DATA");
            }

            rs.close();
            ps.close();
            if (null == map) {
                return new JobDataMap();
            }

            var7 = new JobDataMap(map);
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var7;
    }

    public String selectTriggerState(Connection conn, TriggerKey triggerKey) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        String var6;
        try {
            String state = null;
            ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_STATE FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
            ps.setString(1, triggerKey.getName());
            ps.setString(2, triggerKey.getGroup());
            rs = ps.executeQuery();
            if (rs.next()) {
                state = rs.getString("TRIGGER_STATE");
            } else {
                state = "DELETED";
            }

            var6 = state.intern();
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var6;
    }

    public TriggerStatus selectTriggerStatus(Connection conn, TriggerKey triggerKey) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        TriggerStatus var15;
        try {
            TriggerStatus status = null;
            ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_STATE, NEXT_FIRE_TIME, JOB_NAME, JOB_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
            ps.setString(1, triggerKey.getName());
            ps.setString(2, triggerKey.getGroup());
            rs = ps.executeQuery();
            if (rs.next()) {
                String state = rs.getString("TRIGGER_STATE");
                long nextFireTime = rs.getLong("NEXT_FIRE_TIME");
                String jobName = rs.getString("JOB_NAME");
                String jobGroup = rs.getString("JOB_GROUP");
                Date nft = null;
                if (nextFireTime > 0L) {
                    nft = new Date(nextFireTime);
                }

                status = new TriggerStatus(state, nft);
                status.setKey(triggerKey);
                status.setJobKey(JobKey.jobKey(jobName, jobGroup));
            }

            var15 = status;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var15;
    }

    public int selectNumTriggers(Connection conn) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        int var5;
        try {
            int count = 0;
            ps = conn.prepareStatement(this.rtp("SELECT COUNT(TRIGGER_NAME)  FROM {0}TRIGGERS WHERE SCHED_NAME = {1}"));
            rs = ps.executeQuery();
            if (rs.next()) {
                count = rs.getInt(1);
            }

            var5 = count;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var5;
    }

    public List<String> selectTriggerGroups(Connection conn) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            ps = conn.prepareStatement(this.rtp("SELECT DISTINCT(TRIGGER_GROUP) FROM {0}TRIGGERS WHERE SCHED_NAME = {1}"));
            rs = ps.executeQuery();
            LinkedList list = new LinkedList();

            while(rs.next()) {
                list.add(rs.getString(1));
            }

            LinkedList var5 = list;
            return var5;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public List<String> selectTriggerGroups(Connection conn, GroupMatcher<TriggerKey> matcher) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            ps = conn.prepareStatement(this.rtp("SELECT DISTINCT(TRIGGER_GROUP) FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_GROUP LIKE ?"));
            ps.setString(1, this.toSqlLikeClause(matcher));
            rs = ps.executeQuery();
            LinkedList list = new LinkedList();

            while(rs.next()) {
                list.add(rs.getString(1));
            }

            LinkedList var6 = list;
            return var6;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public Set<TriggerKey> selectTriggersInGroup(Connection conn, GroupMatcher<TriggerKey> matcher) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            if (this.isMatcherEquals(matcher)) {
                ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_GROUP = ?"));
                ps.setString(1, this.toSqlEqualsClause(matcher));
            } else {
                ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_GROUP LIKE ?"));
                ps.setString(1, this.toSqlLikeClause(matcher));
            }

            rs = ps.executeQuery();
            HashSet keys = new HashSet();

            while(rs.next()) {
                keys.add(TriggerKey.triggerKey(rs.getString(1), rs.getString(2)));
            }

            HashSet var6 = keys;
            return var6;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public int insertPausedTriggerGroup(Connection conn, String groupName) throws SQLException {
        PreparedStatement ps = null;

        int var5;
        try {
            ps = conn.prepareStatement(this.rtp("INSERT INTO {0}PAUSED_TRIGGER_GRPS (SCHED_NAME, TRIGGER_GROUP) VALUES({1}, ?)"));
            ps.setString(1, groupName);
            int rows = ps.executeUpdate();
            var5 = rows;
        } finally {
            closeStatement(ps);
        }

        return var5;
    }

    public int deletePausedTriggerGroup(Connection conn, String groupName) throws SQLException {
        PreparedStatement ps = null;

        int var5;
        try {
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}PAUSED_TRIGGER_GRPS WHERE SCHED_NAME = {1} AND TRIGGER_GROUP LIKE ?"));
            ps.setString(1, groupName);
            int rows = ps.executeUpdate();
            var5 = rows;
        } finally {
            closeStatement(ps);
        }

        return var5;
    }

    public int deletePausedTriggerGroup(Connection conn, GroupMatcher<TriggerKey> matcher) throws SQLException {
        PreparedStatement ps = null;

        int var5;
        try {
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}PAUSED_TRIGGER_GRPS WHERE SCHED_NAME = {1} AND TRIGGER_GROUP LIKE ?"));
            ps.setString(1, this.toSqlLikeClause(matcher));
            int rows = ps.executeUpdate();
            var5 = rows;
        } finally {
            closeStatement(ps);
        }

        return var5;
    }

    public int deleteAllPausedTriggerGroups(Connection conn) throws SQLException {
        PreparedStatement ps = null;

        int var4;
        try {
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}PAUSED_TRIGGER_GRPS WHERE SCHED_NAME = {1}"));
            int rows = ps.executeUpdate();
            var4 = rows;
        } finally {
            closeStatement(ps);
        }

        return var4;
    }

    public boolean isTriggerGroupPaused(Connection conn, String groupName) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        boolean var5;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_GROUP FROM {0}PAUSED_TRIGGER_GRPS WHERE SCHED_NAME = {1} AND TRIGGER_GROUP = ?"));
            ps.setString(1, groupName);
            rs = ps.executeQuery();
            var5 = rs.next();
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var5;
    }

    public boolean isExistingTriggerGroup(Connection conn, String groupName) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        boolean var5;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT COUNT(TRIGGER_NAME)  FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_GROUP = ?"));
            ps.setString(1, groupName);
            rs = ps.executeQuery();
            if (rs.next()) {
                var5 = rs.getInt(1) > 0;
                return var5;
            }

            var5 = false;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var5;
    }

    public int insertCalendar(Connection conn, String calendarName, Calendar calendar) throws IOException, SQLException {
        ByteArrayOutputStream baos = this.serializeObject(calendar);
        PreparedStatement ps = null;

        int var6;
        try {
            ps = conn.prepareStatement(this.rtp("INSERT INTO {0}CALENDARS (SCHED_NAME, CALENDAR_NAME, CALENDAR)  VALUES({1}, ?, ?)"));
            ps.setString(1, calendarName);
            this.setBytes(ps, 2, baos);
            var6 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var6;
    }

    public int updateCalendar(Connection conn, String calendarName, Calendar calendar) throws IOException, SQLException {
        ByteArrayOutputStream baos = this.serializeObject(calendar);
        PreparedStatement ps = null;

        int var6;
        try {
            ps = conn.prepareStatement(this.rtp("UPDATE {0}CALENDARS SET CALENDAR = ?  WHERE SCHED_NAME = {1} AND CALENDAR_NAME = ?"));
            this.setBytes(ps, 1, baos);
            ps.setString(2, calendarName);
            var6 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var6;
    }

    public boolean calendarExists(Connection conn, String calendarName) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        boolean var5;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT CALENDAR_NAME FROM {0}CALENDARS WHERE SCHED_NAME = {1} AND CALENDAR_NAME = ?"));
            ps.setString(1, calendarName);
            rs = ps.executeQuery();
            if (!rs.next()) {
                var5 = false;
                return var5;
            }

            var5 = true;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var5;
    }

    public Calendar selectCalendar(Connection conn, String calendarName) throws ClassNotFoundException, IOException, SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        Calendar var7;
        try {
            String selCal = this.rtp("SELECT * FROM {0}CALENDARS WHERE SCHED_NAME = {1} AND CALENDAR_NAME = ?");
            ps = conn.prepareStatement(selCal);
            ps.setString(1, calendarName);
            rs = ps.executeQuery();
            Calendar cal = null;
            if (rs.next()) {
                cal = (Calendar)this.getObjectFromBlob(rs, "CALENDAR");
            }

            if (null == cal) {
                this.logger.warn("Couldn't find calendar with name '" + calendarName + "'.");
            }

            var7 = cal;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var7;
    }

    public boolean calendarIsReferenced(Connection conn, String calendarName) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        boolean var5;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT CALENDAR_NAME FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND CALENDAR_NAME = ?"));
            ps.setString(1, calendarName);
            rs = ps.executeQuery();
            if (!rs.next()) {
                var5 = false;
                return var5;
            }

            var5 = true;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var5;
    }

    public int deleteCalendar(Connection conn, String calendarName) throws SQLException {
        PreparedStatement ps = null;

        int var4;
        try {
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}CALENDARS WHERE SCHED_NAME = {1} AND CALENDAR_NAME = ?"));
            ps.setString(1, calendarName);
            var4 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var4;
    }

    public int selectNumCalendars(Connection conn) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        int var5;
        try {
            int count = 0;
            ps = conn.prepareStatement(this.rtp("SELECT COUNT(CALENDAR_NAME)  FROM {0}CALENDARS WHERE SCHED_NAME = {1}"));
            rs = ps.executeQuery();
            if (rs.next()) {
                count = rs.getInt(1);
            }

            var5 = count;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var5;
    }

    public List<String> selectCalendars(Connection conn) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            ps = conn.prepareStatement(this.rtp("SELECT CALENDAR_NAME FROM {0}CALENDARS WHERE SCHED_NAME = {1}"));
            rs = ps.executeQuery();
            LinkedList list = new LinkedList();

            while(rs.next()) {
                list.add(rs.getString(1));
            }

            LinkedList var5 = list;
            return var5;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    /** @deprecated */
    public long selectNextFireTime(Connection conn) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        long var4;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT MIN(NEXT_FIRE_TIME) AS ALIAS_NXT_FR_TM FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_STATE = ? AND NEXT_FIRE_TIME >= 0"));
            ps.setString(1, "WAITING");
            rs = ps.executeQuery();
            if (rs.next()) {
                var4 = rs.getLong("ALIAS_NXT_FR_TM");
                return var4;
            }

            var4 = 0L;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var4;
    }

    public TriggerKey selectTriggerForFireTime(Connection conn, long fireTime) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        TriggerKey var6;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_NAME, TRIGGER_GROUP FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_STATE = ? AND NEXT_FIRE_TIME = ?"));
            ps.setString(1, "WAITING");
            ps.setBigDecimal(2, new BigDecimal(String.valueOf(fireTime)));
            rs = ps.executeQuery();
            if (!rs.next()) {
                var6 = null;
                return var6;
            }

            var6 = new TriggerKey(rs.getString("TRIGGER_NAME"), rs.getString("TRIGGER_GROUP"));
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var6;
    }

    /** @deprecated */
    public List<TriggerKey> selectTriggerToAcquire(Connection conn, long noLaterThan, long noEarlierThan) throws SQLException {
        return this.selectTriggerToAcquire(conn, noLaterThan, noEarlierThan, 1);
    }

    public List<TriggerKey> selectTriggerToAcquire(Connection conn, long noLaterThan, long noEarlierThan, int maxCount) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        LinkedList nextTriggers = new LinkedList();

        try {
            ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_NAME, TRIGGER_GROUP, NEXT_FIRE_TIME, PRIORITY FROM {0}TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_STATE = ? AND NEXT_FIRE_TIME <= ? AND (MISFIRE_INSTR = -1 OR (MISFIRE_INSTR != -1 AND NEXT_FIRE_TIME >= ?)) ORDER BY NEXT_FIRE_TIME ASC, PRIORITY DESC"));
            if (maxCount < 1) {
                maxCount = 1;
            }

            ps.setMaxRows(maxCount);
            ps.setFetchSize(maxCount);
            ps.setString(1, "WAITING");
            ps.setBigDecimal(2, new BigDecimal(String.valueOf(noLaterThan)));
            ps.setBigDecimal(3, new BigDecimal(String.valueOf(noEarlierThan)));
            rs = ps.executeQuery();

            while(rs.next() && nextTriggers.size() <= maxCount) {
                nextTriggers.add(TriggerKey.triggerKey(rs.getString("TRIGGER_NAME"), rs.getString("TRIGGER_GROUP")));
            }

            LinkedList var10 = nextTriggers;
            return var10;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public int insertFiredTrigger(Connection conn, OperableTrigger trigger, String state, JobDetail job) throws SQLException {
        PreparedStatement ps = null;

        int var6;
        try {
            ps = conn.prepareStatement(this.rtp("INSERT INTO {0}FIRED_TRIGGERS (SCHED_NAME, ENTRY_ID, TRIGGER_NAME, TRIGGER_GROUP, INSTANCE_NAME, FIRED_TIME, SCHED_TIME, STATE, JOB_NAME, JOB_GROUP, IS_NONCONCURRENT, REQUESTS_RECOVERY, PRIORITY) VALUES({1}, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
            ps.setString(1, trigger.getFireInstanceId());
            ps.setString(2, trigger.getKey().getName());
            ps.setString(3, trigger.getKey().getGroup());
            ps.setString(4, this.instanceId);
            ps.setBigDecimal(5, new BigDecimal(String.valueOf(System.currentTimeMillis())));
            ps.setBigDecimal(6, new BigDecimal(String.valueOf(trigger.getNextFireTime().getTime())));
            ps.setString(7, state);
            if (job != null) {
                ps.setString(8, trigger.getJobKey().getName());
                ps.setString(9, trigger.getJobKey().getGroup());
                this.setBoolean(ps, 10, job.isConcurrentExectionDisallowed());
                this.setBoolean(ps, 11, job.requestsRecovery());
            } else {
                ps.setString(8, (String)null);
                ps.setString(9, (String)null);
                this.setBoolean(ps, 10, false);
                this.setBoolean(ps, 11, false);
            }

            ps.setInt(12, trigger.getPriority());
            var6 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var6;
    }

    public int updateFiredTrigger(Connection conn, OperableTrigger trigger, String state, JobDetail job) throws SQLException {
        PreparedStatement ps = null;

        int var6;
        try {
            ps = conn.prepareStatement(this.rtp("UPDATE {0}FIRED_TRIGGERS SET INSTANCE_NAME = ?, FIRED_TIME = ?, SCHED_TIME = ?, STATE = ?, JOB_NAME = ?, JOB_GROUP = ?, IS_NONCONCURRENT = ?, REQUESTS_RECOVERY = ? WHERE SCHED_NAME = {1} AND ENTRY_ID = ?"));
            ps.setString(1, this.instanceId);
            ps.setBigDecimal(2, new BigDecimal(String.valueOf(System.currentTimeMillis())));
            ps.setBigDecimal(3, new BigDecimal(String.valueOf(trigger.getNextFireTime().getTime())));
            ps.setString(4, state);
            if (job != null) {
                ps.setString(5, trigger.getJobKey().getName());
                ps.setString(6, trigger.getJobKey().getGroup());
                this.setBoolean(ps, 7, job.isConcurrentExectionDisallowed());
                this.setBoolean(ps, 8, job.requestsRecovery());
            } else {
                ps.setString(5, (String)null);
                ps.setString(6, (String)null);
                this.setBoolean(ps, 7, false);
                this.setBoolean(ps, 8, false);
            }

            ps.setString(9, trigger.getFireInstanceId());
            var6 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var6;
    }

    public List<FiredTriggerRecord> selectFiredTriggerRecords(Connection conn, String triggerName, String groupName) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            List<FiredTriggerRecord> lst = new LinkedList();
            if (triggerName != null) {
                ps = conn.prepareStatement(this.rtp("SELECT * FROM {0}FIRED_TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_NAME = ? AND TRIGGER_GROUP = ?"));
                ps.setString(1, triggerName);
                ps.setString(2, groupName);
            } else {
                ps = conn.prepareStatement(this.rtp("SELECT * FROM {0}FIRED_TRIGGERS WHERE SCHED_NAME = {1} AND TRIGGER_GROUP = ?"));
                ps.setString(1, groupName);
            }

            FiredTriggerRecord rec;
            for(rs = ps.executeQuery(); rs.next(); lst.add(rec)) {
                rec = new FiredTriggerRecord();
                rec.setFireInstanceId(rs.getString("ENTRY_ID"));
                rec.setFireInstanceState(rs.getString("STATE"));
                rec.setFireTimestamp(rs.getLong("FIRED_TIME"));
                rec.setScheduleTimestamp(rs.getLong("SCHED_TIME"));
                rec.setPriority(rs.getInt("PRIORITY"));
                rec.setSchedulerInstanceId(rs.getString("INSTANCE_NAME"));
                rec.setTriggerKey(TriggerKey.triggerKey(rs.getString("TRIGGER_NAME"), rs.getString("TRIGGER_GROUP")));
                if (!rec.getFireInstanceState().equals("ACQUIRED")) {
                    rec.setJobDisallowsConcurrentExecution(this.getBoolean(rs, "IS_NONCONCURRENT"));
                    rec.setJobRequestsRecovery(rs.getBoolean("REQUESTS_RECOVERY"));
                    rec.setJobKey(JobKey.jobKey(rs.getString("JOB_NAME"), rs.getString("JOB_GROUP")));
                }
            }

            LinkedList var11 = lst;
            return var11;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public List<FiredTriggerRecord> selectFiredTriggerRecordsByJob(Connection conn, String jobName, String groupName) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            List<FiredTriggerRecord> lst = new LinkedList();
            if (jobName != null) {
                ps = conn.prepareStatement(this.rtp("SELECT * FROM {0}FIRED_TRIGGERS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
                ps.setString(1, jobName);
                ps.setString(2, groupName);
            } else {
                ps = conn.prepareStatement(this.rtp("SELECT * FROM {0}FIRED_TRIGGERS WHERE SCHED_NAME = {1} AND JOB_GROUP = ?"));
                ps.setString(1, groupName);
            }

            FiredTriggerRecord rec;
            for(rs = ps.executeQuery(); rs.next(); lst.add(rec)) {
                rec = new FiredTriggerRecord();
                rec.setFireInstanceId(rs.getString("ENTRY_ID"));
                rec.setFireInstanceState(rs.getString("STATE"));
                rec.setFireTimestamp(rs.getLong("FIRED_TIME"));
                rec.setScheduleTimestamp(rs.getLong("SCHED_TIME"));
                rec.setPriority(rs.getInt("PRIORITY"));
                rec.setSchedulerInstanceId(rs.getString("INSTANCE_NAME"));
                rec.setTriggerKey(TriggerKey.triggerKey(rs.getString("TRIGGER_NAME"), rs.getString("TRIGGER_GROUP")));
                if (!rec.getFireInstanceState().equals("ACQUIRED")) {
                    rec.setJobDisallowsConcurrentExecution(this.getBoolean(rs, "IS_NONCONCURRENT"));
                    rec.setJobRequestsRecovery(rs.getBoolean("REQUESTS_RECOVERY"));
                    rec.setJobKey(JobKey.jobKey(rs.getString("JOB_NAME"), rs.getString("JOB_GROUP")));
                }
            }

            LinkedList var11 = lst;
            return var11;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public List<FiredTriggerRecord> selectInstancesFiredTriggerRecords(Connection conn, String instanceName) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        LinkedList var10;
        try {
            List<FiredTriggerRecord> lst = new LinkedList();
            ps = conn.prepareStatement(this.rtp("SELECT * FROM {0}FIRED_TRIGGERS WHERE SCHED_NAME = {1} AND INSTANCE_NAME = ?"));
            ps.setString(1, instanceName);
            rs = ps.executeQuery();

            while(rs.next()) {
                FiredTriggerRecord rec = new FiredTriggerRecord();
                rec.setFireInstanceId(rs.getString("ENTRY_ID"));
                rec.setFireInstanceState(rs.getString("STATE"));
                rec.setFireTimestamp(rs.getLong("FIRED_TIME"));
                rec.setScheduleTimestamp(rs.getLong("SCHED_TIME"));
                rec.setSchedulerInstanceId(rs.getString("INSTANCE_NAME"));
                rec.setTriggerKey(TriggerKey.triggerKey(rs.getString("TRIGGER_NAME"), rs.getString("TRIGGER_GROUP")));
                if (!rec.getFireInstanceState().equals("ACQUIRED")) {
                    rec.setJobDisallowsConcurrentExecution(this.getBoolean(rs, "IS_NONCONCURRENT"));
                    rec.setJobRequestsRecovery(rs.getBoolean("REQUESTS_RECOVERY"));
                    rec.setJobKey(JobKey.jobKey(rs.getString("JOB_NAME"), rs.getString("JOB_GROUP")));
                }

                rec.setPriority(rs.getInt("PRIORITY"));
                lst.add(rec);
            }

            var10 = lst;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var10;
    }

    public Set<String> selectFiredTriggerInstanceNames(Connection conn) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            Set<String> instanceNames = new HashSet();
            ps = conn.prepareStatement(this.rtp("SELECT DISTINCT INSTANCE_NAME FROM {0}FIRED_TRIGGERS WHERE SCHED_NAME = {1}"));
            rs = ps.executeQuery();

            while(rs.next()) {
                instanceNames.add(rs.getString("INSTANCE_NAME"));
            }

            HashSet var5 = instanceNames;
            return var5;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    public int deleteFiredTrigger(Connection conn, String entryId) throws SQLException {
        PreparedStatement ps = null;

        int var4;
        try {
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}FIRED_TRIGGERS WHERE SCHED_NAME = {1} AND ENTRY_ID = ?"));
            ps.setString(1, entryId);
            var4 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var4;
    }

    public int selectJobExecutionCount(Connection conn, JobKey jobKey) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        int var5;
        try {
            ps = conn.prepareStatement(this.rtp("SELECT COUNT(TRIGGER_NAME) FROM {0}FIRED_TRIGGERS WHERE SCHED_NAME = {1} AND JOB_NAME = ? AND JOB_GROUP = ?"));
            ps.setString(1, jobKey.getName());
            ps.setString(2, jobKey.getGroup());
            rs = ps.executeQuery();
            var5 = rs.next() ? rs.getInt(1) : 0;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }

        return var5;
    }

    public int insertSchedulerState(Connection conn, String theInstanceId, long checkInTime, long interval) throws SQLException {
        PreparedStatement ps = null;

        int var8;
        try {
            ps = conn.prepareStatement(this.rtp("INSERT INTO {0}SCHEDULER_STATE (SCHED_NAME, INSTANCE_NAME, LAST_CHECKIN_TIME, CHECKIN_INTERVAL) VALUES({1}, ?, ?, ?)"));
            ps.setString(1, theInstanceId);
            ps.setLong(2, checkInTime);
            ps.setLong(3, interval);
            var8 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var8;
    }

    public int deleteSchedulerState(Connection conn, String theInstanceId) throws SQLException {
        PreparedStatement ps = null;

        int var4;
        try {
            ps = conn.prepareStatement(this.rtp("DELETE FROM {0}SCHEDULER_STATE WHERE SCHED_NAME = {1} AND INSTANCE_NAME = ?"));
            ps.setString(1, theInstanceId);
            var4 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var4;
    }

    public int updateSchedulerState(Connection conn, String theInstanceId, long checkInTime) throws SQLException {
        PreparedStatement ps = null;

        int var6;
        try {
            ps = conn.prepareStatement(this.rtp("UPDATE {0}SCHEDULER_STATE SET LAST_CHECKIN_TIME = ? WHERE SCHED_NAME = {1} AND INSTANCE_NAME = ?"));
            ps.setLong(1, checkInTime);
            ps.setString(2, theInstanceId);
            var6 = ps.executeUpdate();
        } finally {
            closeStatement(ps);
        }

        return var6;
    }

    public List<SchedulerStateRecord> selectSchedulerStateRecords(Connection conn, String theInstanceId) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            List<SchedulerStateRecord> lst = new LinkedList();
            if (theInstanceId != null) {
                ps = conn.prepareStatement(this.rtp("SELECT * FROM {0}SCHEDULER_STATE WHERE SCHED_NAME = {1} AND INSTANCE_NAME = ?"));
                ps.setString(1, theInstanceId);
            } else {
                ps = conn.prepareStatement(this.rtp("SELECT * FROM {0}SCHEDULER_STATE WHERE SCHED_NAME = {1}"));
            }

            rs = ps.executeQuery();

            while(rs.next()) {
                SchedulerStateRecord rec = new SchedulerStateRecord();
                rec.setSchedulerInstanceId(rs.getString("INSTANCE_NAME"));
                rec.setCheckinTimestamp(rs.getLong("LAST_CHECKIN_TIME"));
                rec.setCheckinInterval(rs.getLong("CHECKIN_INTERVAL"));
                lst.add(rec);
            }

            LinkedList var10 = lst;
            return var10;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    protected final String rtp(String query) {
        return Util.rtp(query, this.tablePrefix, this.getSchedulerNameLiteral());
    }

    protected String getSchedulerNameLiteral() {
        if (this.schedNameLiteral == null) {
            this.schedNameLiteral = "'" + this.schedName + "'";
        }

        return this.schedNameLiteral;
    }

    protected ByteArrayOutputStream serializeObject(Object obj) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        if (null != obj) {
            ObjectOutputStream out = new ObjectOutputStream(baos);
            out.writeObject(obj);
            out.flush();
        }

        return baos;
    }

    protected ByteArrayOutputStream serializeJobData(JobDataMap data) throws IOException {
        if (this.canUseProperties()) {
            return this.serializeProperties(data);
        } else {
            try {
                return this.serializeObject(data);
            } catch (NotSerializableException var3) {
                throw new NotSerializableException("Unable to serialize JobDataMap for insertion into database because the value of property '" + this.getKeyOfNonSerializableValue(data) + "' is not serializable: " + var3.getMessage());
            }
        }
    }

    protected Object getKeyOfNonSerializableValue(Map<?, ?> data) {
        Iterator entryIter = data.entrySet().iterator();

        while(entryIter.hasNext()) {
            Entry<?, ?> entry = (Entry)entryIter.next();
            ByteArrayOutputStream baos = null;

            Object var6;
            try {
                baos = this.serializeObject(entry.getValue());
                continue;
            } catch (IOException var16) {
                var6 = entry.getKey();
            } finally {
                if (baos != null) {
                    try {
                        baos.close();
                    } catch (IOException var15) {
                        ;
                    }
                }

            }

            return var6;
        }

        return null;
    }

    private ByteArrayOutputStream serializeProperties(JobDataMap data) throws IOException {
        ByteArrayOutputStream ba = new ByteArrayOutputStream();
        if (null != data) {
            Properties properties = this.convertToProperty(data.getWrappedMap());
            properties.store(ba, "");
        }

        return ba;
    }

    protected Map<?, ?> convertFromProperty(Properties properties) throws IOException {
        return new HashMap(properties);
    }

    protected Properties convertToProperty(Map<?, ?> data) throws IOException {
        Properties properties = new Properties();
        Iterator entryIter = data.entrySet().iterator();

        while(entryIter.hasNext()) {
            Entry<?, ?> entry = (Entry)entryIter.next();
            Object key = entry.getKey();
            Object val = entry.getValue() == null ? "" : entry.getValue();
            if (!(key instanceof String)) {
                throw new IOException("JobDataMap keys/values must be Strings when the 'useProperties' property is set.  offending Key: " + key);
            }

            if (!(val instanceof String)) {
                throw new IOException("JobDataMap values must be Strings when the 'useProperties' property is set.  Key of offending value: " + key);
            }

            properties.put(key, val);
        }

        return properties;
    }

    protected Object getObjectFromBlob(ResultSet rs, String colName) throws ClassNotFoundException, IOException, SQLException {
        Object obj = null;
        Blob blobLocator = rs.getBlob(colName);
        if (blobLocator != null && blobLocator.length() != 0L) {
            InputStream binaryInput = blobLocator.getBinaryStream();
            if (null != binaryInput && (!(binaryInput instanceof ByteArrayInputStream) || ((ByteArrayInputStream)binaryInput).available() != 0)) {
                ObjectInputStream in = new ObjectInputStream(binaryInput);

                try {
                    obj = in.readObject();
                } finally {
                    in.close();
                }
            }
        }

        return obj;
    }

    protected Object getJobDataFromBlob(ResultSet rs, String colName) throws ClassNotFoundException, IOException, SQLException {
        if (this.canUseProperties()) {
            Blob blobLocator = rs.getBlob(colName);
            if (blobLocator != null) {
                InputStream binaryInput = blobLocator.getBinaryStream();
                return binaryInput;
            } else {
                return null;
            }
        } else {
            return this.getObjectFromBlob(rs, colName);
        }
    }

    public Set<String> selectPausedTriggerGroups(Connection conn) throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        HashSet set = new HashSet();

        try {
            ps = conn.prepareStatement(this.rtp("SELECT TRIGGER_GROUP FROM {0}PAUSED_TRIGGER_GRPS WHERE SCHED_NAME = {1}"));
            rs = ps.executeQuery();

            while(rs.next()) {
                String groupName = rs.getString("TRIGGER_GROUP");
                set.add(groupName);
            }

            HashSet var9 = set;
            return var9;
        } finally {
            closeResultSet(rs);
            closeStatement(ps);
        }
    }

    protected static void closeResultSet(ResultSet rs) {
        if (null != rs) {
            try {
                rs.close();
            } catch (SQLException var2) {
                ;
            }
        }

    }

    protected static void closeStatement(Statement statement) {
        if (null != statement) {
            try {
                statement.close();
            } catch (SQLException var2) {
                ;
            }
        }

    }

    protected void setBoolean(PreparedStatement ps, int index, boolean val) throws SQLException {
        ps.setBoolean(index, val);
    }

    protected boolean getBoolean(ResultSet rs, String columnName) throws SQLException {
        return rs.getBoolean(columnName);
    }

    protected boolean getBoolean(ResultSet rs, int columnIndex) throws SQLException {
        return rs.getBoolean(columnIndex);
    }

    protected void setBytes(PreparedStatement ps, int index, ByteArrayOutputStream baos) throws SQLException {
        ps.setBytes(index, baos == null ? new byte[0] : baos.toByteArray());
    }
}

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值