亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? jobstoresupport.java

?? Java中非常實用流控制工具
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
        // Protect connection attributes we might change.
        conn = getAttributeRestoringConnection(conn);

        // Set any connection connection attributes we are to override.
        try {
            if (!isDontSetAutoCommitFalse()) {
                conn.setAutoCommit(false);
            }

            if(isTxIsolationLevelSerializable()) {
                conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
            }
        } catch (SQLException sqle) {
            getLog().warn("Failed to override connection auto commit/transaction isolation.", sqle);
        } catch (Throwable e) {
            try { conn.close(); } catch(Throwable tt) {}
            
            throw new JobPersistenceException(
                "Failure setting up connection.", e);
        }
    
        return conn;
    }
    
    protected void releaseLock(Connection conn, String lockName, boolean doIt) {
        if (doIt && conn != null) {
            try {
                getLockHandler().releaseLock(conn, lockName);
            } catch (LockException le) {
                getLog().error("Error returning lock: " + le.getMessage(), le);
            }
        }
    }
    
    /**
     * Removes all volatile data.
     * 
     * @throws JobPersistenceException If jobs could not be recovered.
     */
    protected void cleanVolatileTriggerAndJobs()
        throws JobPersistenceException {
        executeInNonManagedTXLock(
            LOCK_TRIGGER_ACCESS,
            new VoidTransactionCallback() {
                public void execute(Connection conn) throws JobPersistenceException {
                    cleanVolatileTriggerAndJobs(conn);
                }
            });
    }
    
    /**
     * <p>
     * Removes all volatile data.
     * </p>
     * 
     * @throws JobPersistenceException
     *           if jobs could not be recovered
     */
    protected void cleanVolatileTriggerAndJobs(Connection conn)
        throws JobPersistenceException {
        try {
            // find volatile jobs & triggers...
            Key[] volatileTriggers = getDelegate().selectVolatileTriggers(conn);
            Key[] volatileJobs = getDelegate().selectVolatileJobs(conn);

            for (int i = 0; i < volatileTriggers.length; i++) {
                removeTrigger(conn, null, volatileTriggers[i].getName(),
                        volatileTriggers[i].getGroup());
            }
            getLog().info(
                    "Removed " + volatileTriggers.length
                            + " Volatile Trigger(s).");

            for (int i = 0; i < volatileJobs.length; i++) {
                removeJob(conn, null, volatileJobs[i].getName(),
                        volatileJobs[i].getGroup(), true);
            }
            getLog().info(
                    "Removed " + volatileJobs.length + " Volatile Job(s).");

            // clean up any fired trigger entries
            getDelegate().deleteVolatileFiredTriggers(conn);

        } catch (Exception e) {
            throw new JobPersistenceException("Couldn't clean volatile data: "
                    + e.getMessage(), e);
        }
    }

    /**
     * Recover any failed or misfired jobs and clean up the data store as
     * appropriate.
     * 
     * @throws JobPersistenceException if jobs could not be recovered
     */
    protected void recoverJobs() throws JobPersistenceException {
        executeInNonManagedTXLock(
            LOCK_TRIGGER_ACCESS,
            new VoidTransactionCallback() {
                public void execute(Connection conn) throws JobPersistenceException {
                    recoverJobs(conn);
                }
            });
    }
    
    /**
     * <p>
     * Will recover any failed or misfired jobs and clean up the data store as
     * appropriate.
     * </p>
     * 
     * @throws JobPersistenceException
     *           if jobs could not be recovered
     */
    protected void recoverJobs(Connection conn) throws JobPersistenceException {
        try {
            // update inconsistent job states
            int rows = getDelegate().updateTriggerStatesFromOtherStates(conn,
                    STATE_WAITING, STATE_ACQUIRED, STATE_BLOCKED);

            rows += getDelegate().updateTriggerStatesFromOtherStates(conn,
                        STATE_PAUSED, STATE_PAUSED_BLOCKED, STATE_PAUSED_BLOCKED);
            
            getLog().info(
                    "Freed " + rows
                            + " triggers from 'acquired' / 'blocked' state.");

            // clean up misfired jobs
            recoverMisfiredJobs(conn, true);
            
            // recover jobs marked for recovery that were not fully executed
            Trigger[] recoveringJobTriggers = getDelegate()
                    .selectTriggersForRecoveringJobs(conn);
            getLog()
                    .info(
                            "Recovering "
                                    + recoveringJobTriggers.length
                                    + " jobs that were in-progress at the time of the last shut-down.");

            for (int i = 0; i < recoveringJobTriggers.length; ++i) {
                if (jobExists(conn, recoveringJobTriggers[i].getJobName(),
                        recoveringJobTriggers[i].getJobGroup())) {
                    recoveringJobTriggers[i].computeFirstFireTime(null);
                    storeTrigger(conn, null, recoveringJobTriggers[i], null, false,
                            STATE_WAITING, false, true);
                }
            }
            getLog().info("Recovery complete.");

            // remove lingering 'complete' triggers...
            Key[] ct = getDelegate().selectTriggersInState(conn, STATE_COMPLETE);
            for(int i=0; ct != null && i < ct.length; i++) {
                removeTrigger(conn, null, ct[i].getName(), ct[i].getGroup());
            }
            getLog().info(
                "Removed " + (ct != null ? ct.length : 0)
                + " 'complete' triggers.");
            
            // clean up any fired trigger entries
            int n = getDelegate().deleteFiredTriggers(conn);
            getLog().info("Removed " + n + " stale fired job entries.");
        } catch (JobPersistenceException e) {
            throw e;
        } catch (Exception e) {
            throw new JobPersistenceException("Couldn't recover jobs: "
                    + e.getMessage(), e);
        }
    }

    protected long getMisfireTime() {
        long misfireTime = System.currentTimeMillis();
        if (getMisfireThreshold() > 0) {
            misfireTime -= getMisfireThreshold();
        }

        return (misfireTime > 0) ? misfireTime : 0;
    }

    /**
     * Helper class for returning the composite result of trying
     * to recover misfired jobs.
     */
    protected static class RecoverMisfiredJobsResult {
        public static final RecoverMisfiredJobsResult NO_OP =
            new RecoverMisfiredJobsResult(false, 0, Long.MAX_VALUE);
        
        private boolean _hasMoreMisfiredTriggers;
        private int _processedMisfiredTriggerCount;
        private long _earliestNewTime;
        
        public RecoverMisfiredJobsResult(
            boolean hasMoreMisfiredTriggers, int processedMisfiredTriggerCount, long earliestNewTime) {
            _hasMoreMisfiredTriggers = hasMoreMisfiredTriggers;
            _processedMisfiredTriggerCount = processedMisfiredTriggerCount;
            _earliestNewTime = earliestNewTime;
        }
        
        public boolean hasMoreMisfiredTriggers() {
            return _hasMoreMisfiredTriggers;
        }
        public int getProcessedMisfiredTriggerCount() {
            return _processedMisfiredTriggerCount;
        } 
        public long getEarliestNewTime() {
            return _earliestNewTime;
        } 
    }
    
    protected RecoverMisfiredJobsResult recoverMisfiredJobs(
        Connection conn, boolean recovering)
        throws JobPersistenceException, SQLException {

        // If recovering, we want to handle all of the misfired
        // triggers right away.
        int maxMisfiresToHandleAtATime = 
            (recovering) ? -1 : getMaxMisfiresToHandleAtATime();
        
        List misfiredTriggers = new ArrayList();
        long earliestNewTime = Long.MAX_VALUE;
        // We must still look for the MISFIRED state in case triggers were left 
        // in this state when upgrading to this version that does not support it. 
        boolean hasMoreMisfiredTriggers =
            getDelegate().selectMisfiredTriggersInStates(
                conn, STATE_MISFIRED, STATE_WAITING, getMisfireTime(), 
                maxMisfiresToHandleAtATime, misfiredTriggers);

        if (hasMoreMisfiredTriggers) {
            getLog().info(
                "Handling the first " + misfiredTriggers.size() +
                " triggers that missed their scheduled fire-time.  " +
                "More misfired triggers remain to be processed.");
        } else if (misfiredTriggers.size() > 0) { 
            getLog().info(
                "Handling " + misfiredTriggers.size() + 
                " trigger(s) that missed their scheduled fire-time.");
        } else {
            getLog().debug(
                "Found 0 triggers that missed their scheduled fire-time.");
            return RecoverMisfiredJobsResult.NO_OP; 
        }

        for (Iterator misfiredTriggerIter = misfiredTriggers.iterator(); misfiredTriggerIter.hasNext();) {
            Key triggerKey = (Key) misfiredTriggerIter.next();
            
            Trigger trig = 
                retrieveTrigger(conn, triggerKey.getName(), triggerKey.getGroup());

            if (trig == null) {
                continue;
            }

            doUpdateOfMisfiredTrigger(conn, null, trig, false, STATE_WAITING, recovering);

            if(trig.getNextFireTime() != null && trig.getNextFireTime().getTime() < earliestNewTime)
            	earliestNewTime = trig.getNextFireTime().getTime();
            
            signaler.notifyTriggerListenersMisfired(trig);
        }

        return new RecoverMisfiredJobsResult(
                hasMoreMisfiredTriggers, misfiredTriggers.size(), earliestNewTime);
    }

    protected boolean updateMisfiredTrigger(Connection conn,
            SchedulingContext ctxt, String triggerName, String groupName,
            String newStateIfNotComplete, boolean forceState) // TODO: probably
            // get rid of
            // this
        throws JobPersistenceException {
        try {

            Trigger trig = getDelegate().selectTrigger(conn, triggerName,
                    groupName);

            long misfireTime = System.currentTimeMillis();
            if (getMisfireThreshold() > 0) {
                misfireTime -= getMisfireThreshold();
            }

            if (trig.getNextFireTime().getTime() > misfireTime) {
                return false;
            }

            doUpdateOfMisfiredTrigger(conn, ctxt, trig, forceState, newStateIfNotComplete, false);
            
            signaler.notifySchedulerListenersFinalized(trig);

            return true;

        } catch (Exception e) {
            throw new JobPersistenceException(
                    "Couldn't update misfired trigger '" + groupName + "."
                            + triggerName + "': " + e.getMessage(), e);
        }
    }

    private void doUpdateOfMisfiredTrigger(Connection conn, SchedulingContext ctxt, Trigger trig, boolean forceState, String newStateIfNotComplete, boolean recovering) throws JobPersistenceException {
        Calendar cal = null;
        if (trig.getCalendarName() != null) {
            cal = retrieveCalendar(conn, ctxt, trig.getCalendarName());
        }

        signaler.notifyTriggerListenersMisfired(trig);

        trig.updateAfterMisfire(cal);

        if (trig.getNextFireTime() == null) {
            storeTrigger(conn, ctxt, trig,
                null, true, STATE_COMPLETE, forceState, recovering);
        } else {
            storeTrigger(conn, ctxt, trig, null, true, newStateIfNotComplete,
                    forceState, false);
        }
    }

    /**
     * <p>
     * Store the given <code>{@link org.quartz.JobDetail}</code> and <code>{@link org.quartz.Trigger}</code>.
     * </p>
     * 
     * @param newJob
     *          The <code>JobDetail</code> to be stored.
     * @param newTrigger
     *          The <code>Trigger</code> to be stored.
     * @throws ObjectAlreadyExistsException
     *           if a <code>Job</code> with the same name/group already
     *           exists.
     */
    public void storeJobAndTrigger(final SchedulingContext ctxt, final JobDetail newJob,
            final Trigger newTrigger) 
        throws ObjectAlreadyExistsException, JobPersistenceException {
        executeInLock(
            (isLockOnInsert()) ? LOCK_TRIGGER_ACCESS : null,
            new VoidTransactionCallback() {
                public void execute(Connection conn) throws JobPersistenceException {
                    if (newJob.isVolatile() && !newTrigger.isVolatile()) {
                        JobPersistenceException jpe = 
                            new JobPersistenceException(
                                "Cannot associate non-volatile trigger with a volatile job!");
                        jpe.setErrorCode(SchedulerException.ERR_CLIENT_ERROR);
                        throw jpe;
                    }

                    storeJob(conn, ctxt, newJob, false);
                    storeTrigger(conn, ctxt, newTrigger, newJob, false,
                            Constants.STATE_WAITING, false, false);
                }
            });
    }
    
    /**
     * <p>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产毛片一区二区| 亚洲综合免费观看高清完整版 | 色狠狠桃花综合| 欧美一区二区三区精品| 国产精品久久久一本精品| 三级影片在线观看欧美日韩一区二区| 极品少妇xxxx精品少妇偷拍| 欧美日韩激情一区二区| 成人欧美一区二区三区黑人麻豆| 久热成人在线视频| 欧美日韩国产综合一区二区三区| 国产精品久久影院| 国产精品一卡二卡| 欧美一二三区精品| 婷婷开心久久网| 91免费视频大全| 国产精品丝袜久久久久久app| 日本成人在线视频网站| 欧美日韩成人综合| 一区二区在线观看av| 成人黄色一级视频| 久久久久国产免费免费| 久久电影网站中文字幕| 91.xcao| 亚洲黄色av一区| 91丨porny丨首页| 欧美日韩三级一区| 色婷婷久久综合| 成人午夜私人影院| 国产91丝袜在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 中文字幕中文字幕在线一区 | 日本久久一区二区| 蜜臀av一区二区| 成人网页在线观看| 亚洲欧洲av在线| 成人的网站免费观看| 国产精品每日更新在线播放网址| 激情另类小说区图片区视频区| 欧美日韩视频第一区| 亚洲不卡av一区二区三区| 欧美久久久久久久久久 | 欧美日韩中文一区| 一区二区三区在线播放| 在线区一区二视频| 亚洲小说春色综合另类电影| 欧美高清www午色夜在线视频| 蜜乳av一区二区三区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 久久你懂得1024| 国产精品性做久久久久久| 国产精品久久看| 在线这里只有精品| 无码av免费一区二区三区试看| 欧美一区二区三区播放老司机| 久久电影网站中文字幕| 欧美韩日一区二区三区四区| 99久久精品国产一区| 午夜久久久久久久久久一区二区| 日韩精品一区二区三区四区| 国产在线精品一区二区三区不卡 | 欧美mv和日韩mv的网站| 国产麻豆精品95视频| 亚洲三级久久久| 欧美一级欧美三级在线观看| 国产精品自拍一区| 亚洲激情六月丁香| 日韩欧美专区在线| 成人av电影免费在线播放| 亚洲国产成人精品视频| 久久青草欧美一区二区三区| 欧洲日韩一区二区三区| 精品亚洲免费视频| 亚洲欧美激情小说另类| 一区二区成人在线视频| 黄页视频在线91| 日本一二三不卡| www.亚洲在线| 亚洲国产精品t66y| 日本va欧美va精品发布| 北条麻妃国产九九精品视频| 日韩精品一区二区三区四区视频| 夜夜爽夜夜爽精品视频| 在线观看亚洲专区| 夜夜嗨av一区二区三区网页| 色视频一区二区| 欧美va亚洲va香蕉在线| 国产精品99久久久久久宅男| 午夜伦欧美伦电影理论片| 日本一区二区免费在线| 欧美一区二区黄色| 91成人免费在线| 91亚洲大成网污www| 国产成人综合亚洲网站| 久久99精品久久久| 午夜激情一区二区三区| 一区二区三区四区蜜桃| 国产精品美女视频| 国产亚洲福利社区一区| 日韩免费在线观看| 欧美日韩一区二区三区四区五区| 成人国产精品视频| 激情另类小说区图片区视频区| 日韩av在线发布| 一区二区三区四区av| 亚洲人成小说网站色在线| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产一区二区三区香蕉| 日日骚欧美日韩| 性久久久久久久| 婷婷亚洲久悠悠色悠在线播放| 亚洲综合图片区| 亚洲午夜三级在线| 亚洲国产精品麻豆| 天天亚洲美女在线视频| 婷婷成人综合网| 日日欢夜夜爽一区| 日韩av网站免费在线| 毛片av一区二区三区| 久久疯狂做爰流白浆xx| 精品一区二区在线播放| 国产美女精品人人做人人爽| 国产精品18久久久久久久网站| 另类小说图片综合网| 激情综合色综合久久综合| 激情综合色播五月| 国产福利一区在线观看| 972aa.com艺术欧美| 欧洲亚洲精品在线| 欧美一级精品在线| 久久网站最新地址| 国产精品三级视频| 日韩美女视频19| 亚洲成av人片| 91污片在线观看| 国产美女一区二区| 91精品国产综合久久久久久久| 亚洲欧洲在线观看av| 国产亚洲va综合人人澡精品 | 色综合天天综合网天天看片| 国产成人夜色高潮福利影视| 卡一卡二国产精品| 激情图片小说一区| 成人深夜福利app| 欧美一区二区视频在线观看2022 | 欧美日韩久久久一区| 日韩一区二区免费在线电影| 久久精品欧美一区二区三区麻豆 | 婷婷丁香激情综合| 国产激情91久久精品导航| 91亚洲精品乱码久久久久久蜜桃| 欧美吻胸吃奶大尺度电影| 精品国产伦一区二区三区观看方式 | 国产精品中文欧美| 91视频在线观看| 日韩一区二区电影在线| 久久精品欧美日韩| 夜夜嗨av一区二区三区中文字幕| 麻豆国产精品一区二区三区| 不卡区在线中文字幕| 欧美精品乱人伦久久久久久| 欧美激情综合在线| 亚洲国产一区二区在线播放| 国产伦精品一区二区三区视频青涩| 一本到三区不卡视频| 精品国内片67194| 亚洲激情自拍视频| 国产福利精品导航| 日韩三级免费观看| 亚洲最色的网站| 国产成a人亚洲| 欧美一区二区在线视频| 国产精品乱码久久久久久| 久久成人18免费观看| 欧美图片一区二区三区| 中文字幕精品—区二区四季| 美腿丝袜亚洲一区| 欧美日韩国产综合视频在线观看| 中文字幕免费不卡| 国产真实乱对白精彩久久| 欧美日韩国产免费一区二区| 国产精品国产a| 国产主播一区二区三区| 日韩久久精品一区| 日本不卡的三区四区五区| 色天天综合久久久久综合片| 亚洲国产成人自拍| 国产米奇在线777精品观看| 精品国产亚洲在线| 另类小说视频一区二区| 欧美一个色资源| 日本美女一区二区三区| 91精品在线观看入口| 午夜影院久久久| 91精品国产综合久久久久| 亚洲国产人成综合网站| 欧美日韩和欧美的一区二区| 亚洲妇熟xx妇色黄| 欧美区在线观看| 麻豆精品蜜桃视频网站|