我有一个使用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