<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    默了默

    java hibernate struts2 spring
       :: 首頁 ::  ::  ::  :: 管理

    Quartz 的Web 應用-監(jiān)聽器方式調用

    Posted on 2009-09-07 17:13 fd 閱讀(1743) 評論(0)  編輯  收藏 所屬分類: webApps

    A ServletContextListner that can be used to initialize Quartz.

    配置和集成 Quartz 到 Web 應用的一種方式。從 2.3 版本的 Servlet API 開始,能創(chuàng)建監(jiān)聽器,由容器在其生命周期中的某個特定時間回調。其中的一個監(jiān)聽器接口叫做 java.servlet.ServletContextListener,它包括有兩個方法:

    public void contextInitialized(ServletContextEvent sce);
    public void contextDestroyed(ServeltContextEvent sce);

    容器會在啟動和關閉的時候相應的調用這兩個方法。這就可以在 contextInitialized() 方法中初始化 Quartz Scheduler,并通過 contextDestroyed() 方法關閉它。
    下面是QuartzInitializerListener 源碼:

    /*
     * Copyright 2004-2005 OpenSymphony
     *
     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
     * use this file except in compliance with the License. You may obtain a copy
     * of the License at
     *
     *   
    http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     * License for the specific language governing permissions and limitations
     * under the License.
     *
     
    */


    /*
     * Previously Copyright (c) 2001-2004 James House
     
    */

    package org.quartz.ee.servlet;

    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;

    import org.quartz.Scheduler;
    import org.quartz.impl.StdSchedulerFactory;

    /**
     * <p>
     * A ServletContextListner that can be used to initialize Quartz.
     * </p>
     *
     * <p>
     * You'll want to add something like this to your WEB-INF/web.xml file:
     *
     * <pre>
     *     &lt;context-param&gt;
     *         &lt;param-name&gt;config-file&lt;/param-name&gt;
     *         &lt;param-value&gt;/some/path/my_quartz.properties&lt;/param-value&gt;
     *     &lt;/context-param&gt;
     *     &lt;context-param&gt;
     *         &lt;param-name&gt;shutdown-on-unload&lt;/param-name&gt;
     *         &lt;param-value&gt;true&lt;/param-value&gt;
     *     &lt;/context-param&gt;
     *     &lt;context-param&gt;
     *         &lt;param-name&gt;start-scheduler-on-load&lt;/param-name&gt;
     *         &lt;param-value&gt;true&lt;/param-value&gt;
     *     &lt;/context-param&gt;
     *     
     *     &lt;listener&gt;
     *         &lt;listener-class&gt;
     *             org.quartz.ee.servlet.QuartzInitializerListener
     *         &lt;/listener-class&gt;
     *     &lt;/listener&gt;
     * </pre>
     *
     * </p>
     * <p>
     * The init parameter 'config-file' can be used to specify the path (and
     * filename) of your Quartz properties file. If you leave out this parameter,
     * the default ("quartz.properties") will be used.
     * </p>
     *
     * <p>
     * The init parameter 'shutdown-on-unload' can be used to specify whether you
     * want scheduler.shutdown() called when the servlet is unloaded (usually when
     * the application server is being shutdown). Possible values are "true" or
     * "false". The default is "true".
     * </p>
     *
     * <p>
     * The init parameter 'start-scheduler-on-load' can be used to specify whether
     * you want the scheduler.start() method called when the servlet is first loaded.
     * If set to false, your application will need to call the start() method before
     * the scheduler begins to run and process jobs. Possible values are "true" or
     * "false". The default is "true", which means the scheduler is started.
     * </p>
     *
     * A StdSchedulerFactory instance is stored into the ServletContext. You can gain access
     * to the factory from a ServletContext instance like this:
     * <br>
     * <pre>
     * StdSchedulerFactory factory = (StdSchedulerFactory) ctx
     *                .getAttribute(QuartzInitializerListener.QUARTZ_FACTORY_KEY);</pre>
     * <p>
     * The init parameter 'servlet-context-factory-key' can be used to override the
     * name under which the StdSchedulerFactory is stored into the ServletContext, in 
     * which case you will want to use this name rather than 
     * <code>QuartzInitializerListener.QUARTZ_FACTORY_KEY</code> in the above example.
     * </p>
     *
     * <p>
     * The init parameter 'start-delay-seconds' can be used to specify the amount
     * of time to wait after initializing the scheduler before scheduler.start()
     * is called.
     * </p>
     *
     * Once you have the factory instance, you can retrieve the Scheduler instance by calling
     * <code>getScheduler()</code> on the factory.
     *
     * 
    @author James House
     * 
    @author Chuck Cavaness
     * 
    @author John Petrocik
     
    */

    public class QuartzInitializerListener implements ServletContextListener {

        
    public static final String QUARTZ_FACTORY_KEY = "org.quartz.impl.StdSchedulerFactory.KEY";

        
    private boolean performShutdown = true;

        
    private Scheduler scheduler = null;

        
    /*
         * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         *
         * Interface.
         *
         * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         
    */


        
    public void contextInitialized(ServletContextEvent sce) {

            System.out.println(
    "Quartz Initializer Servlet loaded, initializing Scheduler");

            ServletContext servletContext 
    = sce.getServletContext();
            StdSchedulerFactory factory;
            
    try {

                String configFile 
    = servletContext.getInitParameter("config-file");
                String shutdownPref 
    = servletContext.getInitParameter("shutdown-on-unload");

                
    if (shutdownPref != null{
                    performShutdown 
    = Boolean.valueOf(shutdownPref).booleanValue();
                }


                
    // get Properties
                if (configFile != null{
                    factory 
    = new StdSchedulerFactory(configFile);
                }
     else {
                    factory 
    = new StdSchedulerFactory();
                }


                
    // Always want to get the scheduler, even if it isn't starting, 
                
    // to make sure it is both initialized and registered.
                scheduler = factory.getScheduler();

                
    // Should the Scheduler being started now or later
                String startOnLoad = servletContext
                        .getInitParameter(
    "start-scheduler-on-load");

                
    int startDelay = 0;
                String startDelayS 
    = servletContext.getInitParameter("start-delay-seconds");
                
    try {
                    
    if(startDelayS != null && startDelayS.trim().length() > 0)
                        startDelay 
    = Integer.parseInt(startDelayS);
                }
     catch(Exception e) {
                    System.out.println(
    "Cannot parse value of 'start-delay-seconds' to an integer: " + startDelayS + ", defaulting to 5 seconds.");
                    startDelay 
    = 5;
                }


                
    /*
                 * If the "start-scheduler-on-load" init-parameter is not specified,
                 * the scheduler will be started. This is to maintain backwards
                 * compatability.
                 
    */

                
    if (startOnLoad == null || (Boolean.valueOf(startOnLoad).booleanValue())) {
                    
    if(startDelay <= 0{
                        
    // Start now
                        scheduler.start();
                        System.out.println(
    "Scheduler has been started");
                    }

                    
    else {
                        
    // Start delayed
                        scheduler.startDelayed(startDelay);
                        System.out.println(
    "Scheduler will start in " + startDelay + " seconds.");
                    }

                }
     else {
                    System.out.println(
    "Scheduler has not been started. Use scheduler.start()");
                }


                String factoryKey 
    = 
                    servletContext.getInitParameter(
    "servlet-context-factory-key");
                
    if (factoryKey == null{
                    factoryKey 
    = QUARTZ_FACTORY_KEY;
                }


                System.out.println(
    "Storing the Quartz Scheduler Factory in the servlet context at key: "
                        
    + factoryKey);
                servletContext.setAttribute(factoryKey, factory);

            }
     catch (Exception e) {
                System.out.println(
    "Quartz Scheduler failed to initialize: " + e.toString());
                e.printStackTrace();
            }

        }


        
    public void contextDestroyed(ServletContextEvent sce) {

            
    if (!performShutdown) {
                
    return;
            }


            
    try {
                
    if (scheduler != null{
                    scheduler.shutdown();
                }

            }
     catch (Exception e) {
                System.out.println(
    "Quartz Scheduler failed to shutdown cleanly: " + e.toString());
                e.printStackTrace();
            }


            System.out.println(
    "Quartz Scheduler successful shutdown.");
        }



    }

    主站蜘蛛池模板: 亚洲6080yy久久无码产自国产| 色www免费视频| 国产jizzjizz视频免费看| CAOPORN国产精品免费视频| 亚洲精品午夜久久久伊人| 国产成人无码免费视频97 | 亚洲免费一级视频| 在线日韩av永久免费观看| 免费黄色电影在线观看| 亚洲中文字幕久久久一区| 亚洲最大激情中文字幕| 91在线视频免费91| 日韩免费高清播放器| 亚洲精品无码日韩国产不卡av| 亚洲国产成人片在线观看无码| 在线A级毛片无码免费真人| 中文字幕久精品免费视频| 亚洲欧美乱色情图片| 亚洲AV日韩AV天堂一区二区三区| 午夜老司机免费视频| 免费在线中文日本| 国产亚洲成在线播放va| 亚洲国产午夜电影在线入口 | 亚洲日本乱码卡2卡3卡新区| 亚洲中文字幕视频国产| 最新猫咪www免费人成| 久久午夜免费鲁丝片| 免费福利资源站在线视频| 亚洲国产成人久久99精品| 久久亚洲精品无码观看不卡| 大陆一级毛片免费视频观看i| 久久青草免费91线频观看不卡| 爱情岛亚洲论坛在线观看| 亚洲国产精品白丝在线观看| 久久亚洲国产中v天仙www| 亚洲JIZZJIZZ中国少妇中文| 日本免费网址大全在线观看| 韩日电影在线播放免费版| 国产av无码专区亚洲av毛片搜| 亚洲深深色噜噜狠狠网站| 亚洲精品自产拍在线观看动漫|