package com.nfwork.dbfound.core;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
import com.nfwork.dbfound.core.Context.ConnObject;
import com.nfwork.dbfound.db.ConnectionProvide;
import com.nfwork.dbfound.util.LogUtil;
public class Transaction {
Map<String, ConnObject> connMap;
private boolean open = false;
public Transaction() {
}
/**
* 开始事务
*/
public void begin() {
open = true;
}
public boolean isOpen() {
return open;
}
/**
* 事务结束
*/
public void end() {
if (open == false) {
return;
} else {
open = false;
}
if (connMap == null || connMap.isEmpty()) {
return;
} else {
Collection<ConnObject> connObjects = connMap.values();
for (ConnObject connObject : connObjects) {
try {
ConnectionProvide provide = connObject.provide;
Connection connection = connObject.connection;
provide.closeConnection(connection);
} catch (Exception e) {
LogUtil.error("transaction close exception:" + e.getMessage(), e);
}
}
connMap.clear();
}
}
/**
* 提交事务
*/
public void commit() {
if (open == false || connMap == null || connMap.isEmpty()) {
return;
}
Collection<ConnObject> connObjects = connMap.values();
for (ConnObject connObject : connObjects) {
try {
connObject.connection.commit();
} catch (Exception e) {
LogUtil.error("transaction commit exception:" + e.getMessage(), e);
}
}
}
/**
* 提交并结束事务
*/
public void commitAndEnd() {
if (open == false) {
return;
} else {
open = false;
}
if (connMap == null || connMap.isEmpty()) {
return;
} else {
Collection<ConnObject> connObjects = connMap.values();
for (ConnObject connObject : connObjects) {
try {
connObject.connection.commit();
} catch (Exception e) {
LogUtil.error("transaction commit exception:" + e.getMessage(), e);
}
try {
ConnectionProvide provide = connObject.provide;
Connection connection = connObject.connection;
provide.closeConnection(connection);
} catch (Exception e) {
LogUtil.error("transaction close exception:" + e.getMessage(), e);
}
}
connMap.clear();
}
}
/**
* 回滚事务
*/
public void rollback() {
if (open == false || connMap == null || connMap.isEmpty()) {
return;
}
Collection<ConnObject> connObjects = connMap.values();
for (ConnObject connObject : connObjects) {
try {
connObject.connection.rollback();
} catch (SQLException e) {
LogUtil.error("transaction rollback exception:" + e.getMessage(), e);
}
}
}
}