Monday, December 1, 2014

FireMeUp Java Job Scheduler - Open Source

In one of the projects at my current employer me and my team were asked to use a Java Job Scheduling library to schedule some jobs doing some business at dynamically configured time. 

We decided to use Quartz as we were using Spring which provides a full integration to Quartz, and I was fascinated with the design and implementation of it.

I thought that I can start a new open source project that implements a Java Job Scheduler for learning purposes with some modifications/simplifications to the current design of Quartz library.

FireMeUp Scheduler is a simple Java scheduler that can be integrated within your application in a very simple way. The library is so simple and can be used in Small and Medium scale projects, and it provides the following functionality.

  •  Jobs that run every interval of time.
  • Jobs that run every day, week, biweekly, monthly, bimonthly, and yearly in a specific time of the day. (e.g., Every day at 12:00 AM).
  • Having more that a scheduler in your application.
  • Enable/Disable scheduler freely throughout your application life time.
  • Configuring more than one trigger and associating them to schedulers.
  • Triggers can be configured in more than one way either a simple trigger that is scheduled to be triggered every interval of time, and crontab trigger that is triggered either daily, weekly, biweekly, monthly, bimonthly, or yearly at specific time HH/MM/SS.
  • Implementing your jobs and associating them to triggers, more than one job to each trigger.
  • Register/Unregister triggers to schedulers.
  • Register/Unregister jobs to triggers.
  • Job can't overlap itself if its in a running state.
  • You can implement your own trigger by extending the AbstractTrigger that contains most of the business.
Future Functions

Here are some ideas I need to add to the current project, and anyone who needs to start his own open source life can start implementing them and be part of the project.
  • Adding state recovery functionality for the configured Schedulers, Triggers, Jobs, I think we can use in-memory (not recovered) and database (recovered) models.
  •  Threading management functionality, manage the number of concurrent running threads.
  •  Configuration management functionality, configuring the application programmatically and using a properties file.
  • Providing a crontab expression parser functionality.
  • Documentation of the whole project.
  • More complex examples and test cases.
Project Links