publicvoidverifica_tempo_chamado(){List<Cliente>listaCliente=clientedao.listaTudo();for(Clientecliente:listaCliente){if(chamadodao.qtde_dias_ultimo_chamado(cliente.getId())>30){Chamadochamado=newChamado();chamado.setCliente(cliente);chamado.setData_abertura(newDate());chamado.setDescricao_inicial("CLIENTE NAO ENTRA EM CONTATO POR MAIS DE 30 DIAS!");chamado.setTipo_problema("MLPonto");chamado.setStatus_tempo("NORMAL");chamado.setStatus_prioridade("NORMAL");chamado.setUsuario_abriu(usuariodao.load("clientepadrao"));chamado.setDepartamento("SUPORTE");chamadodao.salva(chamado);}}}
Quintanilhasi, nesse seu caso específico não terá como, pois sua Task VerificaAgenda tem escopo ApplicationScoped, e os @Resources são RequestScoped. Você pode extrair essa lógica para outra classe, também ApplicationScoped, e chamá-la tanto na Task quanto no Controller:
@Componet@ApplicationScopedpublicclassVerificadorDeTempoDeChamado{// Recebe o ClienteDao como parâmetro do método, porque provavelmente ele é @ResquestScopedpublicvoidverifica(ClienteDaoclientes){List<Cliente>listaCliente=clientedao.listaTudo();for(Clientecliente:listaCliente){if(chamadodao.qtde_dias_ultimo_chamado(cliente.getId())>30){Chamadochamado=newChamado();chamado.setCliente(cliente);chamado.setData_abertura(newDate());chamado.setDescricao_inicial("CLIENTE NAO ENTRA EM CONTATO POR MAIS DE 30 DIAS!");chamado.setTipo_problema("MLPonto");chamado.setStatus_tempo("NORMAL");chamado.setStatus_prioridade("NORMAL");chamado.setUsuario_abriu(usuariodao.load("clientepadrao"));chamado.setDepartamento("SUPORTE");chamadodao.salva(chamado);}}}}@ApplicationScoped@Scheduled(cron="0 15 10 ? * *")publicclassVerificaAgendaimplementsTask{// Vai ter que receber o container pra poder pegar o ClienteDao que é @RequestScopedprivateContainercontainer;privateVerificadorDeTempoDeChamadoverificador;publicVerificaAgenda(Containercontainer,VerificadorDeTempoDeChamadoverificador){this.container=container;this.verificador=verificador;}publicvoidexecute(){ClienteDaoclientes=container.instanceFor(ClienteDao.class);verificador.verifica(clientes);}}@ResourcepublicclassSeuController{privateClienteDaoclientes;privateVerificadorDeTempoDeChamadoverificador;publicSeuController(ClienteDaoclientes,VerificadorDeTempoDeChamadoverificador){this.clientes=clientes;this.verificador=verificador;}publicvoidverificaTempoDeChamado(){verificador.verifica(clientes);}}
quintanilhasi
bob_sponja obrigado pela ajuda!
G
Goncalo_PT
Boas,
esse codigo funcionou?
Sempre que tendo obter um component requestScoped na task usando o container obtenho NullPointerException