Flux is a commercial product written in Java that offers job scheduling, file transfer and workflow management capabilities - it can be used either as a standalone application or as an embeddable software component in Java, J2EE and Web Services environments. Compared with Quartz and other open-source frameworks that perform similar functions, Flux can be used not only by developers but also by non-technical users who can design work flows through a Web or Desktop Interface or monitor job flow execution through an Operations Console.
Flux can accommodate the setup of very flexible processing flows through the usage of triggers, actions and flows which can be combined to create arbitrarily complex flow charts:
- An action performs some function such as starting a batch job, transferring a file, updating a database or calling into a J2EE application. Flux integrates with Java by calling user-defined callbacks when a job is ready for execution and in a J2EE environment can invoke session or message-driven beans or send JMS messages.
- A trigger can be fired either on a time, recurring or event-driven basis. Flux provides a pre-defined suite of triggers and actions but custom ones can be built and plugged in flow charts as well.
- A flow connects a trigger or action to another trigger or action. Once a trigger is fired, a flow guides the execution into an appropriate action. This execution can be either unconditional (e.g.: when an email trigger fires, execution may unconditionally flow into a database action) or conditional (e.g.: execution may branch to different actions depending on who the e-mail sender is).
Flow charts can be setup either programmatically through the Flux APIs or graphically through the Web Designer which has been introduced in the prior release as an alternative to the already existing Desktop Designer (built in Swing). Although targeting primarily Java environments, batch processes and executables written in other languages can also be invoked and monitored from Flux through the use of Flux Agents which allow execution of scripts on remote machines.
With the new 7.7 release the Web Designer has been enhanced to allow the setup of actions and triggers related to the various flavors of supported file transfers. Certificate-based authentication has been added as an alternative to password authentication with SFTP hosts to ensure security of B2B file transfers. Another new feature added to the Web Designer is the runtime data mapping which allows developers to move data between actions in a job and workflow.
In a discussion with InfoQ, the President of Flux, David Sims mentioned that "there is about six more months of development work left to bring the Web Designer up to par with the desktop implementation" - the differences are related mainly to messaging, signals and business calendars. The other component embeddable in Web applications - the Operations Console - has been improved in the 7.7 release to make it more scalable: thousands of jobs and chart flows can now be monitored from it.
Sims talked about a common scenario when the Web Designer and Operations Console can be used as embeddable components:
Typically, a Java development team at a financial institution, a financial software company, or some other enterprise (the "Enterprise", let's call them) builds out their application and embeds Flux jobs, workflows, and file transfer capabilities in their application. Then that Enterprise deploys their application, and their IT staff is tasked with monitoring, controlling, and generally using their application.
That's where the Operations Console comes on. The Enterprise's IT operations staff can use it to control jobs, workflows, and file transfers that are an inherent part of the Enterprise's application.
As a simple example, consider the case where the Enterprise builds a funds and account management software application with a Flux engine at the core. Their Java application will be initiating, tracking, and generally managing funds and accounts, but sometimes the IT operations staff will need to step in to do some managing on their side. The IT staff would use the Flux Operations Console, in this case, to make real-time tweaks to their system.
The 7.7 release is fully compatible with the prior release and it did not require any schema changes to the database that can optionally be used for persisting job/workflow definitions and runtime job execution information. Sims also shared some details about the technologies introduced in Flux with the addition of the new web components:
We have used a variety of JavaScript libraries and technologies (GWT, Dojo, Prototype+Scriptaculous, etc.) and are in the process of migrating towards a RESTful architecture with supporting ExtJS widgets.
We have increased scalability by using XPath to read large (5MB) XML workflows directly in the browser. This reduces a lot of round-trip Ajax communications between the browser and server as the browser can simply manipulate the workflow XML and send the result to the server when all modifications have been made. This has allowed us to deliver an interface that is over 90% faster than comparable interfaces that use more Ajax requests to perform work on the server-side.
The conversation with David Sims concluded with him presenting the road map for the next Flux release:
In May/June of this year, Flux 8.0 will be released. Flux's API will change to a POJO model to replace the original factory design pattern that it has had since 2000. A POJO model will make it easier to integrate Flux into other frameworks, most notably Spring.
Also in Flux 8.0, there will be more JavaScript widgets for Flux engines, the BPM dashboard, flow charts (jobs/workflows/business processes), executing flow charts, logs, audit trail, repository, agents, and user management. New database triggers and actions for querying and updating database tables.
Upgrade from HSQL to Derby. Upgrade to Java 5, especially to make use of generics to better document Flux APIs that use collections. Possible Flux REST API if warranted by customer feedback. Generally speaking, we're releasing new Flux versions about every four months now.
More information about Flux can be found on its website and the product manual.