Oi Rogério,
Acho que vc poderia não esperar a consulta ficar pronta.
Vc criaria um novo thread que estaria executando sua consulta demorada.
Enquando o thread tivesse rodando, vc retornaria uma página para o browse
informando que o precesso está sendo executado.
Vc programaria esta página, via javascript, ou tags htmls, para ir dando
refresh
de tempo em tempo, até que o resultado da sua consulta pudesse ser exibido
para o usuário.
Para vc ter acesso ao thread, durante as requisições, vc poderia colocá-lo
na sessão do usuário durante este processamente e depois removeria ele
no momento de pegar os dados para exibição para o usuário.
Vc deve prestar atenção em como as coisas foram construídas aí na estrutura
da aplicação.
Geralmente as aplicações web fecham a sessão, transação, após o retorno do
conteúdo para o cliente.
Nesta thread vc deverá ter a conexão com o banco disponível independente da
requisição do browser.
Espero que minha dica te ajude!
Abraços,
========================
Gilvan Albino de Souza
www.lgkaiser.com.br
[EMAIL PROTECTED]
========================
----- Original Message -----
From: Rogério Ribeiro da Silva
To: [EMAIL PROTECTED]
Cc: [email protected]
Sent: Monday, September 10, 2007 4:58 PM
Subject: [JUG-Petro] Contornar Timeout de proxy reverso
Tenho uma aplicação utilizando struts 1.3, um servidor tomcat 5.5 e estou
utilizando java 5 update 11.
Estou enfrentando o seguinte problema:
Para acesso a minha aplicação existe um proxy reverso, por motivos de regras
de segurança... pois bem
1- Atualmente temos alguns gargalos em algumas consultas que a equipe de DBAs
estão resolvendo...
2- Nesse proxy reverso temos um timeout, por motivos de segurança é de 5
min... e pronto
Apos os 5 min o proxy finaliza a conexão com minha aplicação, e exibe sua
tela padrão de erro
502 BAD GATEWAY
Ao exibir esta msg minha aplicação nem sabe disso ela faz o dela mas quando
temina seu processo
o proxy ja finalizou a conexão a ela...
3- No meio esta minha aplicação, e meu problema como finalizar qualquer
processo que ela esteja fazendo dentro de um tempo limite, no qual eu
determinho menor do que o timeout do proxy, exibindo uma msg agradavel para meu
usuário, "SUA CONSULTA EXCEDEU O TEMPO LIMITE DE NOSSO SERVIDOR"
Nessa empreitada eu implementei um controle de transação
javax.transaction.UserTransaction
UserTransaction utx = null;
try {
Context ic = new InitialContext();
utx = (UserTransaction) ic.lookup("java:comp/UserTransaction");
utx.setTransactionTimeout(4000); // definido para 4 minutos
utx.begin();
//MEU PROCESSO
utx.commit();
}catch (Exception e) {
utx.rollback();
e.printStackTrace();
}
Este controle funciona em parte, pois bem:
Ele funciona mas aguarda a execução do processo,
e so na finalização deste processo que ele gera exceção do timeout definido
na aplicação
No caso processo demorar 6 min, o msg de erro do proxy já foi ativada em 5
min, de nada mais adianta controle algum.
PERGUNTA:
É possível implementar algo para contornar esse timeout do proxy reverso na
minha aplicação java, finalizando um processo em um tempo menor que o timeout
do proxy?
Grato em quem puder ajudar!
Rogério [rs]
Flickr agora em português. Você clica, todo mundo vê. Saiba mais.
------------------------------------------------------------------------------
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.485 / Virus Database: 269.13.13/998 - Release Date: 10/9/2007
08:48