Java tutorial
/* * Este programa es software libre; usted puede redistribuirlo y/o modificarlo bajo los trminos * de la licencia "GNU General Public License" publicada por la Fundacin "Free Software Foundation". * Este programa se distribuye con la esperanza de que pueda ser til, pero SIN NINGUNA GARANTIA; * vea la licencia "GNU General Public License" para obtener mas informacin. */ package ips1ap101.lib.core.db.util; import java.io.File; import java.sql.ResultSet; import ips1ap101.lib.base.constant.CBM; import ips1ap101.lib.base.entity.enumeration.CondicionEjeFunEnumeration; import ips1ap101.lib.base.util.ThrowableUtils; import ips1ap101.lib.core.app.Bitacora; import ips1ap101.lib.core.app.ExcepcionAplicacion; import ips1ap101.lib.core.app.TLC; import ips1ap101.lib.core.constant.EAC; import ips1ap101.lib.core.control.Auditor; import ips1ap101.lib.core.jms.message.SqlAgentMessage; import ips1ap101.lib.core.util.EA; import ips1ap101.lib.core.util.STP; import ips1ap101.lib.core.util.Utils; import org.apache.commons.lang.StringUtils; /** * @author Jorge Campins */ public class SqlAgent { private static final String DEFAULT_NUMBER_KW = "DEFAULT"; public static Process executeProcedure(String procedimiento, long funcion) { return executeProcedure(procedimiento, funcion, null); } public static Process executeProcedure(String procedimiento, long funcion, Object[] args) { Bitacora.trace(SqlAgent.class, "executeProcedure", procedimiento, String.valueOf(funcion)); Utils.traceObjectArray(args); Long rastro = null; Process process = null; try { procedimiento = StringUtils.trimToEmpty(procedimiento); if (STP.esIdentificadorArchivoValido(procedimiento)) { if (TLC.getControlador().esFuncionAutorizada(funcion)) { rastro = TLC.getControlador().ponerProcesoPendiente(funcion); String path = Utils.sep(EA.getString(EAC.SQLPRC_RUNNER_DIR)); String command = path + EA.getString(EAC.SQLPRC_RUNNER_CMD); command += " " + commandParameters(procedimiento, funcion, rastro, args); String[] envp = null; File dir = new File(path); Bitacora.trace(command); Bitacora.trace(dir.getPath()); process = Runtime.getRuntime().exec(command, envp, dir); TLC.getBitacora().info(CBM.PROCESS_EXECUTION_REQUEST, procedimiento); } else { throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.FUNCION_NO_AUTORIZADA, procedimiento)); } } else { throw new ExcepcionAplicacion( Bitacora.getTextoMensaje(CBM.IDENTIFICADOR_ARCHIVO_INVALIDO, procedimiento)); } } catch (Exception ex) { CondicionEjeFunEnumeration condicion = CondicionEjeFunEnumeration.EJECUCION_CANCELADA; String mensaje = ThrowableUtils.getString(ex); Auditor.grabarRastroProceso(rastro, condicion, null, mensaje); TLC.getBitacora().error(mensaje); } return process; } private static String commandParameters(String procedimiento, long funcion, Long rastro, Object[] args) { String str = procedimiento + " " + rastro; str += " " + Utils.getQuotedParameterString(args); return str; } public static SqlAgentMessage executeProcedure(SqlAgentMessage message) { return executeProcedure(message.getProcedimientoSql(), message.getRastro(), message.getArgumentos(), false); } static SqlAgentMessage executeProcedure(String procedure, String number, Object[] args, boolean logging) { String proceso = StringUtils.trimToEmpty(procedure); Long rastro = trimToNullNumber(number); return executeProcedure(proceso, rastro, args, logging); } private static SqlAgentMessage executeProcedure(String procedimiento, Long rastro, Object[] args, boolean logging) { Bitacora.trace(SqlAgent.class, "executeProcedure", procedimiento, rastro); Utils.traceObjectArray(args); String procedure = StringUtils.trimToEmpty(procedimiento); // String archivo = logging ? getLogFileName(rastro) : null; String archivo = null; CondicionEjeFunEnumeration condicion = CondicionEjeFunEnumeration.EJECUCION_EN_PROGRESO; String mensaje = TLC.getBitacora().info(CBM.PROCESS_EXECUTION_BEGIN, procedure); boolean ok = Auditor.grabarRastroProceso(rastro, condicion, archivo, mensaje); if (ok) { try { // <editor-fold defaultstate="collapsed"> // Object resultado = TLC.getAgenteSql().executeProcedure(procedure, args); // if (resultado == null) { // condicion = CondicionEjeFunEnumeration.EJECUTADO_CON_ERRORES; // mensaje = TLC.getBitacora().error(CBM.PROCESS_EXECUTION_ABEND, procedure); // } else { // condicion = CondicionEjeFunEnumeration.EJECUTADO_SIN_ERRORES; // if (resultado instanceof Number) { // mensaje = TLC.getBitacora().info(procedure + " = " + resultado); // } else if (resultado instanceof ResultSet) { // ResultSet resultSet = (ResultSet) resultado; // if (resultSet.next()) { // mensaje = TLC.getBitacora().info(procedure + " = " + resultSet.getObject(1)); // } else { // mensaje = TLC.getBitacora().info(procedure + " = " + STP.STRING_VALOR_NULO); // } // } else { // mensaje = TLC.getBitacora().info(CBM.PROCESS_EXECUTION_END, procedure); // } // } // </editor-fold> Object resultado = TLC.getAgenteSql().executeProcedure(procedure, args); if (resultado == null) { condicion = CondicionEjeFunEnumeration.EJECUTADO_CON_ERRORES; mensaje = TLC.getBitacora().error(CBM.PROCESS_EXECUTION_ABEND, procedure); } else { condicion = CondicionEjeFunEnumeration.EJECUTADO_SIN_ERRORES; mensaje = TLC.getBitacora().info(CBM.PROCESS_EXECUTION_END, procedure); if (resultado instanceof ResultSet) { ResultSet resultSet = (ResultSet) resultado; if (resultSet.next()) { mensaje += " (" + resultSet.getObject(1) + ") "; } } else if (resultado.getClass().isPrimitive()) { mensaje += " (" + resultado + ") "; } } } catch (Exception ex) { condicion = CondicionEjeFunEnumeration.EJECUTADO_CON_ERRORES; mensaje = ThrowableUtils.getString(ex); TLC.getBitacora().fatal(ex); TLC.getBitacora().fatal(CBM.PROCESS_EXECUTION_ABEND, procedure); } finally { Auditor.grabarRastroProceso(rastro, condicion, archivo, mensaje); // DB.close(resultSet); } } else { condicion = CondicionEjeFunEnumeration.EJECUCION_CANCELADA; mensaje = TLC.getBitacora().error(CBM.PROCESS_EXECUTION_ABEND, procedure); } SqlAgentMessage message = new SqlAgentMessage(procedure); message.setArgumentos(args); message.setRastro(rastro); message.setCondicion(condicion); message.setArchivo(archivo); message.setMensaje(mensaje); return message; } // <editor-fold defaultstate="collapsed" desc="getLogFileName"> // private static String getLogFileName(Long rastro) { // if (rastro == null || rastro == 0) { // return null; // } // return System.getenv(SEV.SQLPRC_RUNNER_LOG); // } // </editor-fold> // private static Long trimToNullNumber(String number) { String str = StringUtils.trimToEmpty(number); return StringUtils.isEmpty(str) || str.equalsIgnoreCase(DEFAULT_NUMBER_KW) || !StringUtils.isNumeric(str) ? null : Long.valueOf(str); } // // <editor-fold defaultstate="collapsed" desc="exportLog"> // private static String exportLog(String process) { // Bitacora.trace(SqlAgent.class, "exportLog", process); // try { // String targetFileName = process + "_" + System.currentTimeMillis() + "_" + TLC.getBitacora().hashCode(); // targetFileName += "." + "log"; // targetFileName = targetFileName.toLowerCase(); // String log = Utils.getSpooledFilesDir() + targetFileName; // FileWriter fileWriter = new FileWriter(log); // BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); // bufferedWriter.write(TLC.getBitacora().getLogString()); // bufferedWriter.close(); // return targetFileName; // } catch (IOException ex) { // TLC.getBitacora().fatal(ex); // } // return null; // } // </editor-fold> }