package br.com.centralit.bpm.batch; import java.sql.Timestamp; import java.util.Collection; import br.com.centralit.bpm.dto.EventoFluxoDTO; import br.com.centralit.bpm.integracao.EventoFluxoDao; import br.com.citframework.integracao.TransactionControler; import br.com.citframework.util.UtilDatas; public class ThreadVerificaEventos extends Thread { private EventoFluxoDao eventoFluxoDao; private Collection<EventoFluxoDTO> eventosDisponiveis; @Override public void run() { while (true) { try { sleep(5000); this.carregaEventosDisponiveis(); if (eventosDisponiveis != null) { for (final EventoFluxoDTO eventoFluxoDto : eventosDisponiveis) { sleep(500); boolean bExecuta = true; if (eventoFluxoDto.getDataHoraExecucao() != null && eventoFluxoDto.getIntervalo() != null) { final Timestamp ts = UtilDatas.somaSegundos(eventoFluxoDto.getDataHoraExecucao(), eventoFluxoDto.getIntervalo()); bExecuta = ts.compareTo(UtilDatas.getDataHoraAtual()) <= 0; } if (bExecuta) { sleep(1000); // Forma Antiga, sem usar executor para controlar as threads final ThreadExecutaEvento thread = new ThreadExecutaEvento(eventoFluxoDto); thread.start(); } } } } catch (final Exception e) { System.out.println("#########################################"); System.out.println("Problemas na execu��o dos eventos bpm"); System.out.println("#########################################"); e.printStackTrace(); } } } private void carregaEventosDisponiveis() { final EventoFluxoDao eventoFluxoDao = this.getEventoFluxoDao(); try { eventosDisponiveis = eventoFluxoDao.findDisponiveis(); } catch (final Exception e) { eventosDisponiveis = null; System.out.println("#########################################"); System.out.println("Problemas na carga dos eventos bpm "); System.out.println("#########################################"); e.printStackTrace(); } finally { this.closeConnectionOnTransaction(); } } private EventoFluxoDao getEventoFluxoDao() { if (eventoFluxoDao == null) { eventoFluxoDao = new EventoFluxoDao(); } return eventoFluxoDao; } private void closeConnectionOnTransaction() { try { final TransactionControler tc = this.getEventoFluxoDao().getTransactionControler(); if (tc != null) { tc.closeQuietly(); } } catch (final Exception e) { e.printStackTrace(); } } }