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

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

?? jobstorecmt.java

?? Java中非常實用流控制工具
?? JAVA
字號:
/* 
 * Copyright 2004-2005 OpenSymphony 
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 
 * use this file except in compliance with the License. You may obtain a copy 
 * of the License at 
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0 
 *   
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
 * License for the specific language governing permissions and limitations 
 * under the License.
 * 
 */

/*
 * Previously Copyright (c) 2001-2004 James House
 */
package org.quartz.impl.jdbcjobstore;

import java.sql.Connection;
import java.sql.SQLException;

import org.quartz.JobPersistenceException;
import org.quartz.SchedulerConfigException;
import org.quartz.spi.ClassLoadHelper;
import org.quartz.spi.SchedulerSignaler;
import org.quartz.utils.DBConnectionManager;

/**
 * <p>
 * <code>JobStoreCMT</code> is meant to be used in an application-server
 * environment that provides container-managed-transactions. No commit /
 * rollback will be1 handled by this class.
 * </p>
 * 
 * <p>
 * If you need commit / rollback, use <code>{@link
 * org.quartz.impl.jdbcjobstore.JobStoreTX}</code>
 * instead.
 * </p>
 * 
 * @author <a href="mailto:jeff@binaryfeed.org">Jeffrey Wescott</a>
 * @author James House
 * @author Srinivas Venkatarangaiah
 *  
 */
public class JobStoreCMT extends JobStoreSupport {

    /*
     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     * 
     * Data members.
     * 
     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     */

    protected String nonManagedTxDsName;

    // Great name huh?
    protected boolean dontSetNonManagedTXConnectionAutoCommitFalse = false;

    
    protected boolean setTxIsolationLevelReadCommitted = false;
    
    /*
     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     * 
     * Interface.
     * 
     * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     */

    /**
     * <p>
     * Set the name of the <code>DataSource</code> that should be used for
     * performing database functions.
     * </p>
     */
    public void setNonManagedTXDataSource(String nonManagedTxDsName) {
        this.nonManagedTxDsName = nonManagedTxDsName;
    }

    /**
     * <p>
     * Get the name of the <code>DataSource</code> that should be used for
     * performing database functions.
     * </p>
     */
    public String getNonManagedTXDataSource() {
        return nonManagedTxDsName;
    }

    public boolean isDontSetNonManagedTXConnectionAutoCommitFalse() {
        return dontSetNonManagedTXConnectionAutoCommitFalse;
    }

    /**
     * Don't call set autocommit(false) on connections obtained from the
     * DataSource. This can be helpfull in a few situations, such as if you
     * have a driver that complains if it is called when it is already off.
     * 
     * @param b
     */
    public void setDontSetNonManagedTXConnectionAutoCommitFalse(boolean b) {
        dontSetNonManagedTXConnectionAutoCommitFalse = b;
    }


    public boolean isTxIsolationLevelReadCommitted() {
        return setTxIsolationLevelReadCommitted;
    }

    /**
     * Set the transaction isolation level of DB connections to sequential.
     * 
     * @param b
     */
    public void setTxIsolationLevelReadCommitted(boolean b) {
        setTxIsolationLevelReadCommitted = b;
    }
    

    public void initialize(ClassLoadHelper loadHelper,
            SchedulerSignaler signaler) throws SchedulerConfigException {

        if (nonManagedTxDsName == null) {
            throw new SchedulerConfigException(
                "Non-ManagedTX DataSource name not set!  " +
                "If your 'org.quartz.jobStore.dataSource' is XA, then set " + 
                "'org.quartz.jobStore.nonManagedTXDataSource' to a non-XA "+ 
                "datasource (for the same DB).  " + 
                "Otherwise, you can set them to be the same.");
        }

        if (getLockHandler() == null) {
            // If the user hasn't specified an explicit lock handler, 
            // then we *must* use DB locks with CMT...
            setUseDBLocks(true);
        }

        super.initialize(loadHelper, signaler);

        getLog().info("JobStoreCMT initialized.");
    }
    
    public void shutdown() {

        super.shutdown();
        
        try {
            DBConnectionManager.getInstance().shutdown(getNonManagedTXDataSource());
        } catch (SQLException sqle) {
            getLog().warn("Database connection shutdown unsuccessful.", sqle);
        }
    }

    protected Connection getNonManagedTXConnection()
        throws JobPersistenceException {
        Connection conn = null;
        try {
            conn = DBConnectionManager.getInstance().getConnection(
                    getNonManagedTXDataSource());
        } catch (SQLException sqle) {
            throw new JobPersistenceException(
                "Failed to obtain DB connection from data source '"
                        + getNonManagedTXDataSource() + "': "
                        + sqle.toString(), sqle);
        } catch (Throwable e) {
            throw new JobPersistenceException(
                "Failed to obtain DB connection from data source '"
                        + getNonManagedTXDataSource() + "': "
                        + e.toString(), e,
                JobPersistenceException.ERR_PERSISTENCE_CRITICAL_FAILURE);
        }

        if (conn == null) { 
            throw new JobPersistenceException(
                "Could not get connection from DataSource '"
                        + getNonManagedTXDataSource() + "'"); 
        }

        // Protect connection attributes we might change.
        conn = getAttributeRestoringConnection(conn);
        
        // Set any connection connection attributes we are to override.
        try {
            if (!isDontSetNonManagedTXConnectionAutoCommitFalse()) {
                conn.setAutoCommit(false);
            }
            
            if (isTxIsolationLevelReadCommitted()) {
                conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
            }
        } 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;
    }
    
    /**
     * Execute the given callback having optionally aquired the given lock.  
     * Because CMT assumes that the connection is already part of a managed
     * transaction, it does not attempt to commit or rollback the 
     * enclosing transaction.
     * 
     * @param lockName The name of the lock to aquire, for example 
     * "TRIGGER_ACCESS".  If null, then no lock is aquired, but the
     * txCallback is still executed in a transaction.
     * 
     * @see JobStoreSupport#executeInNonManagedTXLock(String, TransactionCallback)
     * @see JobStoreTX#executeInLock(String, TransactionCallback)
     * @see JobStoreSupport#getNonManagedTXConnection()
     * @see JobStoreSupport#getConnection()
     */
    protected Object executeInLock(
            String lockName, 
            TransactionCallback txCallback) throws JobPersistenceException {
        boolean transOwner = false;
        Connection conn = null;
        try {
            if (lockName != null) {
                // If we aren't using db locks, then delay getting DB connection 
                // until after aquiring the lock since it isn't needed.
                if (getLockHandler().requiresConnection()) {
                    conn = getConnection();
                }
                
                transOwner = getLockHandler().obtainLock(conn, lockName);
            }

            if (conn == null) {
                conn = getConnection();
            }

            return txCallback.execute(conn);
        } finally {
            try {
                releaseLock(conn, LOCK_TRIGGER_ACCESS, transOwner);
            } finally {
                cleanupConnection(conn);
            }
        }
    }
}

// EOF

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆传媒一区二区三区| 日韩高清国产一区在线| 99re8在线精品视频免费播放| 91麻豆免费看片| 亚洲色图欧美偷拍| 日本精品视频一区二区| 一区二区三区在线播放| 色噜噜久久综合| 亚洲综合丝袜美腿| 99久久精品情趣| 最新国产の精品合集bt伙计| 久久成人久久鬼色| 久久午夜国产精品| 成人性色生活片| 亚洲男人的天堂一区二区| 欧日韩精品视频| 免费欧美高清视频| 国产亚洲成年网址在线观看| 国产精品一二一区| 亚洲精品水蜜桃| 欧美一区二区三区人| 精品亚洲欧美一区| 国产精品伦理在线| 欧美在线free| 国产美女精品在线| 亚洲女爱视频在线| 欧美浪妇xxxx高跟鞋交| 91国偷自产一区二区三区成为亚洲经典 | 精品国产三级a在线观看| 成人丝袜18视频在线观看| 亚洲专区一二三| 欧美韩日一区二区三区四区| 91免费在线视频观看| 久久成人免费日本黄色| 一区二区三区欧美在线观看| 日韩视频在线观看一区二区| 99精品久久99久久久久| 精彩视频一区二区| 亚洲午夜久久久| 欧美国产视频在线| 激情图片小说一区| 精品处破学生在线二十三| av在线一区二区三区| 日本三级韩国三级欧美三级| 亚洲欧美一区二区三区孕妇| 精品三级在线观看| 色综合色狠狠综合色| 中文字幕精品综合| 精品久久久久久久人人人人传媒 | 亚洲靠逼com| 国产片一区二区三区| 欧美精品在欧美一区二区少妇| 波多野结衣视频一区| 国产成人av一区二区三区在线| 久久精品国产精品青草| 青青青爽久久午夜综合久久午夜| 亚洲超丰满肉感bbw| 视频一区视频二区中文| 免费成人美女在线观看| 在线观看日韩av先锋影音电影院| 亚洲国产精品精华液网站 | 亚洲亚洲精品在线观看| 亚洲国产成人高清精品| 免费av成人在线| 狠狠色综合播放一区二区| 国产精品99久| 成人的网站免费观看| 99国产欧美另类久久久精品| 色诱视频网站一区| 欧美色偷偷大香| 欧美一区中文字幕| 国产性色一区二区| 成人欧美一区二区三区白人 | 欧美丝袜丝交足nylons| 欧美一区二区在线看| 国产亚洲欧美激情| 综合久久一区二区三区| 男女男精品视频| 99在线视频精品| 欧美色男人天堂| 久久精品无码一区二区三区| 亚洲女性喷水在线观看一区| 午夜不卡av在线| 国产99久久久久| 欧美久久久久久久久中文字幕| 国产情人综合久久777777| 亚洲激情自拍偷拍| 成人午夜激情片| 精品日韩在线观看| 亚洲国产日日夜夜| 福利一区在线观看| 在线综合视频播放| 亚洲人123区| 国产精品888| 精品国产一区二区三区四区四 | 91亚洲国产成人精品一区二区三| 91精品国产一区二区| 尤物在线观看一区| 成人手机在线视频| 久久免费视频色| 麻豆91精品视频| 欧美日韩aaaaaa| 亚洲图片欧美视频| 欧美色图片你懂的| 一二三区精品视频| 色综合久久综合| 综合亚洲深深色噜噜狠狠网站| 久久精品久久久精品美女| 欧美日韩国产中文| 亚洲第一成年网| 欧美剧在线免费观看网站| 一区二区三区**美女毛片| 99久久国产综合色|国产精品| 久久久www成人免费毛片麻豆| 狠狠网亚洲精品| 精品欧美一区二区久久| 美女mm1313爽爽久久久蜜臀| 欧美日韩大陆一区二区| 奇米影视7777精品一区二区| 欧美日韩久久不卡| 免费在线观看一区| 欧美电影精品一区二区| 激情综合色综合久久| 精品99999| 99久久精品免费精品国产| 亚洲图片激情小说| 欧美影片第一页| 免费观看久久久4p| 欧美国产激情二区三区| 成人三级伦理片| 亚洲综合免费观看高清完整版在线 | 久久99精品一区二区三区三区| 日韩美一区二区三区| 粉嫩13p一区二区三区| 日本成人在线网站| xfplay精品久久| 91丨九色丨蝌蚪富婆spa| 亚洲国产视频一区| 国产偷国产偷精品高清尤物| 91视频在线观看免费| 青青草97国产精品免费观看无弹窗版 | 成人一区二区视频| 亚欧色一区w666天堂| 久久先锋影音av| 欧美日韩中文精品| 国产精品一级片在线观看| 亚洲一区二区三区四区五区黄| 亚洲精品在线免费播放| 欧美伊人久久大香线蕉综合69| 国产一区二区三区免费| 亚洲电影视频在线| 国产精品久久久久久亚洲伦| 欧美理论电影在线| 色先锋久久av资源部| 国产电影一区二区三区| 日本特黄久久久高潮| 亚洲欧洲av在线| 欧美激情中文不卡| 欧美大白屁股肥臀xxxxxx| 在线亚洲精品福利网址导航| 成人免费福利片| 精品一区精品二区高清| 午夜精品久久久久久不卡8050| 国产精品久久777777| 国产网站一区二区| 久久久精品日韩欧美| 欧美成人精品二区三区99精品| 欧美日韩美少妇| 一本一道波多野结衣一区二区| 国产91高潮流白浆在线麻豆 | 色素色在线综合| 国产美女娇喘av呻吟久久| 麻豆国产精品视频| 日韩精品国产精品| 人妖欧美一区二区| 肉色丝袜一区二区| 日本系列欧美系列| 免费观看久久久4p| 九色porny丨国产精品| 麻豆精品一区二区三区| 蜜桃av一区二区三区| 国内一区二区视频| 国产最新精品免费| 国产成人午夜片在线观看高清观看| 精品一二线国产| 成人午夜在线免费| 91啪亚洲精品| 在线免费观看日本欧美| 91麻豆精品国产自产在线| 欧美一区二区精品| 国产欧美日韩卡一| 亚洲精品视频在线观看网站| 亚洲国产精品一区二区www| 国产高清亚洲一区| 亚洲欧美日韩国产另类专区| 亚洲裸体在线观看| 亚洲综合丁香婷婷六月香| 日韩专区欧美专区| 色婷婷久久久久swag精品| 欧美日韩精品欧美日韩精品一综合|