Camunda Connectors

Re-usable building blocks for safe + happy automation

Nico Rehwaldt

Camunda for Professional Developers

Implementing Behavior

Fetch Stuff Diagram
var client = clientBuilder.build();

var workerRegistration =
  client
    .newWorker()
    .jobType("collect-money")
    .handler(new CollectMoneyJobHandler())
    .open();
class CollectMoneyJobHandler implements JobHandler {

  @Override
  public void handle(JobClient client, ActivatedJob job) {

    // collect that money!

    client.newCompleteCommand(job).send().join();
  }
}
Collect Money (raw)

Building Automation Projects

Fetch Stuff Diagram

Process Application

Process Application Architecture

Core Automation Takeaways

A strong story and the foundation of our success

Camunda for Larger Organizations

Camunda for Everyone Else Really

Safe and happy automation for everyone

(Some) Needs

Collect Money (raw)

Connectors

Re-usable building blocks for modeling + execution.

Inbound vs. Outbound Connectors

Modeling

➡️ Element Templates (aka "Connector Templates")

Execution

➡️ Connector SDK

Element Template Connector Relation

Connector SDK

public class CollectMoneyConnector implements ConnectorFunction {

  @Override
  public Object execute(ConnectorContext context) throws Exception {

    var request = context.getVariablesAsType(CollectMoneyInput.class);

    var validator = new Validator();
    request.validate(validator);
    validator.validate();

    request.replaceSecrets(context.getSecretStore());

    // actually get that money!

    return new CollectMoneyResponse("Took " + request.getAmount() + " bucks!");
  }
}
import io.camunda.connector.runtime.jobworker.ConnectorJobHandler;
import io.camunda.zeebe.client.ZeebeClient;

public class Main {

  public static void main(String[] args) {

    var zeebeClient = ZeebeClient.newClientBuilder().build();

    zeebeClient.newWorker()
        .jobType("collect-money")
        .handler(new ConnectorJobHandler(new CollectMoneyFunction()))
        .name("collect-money")
        .fetchVariables("bucket", "amount")
        .open();
  }
}

Takeaways

Next Steps (2022-08-15)

Footnote on Inbound

Thanks

❤️