2010-11-23 12 views
10

Me gustaría saber cómo puedo usar la inyección en mi trabajo usando guice. Como no puedo usar @Inject en el constructor predeterminado, ¿puedo usarlo directamente en el atributo de la siguiente manera (siempre obtuve una NullPointerException con PersonDAO)? Sé que un DAO no tiene nada que hacer aquí, pero es solo para probar.Inyección en mi trabajo de cuarzo

public class SimpleQuartzJob implements Job { 

    @Inject PersonDao Person; 

    private static Logger logger = Logger.getLogger(SimpleQuartzJob.class.getName()); 

    public SimpleQuartzJob() { 
    } 

    @Override 
    public void execute(JobExecutionContext context) throws JobExecutionException { 
    if (logger.isDebugEnabled()) logger.debug("In SimpleQuartzJob - executing its JOB at " 
     + new Date() + " by " + context.getTrigger().getName()); 

     // ... LOGIC ... 
    } 

} 

En mi módulo Tengo la siguiente declaración:

bind(PersonDao.class).to(HibernatePersonDaoImpl.class); 

hecho uso el PersonDao aquí porque sé que funciona dentro de otra clase con la inyección (pero la inyección se realiza en el nivel de constructor ahí).

¿Puede alguien darme un consejo?

Aquí hay más información sobre el cuarzo config:

web.xml:

<servlet> 
    <servlet-name>QuartzInitializer</servlet-name> 
    <display-name>Quartz Initializer Servlet</display-name> 
    <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    <init-param> 
     <param-name>config-file</param-name> 
     <param-value>/quartz.properties</param-value> 
    </init-param> 
    <init-param> 
     <param-name>shutdown-on-unload</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>start-scheduler-on-load</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</servlet> 

quartz.properties:

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.threadPool.class = org.quartz.simpl.SimpleThreadPool 
org.quartz.threadPool.threadCount = 5 
org.quartz.threadPool.threadPriority = 5 

de cuarzo-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>mail-job</name> 
      <group>MYJOB_GROUP</group> 

      <description>The job description</description> 
      <job-class>svc.data.server.quartz.SimpleQuartzJob</job-class> 
     </job> 

     <trigger> 
      <cron> 
       <name>my-trigger</name> 
       <group>MYTRIGGER_GROUP</group> 
       <job-name>mail-job</job-name> 

       <job-group>MYJOB_GROUP</job-group> 
       <cron-expression>10 * * * * ?</cron-expression> 

      </cron> 
     </trigger> 
    </schedule> 
</job-scheduling-data> 

Respuesta

Cuestiones relacionadas