[ 
https://issues.apache.org/jira/browse/SCXML-197?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ate Douma resolved SCXML-197.
-----------------------------

    Resolution: Fixed

> Better separation of concern between SCXMLExecutor and SCInstance and 
> introducing a new SCXMLExecutionContext
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: SCXML-197
>                 URL: https://issues.apache.org/jira/browse/SCXML-197
>             Project: Commons SCXML
>          Issue Type: New Feature
>    Affects Versions: 2.0
>            Reporter: Ate Douma
>            Assignee: Ate Douma
>             Fix For: 2.0
>
>
> For the execution of a SCXML instance, several external services are used and 
> needed as well as management of intermediate state and external Invoker 
> instances.
> Currently these are spread out between the SCXMLExecutor and SCInstance (both 
> marked as Serializable...) making it confusing and even incorrect how these 
> are managed.
> The SCInstance keeps a map of current Invoker instances, while the semantics 
> for these Invokers are necessarily asynchronous and running in their own 
> thread.
> This makes them unqualified to be serialized together with the SCInstance. 
> I'll move these to a new SCXMLExecutionContext instead.
> The SCXMLExecutionContext will encapsulate all non-persistable SCXML state, 
> the internal event queue and all external services like the ErrorReporter, 
> the (external) EventDispatcher
> and the NotificationRegistry (see below).
> The SCInstance currently holds the NotificationRegistry, which maintains a 
> map of external SCXMListeners, which likewise should not be serialized 
> together with the SCInstance.
> And the SCInstance hold a public reference to the SCXMLExecutor, which is 
> used for the callback handling from Invokers, but if the SCInstance and/or 
> SCXMLExecutor would be serialized, there is nothing to 'talk back' to.
> It will require some changes in the handling and communication with the 
> Invokers, but once done then the SCInstance also no longer need to reference 
> the SCXMLExecutor.
> For the SCXMLExecutor I will introduce an external event queue, which can be 
> access concurrently, and the Invokers can and only need access to the 
> SCXMLExecutor for adding events to this queue. The SCXMLExecutor thus will 
> provide all the 'external' APIs, the SCXMLExecutionContext all the 'internal' 
> APIs.
> The intend is to make the SCXMLExecutor and the SCXMLExecutionContext 
> non-serializable and instead move the current Status and SCXML model object 
> to the SCInstance instance,
> which then properly and completely will encapsulate all 'persistable' SCXML 
> instance state, and can be 'detached' and 're-attached' from the 
> SCXMLExecutor to be persisted or serialized.
> The SCXMLExecutionContext then will be used as single 'context' parameter for 
> the SCMLSemantics provided algorithms, besides the current processing 'step' 
> state, which will makes the current API a lot cleaner and the new Algorithm 
> inplementations (SCXML-196) a lot easier. 
> For the execution of Actions (SCXML executable content), I'll also introduce 
> a new ActionExecutionContext, on top of the SCXMLExecutionContext, which 
> expose only a subset of the SCXMLExecutionContext as only needed by the 
> Action execution, thereby reducing the exposure of the internal API and state 
> management.
> These changes will have a big impact on the current APIs, but the advantage 
> is that further and future changes will be much easier to do, and with a lot 
> less impact than this one time upfront big change now.
> All the internal APIs have to change anyway, no matter what, to be able to 
> support and implement the current SCXML specification requirements.
> Because both the internal events and external events will now properly be 
> managed through separate queues, it now also becomes easy to implement the 
> 'single event step' sequential processing, as required by the specification, 
> including asynchronous handling (receiving) of external events.
> To a large extend this thus also will solve SCXML-112.
> The result of all this is a SCXMLExecutor which only will need and have 3 
> (primary) instance variables: a SCXMLSemantics, SCInstance and 
> SCXMLExecutionContext,
> and with a clean separation of concern between them.
> This will then complete a major step for Milestone 0 of the 
> [Roadmap|http://commons.apache.org/proper/commons-scxml/roadmap.html] towards 
> Commons SCXML 2.0.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to