Problema em utilizar JNDI + Quartz

Fala galera blz?

Possuo um projeto JSF2 + JBOSS + Postgresql com persitência feita através de JNDI, funciona tudo corretamente. Porém surgiu a necessidade de montar um “cron” para verificar certas atividades no BD, bom, coloquei o quartz para rodar…funciona corretamente.
O problema está na hora que a minha classe de “agendamento” é executa e assim executa o DAO, ele não consegue dar lookup no JNDI, muito bizarro…
Procurei na net e vi prob. semelhantes mais sem solução.

quartz.properties:

org.quartz.scheduler.instanceName = MyScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.plugin.jobInitializer.class =org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin 
org.quartz.plugin.jobInitializer.fileNames = quartz-config.xml 
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializingThread=true 

quartz-config.xml

<?xml version="1.0" encoding="UTF-8"?>
 
<job-scheduling-data
	xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData 
	http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
	version="1.8">
 
	<schedule>
		<job>
			<name>AJob</name>
			<group>AGroup</group>
			<description>Print a welcome message</description>
			<job-class>teste.SchedulerJob</job-class>
		</job>
 
		<trigger>
			<cron>
				<name>dummyTriggerName</name>
				<job-name>AJob</job-name>
				<job-group>AGroup</job-group>
				<!-- It will run every 5 seconds -->
				<cron-expression>0/5 * * * * ?</cron-expression>
			</cron>
		</trigger>
	</schedule>
</job-scheduling-data>

Classe de agendamento:

package teste;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import br.srv.dm.dao.PessoaTipoDAO;
import br.srv.dm.model.PessoaTipo;
 
public class SchedulerJob implements Job {
 
	@Override
	public void execute(JobExecutionContext context)
		throws JobExecutionException {
 
		PessoaTipoDAO pessoaTipoDAO = new PessoaTipoDAO();
		for(PessoaTipo p : pessoaTipoDAO.listAll()) {
			System.out.println("--> " + p.getDescricao());
		}
 
	}
 
}

Erro:

17:26:35,017 ERROR [stderr] (MyScheduler_Worker-1) javax.naming.NameNotFoundException: java:comp/env/nomeDaUnit

17:26:35,017 ERROR [stderr] (MyScheduler_Worker-1) 	at org.jboss.as.naming.InitialContext.lookup(InitialContext.java:121)

17:26:35,017 ERROR [stderr] (MyScheduler_Worker-1) 	at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:214)

17:26:35,017 ERROR [stderr] (MyScheduler_Worker-1) 	at javax.naming.InitialContext.lookup(Unknown Source)

17:26:35,017 ERROR [stderr] (MyScheduler_Worker-1) 	at br.srv.dm.conn.Connection.getEntityManager(Connection.java:46)

17:26:35,017 ERROR [stderr] (MyScheduler_Worker-1) 	at br.srv.dm.conn.MyTransaction.getEntityManager(MyTransaction.java:52)

17:26:35,017 ERROR [stderr] (MyScheduler_Worker-1) 	at br.srv.dm.conn.MyTransaction.getCriteriaSession(MyTransaction.java:58)

17:26:35,017 ERROR [stderr] (MyScheduler_Worker-1) 	at br.srv.dm.dao.PessoaTipoDAO.listAll(PessoaTipoDAO.java:23)

17:26:35,033 ERROR [stderr] (MyScheduler_Worker-1) 	at teste.SchedulerJob.execute(SchedulerJob.java:17)

17:26:35,033 ERROR [stderr] (MyScheduler_Worker-1) 	at org.quartz.core.JobRunShell.run(JobRunShell.java:213)

17:26:35,033 ERROR [stderr] (MyScheduler_Worker-1) 	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)

17:26:35,033 INFO  [stdout] (MyScheduler_Worker-1) [ br.srv.dm.dao.PessoaTipoDAO ][listAll()]: null

17:26:35,033 ERROR [org.quartz.core.JobRunShell] (MyScheduler_Worker-1) Job AGroup.AJob threw an unhandled Exception: : java.lang.NullPointerException
	at teste.SchedulerJob.execute(SchedulerJob.java:17) [classes:]
	at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [quartz-2.1.5.jar:]
	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557) [quartz-2.1.5.jar:]

17:26:35,033 ERROR [org.quartz.core.ErrorLogger] (MyScheduler_Worker-1) Job (AGroup.AJob threw an exception.: org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: java.lang.NullPointerException]
	at org.quartz.core.JobRunShell.run(JobRunShell.java:224) [quartz-2.1.5.jar:]
	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557) [quartz-2.1.5.jar:]
Caused by: java.lang.NullPointerException
	at teste.SchedulerJob.execute(SchedulerJob.java:17) [classes:]
	at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [quartz-2.1.5.jar:]
	... 1 more

O JNDI está correto?

Pq vc não usa o próprio timer do EJB?

[quote=Hebert Coelho]O JNDI está correto?

Pq vc não usa o próprio timer do EJB?[/quote]

Não sei…, achei que o quartz seria mais fácil…hehehe…esse erro de não conseguir efetuar lookup tb ocorre se eu coloco um DAO dentro de uma thread.

Só um adendo Hebert, minhas classes de conexão que estou utilizado, são umas que vocês postou no seu blog…só não lembro qual o artigo. ^^

Sugestão?

Na verdade com EJB Timer é muito mais fácil, pois você já está dentro do EJB. Mas, é gosto.

Vc tem certeza que o JNDI que você ta fazendo lookup está certo?

[quote=Hebert Coelho]Na verdade com EJB Timer é muito mais fácil, pois você já está dentro do EJB. Mas, é gosto.

Vc tem certeza que o JNDI que você ta fazendo lookup está certo?[/quote]

Creio que sim, tirei desse artigo: http://uaihebert.com/?p=1089&page=2, o controle de sessões quem controla é o jboss, mto bom! É JNDI certo? :stuck_out_tongue: