Servlet executando em 'background' em contagem de tempo

boa tarde ,

queria saber se há alguma maneira de eu temporizar um servlet ( ou algo parecido) para ser executado de tempos em tempos .

tem algum jeito?

Use o Quartz - http://www.mundooo.com.br/php/modules.php?name=News&file=article&sid=821

Alguns servidores de aplicação têm um timer nativo (sei que o Weblogic 8.0 tem um) que você pode cadastrar no seu deployment descriptor.
Alternativamente, você pode utilizar a interface java.util.Timer, agendar o seu timer pro tempo que quiser (e executando a ação de chamar o seu servlet, é claro) e cadastrar essa pitomba no seu deployment descriptor (web.xml se a sua aplicação for um war).
Desse jeito você não precisa utilizar o Quartz (que pode te dar mais recursos, caso precise mais do que um timer simples e rápido).

parece que esse quartz pode resolver meu problema vou dar uma pesquisada

sobre o servidor de aplicacao eu uso o tomcat 5.5.20
sera que ele tem um timer dele ja? se ele tiver… é so eu criar por exemplo um servlet e identificar ele no xml?

[quote=luzeras]parece que esse quartz pode resolver meu problema vou dar uma pesquisada

sobre o servidor de aplicacao eu uso o tomcat 5.5.20
sera que ele tem um timer dele ja? se ele tiver… é so eu criar por exemplo um servlet e identificar ele no xml?[/quote]

Se vc gosta de coisa simples, veja:

public Schedule extends java.util.TimerTask{
	public void run(){
		System.out.println("Run...");
	}


	public static void main(String args[]){
		
		java.util.Timer t = new java.util.Timer();

		t.schedule(new Schedule(),new Date());
		
	}
}

Desenvolvemos um sistema que roda encima do Tomcat, o mesmo Schedula grandes quantidades de processos. Hoje temos cerca de 300 rotinas, desde procedures até geração de relatórios. Com esse simples trecho de código poderás fazer muitas coisas. Depende da criatividade!!!

essa classe que vocce me mandou me ajudou muito .
mas dai , como que eu faço pra ela ficar rodando ? pra ficar esperando o delay de tempo certo pra executar o metodo run?

Como eu e o dders havíamos falado, dá pra fazer estendendo a classe java.util.TimerTask.
Fiz um exemplo no Tomcat:

package br.com.guj.timer;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;

public class GUJTimerTask extends TimerTask {

	public GUJTimerTask() {
	}
	
	public void run() {
		SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
		System.out.println("\n"+sdf.format(new Date())+" - Task Rodando.");
	}

}

Fiz rodar a partir da chamada de um servlet que eu criei e configurei pra rodar quando a aplicação sobe no tomcat:

package br.com.guj.web;

import java.io.IOException;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import br.com.guj.timer.GUJTimerTask;

public class GUJTimerServlet implements Servlet {

	public void destroy() {
	}

	public ServletConfig getServletConfig() {
		return null;
	}

	public String getServletInfo() {
		return null;
	}

	public void init(ServletConfig arg0) throws ServletException {
		
		Timer timer = new Timer();
		TimerTask uTimerTask = new GUJTimerTask();
		Long period = new Long("1000");
		timer.scheduleAtFixedRate(uTimerTask, new Date(), period.longValue());
	}

	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
	}

}

Configuração do servlet no web.xml:

<servlet>
    	<servlet-name>GUJTimerServlet</servlet-name>
    	<servlet-class>br.com.guj.web.GUJTimerServlet</servlet-class>
    	<load-on-startup>1</load-on-startup>
</servlet>

Desculpe a demora aí, mas a vida anda corrida e só agora pude te falar com mais detalhes. Mas manda bala que funciona e é mais simples do que colocar o Quartz na sua aplicação.