Persistence points in BizTalk
The orchestration engine saves the state of a running orchestration instance at various points. If the engine must rehydrate the orchestration instance, start from a controlled shutdown, or recover from an unexpected shutdown, the engine runs the orchestration instance from the last persistence point, as if nothing else had occurred. For example, if a message is received and if an unexpected shutdown occurs before the state can be saved, the engine does not record that it has received the message. Instead, the engines receive the message again after it restarts. The engine saves the state of an orchestration in the following circumstances:
· The end of a transactional scope is reached.
· The engine saves the state at the end of a transactional scope. Therefore, the point at which the orchestration resumes is defined unambiguously. Compensation can be performed correctly, if it is necessary.
· The engine saves the state at the end of a transactional scope. Therefore, the point at which the orchestration resumes is defined unambiguously. Compensation can be performed correctly, if it is necessary.
· The orchestration continues to run from the end of the scope if persistence was successful. Otherwise, the appropriate exception handler is invoked.
If the scope is transactional and atomic, the engine saves the state at the end of the atomic scope when the scope commits.
· If the scope is transactional and long-running, the engine generates a new transaction and persists the complete state of the runtime when the scope is completed.
· A debugging breakpoint is reached.
· A message is sent. The only exception to this is when a message is sent from an atomic transaction scope.
· The orchestration starts another orchestration asynchronously, as it does with the Start Orchestration shape.
· The orchestration instance is suspended.
· When the orchestration engine is asked to shut down, the orchestration engine tries to save control information and the current state of all running orchestration instances. This behavior lets the orchestration engine resume running orchestration instances when the engine is started again. If the orchestration engine cannot save the current state, the orchestration engine resumes the orchestration instance from the last persistence point that occurred before the shutdown. This behavior applies to the system shutdown in a controlled condition and after an abnormal termination.
· The engine determines that the instance should be dehydrated.
· The orchestration instance is finished.