Complexity of conversation aware notation
objectiser Jan 29, 2009 7:49 AMThe "conversation aware" mechanism currently is aimed at delivering two capabilities:
(a) a design time capability to be able to ensure that the behaviour specified in the implementation of a service (as defined in a jboss-esb.xml configuration) matches the expected behaviour in a choreography description
(b) a runtime capability to enforce the behaviour, so that messages sent or received out of order will be blocked
The complexity of the "conversation aware" notation is to support both of these capabilities - we need the ability to infer the complete process flow from the description in order to achieve (a), and without an understanding of where a particular service instance is within the choreography, it is not possible to determine whether a message of a particular type can be sent or received (i.e. to support (b)).
However, due to this complexity, we are exploring other ways to achieve both of these capabilities, but with a simpler notation. This new approach does not attempt to represent the complete stateful behaviour of a service, but instead describe the service in a more stateless manner, but still enable these 'stateless fragments' of behaviour to be compared against the choreography - so this would help to still achieve (a).
The other benefit of this 'stateless' approach is that it does not require so much runtime support - i.e. no state information will need to be managed, other than would be normally required by the internal service implementation. Because of this, (b) would not be possible - however the other aspect of Overlord CDL is a monitoring capability that does provide this functionality. So rather than duplicate this behavioural monitoring capability in the "conversation aware" mechanism, this 'stateless' approach would leverage the monitoring capability.
In terms of the notation, we believe the main changes are:
1) The stateful approach uses a MessageRouterAction to route the inbound messages to the service descriptor that can process them. The stateless approach reuses the 'SwitchAction', which can be used in other service descriptors to route based on message type.
2) No longer necessary to define identity information, which in the stateful approach was required to link the message to a particular session being managed by the runtime.
3) Many of the actions are no longer required.
The list of actions for stateful approach are: CreateSessionAction, IfAction, MessageRouterAction, ParallelAction, PerformAction, ReceiveMessageAction, RetrieveSessionAction, ScheduleStateAction, SendMessageAction, SetStateAction, SwitchAction, WhenAction and WhileAction
Current list of actons for stateless approach are: IfAction, ReceiveMessageAction, SendMessageAction and SwitchAction.
Other possible actions that may still be required for stateless approach are: ParallelAction and WhileAction.