elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Inconveniente con Quartz
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Inconveniente con Quartz  (Leído 1,690 veces)
Lind L. Tailor

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Inconveniente con Quartz
« en: 6 Mayo 2015, 19:49 pm »

Hola...

Como están mis estimados compañeros, espero que estén teniendo un día agradable pero sobre todo espero que su código este ejecutándose correctamente ;D...

Mi problema radica en la implementación de hilos mediante el uso de la librería llamada Quartz, explico brevemente el framework... Quartz, es una librería que permite ejecutar trabajos o tareas mediante un tiempo de terminado, podemos decir que en esencia viene siendo lo que conocemos en Java como un Timer/TimerTask. Primeramente necesitamos una clase que implemente la interface Job, la cual tiene como método execute(), el cual va a contener nuestro acción a ejecutar. Posteriormente necesitamos una clase que ademas de contener el famoso método main, contiene la configuración de nuestro trabajo a ejecutar, tal y como podemos ver a continuación... (Creo que si fue breve xD)

Carga.java
Código
  1. public class Carga implements Job {
  2.  
  3. public void execute(JobExecutionContext context) throws JobExecutionException {
  4. for(int i = 0; i < 10000; i++){
  5. try {
  6. Thread.sleep(10);
  7. System.out.println("Index: " + i);
  8. } catch (InterruptedException e) {
  9. e.printStackTrace();
  10. }
  11. }
  12. }
  13. }
  14.  

CargaMain.java
Código
  1. public static void main(String[] args) throws SchedulerException {
  2. Scheduler scheduler = new StdSchedulerFactory().getScheduler();
  3.  
  4. Trigger trigger = TriggerBuilder.newTrigger().withSchedule(
  5. SimpleScheduleBuilder.simpleSchedule()
  6. .withIntervalInSeconds(10).repeatForever()).build();
  7.  
  8. JobDetail prueba = JobBuilder.newJob(Carga.class).withIdentity("hola","adios").build();
  9.  
  10. scheduler.scheduleJob(prueba, trigger);
  11. scheduler.start();
  12. }
  13.  

Como podemos ver, únicamente quiero una impresión de números en pantalla el cual si ejecutamos podemos ver en consola la salida de manera correcta, sin embargo, podemos ver que cuando pasan los 10 segundos que es el intervalo en que se va a ejecutar, se dispara nuevamente y vemos en pantalla algo parecido a lo siguiente...

Index: 0
Index: 793
Index: 1
Index: 794
Index: 2
Index: 795
Index: 3
Index: 796
Index: 4
Index: 797
Index: 5
...

A simple vista sabemos que el error es que no controlamos las llamadas por lo tanto podemos ver como se intercalan los números, para ello eh indago por Internet para controlar lo mencionado anteriormente y afortunadamente encontré la "solución" ante tal  inconveniente, incluso podemos decir que la solución es universal ya que en todos los temas que eh encontrado relacionado a este problema mencionan el mismo bloque de código, dejando el código de CargaMain de la siguiente manera...

CargaMain.java
Código
  1. public static void main(String[] args) throws SchedulerException {
  2. Scheduler scheduler = new StdSchedulerFactory().getScheduler();
  3.  
  4. Trigger trigger = TriggerBuilder.newTrigger().withSchedule(
  5. SimpleScheduleBuilder.simpleSchedule()
  6. .withIntervalInSeconds(10).repeatForever()).build();
  7.  
  8. JobDetail prueba = JobBuilder.newJob(Carga.class).withIdentity("hola","adios").build();
  9. if (prueba != null) {
  10.        List<JobExecutionContext> currentlyExecutingJobs = (List<JobExecutionContext>) scheduler.getCurrentlyExecutingJobs();
  11.        for (JobExecutionContext jec : currentlyExecutingJobs) {
  12.            if(prueba.equals(jec.getJobDetail())) {
  13.               System.out.println("RUNNING...");
  14.            }
  15.        }
  16.    }
  17.  
  18. scheduler.scheduleJob(prueba, trigger);
  19. scheduler.start();
  20. }
  21.  

Sin embargo, el resultado es el mismo :(, no controla la llamada como debería ser, mi pregunta es ¿Cual sería la forma correcta de adaptar del código? ya que como lo estoy haciendo no cabe duda que es la errónea.

Ahora bien, tengo entendido que me estoy complicando la vida y puedo hacer uso de la clase TimerTask para representar lo que necesito arriba, tal y como podemos ver a continuación...

Código
  1. public class Carga extends TimerTask{
  2. public static Timer timer;
  3.  
  4. public static void main(String[] args) {
  5. TimerTask tasknew = new Carga();
  6. timer = new Timer();
  7. timer.scheduleAtFixedRate(tasknew,500,1000);
  8. }
  9.  
  10. public void run() {
  11. try {
  12. for (int i = 0; i < 1000; i++){
  13. Thread.sleep(10);
  14. System.out.println("Index: " + i);
  15. }
  16. } catch (InterruptedException e) {
  17. e.printStackTrace();
  18. }
  19. }
  20. }
  21.  

Si ejecutamos lo siguiente vemos que imprime correctamente los primeros 1000 números e inmediatamente los próximos 1000 si el tiempo es muy corto, mi otra pregunta es... ¿Cual el proceso interno que realiza Java para el TimerTask de tal forma que si obtenga lo que necesito a diferencia de Quartz?

Disculpen mi pregunta pero la API no me ah ayudado mucho a comprender y despejar mis dudas...


En línea

Lind L. Tailor

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Inconveniente con Quartz
« Respuesta #1 en: 8 Mayo 2015, 02:28 am »

Gracias por el tiempo dedicado a leer este tema, sin embargo, paso a cerrarlo ya que "encontré" la respuesta.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pequeño inconveniente
Foro Libre
ANTRUCK 1 1,860 Último mensaje 10 Agosto 2011, 10:54 am
por Randomize
ayuda!!! inconveniente con GPU :(
Hardware
Cergath 7 4,293 Último mensaje 26 Mayo 2013, 22:50 pm
por worldrings
Conexion USB inconveniente
Dudas Generales
analisis242 0 1,491 Último mensaje 29 Noviembre 2014, 15:36 pm
por analisis242
inconveniente con información de un txt
Java
harrisongonzalezl 2 1,695 Último mensaje 15 Marzo 2017, 03:21 am
por 6hiii
Inconveniente \\ en ASP.NET C#
.NET (C#, VB.NET, ASP)
Zeroql 1 2,231 Último mensaje 24 Enero 2018, 21:00 pm
por z3nth10n
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines