inclui uma chamada ao m�todo cancel() do timer no destroy do servlet:

        /**
         * Este m�todo � invocado no momento em que a inst�ncia do servlet
         * ir� se tornar eleg�vel para o GC
         */
        public void destroy() {
                try {
                        timer.cancel();
                } catch(Exception error) {
                        System.err.println("Problem trying to cancel the timer: " +
error.getMessage());
                }
        }





-----Mensagem original-----
De: Fco. Deisimar Nobre Jr. [mailto:[EMAIL PROTECTED]]
Enviada em: sexta-feira, 3 de janeiro de 2003 15:12
Para: [EMAIL PROTECTED]
Assunto: RES: [cejug-discussao] Servlet em background



    Realmente eu n�o tinha pensado nessa possibilidade.
    Estudando mais um pouco e com a dica do Gaucho(Felipe) criei esse
servlet:

package meuPacote;
import javax.servlet.*;

import java.util.Timer;
import java.util.TimerTask;

public class servletBackground extends GenericServlet  {

  private static int id = 0;
  private int myId;
  private static int intervalo;
  private Timer timer = new Timer();

  public void init(ServletConfig config){
    intervalo = Integer.parseInt(config.getInitParameter("intervalo"));
    id = id + 1;
    myId = id;
    System.out.println("ServletConfig - " + myId + " - Iniciou");
    System.out.println("Intervalo = " + intervalo + " segundos");
    timer.schedule(new tarefa(), 0, intervalo * 1000);
  }

  public void finalize(){
    System.out.println("ServletConfig - " + myId + " - Fim");
  }

  public void service(ServletRequest request, ServletResponse response){
  }

  class tarefa extends TimerTask {
    private int count = 0;
    public void run() {
      count = count + 1;
      System.out.println("ServletConfig - Executou pela " + count + "
vez.");
//      timer.cancel(); //Terminate the timer thread
    }
  }

}

    No arquivo web.xml eu adicionei o seguinte trecho?

  <servlet>
    <servlet-name>freteBackground</servlet-name>
    <servlet-class>meuPacote.servletBackground</servlet-class>
    <init-param>
      <param-name>intervalo</param-name>
      <param-value>60</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
  </servlet>

    Agora vem a minha d�vida: Quando reinicio o servi�o(Tomcat 4.0.4) tenho
a seguinte saida no arquivo stdout.log:

ServletConfig - 1 - Iniciou
Intervalo = 60 segundos
ServletConfig - Executou pela 1 vez.
ServletConfig - 1 - Iniciou
Intervalo = 60 segundos
ServletConfig - Executou pela 1 vez.
ServletConfig - Executou pela 2 vez.
ServletConfig - Executou pela 2 vez.
ServletConfig - Executou pela 3 vez.
ServletConfig - Executou pela 3 vez.
ServletConfig - Executou pela 4 vez.
ServletConfig - Executou pela 4 vez.


    Isso esta me fazendo concluir que esta sendo criada duas inst�ncias do
servlet, e o mais curioso � que n�o sei porque que o myId n�o mudou. Algu�m
pode me explicar o que de fato esta acontecendo??? e como resolver??
    Obrigado!!

===========================================
Francisco Deisimar Nobre J�nior
Analista de Sistemas - CIT - M. Dias Branco
===========================================


-----Mensagem original-----
De: Marcelo de Paula Bezerra [mailto:[EMAIL PROTECTED]]
Enviada em: sexta-feira, 3 de janeiro de 2003 10:27
Para: [EMAIL PROTECTED]
Assunto: Re: [cejug-discussao] Servlet em background


Seu banco de dados n�o suporta triggers?




----------------------------------------------------------------------------
--------------- Ceara' Java User Group    Para cancelar sua assinatura,
envie um e-mail para: [EMAIL PROTECTED]   Para mais
informacoes, mande um e-mail para: [EMAIL PROTECTED]   Falar com o
administrador? e-mail para: [EMAIL PROTECTED]


-------------------------------------------------------------------------------------------

Ceara' Java User Group

  Para cancelar sua assinatura, envie um e-mail para: [EMAIL PROTECTED]
  Para mais informacoes, mande um e-mail para: [EMAIL PROTECTED]
  Falar com o administrador? e-mail para: [EMAIL PROTECTED] 
 

Responder a