我有一個使用JNDI連接輪詢(DB服務器是MySQL的)一個Web應用程序的工作,的Java連接池(JNDI)不affter半ADAY
有很多請求的Web應用程序,它有一個Web服務由另一個Web應用程序使用。
它工作得很好,但沒有作品和Web服務的一些沒有處理的命令經過一段時間後,會出現如下錯誤:
值java.sql.SQLException:無法獲取的連接,一般錯誤 javax.naming.NameNotFoundException:在此上下文中未綁定名稱[java:/ comp/env]。無法找到[java:]。
我把應用程序複製放在下面。
請注意,我強迫應用程序打印
新的連接時,「+++++ ===== >>>>連接的X號」(如果它是新的連接X增加)
後關閉連接「------ ===== >>>>連接數X」
注意2:每當Web服務被稱爲「%%%% >>>>> Web服務請求「字符串將被打印輸出,然後」SELECT「命令將運行並打印輸出,但是當系統崩潰時請求接收到的Web服務,但不能繼續。
因此,請查找「+++++ ===== >>>>」和「+++++ ===== >>>>」,並注意「%% %% >>>>> Web服務請求「在開始和結束時。
的出放像如下:
public void close() throws SQLException {
connection.close();
counter--;
ServerLog.Print("------=====>>>> number of connection " + counter);
ServerLog.Print("Database connection is closed ...");
}
這是一些方法如下:
public jjDatabaseWeb() throws SQLException, NamingException {
ctx = new InitialContext();
Context initCtx = (Context) ctx.lookup("java:/comp/env");
DataSource ds = (DataSource) initCtx.lookup("jdbc/MyDB");
connection = ds.getConnection();
counter++;
ServerLog.Print("+++++=====>>>> number of connection " + counter);
}
,並在下面是調用哪個白衣其他服務的Web服務方法在局域網中:
/**
* this Method returns a string result; if(result =="" OR result==null){ do
* your work }else{ show user result as message (result is HTML) }
*
* @param stdNubmer
* @param nationalId Is not important
* @return String result (as HTML)
* @throws javax.naming.NamingException
*/
@WebMethod(operationName = "studentCheck")
public String studentCheck(@WebParam(name = "stdNubmer") String stdNubmer, @WebParam(name = "nationalId") String nationalId) {
try {
ServerLog.Print("%%%%>>>>> web Service request for :" + stdNubmer);
try {
jjDatabaseWeb db = new jjDatabaseWeb();
DefaultTableModel dtm = db.Select(StdInfo.tableName, StdInfo._step + "," + StdInfo._alerts + "," + StdInfo._lastAertDate + "," + StdInfo._name + "," + StdInfo._family, StdInfo._stdNumber + "=" + stdNubmer);
List<Map<String, Object>> row = jjDatabaseWeb.separateRow(dtm);
db.close();//
if (row.size() == 1) {
if (!row.get(0).get(StdInfo._step).toString().equalsIgnoreCase("5")) {
int date = new jjCalendar_IR().getDBFormat_8length();
int lastAlertDate = Integer.parseInt(row.get(0).get(StdInfo._lastAertDate).toString());
int alerts = Integer.parseInt(row.get(0).get(StdInfo._alerts).toString());
if ((date - 5) <= lastAlertDate) {
return "";
}
StringBuilder html = new StringBuilder("");
html.append("<HTML>...</HTML>");
return html.toString();
}
}
return "";
} catch (NamingException ex) {
Logger.getLogger(csaWebService.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (SQLException ex) {
Logger.getLogger(csaWebService.class.getName()).log(Level.SEVERE, null, ex);
ServerLog.Print(ex);
Server.ErrorHandler(ex);
return "";
}
return "";
}
}
使用jndi有什麼特別的理由嗎? – Fildor
這是一個非常繁忙的系統,所以我認爲如果我使用jndi來集中連接會更好。所以現在我無法改變它。我必須解決這個問題。 – user3600935
過早優化的典型例子。您現在必須調試您的JNDI池。 :(我想你將不得不在這裏添加一些代碼來獲得適當的幫助。 – Fildor