implements IIbatisDAO<T, PK>
/*
* 工 程 名:
* 描 述: 通过ibatis底层实现具体的操作,抽象类
*/
package com.xxx.dhm.xxx.base.dao.ibatis;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.xxx.dhm.xxx.base.dao.IIbatisDAO;
import com.xx.dhm.portalMS.base.executor.LimitSqlExecutor;
import com.xx.dhm.portalMS.common.Constants;
import com.xxx.dhm.portalMS.common.util.PageList;
import com.xxx.dhm.portalMS.common.util.ReflectUtil;
import com.xxxx.dhm.portalMS.exception.PortalMSException;
import com.ibatis.sqlmap.engine.execution.SqlExecutor;
import com.ibatis.sqlmap.engine.impl.SqlMapClientImpl;
import com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate;
/**
*
* IIbatisDAO 类的抽象实现, 部分实现公共的增删改查功能,子类可以继续扩展该类的方法
*
*/
public abstract class IbatisDAO<T extends Serializable, PK extends Serializable> extends SqlMapClientDaoSupport
implements IIbatisDAO<T, PK>
{
/**
* 序列化的ID
*/
private static final long serialVersionUID = 7489415169618169154L;
/**
* ibatis中sqlmap命名空间
*/
private String nameSpace = "";
/**
* 实体类
*/
private Class<T> entityClass;
/**
* SQL语句的操作对象
*/
protected SqlExecutor sqlExecutor;
/**
* 对命名空间进行了赋值,可以通过命名空间执行具体的sqlMap对应的语句 <默认构造函数>
*/
@SuppressWarnings("unchecked")
public IbatisDAO()
{
this.entityClass = null;
Class c = getClass();
// 得到具体的子类类型
Type t = c.getGenericSuperclass();
if (t instanceof ParameterizedType)
{
Type[] p = ((ParameterizedType) t).getActualTypeArguments();
this.entityClass = (Class<T>) p[0];
// 得到命名空间,用于向sqlMap传入
nameSpace = entityClass.getSimpleName() + ".";
}
}
/**
* 对SQL语句操作对象进行赋值
*
* @param sqlExecutor
*/
public void setSqlExecutor(SqlExecutor sqlExecutor)
{
this.sqlExecutor = sqlExecutor;
}
/**
* 对是否支持物理分页进行赋值 spring注入方法,注入具体的sqlExecutor是否支持物理分页
*
* @param enableLimit
* [是否支持物理分页,true-支持,false-不支持]
* @see LimitSqlExecutor#setEnableLimit(boolean)
*/
public void setEnableLimit(boolean enableLimit)
{
if (sqlExecutor instanceof LimitSqlExecutor)
{
((LimitSqlExecutor) sqlExecutor).setEnableLimit(enableLimit);
}
}
/**
* 初始化sqlExcutor类,在spring初始化时会加载该方法
* 因为ibatis本身不支持物理分页,用自己定义的sqlExecutor来替代默认的sqlExecutor
*
* @exception throws [Exception] [向上层直接抛出]
* @see SqlMapExecutorDelegate
*/
public void initialize() throws Exception
{
if (sqlExecutor != null)
{
SqlMapClientImpl client = (SqlMapClientImpl) getSqlMapClient();
SqlMapExecutorDelegate delgate = client.getDelegate();
// 由于SqlMapExecutorDelegate没有setSqlExecutor方法,利用反射强行对sqlExecutor赋值
ReflectUtil.setFieldValue(delgate, "sqlExecutor", SqlExecutor.class, sqlExecutor);
}
}
/**
* 按主键删除实体对象
*
* @param id
* 泛型主键ID
* @throws PortalMSException
*/
public void deleteByKey(PK id) throws PortalMSException
{
try
{
getSqlMapClientTemplate().delete(nameSpace + SQLID_DELETE, id);
}
catch (Exception ex)
{
throw new PortalMSException(Constants.ERROR_CODE_OPERATOR_DATABASE.getLongValue(), ex);
}
}
@SuppressWarnings("unchecked")
/**
* 查找符合条件的所有对象
* @return List,List中存放泛型的实体对象
*/
public List<T> findAll() throws PortalMSException
{
try
{
return getSqlMapClientTemplate().queryForList(nameSpace + SQLID_FINDALL);
}
catch (Exception ex)
{
throw new PortalMSException(Constants.ERROR_CODE_OPERATOR_DATABASE.getLongValue(), ex);
}
}
@SuppressWarnings("unchecked")
/**
* 按主键查找实体对象
* @param id 泛型主键
* @return 泛型实体,实现序列化接口的任何类型
* @throws portalMSException
*/
public T findById(PK id) throws PortalMSException
{
T result = null;
try
{
result = (T) this.getSqlMapClient().queryForObject(nameSpace + SQLID_FINDBYID, id);
}
catch (Exception e)
{
throw new PortalMSException(Constants.ERROR_CODE_ACCESS_DATABASE.getLongValue(), e);
}
return result;
}
/**
* 保存实体对象,数据库的insert操作
*
* @param entity
* 参数类型:泛型,任何实现序列化的类
* @throws PortalMSException
* iepg管理系统统一抛出的异常
*/
public void saveEntity(T entity) throws PortalMSException
{
try
{
this.getSqlMapClient().insert(nameSpace + SQLID_INSERT, entity);
}
catch (Exception e)
{
throw new PortalMSException(Constants.ERROR_CODE_OPERATOR_DATABASE.getLongValue(), e);
}
}
/**
* 更新实体对象,数据库的update操作
*
* @param entity
* 参数类型:泛型,任何实现序列化的类
* @throws PortalMSException
* iepg管理系统统一抛出的异常
*/
public void updateEntity(T entity) throws PortalMSException
{
try
{
this.getSqlMapClient().update(nameSpace + SQLID_UPDATE, entity);
}
catch (Exception e)
{
throw new PortalMSException(Constants.ERROR_CODE_OPERATOR_DATABASE.getLongValue(), e);
}
}
/**
* 按实体对象的主键ID批量删除实体 空方法,子类需要时自己去实现
*
* @param list
* 主键的ID列表,列表内存放泛型,任何实现序列化接口的类
*/
public void batchDelete(final List<PK> list) throws PortalMSException
{
}
/**
* 按实体对象的主键ID批量删除实体 空方法,子类需要时自己去实现
*
* @param args
* 主键的ID列表,列表内存放泛型,任何实现序列化接口的类
*/
public void batchDelete(final PK[] args) throws PortalMSException
{
}
/**
* 批量插入实体,数据库insert操作 空方法,子类需要使用时自己去实现
*
* @param list
* 实体对象列表,列表内存放泛型,任何实现序列化接口的类
*/
public void batchInsert(final List<T> list) throws PortalMSException
{
}
/**
* 批量更新实体,数据库update操作 空方法,子类需要使用时自己去实现
*
* @param list
* 实体对象列表,列表内存放泛型,任何实现序列化接口的类
*/
public void batchUpdate(final List<T> list) throws PortalMSException
{
}
/**
* 按查询条件分页查询记录数
* @param map 查询的参数,封装为map或一个实体对象
* @param currPage 当前的页码
* @param pageSize 每页显示的记录数
* @return List 实体对象的列表
* @throws IEMPMException
*/
@SuppressWarnings("unchecked")
public List<T> findByCriteria(Object map, String sqlMap, int currPage, int pageSize) throws PortalMSException
{
// 举例:当前页为第2页,每页显示10条,则开始记录数为11,结束记录数为20
// 得到记录的开始数
int skipResults = (currPage - 1) * pageSize + 1;
// 得到记录的结束数
int maxResults = currPage * pageSize;
Map<String, Object> obj = null;
int totalRows = 0;
// 判断是否map类型,还是普通的JavaBean。普通的JavaBean则转换成Map类型
if (map instanceof Map)
{
obj = (Map) map;
}
else
{
obj = ReflectUtil.getObjectAsMap(map);
}
// obj.put("siteID", SessionUtil.getLocalSiteID());
try
{
totalRows = this.getRowCount(obj, sqlMap);
}
catch (Exception e)
{
throw new PortalMSException(Constants.ERROR_CODE_OPERATOR_DATABASE.getLongValue(), e);
}
// 带分页参数的列表
PageList<T> pageList = new PageList<T>(currPage, pageSize, totalRows);
// 支持物理分页页码从1开始
try
{
List queryResult = this.getSqlMapClientTemplate().queryForList(sqlMap, obj, skipResults, maxResults);
if (queryResult != null)
{
pageList.addAll(queryResult);
}
}
catch (Exception e)
{
throw new PortalMSException(Constants.ERROR_CODE_ACCESS_DATABASE.getLongValue(), e);
}
return pageList;
}
@SuppressWarnings("unchecked")
/**
* 按查询条件返回所有记录,不带分页
* @param map 查询的参数,封装为map或一个实体对象
* @return List 实体对象的列表
*/
public List<T> findByCriteria(Object map) throws PortalMSException
{
Map<String, Object> obj = null;
// 判断是否map类型,还是普通的JavaBean。普通的JavaBean则转换成Map类型
if (map instanceof Map)
{
obj = (Map) map;
}
else
{
obj = ReflectUtil.getObjectAsMap(map);
}
// obj.put("siteID", SessionUtil.getLocalSiteID());
List<T> resultList = null;
try
{
resultList = getSqlMapClientTemplate().queryForList(nameSpace + SQLID_FINDALL, obj);
}
catch (Exception e)
{
throw new PortalMSException(Constants.ERROR_CODE_ACCESS_DATABASE.getLongValue(), e);
}
return resultList;
}
/**
* 按查询条件得到该SQL语句的总数量
*
* @param map
* 查询条件
* @return Integer 记录总数
* @throws DataAccessException
* 数据访问异常
*/
@SuppressWarnings("unchecked")
public Integer getRowCount(Object map) throws PortalMSException
{
try
{
Map<String, Object> obj = null;
// 判断是否map类型,还是普通的JavaBean。普通的JavaBean则转换成Map类型
if (map instanceof Map)
{
obj = (Map) map;
}
else
{
obj = ReflectUtil.getObjectAsMap(map);
}
// obj.put("siteID", SessionUtil.getLocalSiteID());
return (Integer) this.getSqlMapClientTemplate().queryForObject(nameSpace + SQLID_ROWCOUNT, obj);
}
catch (Exception ex)
{
throw new PortalMSException(Constants.ERROR_CODE_ACCESS_DATABASE.getLongValue(), ex);
}
}
/**
* 按查询条件得到该SQL语句的总数量
*
* @param map
* 查询条件
*
* @param sqlMap
* SQL查询语句
*
* @return Integer 记录总数
* @throws DataAccessException
* 数据访问异常
*/
@SuppressWarnings("unchecked")
public Integer getRowCount(Object map, String sqlMap) throws PortalMSException
{
try
{
Map<String, Object> obj = null;
// 判断是否map类型,还是普通的JavaBean。普通的JavaBean则转换成Map类型
if (map instanceof Map)
{
obj = (Map) map;
}
else
{
obj = ReflectUtil.getObjectAsMap(map);
}
// obj.put("siteID", SessionUtil.getLocalSiteID());
return (Integer) this.getSqlMapClientTemplate().queryForObject(sqlMap + "." + SQLID_ROWCOUNT, obj);
}
catch (Exception ex)
{
throw new PortalMSException(Constants.ERROR_CODE_ACCESS_DATABASE.getLongValue(), ex);
}
}
/**
* 得到查询结果集的行数,此参数用于分页
*
* @return Integer记录集的行数
* @throws PortalMSException
*/
public Integer getRowCount() throws PortalMSException
{
try
{
return (Integer) this.getSqlMapClientTemplate().queryForObject(nameSpace + SQLID_ROWCOUNT);
}
catch (Exception ex)
{
throw new PortalMSException(Constants.ERROR_CODE_ACCESS_DATABASE.getLongValue(), ex);
}
}
@SuppressWarnings("unchecked")
/**
* 按查询条件分页查询记录数
* @param map 查询的参数,封装为map或一个实体对象
* @param currPage 当前的页码
* @param pageSize 每页显示的记录数
* @return List 实体对象的列表
* @throws IEMPMException
*/
public List<T> findByCriteria(Object map, int currPage, int pageSize) throws PortalMSException
{
// 举例:当前页为第2页,每页显示10条,则开始记录数为11,结束记录数为20
// 得到记录的开始数
int skipResults = (currPage - 1) * pageSize + 1;
// 得到记录的结束数
int maxResults = currPage * pageSize;
Map<String, Object> obj = null;
int totalRows = 0;
// 判断是否map类型,还是普通的JavaBean。普通的JavaBean则转换成Map类型
if (map instanceof Map)
{
obj = (Map) map;
}
else
{
obj = ReflectUtil.getObjectAsMap(map);
}
// obj.put("siteID", SessionUtil.getLocalSiteID());
try
{
totalRows = this.getRowCount(obj);
}
catch (Exception e)
{
throw new PortalMSException(Constants.ERROR_CODE_OPERATOR_DATABASE.getLongValue(), e);
}
// 带分页参数的列表
PageList<T> pageList = new PageList<T>(currPage, pageSize, totalRows);
// 支持物理分页页码从1开始
try
{
List queryResult = this.getSqlMapClientTemplate().queryForList(nameSpace + SQLID_FINDALL, obj, skipResults,
maxResults);
if (queryResult != null)
{
pageList.addAll(queryResult);
}
}
catch (Exception e)
{
throw new PortalMSException(Constants.ERROR_CODE_ACCESS_DATABASE.getLongValue(), e);
}
return pageList;
}
/**
* * 按查询条件分页查询记录数
* @param map 查询的参数,封装为map或一个实体对象
* @param currPage 当前的页码
* @param pageSize 每页显示的记录数
* @return List 实体对象的列表
* @throws IEMPMException
*/
@SuppressWarnings("unchecked")
public PageList<T> findByCriteria(Object map, String sqlname,
String countSqlName, int currPage, int pageSize)
throws PortalMSException
{
// 举例:当前页为第2页,每页显示10条,则开始记录数为11,结束记录数为20
// 取得配置文件是MySQL还是Oracle数据库
int skipResults = (currPage - 1) * pageSize + 1;
// 得到记录的结束数
int maxResults = currPage * pageSize;
Map<String, Object> obj = null;
int totalRows = 0;
// 判断是否map类型,还是普通的JavaBean。普通的JavaBean则转换成Map类型
if (map instanceof Map)
{
obj = (Map) map;
}
else
{
obj = ReflectUtil.getObjectAsMap(map);
}
// obj.put("siteID", SessionUtil.getLocalSiteID());
PageList<T> pageList;
try
{
totalRows = (Integer) this.getSqlMapClientTemplate().queryForObject(countSqlName, obj);
// 带分页参数的列表
pageList = new PageList<T>(currPage, pageSize, totalRows);
// 支持物理分页页码从1开始
List queryResult = this.getSqlMapClientTemplate().queryForList(
sqlname, obj, skipResults, maxResults);
if (queryResult != null)
{
pageList.addAll(queryResult);
}
}
catch (Exception e)
{
throw new PortalMSException(Constants.ERROR_CODE_OPERATOR_DATABASE
.getStringValue(), e);
}
return pageList;
}
}
public abstract interface IIbatisDAO<T extends Serializable, PK extends Serializable> extends IBaseDAO<T, PK>,
Serializable
/*
* 描 述: 泛型Ibatis顶层接口,Ibatis公共接口
*/
package com.xxx.dhm.portalMS.base.dao;
import java.io.Serializable;
import java.util.List;
import org.springframework.dao.DataAccessException;
import com.xxxx.dhm.xxx.common.util.PageList;
import com.xxx.dhm.xxx.exception.PortalMSException;
/**
*
* ibatis的DAO方案 针对ibatis的特殊性定义的接口,继承自IBaseDAO
*/
public abstract interface IIbatisDAO<T extends Serializable, PK extends Serializable> extends IBaseDAO<T, PK>,
Serializable
{
/**
* IBATIS配置文件中定义文件中对应的sqlid,插入操作
*/
public static final String SQLID_INSERT = "insert";
/**
* IBATIS配置文件中定义文件中对应的sqlid,按主键删除实体操作
*/
public static final String SQLID_DELETE = "deleteByPrimaryKey";
/**
* IBATIS配置文件中定义文件中对应的sqlid,按主键的更新操作
*/
public static final String SQLID_UPDATE = "updateById";
/**
* IBATIS配置文件中定义文件中对应的sqlid,查找所有实体操作
*/
public static final String SQLID_FINDALL = "findAll";
/**
* IBATIS配置文件中定义文件中对应的sqlid,按主键ID查找实体对象
*/
public static final String SQLID_FINDBYID = "findById";
/**
* IBATIS配置文件中定义文件中对应的sqlid,查询记录集数
*/
public static final String SQLID_ROWCOUNT = "rowCount";
/**
* 批量插入实体 数据库的insert批量操作,接口方法,由具体实现类实现
*
* @param list
* 参数类型:List<T>列表中存放泛型,任何实现序列化的实体类
* @exception throws [portalMSException] [当批量插入失败时抛出此异常]
*/
public abstract void batchInsert(final List<T> list) throws PortalMSException;
/**
* 批量修改实体 数据库的update批量操作,接口方法,由具体实现类实现
*
* @param list
* 参数类型:[List<T>]列表中存放泛型,任何实现序列化的实体类
* @exception throws [portalMSException] [当批量更新失败时抛出此异常]
*/
public abstract void batchUpdate(final List<T> list) throws PortalMSException;
/**
* 批量删除实体 数据库的delete批量操作,接口方法,由具体实现类实现
*
* @param list
* [参数类型:List<T>]列表中存放泛型,任何实现序列化的实体类
* @exception throws [portalMSException] [当批量删除失败时抛出此异常]
*/
public abstract void batchDelete(final List<PK> list) throws PortalMSException;
/**
* 批量删除实体 数据库的delete批量操作,接口方法,由具体实现类实现
*
* @param args
* [参数类型:PK[]列表中存放泛型,任何实现序列化的实体类
* @exception throws [portalMSException] [当批量删除失败时抛出此异常]
*/
public abstract void batchDelete(final PK[] args) throws PortalMSException;
/**
* 带分页条件查找记录 使用当前页和每页大小获得实体的列表
*
* @param map
* 查询的参数列表
* @param currPage
* 当前页码,整型
* @param pageSize
* 每页记录数,整型
* @return List<T> [返回实体的列表,实体类型为泛型,任何实现序列化的实体类]
* @exception throws [portalMSException] [当操作中发生数据库访问异常抛出]
*/
public List<T> findByCriteria(Object map, int currPage, int pageSize) throws PortalMSException;
/**
* 带分页条件查找记录 使用当前页和每页大小获得实体的列表
*
* @param map
* 查询的参数列表
* @param currPage
* 当前页码,整型
* @param pageSize
* 每页记录数,整型
* @return List<T> [返回实体的列表,实体类型为泛型,任何实现序列化的实体类]
* @exception throws [portalMSException] [当操作中发生数据库访问异常抛出]
*/
public List<T> findByCriteria(Object map, String sqlMap, int currPage, int pageSize) throws PortalMSException;
/**
* 得到满足条件的记录数 根据查询条件得到满足条件的记录数
*
* @param map
* 查询参数
* @return Integer [整型包装类]
* @exception throws [DataAccessException] [当操作中发生数据库访问异常抛出]
*/
public Integer getRowCount(Object map) throws PortalMSException;
/**
* 按查询条件得到该SQL语句的总数量
*
* @param map
* 查询条件
*
* @param sqlMap
* SQL查询语句
*
* @return Integer 记录总数
* @throws DataAccessException
* 数据访问异常
*/
public Integer getRowCount(Object map, String sqlMap) throws PortalMSException;
/**
* 根据查询条件得到数据库中所有满足条件的记录实体 此功能不带分页功能
*
* @param map
* 查询条件的参数
* @return List<T> [泛型的列表,列表中存放任何实现序列化的实体类]
* @exception throws [portalMSException] [当ibatis访问数据库出现异常时抛出]
*/
public List<T> findByCriteria(Object map) throws PortalMSException;
/**
* 按查询条件分页查询记录数
* @param map 查询的参数,封装为map或一个实体对象
* @param currPage 当前的页码
* @param pageSize 每页显示的记录数
* @return List 实体对象的列表
* @throws IEMPMException
*/
public PageList<T> findByCriteria(Object map, String sqlname,
String countSqlName, int currPage, int pageSize)
throws PortalMSException;
}
public interface IBaseDAO<T extends Serializable, PK extends Serializable>
/*
* 描 述: 泛形DAO顶层接口,Hibernate,Ibatis公共接口
*/
package com.xxx.dhm.xxx.base.dao;
import java.io.Serializable;
import java.util.List;
import com.xxx.dhm.xxx.exception.PortalMSException;
/**
*
* 泛形DAO顶层接口,Hibernate,Ibatis公共接口
* 抽象出了Hibernate和Ibatis公共的方法
*/
public interface IBaseDAO<T extends Serializable, PK extends Serializable>
{
/**
* 通过主键ID查找对应的实体
* 接口方法,子类必须实现该方法
* @param id [泛型,主键ID编号]
* @return T [泛型,返回一个具体的实体]
* @exception throws [portalMSException] [当数据库操作异常时将抛出该异常]
*/
public abstract T findById(PK id) throws PortalMSException;
/**
* 查找所有实体
* 接口方法,用于查找所有实体,子类必须实现该方法
* @return List<T> [返回所有符合条件的实体]
* @exception throws [portalMSException] [当数据库操作异常时将抛出该异常]
*/
public abstract List<T> findAll() throws PortalMSException;
/**
* 得到总行数
* 接口方法
* @return Integer [返回记录的总行数]
* @exception throws [portalMSException] [当数据库访问失败时抛出的自定义异常]
*/
public abstract Integer getRowCount() throws PortalMSException;
/**
* 更新单个实体数据库update操作
* 根据实体的参数更新数据库中对应的记录
* @param entity 实体对象,泛型,任何实现序列化的类
* @exception throws [portalMSException] [当数据库操作发生失败时抛出该异常]
*/
public abstract void updateEntity(T entity) throws PortalMSException;
/**
* 保存单个实体数据库insert操作
* 根据实体内容插入到数据库
* @param entity 实体对象,泛型,任何实现序列化的类
* @exception throws [portalMSException] [当数据库操作发生失败时抛出该异常]
*/
public abstract void saveEntity(T entity) throws PortalMSException;
/**
* 按主键编号删除数据库对应单个实体
* 对应数据库delete操作
* @param id 主键ID
* @exception throws [portalMSException] [当数据库操作失败时抛出该异常]
*/
public abstract void deleteByKey(PK id) throws PortalMSException;
}
/*
* 描 述: IEPG管理系统的自定义异常
*/
package com.xxx.dhm.xxx.exception;
import org.apache.log4j.Logger;
/**
*
* iEPG管理系统自定义异常
* 当系统发生异常时统一包装抛出
*/
public class PortalMSException extends Exception
{
/**
* 序列化ID
*/
private static final long serialVersionUID = 1772426579115321126L;
/**
* 错误编号
*/
private long errorCode = 0;
/**
* 日志对象
*/
private static Logger logger = Logger.getLogger(PortalMSException.class);
/**
* <默认构造函数>
*/
public PortalMSException()
{
super();
}
/**
* 传入错误信息构造异常
* @param message 异常提示信息
*/
public PortalMSException(String message)
{
super(message);
}
/**
* 传入异常构造异常
* @param cause 异常
*/
public PortalMSException(Throwable cause)
{
super(cause);
// 向NMS告警
sendDbExceptionTrap(errorCode,cause);
}
/**
* 传入提示信息和异常内容
* @param message 异常提示信息
* @param cause 异常
*/
public PortalMSException(String message, Throwable cause)
{
super(message, cause);
// 向NMS告警
sendDbExceptionTrap(errorCode,cause);
}
/**
* 获得错误编号
* @return long [错误码]
*/
public long getErrorCode()
{
return errorCode;
}
/**
* 传入错误编号构造异常
* @param errorCode 异常错误代码
*/
public PortalMSException(long errorCode)
{
super();
this.errorCode = errorCode;
}
/**
* 传入错误编号和消息信息构造异常
* @param errorCode 异常代码
* @param message 异常提示信息
*/
public PortalMSException(long errorCode, String message)
{
super(message);
this.errorCode = errorCode;
}
/**
* 传入错误编号和异常内容构造异常
* @param errorCode 错误代码
* @param cause 异常
*/
public PortalMSException(long errorCode, Throwable cause)
{
super(cause);
this.errorCode = errorCode;
// 向NMS告警
sendDbExceptionTrap(errorCode,cause);
}
/**
* 传入错误编号,消息信息和异常内容构造异常
* @param errorCode 异常错误代码
* @param message 异常提示信息
* @param cause 异常本身
*/
public PortalMSException(long errorCode, String message, Throwable cause)
{
super(message, cause);
this.errorCode = errorCode;
// 向NMS告警
sendDbExceptionTrap(errorCode,cause);
}
/**
* 发生数据库异常时,向NMS发送告警信息
* @param cause 异常信息
*
* @return void [返回类型说明]
* @exception throws [违例类型] [违例说明]
* @see [类、类#方法、类#成员]
*/
private void sendDbExceptionTrap(long errorCode,Throwable cause)
{
if (cause == null)
{
return;
}
String errMsg = cause.getMessage();
if (errMsg != null && errMsg.contains("ORA-"))
{
logger.error("Abnormal DB ,To NMS warning。");
}
}
}