Signal Event Definition
A signal event definition is declared using the signalEventDefinition element. The attributesignalRef references a signal element declared as a child element of the definitions root element. The following is an excerpt of a process in which a signal event is thrown and caught by intermediate events. The signalEventDefinitions reference the ‘global’ signal element.
Expressions
You can use expressions for the name in the signal event definition. The name is then resolved as soon as a process reaches the scope of the signal. For example when the process instances reaches a Signal Intermediate Catching Event, then the expression within the name is resolved. By using expressions within the signal name you can influence the signal name dynamically based on process variables. This could come in handy when for example there is the need to interrupt parallel branches. An example could look like follows:Signal Api
Triggering (Throwing) Signals
A signal can either be thrown by a process instance using a BPMN construct or programmatically using Java API. TheRuntimeService provides a fluent API to throw a signal programmatically:
RuntimeService:
Querying for Signal Event Subscriptions
It is possible to query for all executions which have subscribed to a specific signal event:Catching Signal Events
Signal Start Event

- The name of the signal start event must be unique across a given process definition, i.e., a process definition must not have multiple signal start events with the same name. The engine throws an exception upon deployment of a process definition in case two or more signal start events reference the same signal or if two or more signal start events reference signals with the same signal name.
- Contrary to message start events, the name of the signal start event does not have to be unique across all deployed process definitions.
- Process versioning: Upon deployment of a new version of a process definition, the signal subscriptions of the previous version are canceled. This is also the case for signal events that are not present in the new version.
Signal Intermediate Catching Event

ASEE Flow Extensions
The following extensions are supported for the Signal Intermediate Catching Event:| Attributes | – |
|---|---|
| Extension Elements | camunda:inputOutput |
| Constraints | – |
Signal Boundary Event
When an execution arrives in the activity to which the signal boundary event is attached, the signal boundary event catches signals with the proper name. Note: Contrary to other events, such as the error boundary event, a signal boundary event does not only catch signal events thrown from the scope it is attached to. A signal event has a global scope (broadcast semantics), meaning that the signal can be thrown from any place, even from a different process instance.Throwing Signal Events
Signal Intermediate Throwing Event
A signal intermediate throwing event throws a signal event for a defined signal.
- In the default configuration, the signal is delivered synchronously. This means that the throwing process instance waits until the signal is delivered to all catching process instances. The catching process instances are also notified in the same transaction as the throwing process instance, which means that if one of the notified instances produces a technical error (throws an exception), all involved instances fail.
- A signal can also be delivered asynchronously. In that case it is determined which handlers are active at the time the throwing signal event is reached. For each active handler, an asynchronous notification message (
Job) is stored and delivered by theJobExecutor.
Signal End Event

Passing Variables
It is possible to pass process variables from the signal-throwing process instance, to all of the signal-catching process instances. The data is copied into a signal-catching process instance when it is started with a Signal Start Event, or before it leaves the wait-state in a Signal Intermediate Catching Event.Y process variable at the signal-catching process instances will have the value of (X + 5), where X is a process variable of the signal-throwing process instance.
Moreover, it can be declared that all of the process variable of the signal-throwing process instance be passed to the signal-catching processes.
Passing a Business Key
In addition to passing process variables to the signal-catching process instances, it is also possible to pass a Business Key. However, this Business Key passing can only be applied to process instances that use a Signal Start Event.ASEE Flow Extensions
The following extensions are supported for the Signal Intermediate and End Throwing Events:| Attributes | – |
|---|---|
| Extension Elements | camunda:in, camunda:failedJobRetryTimeCycle, camunda:inputOutput |
| Constraints | – |