Boa tarde pessoall.
Seguinte tenho um metodo que tem tempo deteminado para executar. Seguindo orientação do pessoal aqui do forum resolvi a classe Future do pacote java.util.concurrent. Segui a baixo minhas classes:import java.util.concurrent.Callable;
import java.util.concurrent.ScheduledThreadPoolExecutor;
public class GeraNotaUtil implements Callable<Veiculo> {
Movimentacao movimentacao=null;
GerarNfseResposta resposta=null;
public GeraNotaUtil(Movimentacao movimentacao){
super();
this.movimentacao = movimentacao;
}
@Override
public Resposta call() throws TempoDeRespostaExecedeuLimiteConfiguradoException, ErroDeAutenticacaoException, ErroAOCriarXMLEnvioException, ErroAoAssinarConteudoException, ErroNaGeracaoNotaFiscalException {
// TODO Auto-generated method stub
resposta=NotaFiscalUtil.gerarNotaFical(Veiculo);
return resposta;
}
}
E minha classe que executa a operação:
public static GerarNfseResposta obterNotaFiscal(Veiculo veiculo) throws InterruptedException, ExecutionException{
ScheduledThreadPoolExecutor executor =new ScheduledThreadPoolExecutor(1);
executor.allowCoreThreadTimeOut(false);
Future future = executor.submit(new GeraNotaUtil(veiculo));
GerarNfseResposta resposta=null;
try {
resposta=(Resposta) future.get(1,TimeUnit.SECONDS);
} catch (TimeoutException e) {
// TODO Auto-generated catch block
executor.shutdown();
executor.shutdownNow();
future.cancel(true);
throw new TempoDeRespostaExecedeuLimiteConfiguradoException("TEMPO DE RESPOSTA EXCEDEU O TEMPO DE LIMITE CONFIGURADO");
}
return resposta;
}
O probelma é o que ela é lançado o timeOut, mas a execução continua.
Tentei usar os metodos cancel e Shtudoen no excption mas não funcionou.
Eu agradeço qualquer sugestão.