Package org.jpos.q2.iso

Source Code of org.jpos.q2.iso.SchedulingTaskAdaptor$RunnableWrapper

/*
* This class was contributed by Andres Marques from Cabal Uruguay.
* This class is very similar to our existing DailyTaskAdaptor,
* the only difference in terms of functionality is that we don't
* deal with periods other than 24hours in the DailyTaskAdaptor.
*
* We can either add that functionality to the existing
* DailyTaskAdaptor or replace it by this stuff. We need to evaluate
* pros and cons.
*
* There might be a minor bug there, the 'task' is not getting
* unregistered at stop time.
*
*  Sample Configuration:
*  -------------------------------------------------------------

   <task-adaptor class="org.jpos.q2.iso.SchedulingTaskAdaptor"
       logger="Q2" realm="xxx" name="cierreLoteMovicom">
    <class>uy.com.cabal.transactionality.movicom.MovicomCierreLote</class>
   
    <property name="delay" value="0"/>
    <!--property name="firstTime" value="01:00:00"/-->
    <property name="period" value="86400000"/>  
                                  
   </task-adaptor>

*  -------------------------------------------------------------
*
*/

package org.jpos.q2.iso;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import org.jpos.core.ConfigurationException;
import org.jpos.util.NameRegistrar;

/**
*
* @author amarqueslin
*/
public class SchedulingTaskAdaptor extends TaskAdaptor {
   
    private Timer timer = new Timer();
    private Long delay;
    private Date firstTime;
    private long period;
   
   
    /** Creates a new instance of SchedulingTaskAdaptor */
    public SchedulingTaskAdaptor() {
    }
   
    public class RunnableWrapper extends TimerTask {
       
        private Runnable innerRunnable;
       
        public RunnableWrapper(Runnable innerRunnable) {
            this.innerRunnable = innerRunnable;
        }
       
        public void run() {
            innerRunnable.run();
        }
    }

    public void setConfiguration(org.jpos.core.Configuration cfg) throws org.jpos.core.ConfigurationException {

        super.setConfiguration(cfg);
        boolean daemon = cfg.getBoolean("daemon", true);
        if (daemon) {
            timer = new Timer(true);
        }
        period = cfg.getLong("period", 24 * 60 * 60 * 1000); //By default execute task every 24hs
       
        String initTimeInfo = "";
       
        long delayLong = cfg.getLong("delay", -1);
        if (delayLong != -1) {
            delay = new Long(delayLong);
            initTimeInfo = "delay = " + delay;
        } else {
            String strFirstTime = cfg.get("firstTime", "00:00:00"); //By default start at 12 AM
            Date now = new Date();
            if (strFirstTime.equals("now")) {
                firstTime = now;
            } else {
                SimpleDateFormat dateTimeFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
                SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
                try {
                    String today = dateFormat.format(now);
                    Date time = dateTimeFormat.parse(today + " " + strFirstTime);
                    if (time.after(now)) {
                        firstTime = time;
                    } else {
                        firstTime = new Date(time.getTime() + 1000 * 60 * 60 * 24);
                    }
                } catch (ParseException ex) {
                    throw new ConfigurationException("The format in which to specify the first execution time is HH:mm:ss");
                }
                initTimeInfo = "firstTime = " + dateTimeFormat.format(firstTime);
            }
        }
       
        String strConfig = "daemon = " + daemon + "\n" +
                           initTimeInfo  + "\n"
                            + "period = " + period;
                           
        log.info("Configuration", strConfig);
    }
   
    protected void startService() throws Exception {
        getServer().getFactory().setConfiguration(task, getPersist());
        NameRegistrar.register (getName (), task);
        if (task instanceof TimerTask) {
            schedule((TimerTask) task);
            return;
        }
        if (task instanceof Runnable) {
            schedule(new RunnableWrapper((Runnable) task));
        }
    }
   
    protected void schedule(TimerTask task) {
        if (delay != null) {
            timer.schedule(task, delay.longValue(), period);
        } else {
            timer.schedule(task, firstTime, period);
        }
    }

    protected void stopService() throws Exception {

        super.stopService();
        timer.cancel();
    }
   
   
   
}
TOP

Related Classes of org.jpos.q2.iso.SchedulingTaskAdaptor$RunnableWrapper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.