Create a BPMN model with data objects in Java

Hi everyone,
I am trying to create a BPMN business process using Java by following this official guide.
I am having difficulties in creating data objects and associating them to activities from scratch using my Java code. I have not found any guide or example on this.

Could someone give me an example on how to solve the problem or link me some guide ??
Thank you in advance!

Hi Frederico,
Camunda’s BPMN model has classes for data objects, references, associations, and more, i.e.

org.camunda.bpm.model.bpmn.instance.DataObject;
org.camunda.bpm.model.bpmn.instance.DataObjectReference;
org.camunda.bpm.model.bpmn.instance.DataAssociation;

To understand how the different concepts come together, I recommend having a look at the BPMN standard, starting at page 202. You can then use the classes to enrich your model with data constructs. An example could look like this (provided without any warranties):

    BpmnModelInstance modelInstance = Bpmn.createEmptyModel();
    Definitions definitions = modelInstance.newInstance(Definitions.class);
    definitions.setTargetNamespace("http://camunda.org/examples");
    modelInstance.setDefinitions(definitions);
    Process process = modelInstance.newInstance(Process.class);
    process.setId("process");
    definitions.addChildElement(process);
    // Create a data object named "Order"
    DataObject orderObject = modelInstance.newInstance(DataObject.class);
    orderObject.setId("order");
    orderObject.setName("order");
    orderObject.setCollection(false);
    process.addChildElement(orderObject);
    // Create a data object reference
    DataObjectReference orderReceivedReference = modelInstance.newInstance(DataObjectReference.class);
    orderReceivedReference.setDataObject(orderObject);
    orderReceivedReference.setId("orderReceivedReference");
    orderReceivedReference.setName("order [received]");
    // Create Data state
    DataState receivedState = modelInstance.newInstance(DataState.class);
    receivedState.setName("received");
    orderReceivedReference.setDataState(receivedState);
    process.addChildElement(orderReceivedReference);
    // Add a message start event to the process
    StartEvent startEvent = modelInstance.newInstance(StartEvent.class);
    startEvent.setName("orderReceivedEvent");
    startEvent.setName("order received");
    process.addChildElement(startEvent);
    // Add a input output configuration to the start event
    OutputSet outputSet = modelInstance.newInstance(OutputSet.class);
    outputSet.setId("setForOrderReceived");
    DataOutput dataOutput = modelInstance.newInstance(DataOutput.class);
    dataOutput.setId("orderReceivedOutput");
    dataOutput.setName("order [received]");
    dataOutput.setCollection(false);
    dataOutput.setDataState(receivedState);
    startEvent.addChildElement(dataOutput);
    outputSet.getDataOutputRefs().add(dataOutput);
    // Add output and output set to start event
    startEvent.addChildElement(dataOutput);
    startEvent.addChildElement(outputSet);
    // Connect the start event data output to the data object reference
    DataOutputAssociation association = modelInstance.newInstance(DataOutputAssociation.class);
    association.setId("startEventWritesOrderInStateReceived");
    association.getSources().add(dataOutput);
    association.setTarget(orderReceivedReference);
    startEvent.addChildElement(association);

A word of caution, while you can add data objects to your process model, the Camunda Engine ignores them.

1 Like