It is just reference Services.
Almost this Code is copied from Apache' Avalon-Cornerstone.
Cornerstone is a good Component. but
It can only run on Avalon Framework. so
I just modified them to remove the coupling with Avalon Framework
services.xml
<?xml version="1.0" encoding="UTF-8"?> <services> <service id="ThreadManager" class="sunheart.third.thread.impl.ResourceLimitingThreadManager" /> <!-- it require 'ThreadManager' sercie' --> <service id="TimeScheduler" class="sunheart.third.scheduler.impl.MultiTimeScheduler" /> </services>
scheduler information is stored in seperated file 'scheduler.xml'. of course you can change it to another repository. (you need to subclass 'sunheart.third.scheduler.impl.DefaultTimeScheduler')
scheduler.xml
<?xml version="1.0" encoding="UTF-8"?> <scheduler> <!-- ip check. if value is blank, skip --> <onlythisip></onlythisip> <!-- same with ip --> <onlythisHost></onlythisHost> <!-- triggers --> <trigger name="periodic1700" type="periodic"> \<!-- a base time --> <start hour="17" minute="0" /> <!-- period, minute --> <period>1</period> </trigger> <trigger name="cron0511" type="cron"> <minute>14</minute> <hour>11</hour> <day week="1">-1</day> <month>-1</month> <year>-1</year> </trigger> <target class="example.ATarget"> <ref_trigger>periodic1700</ref_trigger> <ref_trigger>cron0511</ref_trigger> </target> </scheduler>
Java code
package example; import java.util.Date; import sunheart.service.scheduler.Target; /** * */ public class ATarget implements Target { public void targetTriggered(String triggerName) { System.out.println(triggerName + ":ATarget target is fired " + new Date()); } }