It's time now to explain to the reader what I mean using the term "Lifetime Management".
The basic idea is handling the timeouts as they were previously defined before (see Lifetime Management with BPEL (Part I) with BPEL Peek
example).
Standard BPEL allows us to handle duration or deadline timeouts by defining how much time should elapse before the timeout event will occur or by specifying the deadline date and time for the deadline (onAlarm
's for
and until
attributes accordingly).
The new way I'd like to declare the process timeout expression is so that onAlarm
can handle an automatic duration prolongation in the case when some of the duration expression conditions were changed. It's important to notice that you can not just change onAlarm
's expression via, say, Assign
activity (at least I couldn't found the way how to do that, so please inform me if you know the way).
Lets take an example of how to use this functionality.
Imagine a web shop that keeps a personal shopping cart for each of its customers.
A user may surf through the web shop, put some products in the cart and make an order.
One of usecases for this web shop may be the following:
- Customer wants to buy everything he placed in the cart (the good one :). In this case the system calculates an order and starts the process of billing and delivery of the products to the user;
- Customer leaves the webshop page (doesn't matter how - by navigating to another URL or just closes the browser window).
On the other hand if we left the items in the cart forever then no one other would be able to buy the stuff that is in the other user's cart since it's already reserved.
So we need to specify the cart lifetime somehow so that all the items were released and the cart were cleared after the specified time.
The typical solution for a web shop here nowadays is using HTTP session but as we are talking about Web Services the HTTP session is not suitable for that. So we may use BPEL that can give us the functionality we need at the higher level of abstraction.
Why not just use BPEL
onAlarm
duration (the for
attribute)? Since, as I already said above, it is not possible to change the duration expression at runtime while this is required to set the new cart lifetime after each cart update (say after adding new item to cart).In the next part we'll see how to implement this example using BPEL and discuss some key aspects that you should pay attention for while using BPEL here...