What is JFDI?
JFDI is an open source project for the .Net 2.0 framework that is aimed at programmers and system architects that want to take advantage of asychronous / disconnected operations within their application. It's a framework which allows developers to run their code (in JFDI terms a 'job') based on a trigger or an event occuring.
It's staggering to imagine just how many systems have been developed that depend on jobs running in the Windows Scheduler to maintain application stability or to make something happen. Each job running in isolation with no indicator of when something has gone wrong.
How many times has somebody discovered that "the job hasn't run for days" without anybody knowing about it - that is until the application it was supporting started to fail? JFDI gives the developer standard job management, diagnostics and logging which lets you see exactly what's happening. Also, if a job fails then you can be sure that you'll know about it.
JFDI is built around an extensible trigger model. This powerful aspect allows jobs to run in response to more than a simple scheduler. If you currently have jobs that check a database for new data then JFDI can really simplify your code. JFDI lets you forget about checking the database and concentrate on what you want to do when the data changes. The trigger framework is extremely flexible and it could be used to start a job running based on any of these events*:
- It's turned 3 o'clock on a Monday
- The BBC has updated it's technology RSS feed
- The CPU use of the host machine is consistantly above 80%
- A file has been written to a particular folder
- A database has been updated
- New hardware has been added (USB devices for example)
- Source code has been checked into the source code repository
As for the 'code' that is run, JFDI is very open minded when it comes to viewing items as code. Through the use of Agents JFDI lets the agent decide what is in fact 'code'. The standard agent in the system expects the code to be a .NET DLL that exposes certain interfaces and has particular attributes.
* dependant on a suitable trigger being registered with the framework