Camunda External Task Client (Java) 0.1.0-alpha2 Released

By
  • Blog
  • >
  • Camunda External Task Client (Java) 0.1.0-alpha2 Released
TOPICS

30 Day Free Trial

Bring together legacy systems, RPA bots, microservices and more with Camunda

Join the Camunda Developer Newsletter

Get the latest events, release notes, and product updates straight to your mailbox

TRENDING CONTENT

Recently we released the first alpha version
of the Camunda External Task Client (Java). Today we are happy to announce the second alpha release.

The External Task concept helps to decouple your services from the Workflow Engine.

The highlights of this release are:

  • Set variables to the local scope of External Tasks
  • Specify a response timeout to fetch and lock External Tasks (long polling)
  • More serialization formats to exchange object variables (XML and JAVA)

You can find the complete release notes here.

Handling Orders Example

This example showcases some of the new features. Let’s consider the following workflow:

A Workflow for Handling Orders

Make sure that you have an up and running Camunda Workflow Engine and deploy
the order handling workflow to it.

Next, create a Maven project and adjust the pom.xml by adding the following Maven coordinates:

<dependency>
  <groupId>org.camunda.bpm</groupId>
  <artifactId>camunda-external-task-client</artifactId>
  <version>0.1.0-alpha2</version>
</dependency>

Create a simple invoice class:

public class Invoice {
  public String id;

  public Invoice(String id) {
    this.id = id;
  }
}

Create a main class and add the following lines to it:

// bootstrap the client
ExternalTaskClient client = ExternalTaskClient.create()
  .baseUrl("https://localhost:8080/engine-rest")
  .asyncResponseTimeout(1000)
  .build();

// subscribe to the topic
client.subscribe("invoiceCreator")
  .handler((externalTask, externalTaskService) -> {

    // instantiate an invoice object
    Invoice invoice = new Invoice("A123");

    // create an object typed variable with the serialization format XML
    ObjectValue invoiceValue = Variables
      .objectValue(invoice)
      .serializationDataFormat("application/xml")
      .create();

    // add the invoice object and its id to a map
    Map<String, Object> variables = new HashMap<>();
    variables.put("invoiceId", invoice.id);
    variables.put("invoice", invoiceValue);

    // select the scope of the variables
    boolean isRandomSample = Math.random() <= 0.5;
    if (isRandomSample) {
      externalTaskService.complete(externalTask, variables);
    } else {
      externalTaskService.complete(externalTask, null, variables);
    }

    System.out.println("The External Task " + externalTask.getId() +
      " has been completed!");

  }).open();

Thread.sleep(1000 * 60 * 5);

Finally, run the application. You should see the following output:

The External Task 1d375217-2cfe-11e8-96c2-769e8e30ca9b has been completed!
The External Task 0857150d-2cfe-11e8-96c2-769e8e30ca9b has been completed!
...

The project sources of this example can be found in the documentation of the External Task Client.

What do you think about this release? Share your ideas and suggestions with us in the forum.

Try All Features of Camunda Platform

Related Content

What are business processes, and why are they important? Learn how they work, types of business processes, & why well-orchestrated processes are critical.
Study demonstrates significant benefits to adopting Camunda and provides a powerful customizable tool to help you understand the impact it can have on your organization.
Learn how Samantha, as a developer and a new Camunda user, explored Camunda Optimize to enhance their development process.