Bonjour,
j'ai une application web codée en Java et qui utilise GWT, Hibernate et Spring.
Cette application a un job qui est déclenché par un crontrigger, configuré dans le fichier application-context.xml.
La classe de ce job lance une requête dans une bdd, et possède donc un attribut Dao correspondant.
Le problème, c'est que cet attribut est à null au moment où j'appelle une de ses méthodes, et j'ai une belle NullPointerException.
Ca c'est ma classe Java (le job qui se lance sur crontrigger)
et voici mon application-context.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public class ExampleJob extends QuartzJobBean { private AbsenceDao absenceDao; @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { List<Absence> untreatedDemands = new ArrayList<Absence>(); untreatedDemands = absenceDao.getDemandsAskedNotValidated(); } public AbsenceDao getAbsenceDao() { return absenceDao; } public void setAbsenceDao(AbsenceDao absenceDao) { this.absenceDao = absenceDao; } }
Je pensais que déclarer la propriété faisant référence au Dao dans le bean jobClass suffirait, mais on dirait pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 <!-- 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="exampleJob" /> </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="exampleJob" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="fr.web.utils.ExampleJob" /> <property name="jobDataAsMap"> <map> <entry key="timeout" value="5" /> </map> </property> </bean> <!-- 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>
Si je déclare la propriété Dao dans le bean exampleJob, j'ai cette erreur à l'exécution :
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]:
Error setting property values;
nested exception is org.springframework.beans.NotWritablePropertyException:
Invalid property 'absenceDao' of bean class [org.springframework.scheduling.quartz.JobDetailBean]:
Bean property 'absenceDao' is not writable or has an invalid setter method.
Does the parameter type of the setter match the return type of the getter?
Partager