Procedures + jsp = timeout

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.

[code]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();
	}

}
[/code]

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.

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.,

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.