Salve a tutti,
ho una web application su OC4J , che utilizza il framework struts 1.
Sto tentantodo di integrare lo schedulatore Quartz, per generare dei report che recuperano i dati da DB.
Il problema che mi sta bloccando è, il non poter accedere alla risorsa datasource della mia web application.
Infatti quando il job deve eseguire l'accesso al db richiamando la classe di connessione utilizzata da struts,
mi genera un errore:
Come posso risolvere il problema?codice:2010-08-31 17:25:15 ERROR [impegni.dao.SuperDAO] javax.naming.NamingException: Not in an application scope - start OC4J with the -userThreads switch if using user-created threads
Di seguito lascio alcune informazioni riguardo la classe di schedulazione e l'integrazione col framework:
Implementazione PLUGIN:codice:Inizializzazione come plugin di struts aggiungendo nel file struts-config: <plug-in className="impegni.scheduler.QuartzPlugin" />
Job da fare girarecodice:package impegni.scheduler; import java.util.Date; import javax.servlet.ServletException; import org.apache.struts.action.ActionServlet; import org.apache.struts.action.PlugIn; import org.apache.struts.config.ModuleConfig; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SimpleTrigger; import org.quartz.impl.StdSchedulerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class QuartzPlugin implements PlugIn { public void destroy() { //null } public void init(ActionServlet servlet, ModuleConfig config) throws ServletException { Logger log = LoggerFactory.getLogger(QuartzPlugin.class); try { StdSchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); //creiamo i trigger SimpleTrigger trigger1 = new SimpleTrigger("trigger1", "group1", "job1", "group1",new Date(), null, 4, 30000); //creiamo il job JobDetail job1 = new JobDetail("job1", "group1", SchedulerJob.class ); sched.scheduleJob(job1, trigger1); log.info("------- Starting Scheduler ----------------"); // start the schedule sched.start(); } catch (Exception e) { log.error( e.toString() ); } } }
codice:package impegni.scheduler; import java.io.FileInputStream; import java.io.ObjectInputStream; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class SchedulerJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { try { ObjectInputStream ois = new ObjectInputStream( new FileInputStream("d:/utenti/schedula.dat") ); ImpegniJobObject obj = (ImpegniJobObject)ois.readObject(); ois.close(); ImpegniJob job = (ImpegniJob)((Object)Class.forName("impegni.action.reports.ReportTabulatoAffiliatiAction").newInstance()); job.executeJob( obj.getObject() ); //in questo executeJob lancio la connessione a db } catch (Exception e) { e.printStackTrace(); } } }

Rispondi quotando