出错:java.sql.SQLException: 关闭的连接,大神帮忙看下
报错:java.sql.SQLException: 关闭的连接,大神帮忙看下
报错信息:
[2014-10-17 13:19:50,655] [TF_OPEN_CEN1_BD1_$_TF_OPEN_INTERFACE_MSG_G_PROCESS] (DefaultTemplateImpl.java:173) ERROR com.ai.openframe
.core.exe.tf.template.defaults.DefaultTemplateImpl - ITfTemplateImpl::finishIExecute error
java.sql.SQLException: 关闭的连接
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
at oracle.sql.CLOB.getDBAccess(CLOB.java:1196)
at oracle.sql.CLOB.getCharacterStream(CLOB.java:278)
at com.asiainfo.zjoss.openframe.bo.BOIOpenInterfaceMsgBean.getOpenInterfaceMsgBean(BOIOpenInterfaceMsgBean.java:347)
at com.asiainfo.zjoss.openframe.exe.IIOpenMsgExecTfJobImpl$TransfJobImpl._finishExecute(IIOpenMsgExecTfJobImpl.java:52)
at com.ai.openframe.core.exe.tf.template.defaults.DefaultTemplateImpl$DefaultTransfJobImpl.finishExecute(DefaultTemplateImpl.java:3
33)
at com.ai.openframe.core.exe.tf.template.defaults.DefaultTemplateImpl$IITemplateExcutor._finishIExecute(DefaultTemplateImpl.java:16
8)
at com.ai.openframe.core.exe.tf.template.defaults.DefaultTemplateImpl._finishExecute(DefaultTemplateImpl.java:46)
at com.ai.openframe.core.exe.tf.template.defaults.DefaultTemplateImpl.finishExecute(DefaultTemplateImpl.java:60)
at com.ai.openframe.core.exe.tf.TfWorkframe$IITfScanJobQueue.run(TfWorkframe.java:354)
方法:
protected void _finishExecute(ITfScanJobIDefine aIScanJobItemSKEL, java.util.HashMap[] aISrcRecSKEL) throws IOpenException, Exception {
java.util.List aIDataLSKEL = new java.util.ArrayList();
try{
String prodIns = DataFilter(aISrcRecSKEL);
java.util.HashMap aMap = new java.util.HashMap();
String strSql = sql + "("+prodIns.substring(0,prodIns.length()-1)+")";
BOSfOrderBusiResRelateBean aBeans[] = OpenFactory.getIOpenInterfaceMsgSV().getSfOrderBusiResRelateBeans(strSql, aMap, 999999);
java.util.HashMap aITaskCSKEL = new java.util.HashMap();
//java.util.Map aIDataLSKEL = new java.util.HashMap();
for (int index = 0;index<aISrcRecSKEL.length;index++ ){
BOIOpenInterfaceMsgBean aMsgBean = BOIOpenInterfaceMsgBean.getOpenInterfaceMsgBean(aISrcRecSKEL[index]);
//String msgId = aISrcRecSKEL[index].get(BOIOpenInterfaceMsgBean.S_MsgId).toString();
aMsgBean.setStsToOld();
try{
String msgId = aISrcRecSKEL[index].get(BOIOpenInterfaceMsgBean.S_MsgId).toString();
if(StringUtil.equals(msgId,"-1")) continue;
aITaskCSKEL.clear();
// //获取是否存在新的信控
// IBOIOpenInterfaceMsgValue[] beans = OpenFactory.getIOpenInterfaceMsgSV().getIOpenByPid(aMsgBean.getProductInstanceId());
// if(beans!=null && beans.length>0){
// for(IBOIOpenInterfaceMsgValue bean:beans){
// if(bean.getMsgId()>aMsgBean.getMsgId()){
// aMsgBean.setState(IterfaceMessProcess.I_OPEN_INTERFACE_MSG_STATE_R);
// aMsgBean.setCompleteDate(TimeUtils.IFuncIExcutor._getISysdate());
// aIDataLSKEL.add((DataContainer)aMsgBean);
// break;
// }
// }
// if(aMsgBean.getState().equals(IterfaceMessProcess.I_OPEN_INTERFACE_MSG_STATE_R)) continue;
// }
long orderId = IIOpenMsgExecTfJobImpl.getProcIns().Process(aISrcRecSKEL[index],aBeans);
// String ProdTypeId = String.valueOf(aMsgBean.getProductTypeId());
// //无线固话信控停开机直接置接口表状态为R
// if(ProdTypeId.equals(ZJRmConst.WIRELESS_TEL)){
// aMsgBean.setOrderId(orderId);
// aMsgBean.setState(IterfaceMessProcess.I_OPEN_INTERFACE_MSG_STATE_R);
// aMsgBean.setCompleteDate(TimeUtils.IFuncIExcutor._getISysdate());
// aIDataLSKEL.add((DataContainer)aMsgBean);
// } else{
aMsgBean.setOrderId(orderId);
aMsgBean.setState(IterfaceMessProcess.I_OPEN_INTERFACE_MSG_STATE_S);
aMsgBean.setCompleteDate(TimeUtils.IFuncIExcutor._getISysdate());
aIDataLSKEL.add((DataContainer)aMsgBean);
// }
}catch(Exception e){
aMsgBean.setState(IterfaceMessProcess.I_OPEN_INTERFACE_MSG_STATE_F);
aMsgBean.setCompleteDate(TimeUtils.IFuncIExcutor._getISysdate());
int end = e.toString().length();
if(end > 800);end = 800;
aMsgBean.setErrorMsg(StringUtil.substring(e.toString(), 0, end));
aIDataLSKEL.add(aMsgBean);
}
}
OpenFactory.getIOpenItfMsgSV().saveBatch(aIDataLSKEL);
} finally{
if(aIDataLSKEL != null){aIDataLSKEL.clear();aIDataLSKEL = null;}
}
}
}
------解决思路----------------------
先自己断点找下,看哪里报这个异常吧,然后再处理
------解决思路----------------------
旧前我也见这个问题..这个要是偶然的出现的话,可以添加retry机制....
------解决思路----------------------
有可能是网络原因
------解决思路----------------------
这个原因就很多了。。我的出现原因有事务失败,解锁死锁连接,死锁等,连接池bug关闭了连接等好多原因
报错信息:
[2014-10-17 13:19:50,655] [TF_OPEN_CEN1_BD1_$_TF_OPEN_INTERFACE_MSG_G_PROCESS] (DefaultTemplateImpl.java:173) ERROR com.ai.openframe
.core.exe.tf.template.defaults.DefaultTemplateImpl - ITfTemplateImpl::finishIExecute error
java.sql.SQLException: 关闭的连接
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
at oracle.sql.CLOB.getDBAccess(CLOB.java:1196)
at oracle.sql.CLOB.getCharacterStream(CLOB.java:278)
at com.asiainfo.zjoss.openframe.bo.BOIOpenInterfaceMsgBean.getOpenInterfaceMsgBean(BOIOpenInterfaceMsgBean.java:347)
at com.asiainfo.zjoss.openframe.exe.IIOpenMsgExecTfJobImpl$TransfJobImpl._finishExecute(IIOpenMsgExecTfJobImpl.java:52)
at com.ai.openframe.core.exe.tf.template.defaults.DefaultTemplateImpl$DefaultTransfJobImpl.finishExecute(DefaultTemplateImpl.java:3
33)
at com.ai.openframe.core.exe.tf.template.defaults.DefaultTemplateImpl$IITemplateExcutor._finishIExecute(DefaultTemplateImpl.java:16
8)
at com.ai.openframe.core.exe.tf.template.defaults.DefaultTemplateImpl._finishExecute(DefaultTemplateImpl.java:46)
at com.ai.openframe.core.exe.tf.template.defaults.DefaultTemplateImpl.finishExecute(DefaultTemplateImpl.java:60)
at com.ai.openframe.core.exe.tf.TfWorkframe$IITfScanJobQueue.run(TfWorkframe.java:354)
方法:
protected void _finishExecute(ITfScanJobIDefine aIScanJobItemSKEL, java.util.HashMap[] aISrcRecSKEL) throws IOpenException, Exception {
java.util.List aIDataLSKEL = new java.util.ArrayList();
try{
String prodIns = DataFilter(aISrcRecSKEL);
java.util.HashMap aMap = new java.util.HashMap();
String strSql = sql + "("+prodIns.substring(0,prodIns.length()-1)+")";
BOSfOrderBusiResRelateBean aBeans[] = OpenFactory.getIOpenInterfaceMsgSV().getSfOrderBusiResRelateBeans(strSql, aMap, 999999);
java.util.HashMap aITaskCSKEL = new java.util.HashMap();
//java.util.Map aIDataLSKEL = new java.util.HashMap();
for (int index = 0;index<aISrcRecSKEL.length;index++ ){
BOIOpenInterfaceMsgBean aMsgBean = BOIOpenInterfaceMsgBean.getOpenInterfaceMsgBean(aISrcRecSKEL[index]);
//String msgId = aISrcRecSKEL[index].get(BOIOpenInterfaceMsgBean.S_MsgId).toString();
aMsgBean.setStsToOld();
try{
String msgId = aISrcRecSKEL[index].get(BOIOpenInterfaceMsgBean.S_MsgId).toString();
if(StringUtil.equals(msgId,"-1")) continue;
aITaskCSKEL.clear();
// //获取是否存在新的信控
// IBOIOpenInterfaceMsgValue[] beans = OpenFactory.getIOpenInterfaceMsgSV().getIOpenByPid(aMsgBean.getProductInstanceId());
// if(beans!=null && beans.length>0){
// for(IBOIOpenInterfaceMsgValue bean:beans){
// if(bean.getMsgId()>aMsgBean.getMsgId()){
// aMsgBean.setState(IterfaceMessProcess.I_OPEN_INTERFACE_MSG_STATE_R);
// aMsgBean.setCompleteDate(TimeUtils.IFuncIExcutor._getISysdate());
// aIDataLSKEL.add((DataContainer)aMsgBean);
// break;
// }
// }
// if(aMsgBean.getState().equals(IterfaceMessProcess.I_OPEN_INTERFACE_MSG_STATE_R)) continue;
// }
long orderId = IIOpenMsgExecTfJobImpl.getProcIns().Process(aISrcRecSKEL[index],aBeans);
// String ProdTypeId = String.valueOf(aMsgBean.getProductTypeId());
// //无线固话信控停开机直接置接口表状态为R
// if(ProdTypeId.equals(ZJRmConst.WIRELESS_TEL)){
// aMsgBean.setOrderId(orderId);
// aMsgBean.setState(IterfaceMessProcess.I_OPEN_INTERFACE_MSG_STATE_R);
// aMsgBean.setCompleteDate(TimeUtils.IFuncIExcutor._getISysdate());
// aIDataLSKEL.add((DataContainer)aMsgBean);
// } else{
aMsgBean.setOrderId(orderId);
aMsgBean.setState(IterfaceMessProcess.I_OPEN_INTERFACE_MSG_STATE_S);
aMsgBean.setCompleteDate(TimeUtils.IFuncIExcutor._getISysdate());
aIDataLSKEL.add((DataContainer)aMsgBean);
// }
}catch(Exception e){
aMsgBean.setState(IterfaceMessProcess.I_OPEN_INTERFACE_MSG_STATE_F);
aMsgBean.setCompleteDate(TimeUtils.IFuncIExcutor._getISysdate());
int end = e.toString().length();
if(end > 800);end = 800;
aMsgBean.setErrorMsg(StringUtil.substring(e.toString(), 0, end));
aIDataLSKEL.add(aMsgBean);
}
}
OpenFactory.getIOpenItfMsgSV().saveBatch(aIDataLSKEL);
} finally{
if(aIDataLSKEL != null){aIDataLSKEL.clear();aIDataLSKEL = null;}
}
}
}
------解决思路----------------------
先自己断点找下,看哪里报这个异常吧,然后再处理
------解决思路----------------------
旧前我也见这个问题..这个要是偶然的出现的话,可以添加retry机制....
------解决思路----------------------
有可能是网络原因
------解决思路----------------------
这个原因就很多了。。我的出现原因有事务失败,解锁死锁连接,死锁等,连接池bug关闭了连接等好多原因