org.camunda.bpm.engine.impl
Class MessageCorrelationBuilderImpl

java.lang.Object
  extended by org.camunda.bpm.engine.impl.MessageCorrelationBuilderImpl
All Implemented Interfaces:
MessageCorrelationBuilder

public class MessageCorrelationBuilderImpl
extends Object
implements MessageCorrelationBuilder

Author:
Daniel Meyer, Christopher Zell

Field Summary
protected  String businessKey
           
protected  CommandContext commandContext
           
protected  CommandExecutor commandExecutor
           
protected  org.camunda.bpm.engine.variable.VariableMap correlationProcessInstanceVariables
           
protected  boolean isExclusiveCorrelation
           
protected  boolean isTenantIdSet
           
protected  String messageName
           
protected  org.camunda.bpm.engine.variable.VariableMap payloadProcessInstanceVariables
           
protected  String processDefinitionId
           
protected  String processInstanceId
           
protected  String tenantId
           
 
Constructor Summary
MessageCorrelationBuilderImpl(CommandContext commandContext, String messageName)
           
MessageCorrelationBuilderImpl(CommandExecutor commandExecutor, String messageName)
           
 
Method Summary
 void correlate()
          Executes the message correlation.
 void correlateAll()
          Executes the message correlation for multiple messages.
 List<MessageCorrelationResult> correlateAllWithResult()
          Executes the message correlation for multiple messages and returns a list of message correlation results.
 void correlateExclusively()
           Behaves like MessageCorrelationBuilder.correlate(), however uses pessimistic locking for correlating a waiting execution, meaning that two threads correlating a message to the same execution in parallel do not end up continuing the process in parallel until the next wait state is reached
 ProcessInstance correlateStartMessage()
          Executes the message correlation.
 MessageCorrelationResult correlateWithResult()
          Executes the message correlation and returns a MessageCorrelationResult object.
protected  void ensureCorrelationProcessInstanceVariablesInitialized()
           
protected  void ensureCorrelationVariablesNotSet()
           
protected  void ensurePayloadProcessInstanceVariablesInitialized()
           
protected  void ensureProcessDefinitionAndTenantIdNotSet()
           
protected  void ensureProcessDefinitionIdNotSet()
           
protected  void ensureProcessInstanceAndTenantIdNotSet()
           
protected
<T> T
execute(Command<T> command)
           
 String getBusinessKey()
           
 CommandContext getCommandContext()
           
 CommandExecutor getCommandExecutor()
           
 Map<String,Object> getCorrelationProcessInstanceVariables()
           
 String getMessageName()
           
 Map<String,Object> getPayloadProcessInstanceVariables()
           
 String getProcessDefinitionId()
           
 String getProcessInstanceId()
           
 String getTenantId()
           
 boolean isExclusiveCorrelation()
           
 boolean isTenantIdSet()
           
 MessageCorrelationBuilder processDefinitionId(String processDefinitionId)
          Correlate the message such that a process definition with the given id is selected.
 MessageCorrelationBuilder processInstanceBusinessKey(String businessKey)
           Correlate the message such that the process instance has a business key with the given name.
 MessageCorrelationBuilder processInstanceId(String id)
          Correlate the message such that a process instance with the given id is selected.
 MessageCorrelationBuilder processInstanceVariableEquals(String variableName, Object variableValue)
          Correlate the message such that the process instance has a variable with the given name and value.
 MessageCorrelationBuilder processInstanceVariablesEqual(Map<String,Object> variables)
           Correlate the message such that the process instance has the given variables.
 MessageCorrelationBuilder setVariable(String variableName, Object variableValue)
          Pass a variable to the execution waiting on the message.
 MessageCorrelationBuilder setVariables(Map<String,Object> variables)
          Pass a map of variables to the execution waiting on the message.
 MessageCorrelationBuilder tenantId(String tenantId)
          Specify a tenant to deliver the message to.
 MessageCorrelationBuilder withoutTenantId()
          Specify that the message can only be received on executions or process definitions which belongs to no tenant.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

commandExecutor

protected CommandExecutor commandExecutor

commandContext

protected CommandContext commandContext

isExclusiveCorrelation

protected boolean isExclusiveCorrelation

messageName

protected String messageName

businessKey

protected String businessKey

processInstanceId

protected String processInstanceId

processDefinitionId

protected String processDefinitionId

correlationProcessInstanceVariables

protected org.camunda.bpm.engine.variable.VariableMap correlationProcessInstanceVariables

payloadProcessInstanceVariables

protected org.camunda.bpm.engine.variable.VariableMap payloadProcessInstanceVariables

tenantId

protected String tenantId

isTenantIdSet

protected boolean isTenantIdSet
Constructor Detail

MessageCorrelationBuilderImpl

public MessageCorrelationBuilderImpl(CommandExecutor commandExecutor,
                                     String messageName)

MessageCorrelationBuilderImpl

public MessageCorrelationBuilderImpl(CommandContext commandContext,
                                     String messageName)
Method Detail

processInstanceBusinessKey

public MessageCorrelationBuilder processInstanceBusinessKey(String businessKey)
Description copied from interface: MessageCorrelationBuilder

Correlate the message such that the process instance has a business key with the given name. If the message is correlated to a message start event then the given business key is set on the created process instance.

Specified by:
processInstanceBusinessKey in interface MessageCorrelationBuilder
Parameters:
businessKey - the businessKey to correlate on.
Returns:
the builder

processInstanceVariableEquals

public MessageCorrelationBuilder processInstanceVariableEquals(String variableName,
                                                               Object variableValue)
Description copied from interface: MessageCorrelationBuilder

Correlate the message such that the process instance has a variable with the given name and value.

Specified by:
processInstanceVariableEquals in interface MessageCorrelationBuilder
Parameters:
variableName - the name of the process instance variable to correlate on.
variableValue - the value of the process instance variable to correlate on.
Returns:
the builder

processInstanceVariablesEqual

public MessageCorrelationBuilder processInstanceVariablesEqual(Map<String,Object> variables)
Description copied from interface: MessageCorrelationBuilder

Correlate the message such that the process instance has the given variables.

Specified by:
processInstanceVariablesEqual in interface MessageCorrelationBuilder
Parameters:
variables - the variables of the process instance to correlate on.
Returns:
the builder

ensureCorrelationProcessInstanceVariablesInitialized

protected void ensureCorrelationProcessInstanceVariablesInitialized()

processInstanceId

public MessageCorrelationBuilder processInstanceId(String id)
Description copied from interface: MessageCorrelationBuilder

Correlate the message such that a process instance with the given id is selected.

Specified by:
processInstanceId in interface MessageCorrelationBuilder
Parameters:
id - the id of the process instance to correlate on.
Returns:
the builder

processDefinitionId

public MessageCorrelationBuilder processDefinitionId(String processDefinitionId)
Description copied from interface: MessageCorrelationBuilder

Correlate the message such that a process definition with the given id is selected. Is only supported for MessageCorrelationBuilder.correlateStartMessage().

Specified by:
processDefinitionId in interface MessageCorrelationBuilder
Parameters:
processDefinitionId - the id of the process definition to correlate on.
Returns:
the builder

setVariable

public MessageCorrelationBuilder setVariable(String variableName,
                                             Object variableValue)
Description copied from interface: MessageCorrelationBuilder

Pass a variable to the execution waiting on the message. Use this method for passing the message's payload.

Invoking this method multiple times allows passing multiple variables.

Specified by:
setVariable in interface MessageCorrelationBuilder
Parameters:
variableName - the name of the variable to set
variableValue - the value of the variable to set
Returns:
the builder

setVariables

public MessageCorrelationBuilder setVariables(Map<String,Object> variables)
Description copied from interface: MessageCorrelationBuilder

Pass a map of variables to the execution waiting on the message. Use this method for passing the message's payload

Specified by:
setVariables in interface MessageCorrelationBuilder
Parameters:
variables - the map of variables
Returns:
the builder

ensurePayloadProcessInstanceVariablesInitialized

protected void ensurePayloadProcessInstanceVariablesInitialized()

tenantId

public MessageCorrelationBuilder tenantId(String tenantId)
Description copied from interface: MessageCorrelationBuilder
Specify a tenant to deliver the message to. The message can only be received on executions or process definitions which belongs to the given tenant. Cannot be used in combination with MessageCorrelationBuilder.processInstanceId(String) or MessageCorrelationBuilder.processDefinitionId(String).

Specified by:
tenantId in interface MessageCorrelationBuilder
Parameters:
tenantId - the id of the tenant
Returns:
the builder

withoutTenantId

public MessageCorrelationBuilder withoutTenantId()
Description copied from interface: MessageCorrelationBuilder
Specify that the message can only be received on executions or process definitions which belongs to no tenant. Cannot be used in combination with MessageCorrelationBuilder.processInstanceId(String) or MessageCorrelationBuilder.processDefinitionId(String).

Specified by:
withoutTenantId in interface MessageCorrelationBuilder
Returns:
the builder

correlate

public void correlate()
Description copied from interface: MessageCorrelationBuilder
Executes the message correlation.

Specified by:
correlate in interface MessageCorrelationBuilder

correlateWithResult

public MessageCorrelationResult correlateWithResult()
Description copied from interface: MessageCorrelationBuilder
Executes the message correlation and returns a MessageCorrelationResult object.

The call of this method will result in either:

The result can be identified by calling the MessageCorrelationResult.getResultType().

Specified by:
correlateWithResult in interface MessageCorrelationBuilder
Returns:
The result of the message correlation. Result contains either the execution id or the start event activity id and the process definition.

correlateExclusively

public void correlateExclusively()
Description copied from interface: MessageCorrelationBuilder

Behaves like MessageCorrelationBuilder.correlate(), however uses pessimistic locking for correlating a waiting execution, meaning that two threads correlating a message to the same execution in parallel do not end up continuing the process in parallel until the next wait state is reached

CAUTION: Wherever there are pessimistic locks, there is a potential for deadlocks to occur. This can either happen when multiple messages are correlated in parallel, but also with other race conditions such as a message boundary event on a user task. The process engine is not able to detect such a potential. In consequence, the user of this API should investigate this potential in his/her use case and implement countermeasures if needed.

A less error-prone alternative to this method is to set appropriate async boundaries in the process model such that parallel message correlation is solved by optimistic locking.

Specified by:
correlateExclusively in interface MessageCorrelationBuilder

correlateAll

public void correlateAll()
Description copied from interface: MessageCorrelationBuilder
Executes the message correlation for multiple messages.

Specified by:
correlateAll in interface MessageCorrelationBuilder

correlateAllWithResult

public List<MessageCorrelationResult> correlateAllWithResult()
Description copied from interface: MessageCorrelationBuilder
Executes the message correlation for multiple messages and returns a list of message correlation results.

This will result in any number of the following:

Note that the message correlates to all tenants if no tenant is specified using MessageCorrelationBuilder.tenantId(String) or MessageCorrelationBuilder.withoutTenantId().

Specified by:
correlateAllWithResult in interface MessageCorrelationBuilder
Returns:
The result list of the message correlations. Each result contains either the execution id or the start event activity id and the process definition.

correlateStartMessage

public ProcessInstance correlateStartMessage()
Description copied from interface: MessageCorrelationBuilder
Executes the message correlation.

This will result in either:

Specified by:
correlateStartMessage in interface MessageCorrelationBuilder
Returns:
the newly created process instance

ensureProcessDefinitionIdNotSet

protected void ensureProcessDefinitionIdNotSet()

ensureProcessInstanceAndTenantIdNotSet

protected void ensureProcessInstanceAndTenantIdNotSet()

ensureCorrelationVariablesNotSet

protected void ensureCorrelationVariablesNotSet()

ensureProcessDefinitionAndTenantIdNotSet

protected void ensureProcessDefinitionAndTenantIdNotSet()

execute

protected <T> T execute(Command<T> command)

getCommandExecutor

public CommandExecutor getCommandExecutor()

getCommandContext

public CommandContext getCommandContext()

getMessageName

public String getMessageName()

getBusinessKey

public String getBusinessKey()

getProcessInstanceId

public String getProcessInstanceId()

getProcessDefinitionId

public String getProcessDefinitionId()

getCorrelationProcessInstanceVariables

public Map<String,Object> getCorrelationProcessInstanceVariables()

getPayloadProcessInstanceVariables

public Map<String,Object> getPayloadProcessInstanceVariables()

isExclusiveCorrelation

public boolean isExclusiveCorrelation()

getTenantId

public String getTenantId()

isTenantIdSet

public boolean isTenantIdSet()


Copyright © 2016 camunda services GmbH. All rights reserved.