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

Karthick Sankarachary updated ODE-396:
--------------------------------------

    Attachment: atomic-scopes-and-processes.txt

This patch delivers the atomic scopes and processes feature.

> Atomic Scopes And Processes
> ---------------------------
>
>                 Key: ODE-396
>                 URL: https://issues.apache.org/jira/browse/ODE-396
>             Project: ODE
>          Issue Type: New Feature
>          Components: Axis2 Integration, BPEL Compilation/Parsing, BPEL 
> Runtime, JBI Integration
>    Affects Versions: 1.2
>         Environment: platform-independent
>            Reporter: Karthick Sankarachary
>             Fix For: 2.0
>
>         Attachments: atomic-scopes-and-processes.txt
>
>   Original Estimate: 504h
>  Remaining Estimate: 504h
>
> In general, WS-BPEL processes are susceptible to transient errors that stem 
> from faulty service interactions. Most real-world applications make an 
> attempt to recover gracefully from such errors by retrying the piece of work 
> that failed, taking care to roll it back first. If the probability of the 
> error reoccurring is low, then chances are that the application will be able 
> to move forward. To facilitate this type of behavior in WS-BPEL, we introduce 
> the notion of atomicity that (a) guarantees all-or-nothing semantics (b) 
> induces rollback-and-retry on transient errors and (c) induces 
> rollback-and-fault on persistent errors.
> We define atomicity in terms of the "atomic" extension attribute (marked 
> "yes"), which may be applied on the following WS-BPEL elements:
> a) The <process> element, which denotes the top-most unit-of-work, and has an 
> implicit scope of its own. If the process starts with an inbound message 
> activity, then in case of a rollback, the process will block until a new 
> message is received.
> b) The <scope> element, which denotes a fine-grained unit-of-work and 
> provides the context for its enclosed activity. If the scope starts with an 
> inbound message activity, then in case of a rollback, the scope will block 
> until a new message is received.
> c) The <onEvent> element, which denotes a concurrent unit-of-work and is 
> triggered by an inbound message. Note that its atomicity is independent of 
> that of its enclosing scope. Also, while the child within an event handler is 
> always a <scope> activity, making that atomic will not cause the process to 
> block until a new event arrives.
> Note that in order to achieve the all-or-nothing behavior, we must begin, 
> commit or rollback a JTA global transaction when the execution of an atomic 
> element starts, succeeds or fails, respectively. In addition, we implicitly 
> commit the process when it hits a blocking activity, such as a receive. 
> Consequently, we disallow the use of a <receive> activity anywhere inside an 
> atomic activity, except as its first basic activity. A healthy side-effect of 
> this constraint is that it frees us from deadlocks that might otherwise arise 
> due to circular service interactions.
> The retry logic of atomic activities may be configured using the following 
> two configuration properties:
> a) scopes.atomic.retry.count: This number indicates the number of times the 
> atomic activity will be "retried" before it gives up, which defaults to 3. 
> Specifically, it may be executed at most one more time than this count. 
> Strictly speaking, the first attempt at executing the atomic activity is not 
> considered to be a "retry".
> b) scopes.atomic.retry.delay: This number indicates the number of seconds the 
> process will wait before "retrying" a previously failed atomic activity, 
> which defaults to one minute.
> If the atomic activity successfully completes during its first try or one of 
> its subsequent retries, the process will proceed to the following activity, 
> as it normally would have. If the atomic activity repeatedly fails and the 
> allowed number of retries is exceeded (i.e., the error is no longer 
> transient, but rather persistent), it will in turn throw a ode:scopeRollback 
> fault, which may be caught and handled by one of its enclosing scopes (or 
> not).
> Let us now discuss the rollback aspect of an atomic activity. In the event of 
> a failure, before we retry it, we will revert the state of the process back 
> to the point when it was just about to commence execution. As a result, we 
> discard any change to the process state caused by copy operation assignments, 
> message activity variable and correlation initialization, link status 
> evaluations, and so on. Furthermore, one-way messages meant to be sent on 
> success are discarded and two-way messages already sent have the consumed 
> service rolled back. Speaking of two-way messages, we limit the scope of our 
> initial implementation to message exchanges with processes and services that 
> co-exist in the same server (node). Supporting atomicity across external 
> services would require the use of a web service transaction protocol such as 
> WS-AtomicTransaction, but that standard is neither specified nor implemented 
> fully.
> For more details, please refer to 
> http://ode.apache.org/atomic-scopes-extension-for-bpel.html.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to