Olá para todos.
O que estou fazendo é: Preciso que um determinado método seja executado a cada 3 minutos, como é sempre o mesmo tempo para o mesmo método, ao invés de usar o quartz, optei por experimentar o @Schedule. Nos primeiros testes funcionou perfeitamente, até que precisei usar um EJB, localizado em outro projeto, o que funciona perfeitamente em vários outros projetos, é um EJB com vários utilitários, vou colocar o exemplo:
minha classe de log:
[code]package com.ejb.utils;
@Stateless
public class LogBean implements LogRemote { // => minha interface remota
public void log(LogParameters params) {
doTheLogginThings();
}
}[/code]
meu EJB onde uso o @Schedule:
[code]package com.batch.jobs;
@Stateless
public class MyBatchJobsBean implements MyBatchJobsRemote { // => minha interface remota
@PersistenceContext
private EntityManager em;
@EJB( lookup = LogRemote.JNDI_NAME )
private LogRemote log;
private someDAO dao;
@PostConstruct
private void init(){
dao = new someDAO(em);
}
@Schedule( minute = "*/3", dayOfWeek = "Mon , Tue , Wed , Thu , Fri", hour = "7,8,9,10,11,12,13,14,15,16,17,18,19,20" )
private void executeBatchJob() {
executeSomeJob();
log.log("Log this things");
}
}
[/code]
se eu não fizer nenhuma referência ao EJB LogRemote, funciona perfeitamente sem nenhum problema, inclusive o PersistenceContext injeta normalmente. mas usando o LogRemote , dá o erro:
java.lang.IllegalStateException: JBAS011048: Failed to construct component instance
obviamente, sem o Log funciona normalmente e esse mesmo Log é usado em vários outros lugares sem qualquer problema. Já fiz o teste de usar ao invés de @Stateless, o @Singleton apenas por desencargo de consciência e não mudou em absolutamente nada, o erro é o mesmo.