配置跨数据库的事务控制

来源:互联网 发布:android精美ui源码 编辑:程序博客网 时间:2024/04/30 02:28

1 导入包

 

 

2 配置XML文件

 

 

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appversion="3.0"xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <display-name></display-name>

 

    <!-- log4jConfigLocationlog4j配置文件存放路径 -->

    <context-param>

        <param-name>log4jConfigLocation</param-name>

        <param-value>/WEB-INF/classes/log4j.properties</param-value>

    </context-param>


 

内容如下:

# Configure logging for testing:optionally with log file

log4j.rootLogger=WARN, stdout

# log4j.rootLogger=WARN, stdout,logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d%p [%c] - %m%n

 

log4j.appender.logfile=org.apache.log4j.FileAppender

log4j.appender.logfile.File=target/spring.log

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=%d%p [%c] - %m%n

 

 

3写类方法

package com.util;

 

import java.sql.Connection;

import java.sql.SQLException;

 

import javax.naming.NamingException;

import javax.sql.XAConnection;

import javax.transaction.UserTransaction;

 

import org.enhydra.jdbc.standard.StandardXADataSource;

import org.objectweb.jotm.Jotm;

import org.objectweb.transaction.jta.TMService;

 

/**

 * 分布式业务处理类

 *

 * @authorAdministrator

 *

 */

public class JotmHelper {

    public finalString YHConn = "YHConn";// 连接YH

    public finalString LocalConn = "LocalConn";// 连接本地

    private staticString url = "";

    private staticString user = "";

    private staticString pwd = "";

    privateTMService jotm;

    privateUserTransaction userTransaction;

    privateXAConnection xaconn = null;

 

    //InitialContext ctx = null;// new InitialContext();

    //

    publicJotmHelper() {

    }

 

    /**

     * @param connName数据库名称

     * @return

     * @throws Exception

     */

    publicConnection getConnection(String connName) throws Exception {

        StandardXADataSourcexads = new StandardXADataSource();

        // ctx = newInitialContext();

 

        // 本地

        if(connName.equals("LocalConn")) {

 

            // 获取配置文件类

            DBasePropertiesdProperties = new DBaseProperties();

 

            url =dProperties.GetPropertiesUrl().trim();// 获取URL

            user =dProperties.GetPropertiesUser().trim();// 获取数据库登录名称

            pwd =dProperties.GetPropertiesPwd().trim();// 获取数据库登录密码

            // SQL2005

            xads.setDriverName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//

            // 驱动查询

            xads.setUrl(url);

            xads.setTransactionManager(jotm.getTransactionManager());

            xaconn =xads.getXAConnection(user, pwd);

        }

        // YH物流

        else if(connName.equals("YHConn")) {

 

            // 获取配置文件类

            YHDBasePropertiesyHProperties = new YHDBaseProperties();

            url =yHProperties.GetPropertiesUrl().trim();// 获取URL

            user =yHProperties.GetPropertiesUser().trim();// 获取数据库登录名称

            pwd =yHProperties.GetPropertiesPwd().trim();// 获取数据库登录密码

            // SQL2005

            xads.setDriverName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//

            // 驱动查询

            xads.setUrl(url);

            xads.setTransactionManager(jotm.getTransactionManager());

 

            xaconn =xads.getXAConnection(user, pwd);

 

            // intlevel=0;

            // xaconn.getConnection().setTransactionIsolation(level);

        }

        returnxaconn.getConnection();

    }

 

    /**

     * 启动事务管理服务

     */

    public voidstartTMService() {

        try {

 

            // 实例化事务管理器

            jotm =new Jotm(true, false);

            userTransaction= jotm.getUserTransaction();

 

        } catch(NamingException e1) {

            e1.printStackTrace();

        }

    }

 

    /**

     * 停止事务管理服务

     */

    public voidstopTMService() {

        jotm.stop();

        jotm = null;

    }

 

    /**

     * 事务开始

     */

    public voidbegin() {

        try {

            userTransaction.begin();

        } catch(Exception e) {

            e.printStackTrace();

        }

    }

 

    /**

     * 事务提交

     */

    public voidcommit() {

        try {

            userTransaction.commit();

        } catch(Exception e) {

            e.printStackTrace();

        }

    }

 

    /**

     * 事务回滚

     */

    public voidrollback() {

        try {

            userTransaction.rollback();

        } catch(Exception e) {

            e.printStackTrace();

        }

    }

 

    /**

     * 关闭数据库连接

     */

    public voidcloseConn() {

        try {

 

            if(xaconn != null) {

                xaconn.close();

            }

        } catch(SQLException e) {

            e.printStackTrace();

        }

    }

 

}

 

 

 

调用

 

public boolean addPurchase(En_Purchase enPurchase) {

        //

 

        long start =System.currentTimeMillis();

 

        jotmHelper = newJotmHelper();

        enPurchaseDao= new En_PurchaseDao();

        enPurchaseDetaileDao= new En_PurchaseDetaileDao();

        boolean flag= false;

        booleanoperbool = false;

        introwsCount = 0;

        try {

 

            jotmHelper.startTMService();//开启事务

            Connectionconn = jotmHelper.getConnection("LocalConn");//本地

            //开始事务

            jotmHelper.begin();

            // 获取是否存在相同记录

            rowsCount= enPurchaseDao.getPurchaseCountById(enPurchase.getPur_Id().trim(), conn);

            if(rowsCount == 0) {

                // 添加Dispatch主表

                operbool= enPurchaseDao.addPurchase(enPurchase, conn);// 添加

            } elseif ((rowsCount > 0)) {

                operbool= enPurchaseDao.updateEnPurchase(enPurchase, conn);// 修改

            }

            // 如果主表插入成功

            if(operbool == true) {

 

                if(enPurchase.getEnPurchaseDetaileList() != null &enPurchase.getEnPurchaseDetaileList().size() > 0) {

                    //给集合链表赋值

                    List<En_PurchaseDetaile>tempList = enPurchase.getEnPurchaseDetaileList();

                    //添加Dispatch明细

                    flag= enPurchaseDetaileDao.addPurchaseDetaile(tempList, conn);//

                    jotmHelper.commit();//提交

                    flag= true;

                    longend = System.currentTimeMillis();

                    System.out.println("addPurchase:\t"+ "commit...");

                    System.out.println("运行时间:"+ (end - start) + "毫秒");

                }

 

            }

 

        } catch(Exception e) {

            flag =false;

     

            jotmHelper.rollback();

 

        } finally {

            jotmHelper.stopTMService();//

            jotmHelper.closeConn();

        }

 

        return flag;

    }

 

 

0 0