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

Atrašyti