我從很長一段時間以來一直面對這個例外。
我的tomcat/java web應用程序有非常大的數據庫事務。
我正在使用MSSQL服務器作爲我的後端,並在tomcat中使用DBCP,數據庫連接池。
我有以下使用這種做法。間歇性「java.sql.SQLException:org.apache.commons.dbcp.DelegatingStatement已關閉」。
DB pooling在我的servlet中。
//Skeleton
dopost
{
//geting connection using JNDI
//Creating statement object
// calling method of execution of Business Logic
}
finally
{
//closing all DB resorces
}
Business Logic
{
//do all Database transaction
}
//Original code spinet
public class Frm_mst_operation_II extends HttpServlet
{
protected void doPost(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse) throws ServletException, IOException
{
try
{
String option=httpservletrequest.getParameter("option");
InitialContext initialcontext = new InitialContext();
if(initialcontext == null)
throw new Exception("Boom - No Context");
InitialContext initialcontext2 = new InitialContext();
if(initialcontext2 == null)
throw new Exception("Boom - No Context");
Context context = (Context)initialcontext.lookup("java:/comp/env");
Context context2 = (Context)initialcontext.lookup("java:/comp/env");
DataSource datasource = (DataSource)context.lookup(RuntimeConf.abi_database);
DataSource datasource_sql = (DataSource)context2.lookup(RuntimeConf.abi_sql_database);
if(datasource != null)
{
if(dbcon == null)
{
dbcon = datasource.getConnection();
}
else
{
if(!dbcon.isClosed())
{
dbcon.close();
}
dbcon = datasource.getConnection();
}
if(dbcon_sql == null)
{
dbcon_sql = datasource_sql.getConnection();
}
else
{
if(!dbcon_sql.isClosed())
{
dbcon_sql.close();
}
dbcon_sql = datasource_sql.getConnection();
}
if(dbcon_sql != null)
{
dbcon.setAutoCommit(false);
dbcon_sql.setAutoCommit(false);
stmt_ora1 = dbcon.createStatement();
stmt = dbcon_sql.createStatement();
if(option.equals("Insert_cge_Data"))
{
Insert_CGE_Data(httpservletrequest);
}
dbcon.close();
dbcon_sql.close();
dbcon=null;
dbcon_sql=null;
}
}
else
{
System.out.println("Data Source Not Found - Error : Exception In Frm_mst_operation_II");
}
httpservletresponse.sendRedirect(url);
}
catch(Exception exception)
{
System.out.println("Exception In Frm_mst_operation_II And Exception Is :: "+exception);
exception.printStackTrace();
}
finally
{
if(rset != null)
{
try
{
rset.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
rset = null;
}
if(stmt != null)
{
try
{
stmt.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
stmt = null;
}
if(stmt_ora1 != null)
{
try
{
stmt_ora1.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
stmt_ora1 = null;
}
if(dbcon != null)
{
try
{
dbcon.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
dbcon = null;
}
if(dbcon_sql != null)
{
try
{
dbcon_sql.close();
}
catch(SQLException e)
{
System.out.println("Exception in Frm_mst_operation_II "+e);
}
dbcon_sql = null;
}
}
}//End Of doPost() Method ...
public void Insert_CGE_Data(HttpServletRequest request) throws IOException,
ServletException, SQLException {
try
{
query_th_ora = " INSERT INTO PR_OPR_TH " + " ("
+ " COMP_N, YR_N, TRN_N, TRN_C, "
+ " TRN_D, MCH_N, SHIFT_N, STRT_TIME, "
+ " END_TIME, PROD_N, BODY_N, "
+ " CAR_N , FIRE_N, CREATED_UID," + " CREATED_D , " +
// " UPDATED_UID, UPDATED_D" +
" TRNTYP , TOT_QTY " + " , RSN_N) " + " VALUES " + " ("
+ " '" + comp_cd + "', '" + yr_n + "', '" + TRN_N
+ "', 'CGE" + TRN_C + "', " + " to_date('" + trn_d
+ "', 'dd/mm/yyyy') , '" + mch_nm
+ "', '" + shift + "', to_date('" + in_time
+ "', 'dd/mm/yyyy hh:mi:ss AM'), " + " to_date('"
+ out_time + "', 'dd/mm/yyyy hh:mi:ss AM'), '" + prod_n
+ "', '" + body_n + "', " + " '" + car_n + "', '"
+ fire_n + "', '" + user_cd + "',to_date('"+ora_sysdt+"', 'dd/mm/yyyy HH24:MI:SS'), " + " 'CGE', '" + tot_qty + "'"
+ " , '"+RSN_N+"') " + " ";
//SQL MD20230302
query_th_sql = " INSERT INTO PROD.PR_OPR_TH " + " ("
+ " COMP_N, YR_N, TRN_N, TRN_C, "
+ " TRN_D, MCH_N, SHIFT_N, STRT_TIME, "
+ " END_TIME, PROD_N, BODY_N, "
+ " CAR_N , FIRE_N, CREATED_UID," + " CREATED_D , " +
// " UPDATED_UID, UPDATED_D" +
" TRNTYP , TOT_QTY " + " , RSN_N, FLAG) " + " VALUES " + " ("
+ " '" + comp_cd + "', '" + yr_n + "', '" + TRN_N
+ "', 'CGE" + TRN_C + "', " + " PROD.to_date('" + trn_d
+ "', 'dd/mm/yyyy') , '" + mch_nm
+ "', '" + shift + "', PROD.to_date('" + in_time
+ "', 'dd/mm/yyyy hh:mi:ss AM'), " + " PROD.to_date('"
+ out_time + "', 'dd/mm/yyyy hh:mi:ss AM'), '" + prod_n
+ "', '" + body_n + "', " + " '" + car_n + "', '"
+ fire_n + "', '" + user_cd + "', PROD.to_date('" + sysdt
+ "', 'dd/mm/yyyy hh:mi:ss AM'), " + " 'CGE', '" + tot_qty + "'"
+ " , '"+RSN_N_SQL+"', 'Y' ) " ;
//ORA
query_td_ora = "INSERT INTO PR_OPR_TD" + " ("
+ " COMP_N, YR_N, TRN_N, TRN_C, "
+ " TRN_D, TRNDTL_N, SRNO_C, QTY, SMPL_RMK, "
+ " OPR_N, OPRGRP_N, NXT_OPR, REJTYP_N, "
+ " REJ_QTY, STATUS, SRNO_N, DECK_NO, "
+ " CREATED_UID , CREATED_D , " +
" TRNTYP, PREV_OPR, GOOD_QTY, PREV_STATUS, "
+ " BODY_N, BARCODE_NO, PREVTRNDTL_N, PROD_N, " + "" +
" glzsrno_c, good_wt, exttrn_d," +
" glztrn_d, unit_wt, layer_n, zones_n, SOTTRN_D, ASSBLD_STS" +
")" + " VALUES"
+ "(" + " '" + comp_cd + "', '" + yr_n + "', '" + TRN_N
+ "', 'CGE" + TRN_C + "', " + " to_date('" + trn_d
+ "', 'dd/mm/yyyy'), '" + trndtl_n + "', '" + srno_c + "', '" + accept_qty
+ "', '" + barcode_no + "', " + " '" + OPR_N + "', '"
+ OPRGRP_N + "', '" + NXT_OPR + "', '" + REJTYP_N + "', "
+ " '" + rej_qty + "', '" + status + "', '" + srno_n
+ "', '" + deck_no + "', " + " '" + user_cd
+ "', to_date('"+ora_sysdt+"', 'dd/mm/yyyy HH24:MI:SS'), "
+ " 'CGE', '" + opr_n + "', '" + good_qty + "', '"
+ PREV_STATUS + "', " + " '" + body_n + "', '"
+ barcode_no + "', '" + TRNDTL_N + "'" + " , '"+prod_n+"', " +
" '" + glzsrno_c + "', '" + good_wt + "', to_date('" + exttrn_d + "' , 'dd/mm/yyyy'), " +
" to_date('" + glztrn_d + "' , 'dd/mm/yyyy'), '" + unit_wt + "', '" + layer_n + "', " +
" '" + zones_n + "', to_date('"+SOTTRN_D+"', 'dd/mm/yyyy'),'"+ASSBLD_STS+"' " +
")";
//SQL MD20230302
query_td_sql = "INSERT INTO PROD.PR_OPR_TD" + " ("
+ " COMP_N, YR_N, TRN_N, TRN_C, "
+ " TRN_D, TRNDTL_N, SRNO_C, QTY, SMPL_RMK, "
+ " OPR_N, OPRGRP_N, NXT_OPR, REJTYP_N, "
+ " REJ_QTY, STATUS, SRNO_N, DECK_NO, "
+ " CREATED_UID , CREATED_D , " +
" TRNTYP, PREV_OPR, GOOD_QTY, PREV_STATUS, "
+ " BODY_N, BARCODE_NO, PREVTRNDTL_N, PROD_N, " + "" +
" glzsrno_c, good_wt, exttrn_d," +
" glztrn_d, unit_wt, layer_n, zones_n, FLAG, SOTTRN_D, ASSBLD_STS" +
")" + " VALUES"
+ "(" + " '" + comp_cd + "', '" + yr_n + "', '" + TRN_N
+ "', 'CGE" + TRN_C + "', " + " PROD.to_date('" + trn_d
+ "', 'dd/mm/yyyy'), '" + trndtl_n + "', '" + srno_c + "', '" + accept_qty
+ "', '" + barcode_no + "', " + " '" + OPR_N + "', '"
+ OPRGRP_N + "', '" + NXT_OPR + "', '" + REJTYP_N_SQL + "', "
+ " '" + rej_qty + "', '" + status + "', '" + srno_n
+ "', '" + deck_no + "', " + " '" + user_cd
+ "', PROD.to_date('" + sysdt + "', 'dd/mm/yyyy hh:mi:ss AM'), "
+ " 'CGE', '" + opr_n + "', '" + good_qty + "', '"
+ PREV_STATUS + "', " + " '" + body_n + "', '"
+ barcode_no + "', '" + TRNDTL_N + "'" + " , '"+prod_n+"', " +
" '" + glzsrno_c + "', '" + good_wt + "', PROD.to_date('" + exttrn_d + "' , 'dd/mm/yyyy'), " +
" PROD.to_date('" + glztrn_d + "' , 'dd/mm/yyyy'), '" + unit_wt + "', '" + layer_n + "', " +
" '" + zones_n + "', 'Y', PROD.to_date('"+SOTTRN_D+"', 'dd/mm/yyyy'), '"+ASSBLD_STS+"' "
+")";
//System.out.println(query_th_ora);
stmt_ora1.executeUpdate(query_th_ora);
//System.out.println(query_th_sql);
stmt3.executeUpdate(query_th_sql);
//System.out.println(query_td_ora);
stmt_ora1.executeUpdate(query_td_ora);
//System.out.println(query_td_sql);
stmt3.executeUpdate(query_td_sql);
}
catch (SQLException e)
{
dbcon.rollback();
dbcon_sql.rollback();
e.printStackTrace();
}
catch (Exception e)
{
dbcon.rollback();
dbcon_sql.rollback();
e.printStackTrace();
}
}
} 而在業務邏輯方法之間的一些地方,我總是得到了異常。
奇怪的是,我總是在我的servlets中得到這個異常,從來沒有在Databean中。
我知道爲什麼會引發這個異常,但我不明白原因。
第二件事我的tomcat服務也間歇性掛起。
變得完全沒有響應,需要restr才能再次運行該應用程序。
因此請求所有的你請回應我的查詢/問題/問題,並幫助我擺脫這個泥包。有一點要提到的是我的客戶端機器運行在WiFi網絡上,對提出這個問題有什麼影響?
感謝很多提前
首先@CRDave感謝格式化我的帖子有很多詳細的,即時通訊新的,所以不知道如何發佈。 – user2046589
第二@TEKExchange我沒有在我的應用程序中使用任何準備好的聲明,根本沒有。那麼還有其他解決方案嗎? – user2046589
在這種情況下顯示多一點你的源可能有幫助 – TheWhiteRabbit