2010-11-23 7 views
10

Ich würde gerne wissen, wie kann ich Injektion in meinem Job mit Hilfe von Guice verwenden. Da ich @Inject auf den Standardkonstruktor nicht verwenden kann, kann ich es direkt auf dem Attribut wie folgt verwenden (ich habe immer eine NullPointerException mit PersonDAO)? Ich weiß, dass ein DAO hier nichts zu tun hat, aber es ist nur zum Testen.Injektion in meinem Quarz Job

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 ... 
    } 

} 

In meinem Modul habe ich die folgende Erklärung ab:

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

Eigentlich benutze ich die PersonDao hier, weil ich sich in einer anderen Klasse mit Einspritzung wissen arbeitet (aber die Einspritzung auf der Konstruktor Ebene getan Dort).

Kann mir jemand einen Rat geben?

ist hier weitere Informationen über Quarz 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 

Quarz-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> 

Antwort