Procedures + jsp = timeout

2 respostas
A

Ola,
Preciso executar uma procedure em jsp. O problema é que essa procedure leva cerca de 4 horas para ser executada. Ao submeter o formulário, nesse tempo o browser da time out até ser executada. O browser fica carregando... até dizer que a pagina não foi encontrada e tal...

Já uso para pocedures mais rapidas e funciona bem.

Estou usando só jsp. Abaixo o código. Estou usando callable.

if (sAcao.equals("executar")) {
   pckWJD.Conexao conn  = null;
	   try {
			conn  = new pckWJD.Conexao(""+session.getAttribute("CONEXAO_BD"));
			conn.preparaPl("safjd_importacao_interfaces(?,?,to_date(?, 'dd/mm/yyyy'),to_date(?, 'dd/mm/yyyy'))");
			conn.pl.setString(1,sEmp);
			conn.pl.setString(2,sEstab);
			conn.pl.setString(3,sData_ini);
			conn.pl.setString(4,sData_fim);
			conn.pl.executeQuery();
	
			Msg = "Operação realizada com sucesso !!!";
			
			 } catch (Exception e) {
			 	StringWriter sw = new StringWriter();
				e.printStackTrace(new PrintWriter(sw));
				String stacktrace = sw.toString();
		 		if (stacktrace.indexOf("ORA-00942") != -1) {
					throw new Exception("Estabelecimento não encontrado");
				} else{
					 throw e;
  				}		
		} finally {
         		conn.fechar();
  		}
		
   }

Alguém sabe uma solução?

Pensei em usar uma classe com runnable, instanciar como bean e executar em paralelo, mas dae teria que fazer um controle para sabe quando terminou a execução.

2 Respostas

eltonads

Viajando um pouco…

Você poderia usar um Servlet para colocar o processo para rodar, e via Ajax (ou refreshs a cada x seg/min) você poderia enviar requisições para este ou outro servlet para verificar o estado de um objeto no Server-Side, que seria o responsável pelo status da procedure.

Deste modo nunca dá timeout e não perde a sessão, pois você está constantemente mandando requisições ao server-side, e também pode manter o browser funcional até o processo terminar.

Se aloprar bastante dá até pra bolar uma barrinha de progresso! :smiley:

Mas é só uma idéia… Boa sorte.

Att.,

A

Ok essa é uma boa maneira… mas não sei como fazer esse controle no servlet (saber que estou executando o processo ainda), acho que teria que ser em uma tabela de banco com logs.

Criado 2 de fevereiro de 2009
Ultima resposta 2 de fev. de 2009
Respostas 2
Participantes 2