package jef.database.exception;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import jef.common.SimpleMap;
import jef.tools.StringUtils;
/**
* 当多数据库提交时,如果某出现某些库提交成功,某些库提交失败,那么抛出这个异常。
* @author jiyi
*
*/
public class InconsistentCommitException extends SQLException{
private static final long serialVersionUID = 3095533496988117255L;
private List<String> succeed;
private SimpleMap<String,SQLException> exceptions;
private int total;
public InconsistentCommitException(List<String> successed2, SimpleMap<String, SQLException> errors,int total) {
this.succeed=successed2;
this.exceptions=errors;
this.total=total;
}
@Override
public String getMessage() {
Entry<String, SQLException> error = exceptions.getEntries().get(0);
String message = StringUtils.concat("Error while commit datasource [", error.getKey(), "], and this is the ", String.valueOf(succeed.size() + 1), "th commit of ", String.valueOf(total),
", there must be some data consistency problem, please check it.");
return message;
}
/**
* 获得成功提交了的数据源名称
* @return 成功提交了的数据源名称
*/
public Collection<String> getSucceedCommits(){
return succeed;
}
/**
* 获得提交失败的数据源名称
* @return 提交失败的数据源名称
*/
public Collection<String> getFailureCommits(){
return Collections.unmodifiableCollection(exceptions.keySet());
}
/**
* 得到出现的异常
* @return 出现的异常
*/
public Collection<SQLException> getExceptions(){
return Collections.unmodifiableCollection(exceptions.values());
}
/**
* 得到出现提交异常的数据源名称和异常对象。
* @return 出现提交异常的数据源名称和异常对象。
*/
public Map<String,SQLException> getFailures(){
return Collections.unmodifiableMap(exceptions);
}
/**
* 得到成功提交的数量
* @return 成功提交的数量
*/
public int getSucceedCount(){
return succeed.size();
}
/**
* 得到未成功提交的连接数量
* @return 未成功提交的连接数量
*/
public int getUncommitCount(){
return total-succeed.size();
}
}