package br.com.centralit.citcorpore.batch; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.sql.Timestamp; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import br.com.centralit.citcorpore.bean.ExecucaoBatchDTO; import br.com.centralit.citcorpore.bean.ProcessamentoBatchDTO; import br.com.centralit.citcorpore.integracao.ExecucaoBatchDao; import br.com.centralit.citcorpore.negocio.ProcessamentoBatchService; import br.com.citframework.excecao.LogicException; import br.com.citframework.excecao.PersistenceException; import br.com.citframework.excecao.ServiceException; import br.com.citframework.integracao.JdbcEngine; import br.com.citframework.service.ServiceLocator; import br.com.citframework.util.Constantes; import br.com.citframework.util.Reflexao; import br.com.citframework.util.UtilDatas; import br.com.citframework.util.UtilStrings; public class JobProcessamentoBatchExecuteSQL implements Job { public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { String strNomeJob = jobExecutionContext.getJobDetail().getName(); System.out.println("----> Iniciando Processamento Batch: " + strNomeJob); String numStr = UtilStrings.apenasNumeros(strNomeJob); Integer idProcessamentoBatch = new Integer(numStr); ProcessamentoBatchDTO procBean = new ProcessamentoBatchDTO(); procBean.setIdProcessamentoBatch(idProcessamentoBatch); ProcessamentoBatchService procService = null; try { procService = (ProcessamentoBatchService) ServiceLocator.getInstance().getService(ProcessamentoBatchService.class, null); } catch (ServiceException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } ExecucaoBatchDao execucaoBatchDao = new ExecucaoBatchDao(); if (procService != null){ try { procBean = (ProcessamentoBatchDTO) procService.restore(procBean); } catch (LogicException e) { e.printStackTrace(); procBean = null; } catch (ServiceException e) { e.printStackTrace(); procBean = null; } if (procBean != null){ Timestamp tsExecucao = UtilDatas.getDataHoraAtual(); if (procBean.getSituacao().equalsIgnoreCase("A")){ String retorno = ""; System.out.println("JOB INICIANDO EXECUCAO -> " + procBean.getIdProcessamentoBatch() + " --> " + procBean.getExpressaoCRON() + " (" + procBean.getDescricao() + ")"); if (procBean.getTipo().equalsIgnoreCase("S")){ retorno = executaSQL(procBean.getConteudo(), strNomeJob); }else{ try { retorno = executaClasse(procBean.getConteudo(), strNomeJob,jobExecutionContext); } catch (ClassNotFoundException e) { e.printStackTrace(); } } ExecucaoBatchDTO execDto = new ExecucaoBatchDTO(); execDto.setIdProcessamentoBatch(idProcessamentoBatch); execDto.setDataHora(tsExecucao); execDto.setConteudo(retorno); try { execucaoBatchDao.create(execDto); } catch (Exception e) { e.printStackTrace(); } }else{ ExecucaoBatchDTO execDto = new ExecucaoBatchDTO(); execDto.setIdProcessamentoBatch(idProcessamentoBatch); execDto.setDataHora(tsExecucao); execDto.setConteudo("PROCESSAMENTO INATIVO! CADASTRO INATIVO!"); try { execucaoBatchDao.create(execDto); } catch (Exception e) { e.printStackTrace(); } } } } } private String executaSQL(String sql, String nomeJob){ JdbcEngine engineDb = new JdbcEngine(Constantes.getValue("DATABASE_ALIAS"), null); int num = 0; try { num = engineDb.execUpdate(sql, null); System.out.println(nomeJob + " - EXECU��O OK! N�mero de Linhas atualizadas: " + num); } catch (PersistenceException e1) { System.out.println(nomeJob + " - Problemas na execucao: "); e1.printStackTrace(); Writer writer = new StringWriter(); PrintWriter printWriter = new PrintWriter(writer); e1.printStackTrace(printWriter); return writer.toString(); } return "EXECU��O OK! N�mero de Linhas atualizadas: " + num; } private String executaClasse(String pathClasseParm, String nomeJob){ Class classe = null; try { classe = Class.forName(pathClasseParm); } catch (ClassNotFoundException e1) { System.out.println(nomeJob + " - Problemas na execucao: "); e1.printStackTrace(); Writer writer = new StringWriter(); PrintWriter printWriter = new PrintWriter(writer); e1.printStackTrace(printWriter); return writer.toString(); } Object objeto = null; try { objeto = classe.newInstance(); } catch (InstantiationException e1) { System.out.println(nomeJob + " - Problemas na execucao: "); e1.printStackTrace(); Writer writer = new StringWriter(); PrintWriter printWriter = new PrintWriter(writer); e1.printStackTrace(printWriter); return writer.toString(); } catch (IllegalAccessException e1) { System.out.println(nomeJob + " - Problemas na execucao: "); e1.printStackTrace(); Writer writer = new StringWriter(); PrintWriter printWriter = new PrintWriter(writer); e1.printStackTrace(printWriter); return writer.toString(); } Method mtd = Reflexao.findMethod("executar", objeto); if (mtd != null){ try { mtd.invoke(objeto, null); } catch (IllegalArgumentException e1) { System.out.println(nomeJob + " - Problemas na execucao: "); e1.printStackTrace(); Writer writer = new StringWriter(); PrintWriter printWriter = new PrintWriter(writer); e1.printStackTrace(printWriter); return writer.toString(); } catch (IllegalAccessException e1) { System.out.println(nomeJob + " - Problemas na execucao: "); e1.printStackTrace(); Writer writer = new StringWriter(); PrintWriter printWriter = new PrintWriter(writer); e1.printStackTrace(printWriter); return writer.toString(); } catch (InvocationTargetException e1) { System.out.println(nomeJob + " - Problemas na execucao: "); e1.printStackTrace(); Writer writer = new StringWriter(); PrintWriter printWriter = new PrintWriter(writer); e1.printStackTrace(printWriter); return writer.toString(); } }else{ System.out.println(nomeJob + " - Problemas na execucao: "); System.out.println(nomeJob + " PROBLEMA: METODO NAO ENCONTRADAO (executar)!"); return "PROBLEMA: METODO NAO ENCONTRADAO (executar)!"; } return "EXECU��O OK!" ; } /*Refatorando o metodo executa classe com novo paramentro de contexto * Alterado tamb�m o metodo a ser executado para 'execute' * * */ private String executaClasse(String pathClasseParm, String nomeJob, JobExecutionContext jobExecutionContext) throws JobExecutionException, ClassNotFoundException{ Class classe = Class.forName(pathClasseParm); try { Object objeto = classe.newInstance(); Method method = Reflexao.findMethod("execute", objeto); if(method!=null) { method.invoke(objeto, jobExecutionContext); } else { System.out.println(nomeJob + " - Problemas na execucao: "); System.out.println(nomeJob + " PROBLEMA: METODO NAO ENCONTRADAO (execute)!"); return "PROBLEMA: METODO NAO ENCONTRADAO (execute)!"; } } catch(Exception ex) { System.out.println(nomeJob + " - Problemas na execucao: "); throw new JobExecutionException(ex.getMessage()); } return "EXECU��O OK!" ; } }