DEV Community

Andy
Andy

Posted on

Easy Work - The simple, easy-used, stupid workflow engine for Java

What is Easy Work?

Easy Work is a workflow engine for Java. It provides concise APIs and building blocks for creating and running composable workflows.

In Easy Work, work units are represented by the Work interface, while workflows are represented by the WorkFlow interface.

Easy Work provides six implementation methods for the WorkFlow interface:

Flow

Those are the only basic flows you need to know to start creating workflows with Easy Work.

You don't need to learn a complex notation or concepts, just a few natural APIs that are easy to think about.

How does it work ?

First let's write some work:

public class PrintMessageWork implements Work {

    private final String message;

    public PrintMessageWork(String message) {
        this.message = message;
    }

    @Override
    public String execute(WorkContext workContext) {
        System.out.println(message);
        return message;
    }
}
Enter fullscreen mode Exit fullscreen mode

This unit of work prints a given message to the standard output. Now let's suppose we want to create the following workflow:

  1. print a three times
  2. then print b c d in sequence
  3. then print e f in parallel
  4. then if both e and f have been successfully printed to the console, print g, otherwise print h
  5. finally print z

This workflow can be illustrated as follows:

Example

  • flow1 is a RepeatFlow of work which print a three times
  • flow2 is a SequentialFlow of work which print b c d in sequence order
  • flow3 is a ParallelFlow of work which respectively print e and f in parallel
  • flow4 is a ConditionalFlow based on conditional judgment. It first executes flow3 then if the result is successful (in the state of 'Complete') execute g, otherwise, execute h
  • flow5 is a SequentialFlow, which ensures the sequential execution of Flow1, Flow2, Flow4, and finally executes z

With Easy Work,this workflow can be implemented with the following snippet:

PrintMessageWork a = new PrintMessageWork("a");
PrintMessageWork b = new PrintMessageWork("b");
PrintMessageWork c = new PrintMessageWork("c");
PrintMessageWork d = new PrintMessageWork("d");
PrintMessageWork e = new PrintMessageWork("e");
PrintMessageWork f = new PrintMessageWork("f");
PrintMessageWork g = new PrintMessageWork("g");
PrintMessageWork h = new PrintMessageWork("h");
PrintMessageWork z = new PrintMessageWork("z");

WorkFlow flow = aNewSequentialFlow(
    aNewRepeatFlow(a).times(3),
    aNewSequentialFlow(b,c,d),
    aNewConditionalFlow(
        aNewParallelFlow(e,f).withAutoShutDown(true)
    ).when(
        WorkReportPredicate.COMPLETED,
        g,
        h
    ),
    z
);
aNewWorkFlowEngine().run(flow, new WorkContext());
Enter fullscreen mode Exit fullscreen mode

This is not a very useful workflow, but just to give you an idea about how to write workflows with Easy Work.

You can view more test cases in test/java.

You can find more details about all of this in the wiki

Top comments (0)