Processo em Background

7 respostas
A

Fala ae pessoal…

Tenho o seguinte cenario:

  • Usuario preenche um form html e clica em OK
  • O servlet pega os dados e realiza um INSERT no BD…
  • É feito um “redirect” para uma pagina dizendo “sucesso”…

até ai tudo bem… agora, se eu quiser fazer um segundo insert, mas deixa-lo rodando em background, como faco? por exemplo:

  • Usuario preenche um form html e clica em OK
  • O servlet pega os dados e realiza um INSERT no BD…
  • O INSERT acima dispara outro insert, mas quero deixar esse segundo insert rodando em background, sendo o usuario ja sendo redirecionado para a pagina de “sucesso” enquanto o segundo insert está rodando, ou seja, o usuario só precisa esperar o primeiro INSERT terminar pra ser redirecionado, o segundo fica rodando em background…

Tem como fazer isso?

Obrigado! :roll:

7 Respostas

cancao

O custo desse segundo insert é tão grande pra vc ter que deixa-lo em background? Eu não vejo muitos motivos para isso, mas, se mesmo assim quiser fazer, basta usar uma thread e dispara-la depois que realizar o segundo insert. Mas que tal se vc explicasse melhor seu problema.

Até.

danieldestro

Use Threads!

// aqui faz teu insert Thread t = new Thread( new MeuInsertRunnable() ); //redireciona pra outra pagina

public class MeuInsertRunnable implements Runnable { public void run( ) { //aqui faz o outro insert } }

A

Entao, o segundo insert nao é tao pesado assim… o problema é q o resultado do primeiro q precisa ser extramamente rapido, mas ao mesmo tempo preciso rodar outras rotinas… nao será um insert a mais e sim mais alguns processos…

Mto obrigado pelas resposta, já me ajudaram mto!!!

danieldestro

Ops, faltou mencionar:

t.start( );

M

allan,
Vc pode usar threads como foi dito acima, mas pense na seguinte ocasião. Caso vc não consiga realizar o segundo insert, vc terá mostrado uma tela de “sucesso” numa operação que nao ocorreu sucesso.

Ou pior, vc mostra a tela de sucesso, e depois do erro no segundo insert, mostra uma tela de “erro”… Vai estar confundindo o usuário.

Eu sei isso que vc tá tentando fazer seja um requisito vital pro seu sistema, mas pode gerar confusão.

Uma dica, seria vc fazer o post em outra janela. Com java-script vc consegue deixar essa janela minimizada, ou fora da area de visão do usuário.

Com isso, vc mandaria um print de sucesso para tela atual e mandaria o POST pra outra janela escondida.

Outra idéia que poderia dar certo tb, é basicamente parecida com a anterior, só que ao inves de vc mandar o post pra outra janela e deixa-la oculta vc mandaria o POST para um IFRAME. Deste jeito ficaria massa.

Não sei se vc sabe uque é um iframe, então vou explicar caso vc não saiba. Um IFRAME é como se fosse uma tabela de html, só que dentro desta tabela, vc consegue chamar outra pagina html.

Bom, é isso…
MedioCore

danieldestro

E ai MedioCore,

IFRAME é legal mas só rola no IE.

E, creio que neste caso, não há a necessidade de uma tela de sucesso nos processamentos assincronos, por isso são chamados de assíncronos.

Abraços

T

Soh uma correcao, o IFRAME a tempo eh suportado tanto no IE, como mozilla, netscape e opera (meu browser default).
Soh nao eh suportado naqueles Netscape 4.75, que tem gente que insistem em usar.

Criado 14 de abril de 2004
Ultima resposta 15 de abr. de 2004
Respostas 7
Participantes 5