Olá,
Estive analisando o codigo java dos botões CRUD de minha aplicação. Notei que é criado uma nova conexão a cada clique de botão que, depois é fechada em um finally.
public ActionForward perform_select_action(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession(true);
ActionForward actionForward = null;
com.teste.util.jdbc.JdbcUtil j = null;
try {
j = new com.teste.util.jdbc.JdbcUtil();
j.setMaxRows(500);
try {
select_action(j, mapping, form, request, response);
}
finally {
}
actionForward = mapping.findForward("same");
} catch (Exception e) {
ActionErrors errors = new ActionErrors();
errors.add("ActionErrors.GLOBAL_ERROR_bl_form_Adm_bairro", new ActionError("error.action.exception",com.teste.util.system.Error.getMessage(e)));
request.setAttribute(org.apache.struts.Globals.ERROR_KEY, errors);
session.setAttribute("exception", com.teste.util.system.Error.getDescription(e));
actionForward = mapping.findForward("same");
} finally {
if (j != null) {
j.close();
}
}
return actionForward;
}
Alterei o código de maneira que evitasse a criação da variavel ‘j’ no linha 4 do acima. O Codigo funcionou normalmente e ficou assim:
public ActionForward perform_select_action(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession(true);
ActionForward actionForward = null;
//com.teste.util.jdbc.JdbcUtil j = null;
try {
//j = new com.teste.util.jdbc.JdbcUtil();
//j.setMaxRows(500);
try {
select_action((com.teste.util.jdbc.JdbcUtil) new com.teste.util.jdbc.JdbcUtil(), mapping, form, request, response);
}
finally {
}
actionForward = mapping.findForward("same");
} catch (Exception e) {
ActionErrors errors = new ActionErrors();
errors.add("ActionErrors.GLOBAL_ERROR_bl_form_Adm_bairro", new ActionError("error.action.exception",com.teste.util.system.Error.getMessage(e)));
request.setAttribute(org.apache.struts.Globals.ERROR_KEY, errors);
session.setAttribute("exception", com.teste.util.system.Error.getDescription(e));
actionForward = mapping.findForward("same");
} finally {
// if (j != null) {
// j.close();
// }
}
return actionForward;
}
Metodo j.close(), do finally do Primeiro Codigo:
public void close() {
try {
if (conn != null) {
conn.close();
}
if (initCtx != null) {
initCtx.close();
}
} catch (Exception e) {
com.teste.util.logger.Logging.log("com.teste.util.jdbc", java.util.logging.Level.INFO, JdbcUtil.class.getName() + ".JdbcUtil()[206]", e);
}
}
Vamos as duvidas:
1 - O segundo código é mais rápido que o primeiro ?
2 - No primeiro codigo, Oque acontence com a variavel ‘j’ quando é fechada no finally, Automaticamente é removida da Memoria ?
3 - Não existe uma variavel especifica para abrigar o objeto da conexão e mesmo assim funcionou. Oque realmente acontence no codigo abaixo(linha 9) ?
select_action((com.teste.util.jdbc.JdbcUtil) new com.teste.util.jdbc.JdbcUtil(), mapping, form, request, response);
Obrigado!