[RESOLVIDO]Como enviar email a partir de hora fixa

Show!

Você esta tentando enviar email também?

Sim, mas eu estou utilizando um webService próprio da empresa.

Eu estava tentando enviar um e-mail mas não consegui e fui programar outra coisa

No meu projeto está dando um alerta para eu usar o persistent dentro do parênteses do @Schedule… Isso irá alterar o funcionamento ?

Esta dizendo para remover o final não? Pode remover

O método funciona com final, sem final ou sem parametro, mas se tiver paramentro, tem que ser javax.ejb.Timer

Eu fiquei sem entender o porque daquela variável também, já que ela não é utilizada.

Vou retirar então.

Aqui ele comenta para pôr o código dessa forma:

@Schedule(hour="8", minute="15", dayOfMonth="28", month="3", year="2018", info="MyTimer", persistent = false)
private void scheduledTimeout(final Timer t) {
    JOptionPane.showMessageDialog(null, "Deu certo!");
}

Mas seu eu pôr assim irá trazer algum erro ?

Só você para dizer :slight_smile:

Eu utilizo eclipse e ele não me da nenhum warning.

A documentação diz: "Specifies whether the timer that is created is persistent."
Nunca utilizei o atributo persistent, mas eu acho que não dará problema algum

@Mike
Ok… Entendi, já criei a classe para testar, mas não executa quando dá a hora!
Como você criou a sua classe ? Desculpe tantas perguntas!!

Assim:

@Singleton
public class ClasseEJB {

	Classe classe = new classe();
	
	@Schedule(hour="23", minute="30", dayOfWeek="*", info="MyTimer")
    private void scheduledTimeout(Timer t) {
       classe.metodo();
    }
	
}

Qual é a versão da java EE utilizada no seu projeto ?

Java EE 7 + Glassfish 4.0

Estou usando o Java EE 7 + Apache Tomcat 8.0.27.0, mas ainda não funcionou haha

No Tomcat EJB não funciona

Tomcat é um container, para rodar EJB tem que ser servidor de aplicação.

E existe algum que funcione no tomcat ? Que você conheça claro

Eu só fiz do jeito acima.

Uma outra solução seria criar uma Thread, executar um metodo nela e bota-la pra dormir por um tempo, ai quando acordar, executa de novo o metodo.

Certo… Obrigado pela ajuda!

Se não me engano, tem uma classe de Thread que executa métodos em um determinado intervalo, mas não sei exatamente qual é, talvez TimerTask (como o nome diz) ou ExecutorService, mas eu apostaria no primeiro

Vou procurar sobre isso entao!

Código que utilizei:

public static void executa() {
    
    long TEMPO = (1000 * 60);//verifica a cada 1 minuto
    Timer timer = new Timer();
    TimerTask tarefa = new TimerTask() {
        public void run() {
              
           //Colocar aqui o código

        }
    };
    timer.scheduleAtFixedRate(tarefa, TEMPO, TEMPO); 
}
1 curtida