2011-04-28 183 views
4

在我的web應用程序中用GWT,Hibernate和Spring開發,我在application-context.xml文件中設置jobClass bean時遇到。Java spring bean配置錯誤

我在運行時出現此錯誤:

Error 500 Error creating bean with name 'schedulerFactory' defined in class path resource [application-context.xml]: 
Cannot resolve reference to bean 'cronTrigger' while setting bean property 'triggers' with key [0]; 

nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'cronTrigger' defined in class path resource [application-context.xml]: 
Cannot resolve reference to bean 'exampleJob1' while setting bean property 'jobDetail'; 

nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'exampleJob1' defined in class path resource [application-context.xml]: 
Initialization of bean failed; 

nested exception is org.springframework.beans.TypeMismatchException: 
Failed to convert property value of type [fr.web.utils.ExampleJob] to required type [java.lang.Class] for property 'jobClass'; 

nested exception is java.lang.IllegalArgumentException: 
Cannot convert value of type [fr.web.utils.ExampleJob] to required type [java.lang.Class] for property 'jobClass': 
PropertyEditor [org.springframework.beans.propertyeditors.ClassEditor] returned inappropriate value 

這裏是我的Java類:


public class ExampleJob extends QuartzJobBean { 
    private AbsenceDao absenceDao; 
    @Override 
    protected void executeInternal(JobExecutionContext context) 
    throws JobExecutionException { 
     List untreatedDemands = new ArrayList(); 
     untreatedDemands = absenceDao.getDemandsAskedNotValidated(); 
    } 
    public AbsenceDao getAbsenceDao() { 
     return absenceDao; 
    } 
    public void setAbsenceDao(AbsenceDao absenceDao) { 
     this.absenceDao = absenceDao; 
    } 
} 

,這裏是我的應用程序的context.xml:

<!-- variables d'environnement - fichier properties --> 
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" id="placeholderconfig"> 
     <property name="fileEncoding" value="UTF-8"/> 
     <property name="locations"> 
      <list> 
       <value>classpath:internal.properties</value> 
      </list> 
     </property> 
    </bean> 

    <!-- Configuration du crontrigger --> 
    <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
     <property name="triggers"> 
      <list> 
       <ref bean="cronTrigger" /> 
      </list> 
     </property> 
    </bean> 
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
     <property name="jobDetail"> 
      <ref local="exampleJob1" /> 
     </property> 

     <property name="cronExpression"> 
      <util:constant static-field="fr.web.utils.APP_VAR.CRON_EXPRESSION" /> 
     </property> 
    </bean> 

    <bean id="jobClass" class="fr.web.utils.ExampleJob"> 
     <property name="absenceDao" ref="absenceDao"/> 
    </bean> 

    <bean id="exampleJob1" class="org.springframework.scheduling.quartz.JobDetailBean"> 
     <property name="jobClass" ref="jobClass" /> 
     <property name="jobDataAsMap"> 
      <map> 
       <entry key="timeout" value="5" /> 
      </map> 
     </property> 
    </bean> 

    <tx:annotation-driven transaction-manager="hibernateTransactionManager"/> 

    <!-- Bean containing all the properties of the application --> 
    <bean class="fr.web.utils.ApplicationProperties" id="applicationProperties" lazy-init="true" scope="singleton"> 
     <constructor-arg index="0" value="classpath:internal.properties"/> 
    </bean> 

    <!-- Bean DAO --> 
    <bean abstract="true" id="abstractDao"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 
    <bean class="fr.web.dao.AbsenceDao" id="absenceDao" parent="abstractDao"/> 

    </bean> 
</beans> 

回答

2

財產jobClass需要class,你已經給了bean的reference,所以更改

<bean id="exampleJob1" class="org.springframework.scheduling.quartz.JobDetailBean"> 
    <property name="jobClass" ref="jobClass" /> 
    <property name="jobDataAsMap"> 
     <map> 
      <entry key="timeout" value="5" /> 
     </map> 
    </property> 
</bean> 

到(注意:下面value屬性)

<bean id="exampleJob1" class="org.springframework.scheduling.quartz.JobDetailBean"> 
    <property name="jobClass" value="fr.acensi.web.utils.ExampleJob" /> 
    <property name="jobDataAsMap"> 
     <map> 
      <entry key="timeout" value="5" /> 
     </map> 
    </property> 
</bean> 
+0

謝謝!它工作 – l0r3nz4cc10 2011-04-28 13:23:59

+0

不客氣:) – 2011-04-28 13:25:10

0

有,你可能認爲整潔與否這裏的另一種選擇,我喜歡它,因爲它使上下文一點清潔劑。

<bean id="exampleJob1" class="org.springframework.scheduling.quartz.JobDetailBean"> 
    <property name="jobClass"> 
    <bean factory-bean="jobClass" factory-method="getClass" /> 
    </property> 
</bean> 

問題的細分是因爲Jigar Joshi描述的解決方案略有不同。 它允許你保持bean jobClass實例化與JobDetailbean的構建分離。