Iniciativa Globalcode Agendamento de Tarefas com Java SE e EE Open-source Education
Palestrante <ul><li>Vinicius M. Senger </li></ul><ul><ul><li>Trabalha com desenvolvimento de softwares a mais de 12 anos; ...
Palestrante <ul><li>Kleber Xavier </li></ul><ul><ul><li>Formado em Engenharia Mecatrônica pela POLI-USP e Mestrando em Eng...
Agenda <ul><ul><li>Conceitos Gerais </li></ul></ul><ul><ul><li>Estudo de Caso </li></ul></ul><ul><ul><li>Agendamento com J...
Agenda <ul><ul><li>Conceitos Gerais </li></ul></ul><ul><ul><li>Estudo de Caso </li></ul></ul><ul><ul><li>Agendamento com J...
Conceitos Gerais <ul><li>O agendamento permite a programação de tarefas para serem executadas em um determinado horário. <...
Conceitos Gerais <ul><li>Exemplos de utilização de agendamento: </li></ul><ul><ul><li>Realizar backups periódicos; </li></...
Agenda <ul><ul><li>Conceitos Gerais </li></ul></ul><ul><ul><li>Estudo de Caso </li></ul></ul><ul><ul><li>Agendamento com J...
Estudo de Caso <ul><li>Para ilustrar o agendamento de tarefas em Java iremos trabalhar com um sistema de verificação de ex...
Estudo de Caso
Agenda <ul><ul><li>Conceitos Gerais </li></ul></ul><ul><ul><li>Estudo de Caso </li></ul></ul><ul><ul><li>Agendamento com J...
Agendamento com Java SE <ul><li>Desde a versão 1.3 estão disponíveis duas classes para agendamento de tarefas em Java: </l...
java.util.TimerTask <ul><li>Classe abstrata que implementa a interface java.lang.Runnable. </li></ul><ul><li>Para utilizá-...
java.util.TimerTask <ul><li>Podemos cancelar a tarefa agendada através do método  cancel(). </li></ul><ul><li>Permite tamb...
java.util.Timer <ul><li>Classe que representa a Thread que irá executar a tarefa agendada (TimerTask). </li></ul><ul><li>P...
java.util.Timer <ul><li>Para o agendamento periódico temos duas situações: </li></ul><ul><ul><li>Atraso fixo (fixed-delay)...
java.util.Timer <ul><li>Métodos para agendamento de execução única: </li></ul><ul><ul><li>schedule (TimerTask tarefa, Date...
Agendamento com Java SE Ex: import java.util.Timer; public class Main { public static void main(String[] args) { TarefaAge...
Agendamento com Java SE <ul><li>DEMO </li></ul>
Agenda <ul><ul><li>Conceitos Gerais </li></ul></ul><ul><ul><li>Estudo de Caso </li></ul></ul><ul><ul><li>Agendamento com J...
Agendamento com Java EE <ul><li>Desde a versão 1.4 foi criado o serviço de timer para os componentes EJB. </li></ul><ul><l...
Agendamento com Java EE
Agendamento com Java EE <ul><li>Criando uma tarefa agendada com EJB 2.1: </li></ul><ul><ul><li>Implementamos a interface j...
Agendamento com Java EE <ul><li>Criando uma tarefa agendada com EJB 3.0: </li></ul><ul><ul><li>Usar a anotação @timeout no...
Agendamento com Java EE <ul><li>Com EJB 3.0, o método agendado pode ter qualquer nome, mas deve receber como parâmetro um ...
javax.ejb.TimerService <ul><li>Para criar o agendamento, o EJB deve se registrar no serviço de timer. </li></ul><ul><li>Is...
javax.ejb.TimerService <ul><li>Utilizamos um dos seguintes métodos para criar um agendamento: </li></ul><ul><ul><li>create...
javax.ejb.TimerService <ul><li>O acesso ao serviço de Timer é feito através do EJBContext do componente. </li></ul><ul><li...
Agendamento com Java EE Exemplo para EJB 2.1 public class TarefaAgendadaBean implements SessionBean, TimedObject { Session...
Agendamento com Java EE Exemplo para EJB 3.0 @Stateless public class TarefaAgendadaBean { @Resource SessionContext ctx; pu...
javax.ejb.Timer <ul><li>Os métodos chamados para executar a tarefa agendada recebem como parâmetro um objeto Timer, que re...
Agendamento com Java EE <ul><li>DEMO </li></ul>
Agenda <ul><ul><li>Conceitos Gerais </li></ul></ul><ul><ul><li>Estudo de Caso </li></ul></ul><ul><ul><li>Agendamento com J...
Agendamento com Java SE <ul><li>Vantagens: </li></ul><ul><ul><li>Simplicidade </li></ul></ul><ul><ul><li>Não é necessário ...
Agendamento com Java EE <ul><li>Vantagens: </li></ul><ul><ul><li>Reaproveitamento de componentes existentes </li></ul></ul...
Agenda <ul><ul><li>Conceitos Gerais </li></ul></ul><ul><ul><li>Estudo de Caso </li></ul></ul><ul><ul><li>Agendamento com J...
Framework Quartz <ul><li>Framework para agendamento de tarefas criado por James House. </li></ul><ul><li>Disponível em  ht...
Framework Quartz <ul><li>Com o Quartz a tarefa a ser executada é representada por uma classe que implementa a interface or...
Framework Quartz <ul><li>O agendador é representado por um objeto da classe org.quartz.Scheduler e é obtido através de uma...
Framework Quartz <ul><li>Criação de agendamento via programação: </li></ul><ul><ul><li>Construímos um objeto JobDetail que...
Framework Quartz public class Main { public static void main(String[] args) {   Scheduler agendador =  StdSchedulerFactory...
Framework Quartz <ul><li>Criação de agendamento declarativo: </li></ul><ul><ul><li>Configuramos o carregamento automático ...
Framework Quartz Exemplo de quartz_jobs.xml: <quartz> <job> <job-detail> <name>job1</name> <group>grupo1</group> <job-clas...
Framework Quartz <trigger> <simple> <name>testeTrigger</name> <group>DEFAULT</group> <start-time>2006-12-01 16:09:00 PM</s...
Framework Quartz Exemplo de classe que utiliza o agendamento declarativo: public class Main { public static void main(Stri...
Framework Quartz <ul><li>DEMO </li></ul>
Próximos SlideShares
Carregando em…5
×

agendamento de tarefas com java se e ee

5.033 visualizações

Publicada em

0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
5.033
No SlideShare
0
A partir de incorporações
0
Número de incorporações
30
Ações
Compartilhamentos
0
Downloads
94
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

agendamento de tarefas com java se e ee

  1. 1. Iniciativa Globalcode Agendamento de Tarefas com Java SE e EE Open-source Education
  2. 2. Palestrante <ul><li>Vinicius M. Senger </li></ul><ul><ul><li>Trabalha com desenvolvimento de softwares a mais de 12 anos; </li></ul></ul><ul><ul><li>Foi instrutor e consultor Java da: Sun do Brasil, Oracle e Microsoft; </li></ul></ul><ul><ul><li>Palestrante em diversos eventos nacionais e no JavaOne (maior evento Java dos Estados Unidos); </li></ul></ul><ul><ul><li>Certificações: Java Programmer 1.4, Sun Certified Enterprise Architect P1, Sun Official Instructor, Oracle Instructor, Microsoft Certified Professional, Microsoft Certified Trainner; </li></ul></ul><ul><ul><li>Diretor Técnico e fundador da Globalcode; </li></ul></ul>
  3. 3. Palestrante <ul><li>Kleber Xavier </li></ul><ul><ul><li>Formado em Engenharia Mecatrônica pela POLI-USP e Mestrando em Engenharia de Software pelo IME-USP </li></ul></ul><ul><ul><li>Experiência Internacional em projetos em Cingapura e Equador </li></ul></ul><ul><ul><li>Certificações :Java Programmer(SJCP), Web Component Developer(SCWCD), Business Component Developer(SCBCD) e Enterprise Architect(SCEA-I). </li></ul></ul><ul><ul><li>Instrutor Globalcode; </li></ul></ul>
  4. 4. Agenda <ul><ul><li>Conceitos Gerais </li></ul></ul><ul><ul><li>Estudo de Caso </li></ul></ul><ul><ul><li>Agendamento com Java SE </li></ul></ul><ul><ul><li>Agendamento com Java EE </li></ul></ul><ul><ul><li>Comparativo entre os modelos </li></ul></ul><ul><ul><li>Framework Quartz </li></ul></ul>
  5. 5. Agenda <ul><ul><li>Conceitos Gerais </li></ul></ul><ul><ul><li>Estudo de Caso </li></ul></ul><ul><ul><li>Agendamento com Java SE </li></ul></ul><ul><ul><li>Agendamento com Java EE </li></ul></ul><ul><ul><li>Comparativo entre os modelos </li></ul></ul><ul><ul><li>Framework Quartz </li></ul></ul>
  6. 6. Conceitos Gerais <ul><li>O agendamento permite a programação de tarefas para serem executadas em um determinado horário. </li></ul><ul><li>Tipos de agendamento: </li></ul><ul><ul><li>Periódico: a tarefa é executada diversas vezes de acordo com um intervalo pré-determinado. </li></ul></ul><ul><ul><li>Execução única (one-shot): a tarefa é executada uma única vez no horário programado. </li></ul></ul>
  7. 7. Conceitos Gerais <ul><li>Exemplos de utilização de agendamento: </li></ul><ul><ul><li>Realizar backups periódicos; </li></ul></ul><ul><ul><li>Gerar relatórios diários de vendas; </li></ul></ul><ul><ul><li>Enviar e-mails de expiração de senha para usuários; </li></ul></ul><ul><ul><li>Monitorar a criação de novos arquivos em determinados diretórios. </li></ul></ul>
  8. 8. Agenda <ul><ul><li>Conceitos Gerais </li></ul></ul><ul><ul><li>Estudo de Caso </li></ul></ul><ul><ul><li>Agendamento com Java SE </li></ul></ul><ul><ul><li>Agendamento com Java EE </li></ul></ul><ul><ul><li>Comparativo entre os modelos </li></ul></ul><ul><ul><li>Framework Quartz </li></ul></ul>
  9. 9. Estudo de Caso <ul><li>Para ilustrar o agendamento de tarefas em Java iremos trabalhar com um sistema de verificação de expiração de reservas. </li></ul><ul><li>As reservas podem corresponder a qualquer tipo de reserva (restaurante, hotel, passagens aéreas, etc.) </li></ul><ul><li>O usuário pode cadastrar ou cancelar agendamentos para verificação de expiração de reservas através de uma tela Swing. </li></ul>
  10. 10. Estudo de Caso
  11. 11. Agenda <ul><ul><li>Conceitos Gerais </li></ul></ul><ul><ul><li>Estudo de Caso </li></ul></ul><ul><ul><li>Agendamento com Java SE </li></ul></ul><ul><ul><li>Agendamento com Java EE </li></ul></ul><ul><ul><li>Comparativo entre os modelos </li></ul></ul><ul><ul><li>Framework Quartz </li></ul></ul>
  12. 12. Agendamento com Java SE <ul><li>Desde a versão 1.3 estão disponíveis duas classes para agendamento de tarefas em Java: </li></ul><ul><ul><li>java.util.TimerTask: representa a tarefa a ser agendada. </li></ul></ul><ul><ul><li>java.util.Timer: representa o coordenador ou agendador de tarefas. </li></ul></ul>
  13. 13. java.util.TimerTask <ul><li>Classe abstrata que implementa a interface java.lang.Runnable. </li></ul><ul><li>Para utilizá-la cria-se uma sub-classe que implemente o método run( ). </li></ul><ul><li>Ex: </li></ul><ul><li>public class TarefaAgendada extends TimerTask { </li></ul><ul><li>public void run() { </li></ul><ul><li>// Tarefa a ser agendada </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  14. 14. java.util.TimerTask <ul><li>Podemos cancelar a tarefa agendada através do método cancel(). </li></ul><ul><li>Permite também a obtenção da data de sua última execução através do método long scheduledExecutionTime(). </li></ul>
  15. 15. java.util.Timer <ul><li>Classe que representa a Thread que irá executar a tarefa agendada (TimerTask). </li></ul><ul><li>Possui métodos para agendamentos periódicos e de execução única (one-shot). </li></ul><ul><li>Podemos especificar o horário de agendamento através de um objeto java.util.Date ou um tempo em milissegundos. </li></ul>
  16. 16. java.util.Timer <ul><li>Para o agendamento periódico temos duas situações: </li></ul><ul><ul><li>Atraso fixo (fixed-delay): o período é considerado a partir da última execução da tarefa. </li></ul></ul><ul><ul><li>Taxa fixa (fixed-rate): o período é considerado a partir da primeira execução da tarefa. </li></ul></ul>
  17. 17. java.util.Timer <ul><li>Métodos para agendamento de execução única: </li></ul><ul><ul><li>schedule (TimerTask tarefa, Date inicio) </li></ul></ul><ul><ul><li>schedule (TimerTask tarefa, long atrasoAteInicio) </li></ul></ul><ul><li>Métodos para agendamento de execução periódica: </li></ul><ul><ul><li>schedule (TimerTask tarefa, Date inicio, long periodo) </li></ul></ul><ul><ul><li>schedule (TimerTask tarefa, long atrasoAteInicio, long periodo) </li></ul></ul><ul><ul><li>scheduleAtFixedRate (TimerTask tarefa, Date inicio, long periodo) </li></ul></ul><ul><ul><li>scheduleAtFixedRate (TimerTask tarefa, long atrasoAteInicio, long periodo) </li></ul></ul>
  18. 18. Agendamento com Java SE Ex: import java.util.Timer; public class Main { public static void main(String[] args) { TarefaAgendada tarefa = new TarefaAgendada(); Timer agendador = new Timer(); agendador.schedule(tarefa,5000,5000); } }
  19. 19. Agendamento com Java SE <ul><li>DEMO </li></ul>
  20. 20. Agenda <ul><ul><li>Conceitos Gerais </li></ul></ul><ul><ul><li>Estudo de Caso </li></ul></ul><ul><ul><li>Agendamento com Java SE </li></ul></ul><ul><ul><li>Agendamento com Java EE </li></ul></ul><ul><ul><li>Comparativo entre os modelos </li></ul></ul><ul><ul><li>Framework Quartz </li></ul></ul>
  21. 21. Agendamento com Java EE <ul><li>Desde a versão 1.4 foi criado o serviço de timer para os componentes EJB. </li></ul><ul><li>Gerenciado pelo container EJB. </li></ul><ul><li>Baseado em três elementos: </li></ul><ul><ul><li>javax.ejb.Timer: representa o agendamento de uma tarefa. </li></ul></ul><ul><ul><li>javax.ejb.TimerService: representa o coordenador ou agendador de tarefas. </li></ul></ul><ul><ul><li>EJB: componente que deve implementar a tarefa agendada. </li></ul></ul>
  22. 22. Agendamento com Java EE
  23. 23. Agendamento com Java EE <ul><li>Criando uma tarefa agendada com EJB 2.1: </li></ul><ul><ul><li>Implementamos a interface javax.ejb.TimedObject e implementamos o método ejbTimeout(Timer timer). </li></ul></ul><ul><ul><li>Ex: </li></ul></ul><ul><ul><li>public class TarefaAgendadaBean implements SessionBean, TimedObject { </li></ul></ul><ul><ul><li>public void ejbTimeout(Timer timer) { </li></ul></ul><ul><ul><li>//tarefa agendada </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>//outros métodos de EJB </li></ul></ul><ul><ul><li>} </li></ul></ul>
  24. 24. Agendamento com Java EE <ul><li>Criando uma tarefa agendada com EJB 3.0: </li></ul><ul><ul><li>Usar a anotação @timeout no método desejado. </li></ul></ul><ul><ul><li>Ex: </li></ul></ul><ul><ul><li>@Stateless </li></ul></ul><ul><ul><li>public class TarefaAgendadaBean { </li></ul></ul><ul><ul><li>@timeout </li></ul></ul><ul><ul><li>public void tarefa(Timer timer) { </li></ul></ul><ul><ul><li>//tarefa agendada </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>} </li></ul></ul>
  25. 25. Agendamento com Java EE <ul><li>Com EJB 3.0, o método agendado pode ter qualquer nome, mas deve receber como parâmetro um objeto Timer. </li></ul><ul><li>Também podemos utilizar a mesma estratégia de EJB 2.1 (implementar a interface TimedObject), ou configurar o método agendado no deployment descriptor com a tag <timeout-method>. </li></ul><ul><li>Cada EJB pode ter apenas um método agendado. </li></ul>
  26. 26. javax.ejb.TimerService <ul><li>Para criar o agendamento, o EJB deve se registrar no serviço de timer. </li></ul><ul><li>Isto é feito chamando-se um dos métodos de agendamento de TimerService. </li></ul><ul><li>Os agendamentos suportados são: </li></ul><ul><ul><li>Agendamento de tarefa para execução única (one-shot) </li></ul></ul><ul><ul><li>Agendamento de tarefa periódica com taxa fixa (fixed-rate) </li></ul></ul>
  27. 27. javax.ejb.TimerService <ul><li>Utilizamos um dos seguintes métodos para criar um agendamento: </li></ul><ul><ul><li>createTimer (Date inicio, Serializable info) </li></ul></ul><ul><ul><li>createTimer (long atrasoAteInicio, Serializable info) </li></ul></ul><ul><ul><li>createTimer (Date inicio, long periodo, Serializable info) </li></ul></ul><ul><ul><li>createTimer (long atrasoAteInicio, long periodo, Serializable info) </li></ul></ul>
  28. 28. javax.ejb.TimerService <ul><li>O acesso ao serviço de Timer é feito através do EJBContext do componente. </li></ul><ul><li>O agendamento em si é feito de maneira programática, não declarativa. </li></ul><ul><li>Também podemos listar todos os agendamentos criados através do método getTimers(). </li></ul>
  29. 29. Agendamento com Java EE Exemplo para EJB 2.1 public class TarefaAgendadaBean implements SessionBean, TimedObject { SessionContext ctx; public void setSessionContext(Context ctx) { this.ctx = ctx; } public void agendarTarefa() { TimerService agendador = ctx.getTimerService(); agendador.createTimer(5000,5000,null); } //demais métodos }
  30. 30. Agendamento com Java EE Exemplo para EJB 3.0 @Stateless public class TarefaAgendadaBean { @Resource SessionContext ctx; public void agendarTarefa() { TimerService agendador = ctx.getTimerService(); agendador.createTimer(5000,5000,null); } //demais métodos }
  31. 31. javax.ejb.Timer <ul><li>Os métodos chamados para executar a tarefa agendada recebem como parâmetro um objeto Timer, que representa o agendamento. </li></ul><ul><li>Um mesmo componente pode receber mais de um agendamento. </li></ul><ul><li>Através do objeto Timer é possível chamar os seguintes métodos: </li></ul><ul><ul><li>cancel() : cancela o agendamento. </li></ul></ul><ul><ul><li>getInfo() :retorna o parâmetro do tipo Serializable passado para o TimerService na criação do Timer. </li></ul></ul>
  32. 32. Agendamento com Java EE <ul><li>DEMO </li></ul>
  33. 33. Agenda <ul><ul><li>Conceitos Gerais </li></ul></ul><ul><ul><li>Estudo de Caso </li></ul></ul><ul><ul><li>Agendamento com Java SE </li></ul></ul><ul><ul><li>Agendamento com Java EE </li></ul></ul><ul><ul><li>Comparativo entre os modelos </li></ul></ul><ul><ul><li>Framework Quartz </li></ul></ul>
  34. 34. Agendamento com Java SE <ul><li>Vantagens: </li></ul><ul><ul><li>Simplicidade </li></ul></ul><ul><ul><li>Não é necessário nada além do Java SE </li></ul></ul><ul><li>Desvantagens: </li></ul><ul><ul><li>Perda do agendamento com queda da JVM </li></ul></ul><ul><ul><li>Somente dois tipos de agendamento </li></ul></ul><ul><ul><li>Não permite configuração declarativa </li></ul></ul>
  35. 35. Agendamento com Java EE <ul><li>Vantagens: </li></ul><ul><ul><li>Reaproveitamento de componentes existentes </li></ul></ul><ul><ul><li>Utilização de serviços do container </li></ul></ul><ul><ul><li>Recuperação automática do agendamento em caso de queda do servidor </li></ul></ul><ul><li>Desvantagens: </li></ul><ul><ul><li>Exige um container EJB </li></ul></ul><ul><ul><li>Somente dois tipos de agendamento </li></ul></ul><ul><ul><li>Não permite configuração declarativa </li></ul></ul>
  36. 36. Agenda <ul><ul><li>Conceitos Gerais </li></ul></ul><ul><ul><li>Estudo de Caso </li></ul></ul><ul><ul><li>Agendamento com Java SE </li></ul></ul><ul><ul><li>Agendamento com Java EE </li></ul></ul><ul><ul><li>Comparativo entre os modelos </li></ul></ul><ul><ul><li>Framework Quartz </li></ul></ul>
  37. 37. Framework Quartz <ul><li>Framework para agendamento de tarefas criado por James House. </li></ul><ul><li>Disponível em http://www.opensymphony.com/ quartz </li></ul><ul><li>Apresenta recursos não disponíveis no agendamento tradicional com Java SE e Java EE: </li></ul><ul><ul><li>Configuração declarativa </li></ul></ul><ul><ul><li>Agendamentos com regras de horário mais complexas </li></ul></ul>
  38. 38. Framework Quartz <ul><li>Com o Quartz a tarefa a ser executada é representada por uma classe que implementa a interface org.quartz.Job e implementa o método execute(JobExecutionContext ctx). </li></ul><ul><li>Ex: </li></ul><ul><li>public class TarefaAgendada implements Job { </li></ul><ul><li>public void execute(JobExecutionContext ctx) throws JobExecutionException { </li></ul><ul><li>//tarefa a ser executada </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  39. 39. Framework Quartz <ul><li>O agendador é representado por um objeto da classe org.quartz.Scheduler e é obtido através de uma classe Factory. </li></ul><ul><li>Ex: </li></ul><ul><li>Scheduler agendador = StdSchedulerFactory.getDefaultScheduler(); </li></ul><ul><li>Após a criação de um agendamento que pode ser feita via programação ou arquivo de configuração (declarativa), iniciamos o processamento através do método start(). </li></ul><ul><li>Ex: agendador.start(); </li></ul>
  40. 40. Framework Quartz <ul><li>Criação de agendamento via programação: </li></ul><ul><ul><li>Construímos um objeto JobDetail que contém os detalhes do agendamento, utilizando o construtor JobDetail ( String nome, String grupo, Class tarefa) </li></ul></ul><ul><ul><li>Construímos um objeto Trigger que representa a periodicidade do agendamento. </li></ul></ul><ul><ul><li>Cadastramos o agendamento no objeto Scheduler através do método scheduleJob(JobDetail detalhes, Trigger acionador) </li></ul></ul>
  41. 41. Framework Quartz public class Main { public static void main(String[] args) { Scheduler agendador = StdSchedulerFactory.getDefaultScheduler(); JobDetail detalhe = new JobDetail(“job1”,”grupo1” ,TarefaAgendada.class); Trigger acionador = TriggerUtils.makeHourlyTrigger(1); acionador.setName(“Trigger1”); acionador.setStartTime(new Date()); agendador.scheduleJob(detalhe,acionador); agendador.start(); } }
  42. 42. Framework Quartz <ul><li>Criação de agendamento declarativo: </li></ul><ul><ul><li>Configuramos o carregamento automático de tarefas no arquivo quartz.properties. </li></ul></ul><ul><ul><li>org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin </li></ul></ul><ul><ul><li>Criamos um arquivo quartz_jobs.xml com a configuração dos agendamentos desejados. </li></ul></ul>
  43. 43. Framework Quartz Exemplo de quartz_jobs.xml: <quartz> <job> <job-detail> <name>job1</name> <group>grupo1</group> <job-class> br.com.globalcode.TarefaAgendada </job-class> </job-detail>
  44. 44. Framework Quartz <trigger> <simple> <name>testeTrigger</name> <group>DEFAULT</group> <start-time>2006-12-01 16:09:00 PM</start-time> <repeat-count>5</repeat-count> <repeat-interval>10000</repeat-interval> </simple> </trigger> </job> </quartz>
  45. 45. Framework Quartz Exemplo de classe que utiliza o agendamento declarativo: public class Main { public static void main(String[] args) { Scheduler agendador = StdSchedulerFactory.getDefaultScheduler(); agendador.start(); } }
  46. 46. Framework Quartz <ul><li>DEMO </li></ul>

×