Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - olimpico10

#1
Cita de: rub'n en  5 Octubre 2018, 04:38 AM
Hola, que tal, Structs 2  >:( porque no Springframework :D ? pero bueno que mas da

bueno mira, usa


https://mvnrepository.com/artifact/org.quartz-scheduler/quartz/2.3.0

Código (xml) [Seleccionar]
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
   <groupId>org.quartz-scheduler</groupId>
   <artifactId>quartz</artifactId>
   <version>2.3.0</version>
</dependency>


Código (xml) [Seleccionar]
<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
<dependency>
   <groupId>javax.mail</groupId>
   <artifactId>javax.mail-api</artifactId>
   <version>1.6.2</version>
</dependency>



Esto te ayuda a crear la expresion de cron http://www.cronmaker.com/



creas una clase que implente a Job, en ese metodo execute manda el mail

Código (java) [Seleccionar]
public class TimerClass implements Job {

   public TimerClass() {

   }

   @Override
   public void execute(JobExecutionContext jobExecutionContext) {
        //Logica del mail aqui
         try {
              System.out.println("Hola");
         }catch(JobExecutionException  ex) {
         }
       
   }
}


En tu clase que implementa el ServletContextListener dentro del método

Código (java) [Seleccionar]
public void contextInitialized(ServletContextEvent param){
new ExecTimer();
}


Código (java) [Seleccionar]
public class ExecTimer {

   private JobDetail job;
   private Trigger trigger;
   private Scheduler scheduler;

   private static final String TWENTY_SEC = "0/20 * * * * ?"; //cada 20 segundos

                                     //seg,min,hora,dia,mes,diaSemana,Año(Opcional)
                                             //todos los viernes a las 6:30AM
   private static final String FECHA_FUTURA = "00 30 6 ? * FRI";   // http://www.cronmaker.com/


   public ExecTimer() {
       initTask();
   }

   private void initTask() {
       try {
           job = JobBuilder.newJob(TimerClass.class)
                   .withIdentity("EnviarMail")
                   .build();
           trigger = TriggerBuilder
                   .newTrigger()
                   .withSchedule(CronScheduleBuilder.cronSchedule(FECHA_FUTURA))
                   .build();
           scheduler = new StdSchedulerFactory().getScheduler();
           scheduler.start();
           scheduler.scheduleJob(job, trigger);
       } catch (SchedulerException e) {
           e.printStackTrace();
       }
   }
}


Con Springboot seria mas facil aun, menos codigo y sin .xml  >:D

Código (java) [Seleccionar]
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableScheduling
@SpringBootApplication
public class Application {

   public static void main(String ...blabla) {
       SpringApplication.run(Application.class);
   }

}



Código (java) [Seleccionar]
 
@Scheduled(cron= "00 30 6 ? * FRI")
public void enviarMail() {
   System.out.println("Hola, ");
}


Y otra cosa importante la operación de envío del mail puedes ejecutarla de manera asíncrona, hay mucha maneras de hacerlo con java, hará que tu aplicación no se bloquee, mas reactiva  :D

Buenas rub'n, estoy implementando ahora esto que me comentaste, pero olvidé preguntarte algo importante que no comprendo.

¿Como puedo hacer para programar la tarea del envío del correo un mes despues de que un usuario realice un evento (alta en base de datos) ? Es decir, que en cuanto el usuario realice el evento, se programe la tarea.

Lo que no veo es como llamar desde la clase que gestiona el alta en base de datos a execTimer para pasarle la fecha en la que se debe enviar el correo.

De nuevo gracias por tu ayuda.
#2
Buenas rub'n ,

estoy conociendo ahora Structs 2, y la verdad es que me está gustando como framework, Springframework no lo he trabajado aun.

En cuanto a tus indicaciones, muchas gracias, lo intentaré así. En cualquier caso, sabes como funciona exactamente Quartz internamente? Me refiero a como programa los trabajos. (Esto último es solo curiosidad  :laugh:)

Un saludo.
#3
Hola 3n31ch, gracias por tu respuesta, imaginaba que sería así, era por confirmar. Me pondré a ello a ver como puedo hacerlo. Tengo que ver como programar en Struts 2 una URL de este tipo, y controlar la seguridad. ¿Podrias darme alguna directriz al respecto si conoces el framework? Gracias de antemano.

Por cierto, buscando por ahí encontre lo siguiente:

http://www.quartz-scheduler.org/

Es una librería que, al parecer, sirve para postergar la ejecución de código, lo que no tengo ni idea es de como funcionará, ya que entiendo que por supuesto esto debe ser el SO quien lo realice, no se como interactuará la librería con el. ¿Que te parece la librería a simple vista? ¿La conoces?

Un saludo.
#4
Buenas tardes,

estoy desarrollando una aplicación web con Java en el framework Struts2. Necesito que, a los X dias de realizar una acción en mi programa, se envíe un correo recordatorio a una dirección de email especifica de forma automática. Se como puedo enviar correos usando la API JAVA MAIL, pero no se si existe algún servicio o alguna cosa que pueda utilizar para programar el envío en una fecha concreta del futuro.

Agradezco vuestra ayuda de antemano, un saludo.