Estou colocando o Quartz Framework na minha aplicação. Ele, aparentemente, está funcionando corretamente. Quanto inicio o servidor, o meu Listener (declarado no web.xml) é lido e o job é inicializado no horário que informei.
O problema é que, dentro do meu job, tenho um @Inject responsável por “instanciar” um DAO, pois preciso fazer acesso ao BD. E esse DAO está sempre nulo.
Vou colocar o código do meu Job…
public class EmailContasAPagarJob implements Serializable, Job {
private static final long serialVersionUID = 1L;
@Inject
private EscritorioDao escritorioDao;
@Inject
private ContasAPagarDao aPagarDao;
public EmailContasAPagarJob() {
// TODO Auto-generated constructor stub
}
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println(“Entrei no Job…”);
List vencendoHoje;
List<ContasAPagar> vencidas;
List<ContasAPagar> proximosVencimentos;
Date hoje = new Date();
ContasAPagar pesq = new ContasAPagar();
pesq.setDataInicio(hoje);
pesq.setDataFim(hoje);
List<Escritorio> empresas = escritorioDao.listarTodosOrdenadoPorNome();
Na linha List empresas = escritorioDao.listarTodosOrdenadoPorNome();, o escritorioDAO está nulo. Alguém pode ajudar?
Então o problema não é com inject, se vc ta instanciando não e mesmo assim não vai.
O problema tá no seu dao.
Se está trabalhando com inject já deveria saber, enfim
Acho que não soube me expressar.
O DAO definitivamente é instanciado. Acho que, qualquer classe é instanciada quando fazemos manualmente, ou não???
O que quis dizer é que ela não funciona, pois ocorre um nullPointerException quando tento chamar o método.
escritorioDao.listarTodos();
O escritorioDao está instanciado (com o New) mas o retorno do método dá NullPointer.
O Dao está perfeito, funcionando em diversos pontos da aplicação e com injeção.
Minha dúvida está no Quartz, no modo com que ele invoca essas classes, principalemente o Listener. Acho que tem dedo dele nessa história.
Voce disse " o escritorioDAO está nulo", e agora “mas o retorno do método dá NullPointer” são coisas diferentes, coloca o stack trace, e ve em qual linha ele acusa o nullpointer.
E falta postar o método listarTodosOrdenadoPorNome();
Estou usando CDI, anotação @Inject.
Conforme desconfiava, o problema estava na invocação do método no Job. O porquê, eu não sei.
Eu injetei o Dao na Scheduler e enviei por parâmetro para o Job e deu certo.
Acho que isso acontecia devido a instância de Job ser criada pelo Scheduller via reflection. Deve ter dado algum problema de clico de vida, sei lá…