Cron et ServletContext retourne un null pointer.
Bonjour, le titre n'est peut-être pas totalement clair mais je m'explique.
J'essaie actuellement d'initialiser une variable de context.
this.getServletContext().setAttribute("variable","value");
À la fois dès l'initialisation de mon instance et à chaque X minutes.
Donc dans mon fichier web.XML
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
<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>
</servlet>
// le Cron
<servlet>
<servlet-name>QuartzServlet</servlet-name>
<display-name>Quartz Servlet</display-name>
<servlet-class>ca.qc.projet.titre.QuartzServlet</servlet-class>
<init-param>
<param-name>cronExpr</param-name>
<param-value>0 0/2 * * * ?</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
// L'initialisation
<servlet>
<servlet-name>ScheduledJobs</servlet-name>
<servlet-class>ca.qc.projet.titre.ScheduledJobs</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet> |
La classe QuartzServlet
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
public class QuartzServlet extends GenericServlet {
public void init(ServletConfig config) throws ServletException {
try {
super.init(config);
try {
JobDetail jd = new JobDetail("job1", null, ScheduledJobs.class);
CronTrigger cronTrigger =
new CronTrigger("trigger1", "group1");
String cronExpr = null;
// Get the cron Expression as an Init parameter
cronExpr = getInitParameter("cronExpr");
cronTrigger.setCronExpression(cronExpr);
Scheduler sched = StdSchedulerFactory.getDefaultScheduler();
sched.scheduleJob(jd, cronTrigger);
} catch (Exception e) {
e.printStackTrace();
}
} catch (Throwable e) {
e.printStackTrace();
}
}
} |
et finalement ma classe ScheduledJobs
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
public class ScheduledJobsextends HttpServlet implements Job {
private static final Log logger = LogFactory.getLog(ScheduledJobs.class);
public void init() throws ServletException {
set_session("init");
}
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
set_session("execute");
}
public void set_session(String via){
logger.error("lancement de la methode via : "+via);
try{
this.getServletContext().setAttribute("variable","valeur");
}
catch (Exception ex) {
logger.error("Erreur : " + ex);
}
}
} |
Bref tout ce beau code pour dire que à l'initialisation c'est la methode init()
qui est lancé et tout fonctionne très très bien.
Ensuite 2 minutes après c'est execute()
et rendu au this.getServletContext()...
J'ai une erreur de java.lang.NullPointerException
Es-ce qu'il y aurais une raison ? Quelque chose que init possède et que execute n'a pas et devrais avoir ?
En vous remerciant !