配置跨数据库的事务控制
来源:互联网 发布: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>
<!-- log4jConfigLocation:log4j配置文件存放路径 -->
<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;
}
- 配置跨数据库的事务控制
- 数据库的事务控制和并发控制
- 数据库的事务控制和并发控制
- C#中跨数据库增删改的事务控制
- C#中跨数据库增删改的事务控制
- 数据库的事务,范式,处理,并发控制
- SSM框架 +MYSQL数据库 配置事务控制的方法和注意点
- SSM框架 +MYSQL数据库 配置事务控制的方法和注意点
- SSM框架 +MYSQL数据库 配置事务控制的方法和注意点
- Mybatis+springMVC下事务控制的配置
- C#数据库事务控制
- 数据库 事务并发控制
- hibernate结合spring框架配置连接数据库以及事务控制
- 跨数据库事务保存以及服务器的配置
- 数据库并发事务控制四:postgresql数据库的锁机制
- 数据库事务的几种配置方式
- 数据库学习之事务控制
- SpringMVC+ibatis数据库事务控制
- NodeJs 常用工具
- iOS版本更新的App提交审核发布流程---这篇博客有点老,不过也可以借鉴。
- HTTP协议详解(真的很经典)
- 正则表达式的两数字之间的数
- php数组快速排序
- 配置跨数据库的事务控制
- 2023
- matlab写入和读取文件数据
- The query does not start with a valid identifier, has to be either SELECT, UPDATE or DELETE FROM
- 经典算法——堆排序笔试题
- 使用UIWebView 有些网页加载卡顿 内存还飙升的可别厉害
- mybatis批量插入oracle解决方法
- Ajax 与后台 HttpServlet 的简单交互
- Android 5.0 Material 自定义Dialog 背景 字体大小颜色 ui组件颜色