⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xadatasourceimpl.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
字号:
/* * Licensed under the X license (see http://www.x.org/terms.htm) */package org.ofbiz.minerva.pool.jdbc.xa.wrapper;import javax.sql.XAConnection;import javax.sql.XADataSource;import java.io.PrintWriter;import java.sql.Connection;import java.sql.Driver;import java.sql.DriverManager;import java.sql.SQLException;import java.util.Properties;import org.apache.log4j.Logger;/** * Transactional DataSource wrapper for JDBC 1.0 drivers.  This is very * lightweight - it just passes requests through to an underlying driver, and * wraps the results with an XAConnection.  The XAConnection and corresponding * XAResource are responsible for closing the connection when appropriate. * Note that the underlying driver may perform pooling, but need not.  This * class does not add any pooling capabilities. * * @author Aaron Mulder (ammulder@alumni.princeton.edu) */public class XADataSourceImpl implements XADataSource {    private String url;    private String user;    private String password;    private String driverName;    private Driver driver;    private Properties properties;    private int loginTimeout;    private PrintWriter logWriter;    private boolean saveStackTrace;    private static Logger log = Logger.getLogger(XADataSourceImpl.class);    /**     * Empty constructure for beans, reflection, etc.     */    public XADataSourceImpl() {    }    /**     * Specifies the URL and properties to connect to the underlying driver.     * If the properties are null, they will not be used.     */    public XADataSourceImpl(String url, Properties properties) {        this.url = url;        this.properties = properties;    }    /**     * Gets the JDBC URL used to open an underlying connection.     */    public String getURL() {        return url;    }    /**     * Sets the JDBC URL used to open an underlying connection.     */    public void setURL(String url) {        this.url = url;    }    /**     * Gets the JDBC user name used to open an underlying connection.     */    public String getUser() {        return user;    }    /**     * Sets the JDBC user name used to open an underlying connection.     * This is optional - use it only if your underlying driver requires it.     */    public void setUser(String user) {        this.user = user;    }    /**     * Gets the JDBC password used to open an underlying connection.     */    public String getPassword() {        return password;    }    /**     * Sets the JDBC password used to open an underlying connection.     * This is optional - use it only if your underlying driver requires it.     */    public void setPassword(String password) {        this.password = password;    }    public void setDriver(String driverName) {        this.driverName = driverName;    }    /**     * Gets the JDBC properties used to open an underlying connection.     */    public Properties getProperties() {        return properties;    }    /**     * Sets the JDBC properties used to open an underlying connection.     * This is optional - use it only if your underlying driver requires it.     */    public void setProperties(Properties properties) {        this.properties = properties;    }    /**     * Have XAClientConnections save a stack trace on creation     * This is useful for debugging non-closed connections.     * It must be used with ReleaseOnCommit option     */    public boolean getSaveStackTrace() {        return saveStackTrace;    }    public void setSaveStackTrace(boolean save) {        saveStackTrace = save;    }    /**     * Gets the log writer used to record when XAConnections are opened.     */    public PrintWriter getLogWriter() throws SQLException {        return logWriter;    }    /**     * Sets a log writer used to record when XAConnections are opened.     */    public void setLogWriter(PrintWriter writer) throws SQLException {        if (writer == null) {            logWriter = null;        }    }    /**     * This is not used by the current implementation, since the effect would     * differ depending on the underlying driver.     */    public int getLoginTimeout() throws SQLException {        return loginTimeout;    }    /**     * This is not used by the current implementation, since the effect would     * differ depending on the underlying driver.     */    public void setLoginTimeout(int timeout) throws SQLException {        loginTimeout = timeout;    }    private void loadDriver() throws SQLException {        if (driver == null) {            try {                driver = (Driver) Class.forName(driverName, true, Thread.currentThread().getContextClassLoader()).newInstance();                DriverManager.registerDriver(driver);            } catch (ClassNotFoundException e) {                log.warn("unable to load driver", e);            } catch (InstantiationException e) {                log.warn("unable to instantiate driver", e);            } catch (IllegalAccessException e) {                log.warn("illegal access exception", e);            }        }    }    /**     * Gets an XAConnection.  This first gets a java.sql.Connection from the     * underlying driver, and then wraps it in an XAConnection and XAResource.     * This uses the URL, user, password, and properties (or as many as you     * have specified) to make the connection.     */    public XAConnection getXAConnection() throws SQLException {        loadDriver();        Connection con;        if (user != null && user.length() > 0)            con = DriverManager.getConnection(url, user, password);        else if (properties != null)            con = DriverManager.getConnection(url, properties);        else            con = DriverManager.getConnection(url);        try {            con.setAutoCommit(false);        } catch (SQLException e) {            log.warn("Unable to disable auto-commit on " + con.getClass().getName());        }        XAResourceImpl res = new XAResourceImpl(con);        XAConnectionImpl xacon = new XAConnectionImpl(con, res, saveStackTrace);        res.setXAConnection(xacon);        log.debug("created new Connection(" + con.getClass().getName() + ") with XAResource " + res.getClass().getName() + " and XAConnection " + xacon.getClass().getName() + ".");        return xacon;    }    /**     * Gets an XAConnection.  This first gets a java.sql.Connection from the     * underlying driver, and then wraps it in an XAConnection and XAResource.     * Note that we never change the default userid and password, but instead     * only set the userid and password for this one connection.     */    public XAConnection getXAConnection(String user, String password) throws SQLException {        loadDriver();        Connection con = DriverManager.getConnection(url, user, password);        try {            con.setAutoCommit(false);        } catch (SQLException e) {            if (logWriter != null)                logWriter.println("XADataSource unable to disable auto-commit on " + con.getClass().getName());        }        XAResourceImpl res = new XAResourceImpl(con);        XAConnectionImpl xacon = new XAConnectionImpl(con, res, saveStackTrace);        res.setXAConnection(xacon);        xacon.setUser(user);        xacon.setPassword(password);        log.debug(" created new Connection (" + con.getClass().getName() + ") with XAResource " + res.getClass().getName() + " and XAConnection with userid and password " + xacon.getClass().getName());        return xacon;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -