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

📄 transactionutil.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
            TransactionUtil.setRollbackOnly(causeMessage, causeThrowable);        }    }    /** Rolls back transaction in the current thread IF transactions are available */    public static void rollback() throws GenericTransactionException {        UserTransaction ut = TransactionFactory.getUserTransaction();        if (ut != null) {            try {                int status = ut.getStatus();                Debug.logVerbose("[TransactionUtil.rollback] current status : " + getTransactionStateString(status), module);                if (status != STATUS_NO_TRANSACTION) {                    //if (Debug.infoOn()) Thread.dumpStack();                    if (Debug.infoOn()) {                        Exception newE = new Exception("Stack Trace");                        Debug.logError(newE, "[TransactionUtil.rollback]", module);                    }                    // clear out the stamps to keep it clean                    clearTransactionStamps();                    // clear out the stack too                    clearTransactionBeginStack();                    clearSetRollbackOnlyCause();                    ut.rollback();                    Debug.logInfo("[TransactionUtil.rollback] transaction rolled back", module);                } else {                    Debug.logInfo("[TransactionUtil.rollback] transaction not rolled back, status is STATUS_NO_TRANSACTION", module);                }            } catch (SystemException e) {                //This is Java 1.4 only, but useful for certain debuggins: Throwable t = e.getCause() == null ? e : e.getCause();                throw new GenericTransactionException("System error, could not rollback transaction", e);            }        } else {            Debug.logInfo("[TransactionUtil.rollback] No UserTransaction, transaction not rolled back", module);        }    }    /** Makes a rollback the only possible outcome of the transaction in the current thread IF transactions are available */    public static void setRollbackOnly(String causeMessage, Throwable causeThrowable) throws GenericTransactionException {        UserTransaction ut = TransactionFactory.getUserTransaction();        if (ut != null) {            try {                int status = ut.getStatus();                Debug.logVerbose("[TransactionUtil.setRollbackOnly] current code : " + getTransactionStateString(status), module);                if (status != STATUS_NO_TRANSACTION) {                    if (status != STATUS_MARKED_ROLLBACK) {                        if (Debug.warningOn()) Debug.logWarning(new Exception(), "[TransactionUtil.setRollbackOnly] Calling transaction setRollbackOnly; this stack trace shows where this is happening:", module);                        ut.setRollbackOnly();                        setSetRollbackOnlyCause(causeMessage, causeThrowable);                    } else {                        Debug.logInfo("[TransactionUtil.setRollbackOnly] transaction rollback only not set, rollback only is already set.", module);                    }                } else {                    Debug.logInfo("[TransactionUtil.setRollbackOnly] transaction rollback only not set, status is STATUS_NO_TRANSACTION", module);                }            } catch (SystemException e) {                //This is Java 1.4 only, but useful for certain debuggins: Throwable t = e.getCause() == null ? e : e.getCause();                throw new GenericTransactionException("System error, could not set rollback only on transaction", e);            }        } else {            Debug.logInfo("[TransactionUtil.setRollbackOnly] No UserTransaction, transaction rollback only not set", module);        }    }    public static Transaction suspend() throws GenericTransactionException {        try {            if (TransactionUtil.getStatus() == TransactionUtil.STATUS_ACTIVE) {                TransactionManager txMgr = TransactionFactory.getTransactionManager();                if (txMgr != null ) {                    pushTransactionBeginStackSave(clearTransactionBeginStack());                    pushSetRollbackOnlyCauseSave(clearSetRollbackOnlyCause());                    Transaction trans = txMgr.suspend();                    pushSuspendedTransaction(trans);                    return trans;                } else {                    return null;                }            } else {                Debug.logWarning("No transaction active, so not suspending.", module);                return null;            }        } catch (SystemException e) {            throw new GenericTransactionException("System error, could not suspend transaction", e);        }    }    public static void resume(Transaction parentTx) throws GenericTransactionException {        if (parentTx == null) return;        try {            TransactionManager txMgr = TransactionFactory.getTransactionManager();            if (txMgr != null ) {                setTransactionBeginStack(popTransactionBeginStackSave());                setSetRollbackOnlyCause(popSetRollbackOnlyCauseSave());                txMgr.resume(parentTx);                removeSuspendedTransaction(parentTx);            }        } catch (InvalidTransactionException e) {            /* NOTE: uncomment this for Weblogic Application Server            // this is a work-around for non-standard Weblogic functionality; for more information see: http://www.onjava.com/pub/a/onjava/2005/07/20/transactions.html?page=3            if (parentTx instanceof weblogic.transaction.ClientTransactionManager) {                // WebLogic 8 and above                ((weblogic.transaction.ClientTransactionManager) parentTx).forceResume(transaction);            } else if (parentTx instanceof weblogic.transaction.TransactionManager) {                // WebLogic 7                ((weblogic.transaction.TransactionManager) parentTx).forceResume(transaction);            } else {                throw new GenericTransactionException("System error, could not resume transaction", e);            }            */            throw new GenericTransactionException("System error, could not resume transaction", e);        } catch (SystemException e) {            throw new GenericTransactionException("System error, could not resume transaction", e);        }    }    /** Sets the timeout of the transaction in the current thread IF transactions are available */    public static void setTransactionTimeout(int seconds) throws GenericTransactionException {        UserTransaction ut = TransactionFactory.getUserTransaction();        if (ut != null) {            try {                ut.setTransactionTimeout(seconds);            } catch (SystemException e) {                throw new GenericTransactionException("System error, could not set transaction timeout", e);            }        }    }    /** Enlists the given XAConnection and if a transaction is active in the current thread, returns a plain JDBC Connection */    public static Connection enlistConnection(XAConnection xacon) throws GenericTransactionException {        if (xacon == null) {            return null;        }        try {            XAResource resource = xacon.getXAResource();            TransactionUtil.enlistResource(resource);            return xacon.getConnection();        } catch (SQLException e) {            throw new GenericTransactionException("SQL error, could not enlist connection in transaction even though transactions are available", e);        }    }    public static void enlistResource(XAResource resource) throws GenericTransactionException {        if (resource == null) {            return;        }        try {            TransactionManager tm = TransactionFactory.getTransactionManager();            if (tm != null && tm.getStatus() == STATUS_ACTIVE) {                Transaction tx = tm.getTransaction();                if (tx != null) {                     tx.enlistResource(resource);                }            }        } catch (RollbackException e) {            //This is Java 1.4 only, but useful for certain debuggins: Throwable t = e.getCause() == null ? e : e.getCause();            throw new GenericTransactionException("Roll Back error, could not enlist resource in transaction even though transactions are available, current transaction rolled back", e);        } catch (SystemException e) {            //This is Java 1.4 only, but useful for certain debuggins: Throwable t = e.getCause() == null ? e : e.getCause();            throw new GenericTransactionException("System error, could not enlist resource in transaction even though transactions are available", e);        }    }    public static String getTransactionStateString(int state) {        switch (state) {            case Status.STATUS_ACTIVE:                return "Transaction Active (" + state + ")";            case Status.STATUS_COMMITTED:                return "Transaction Committed (" + state + ")";            case Status.STATUS_COMMITTING:                return "Transaction Committing (" + state + ")";            case Status.STATUS_MARKED_ROLLBACK:                return "Transaction Marked Rollback (" + state + ")";            case Status.STATUS_NO_TRANSACTION:                return "No Transaction (" + state + ")";            case Status.STATUS_PREPARED:                return "Transaction Prepared (" + state + ")";            case Status.STATUS_PREPARING:                return "Transaction Preparing (" + state + ")";            case Status.STATUS_ROLLEDBACK:                return "Transaction Rolledback (" + state + ")";            case Status.STATUS_ROLLING_BACK:                return "Transaction Rolling Back (" + state + ")";            case Status.STATUS_UNKNOWN:                return "Transaction Status Unknown (" + state + ")";            default:                return "Not a valid state code (" + state + ")";        }    }    public static void logRunningTx() {        if (debugResources) {            if (debugResMap != null && debugResMap.size() > 0) {                Iterator i = debugResMap.keySet().iterator();                while (i.hasNext()) {                    Object o = i.next();                    DebugXaResource dxa = (DebugXaResource) debugResMap.get(o);                    dxa.log();                }            }        }    }    public static void registerSynchronization(Synchronization sync) throws GenericTransactionException {        if (sync == null) {            return;        }        try {            TransactionManager tm = TransactionFactory.getTransactionManager();            if (tm != null && tm.getStatus() == STATUS_ACTIVE) {                Transaction tx = tm.getTransaction();                if (tx != null) {                    tx.registerSynchronization(sync);                }            }        } catch (RollbackException e) {            //This is Java 1.4 only, but useful for certain debuggins: Throwable t = e.getCause() == null ? e : e.getCause();            throw new GenericTransactionException("Roll Back error, could not register synchronization in transaction even though transactions are available, current transaction rolled back", e);        } catch (SystemException e) {            //This is Java 1.4 only, but useful for certain debuggins: Throwable t = e.getCause() == null ? e : e.getCause();

⌨️ 快捷键说明

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