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:

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
Come posso risolvere il problema?

Di seguito lascio alcune informazioni riguardo la classe di schedulazione e l'integrazione col framework:

codice:
Inizializzazione come plugin di struts aggiungendo nel file struts-config:
<plug-in className="impegni.scheduler.QuartzPlugin" />
Implementazione PLUGIN:
codice:
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() );
            }
        }
}
Job da fare girare
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();
        }
    }
    
}