2013-02-06 59 views
0

我從很長一段時間以來一直面對這個例外。
我的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網絡上,對提出這個問題有什麼影響?

感謝很多提前

回答

0

你可以得到這個異常,當嘗試使用PreparedStatemen而其接近 此id在question

+0

首先@CRDave感謝格式化我的帖子有很多詳細的,即時通訊新的,所以不知道如何發佈。 – user2046589

+0

第二@TEKExchange我沒有在我的應用程序中使用任何準備好的聲明,根本沒有。那麼還有其他解決方案嗎? – user2046589

+0

在這種情況下顯示多一點你的源可能有幫助 – TheWhiteRabbit