0

I have scheduled a JOB using Quartz scheduler in my Struts2 web application. Everything is working fine as I expected but the trigger is firing two times : on the specified time. After some research I found That ApplicationContext is loading twice. I found these links are useful. Job Triggered twice Application Context loading Twice But that was not so descriptive or I am unable to understand that. Please help to deal with this.

Will provide the code on Request.

My web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>MyAPP</display-name>
  <welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
     <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>
     </filter-mapping>
     <listener>
         <listener-class>
           org.apache.struts2.tiles.StrutsTilesListener
     </listener-class>
    </listener>
   <context-param>
      <param-name>tilesDefinitions</param-name>
      <param-value>/WEB-INF/tiles.xml</param-value>
   </context-param>
  <welcome-file-list>
     <welcome-file>Login.jsp</welcome-file>
  </welcome-file-list>
     <session-config>
<session-timeout>30</session-timeout>
  </session-config>
    <error-page>
    <error-code>404</error-code>
    <location>/jsp/error/pagenotfound.jsp</location>
  </error-page>
 <listener>
    <listener-class>
         com.MYAPP.listners.QuartzListners
    </listener-class>
 </listener>
</web-app>

My QuartzListner.java

public class QuartzListner implements ServletContextListener {
private static final Logger log=Logger.getLogger(QuartzListner.class);

/* (non-Javadoc)
 * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
 */
@Override
public void contextDestroyed(ServletContextEvent arg0) {
    // TODO Auto-generated method stub

    log.info("----Quartz Scheduler destroyer Intialized----");
     try{  
      ServletContext context =arg0.getServletContext();
      Scheduler scheduler =(Scheduler)context.getAttribute("DocRevScheduler");
       scheduler.shutdown(true);

       log.info("----Scheduler Shutting downnn ---- "+scheduler.isShutdown()); 
     }catch(Exception se)
     {
         log.warn("--Exception while Shutdowning the Scheduler..."+se);
         se.printStackTrace();
     }


}

/* (non-Javadoc)
 * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
 */
@Override
public void contextInitialized(ServletContextEvent arg0) {
    // TODO Auto-generated method stub


    log.info("--Qurz Scheduler intialized----");

    JobDetail job = JobBuilder.newJob(MailSendingJOB.class)
            .withIdentity("mailJob", "group1").build();
    JobDetail jobDetail =JobBuilder.newJob(DBOperationsJOB.class)
            .withIdentity("DBJOB", "group2").build();


        try {

            ResourceBundle resource = ResourceBundle.getBundle("resources.application");


            Trigger trigger = TriggerBuilder
              .newTrigger()
              .withIdentity("anyTriggerName", "group1")
              .withSchedule(
                 CronScheduleBuilder.cronSchedule(resource.getString("triggerTime")))
              .build();

            Trigger trigger1 = TriggerBuilder
                      .newTrigger()
                      .withIdentity("sampleTrigger", "group2")
                      .withSchedule(
                         CronScheduleBuilder.cronSchedule(resource.getString("triggetTime")))
                      .build();

            Scheduler scheduler = new StdSchedulerFactory().getScheduler();
            scheduler.start();
            scheduler.scheduleJob(job, trigger);
            scheduler.scheduleJob(jobDetail, trigger1);

            ServletContext context = arg0.getServletContext();
            context.setAttribute("MyJOBScheduler", scheduler);


        } catch (SchedulerException e) {
            e.printStackTrace();

        }

}

}

In My Propertyfile triggerTime=0 19 11 ? * MON *

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Rookie007
  • 1,229
  • 2
  • 18
  • 50

0 Answers0