[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [wsbpel-implement] Fault tolerance considerations
Mike,
Interesting scenario. I have run into similar problems using HTTP in =
a product I worked on a while back. Our solution was to periodically =
send a "100 Continue" response to the client, thus keeping the =
connection alive, and the client happily waiting. It was an okay =
solution for the particular product, but in general it encourages a lot =
of idle network resources to be tied up in open connections. It also =
puts a crimp in the scaling story.
Doesn't SOAP 1.1 talk about "natural" bindings for the =
request/response MEP, but does not mandate that request/response be =
truly synchronous? (Just a vague recollection; I can't seem to be able =
to raise the w3c site right now...).
I believe WS-Routing allows specification of a return path, and some =
extra context information, so that one could easily correlate an =
asynchronous response to the originator of the request. WS-Reliability =
and ebXML MS have mechanisms for such message correlation as well. As =
long as BPEL is built on the abstract WSDL message model, it can largely =
ignore binding-specific issues. Of course, interoperability demands that =
we at least consider them! If WS-I BP 1.0 is considered the best bet for =
interoperability for BPEL implementations, then we should give such =
HTTP-related issues extra attention.
Cheers,
-Ron=20
Marin, Mike wrote:
<!--[if !supportEmptyParas]--> <!--[endif]-->
Well, I have the same problem, and you do not need a crash to do that. =
The problem is that BPEL prescribe receive-reply as implementing a =
synchronous WSDL operation, when in practice you cannot enforce it. You =
just need add a wait for a week between the receive and the reply, and =
I'm sure you do not want to keep the connection open for that long.
<!--[if !supportEmptyParas]--> <!--[endif]-->
I opened issue 17 (Asynchronous operations) a while back, but have not =
have time to pursue it. IMHO the receive / reply pair does requires an =
asynchronous WSDL binding (one that does not require the connection to =
remain open). In theory, you could define such a binding, but nobody =
will be able to use it because first is not WS-I compliant, and second =
does not fit most WSDL implementation frameworks.
<!--[if !supportEmptyParas]--> <!--[endif]-->
It may be that WS-Routing provides a solution to this issue by allowing =
a reverse message path for the reply. But, I have not had time to study =
this alternative.
<!--[if !supportEmptyParas]--> <!--[endif]-->
In any case, I'm also interested on see (read) how others are tackling =
this implementation issue....
<!--[if !supportEmptyParas]--> <!--[endif]-->
--
Regards,
Mike Marin
<!--[if !supportEmptyParas]--> <!--[endif]-->
-----Original Message-----
From: Ron Ten-Hove [ mailto:Ronald.Ten-Hove@Sun.COM]
Sent: Tuesday, October 14, 2003 4:25 PM
To: bpel implementation
Subject: [wsbpel-implement] Fault tolerance considerations
<!--[if !supportEmptyParas]--> <!--[endif]-->
Folks,
I was recently given an interesting question from one of my =
development teams, and I thought it would be of interest to this group, =
since it touches on universal implementation issues.
The question is based on the following scenario: given a process =
something like this:
<sequence>
<receive name=3D"rcv" ... />
<assign name=3D"as1" ... />
<invoke name=3D"inv" ... />
<assign name=3D"as2" ... />
<reply name=3D"rep" ... />
</sequence>
=20
The <receive> and <reply> activities are part of a request-response MEP, =
bound to SOAP, so that the request-response is synchronous (uses the =
same connection for request and response).
Simple enough. But suppose that during execution of an instance of =
the above process, somewhere after the <receive> activity is completed =
but before the <reply> activity is done, the BPEL engine suffers a =
crash. Since we have the full state persistence, recovery is simple =
enough. We can therefore finish creating the reply, but this is rather =
useless, since the client connection is lost.=20
So what is the right thing to do under these circumstances? Should =
the engine, upon recovery in this situation, fault the running activity? =
Should it continue to the reply activity, and presumably fault because =
the connection is closed?
What of the client program? It sees that the HTTP connection closed =
while awaiting a response to the request. It might reasonably resend the =
request (HTTP being what it is). If this is the expected behaviour, =
might it not be appropriate for the BPEL engine offering the service our =
client is using to, upon recover, "roll back" or otherwise compensate =
the completed activities in the sequence (not shown in the process =
above), to the point of the <receive> activity, and restart the receive?
I know that some of these complexities are the result of using =
unreliable messaging, and you get what you pay for, right? On the other =
hand, this illustrates some interesting states that a BPEL =
implementation might have to deal with, which aren't discussed in the =
specification. At the very least, we have some unspecified faults to =
deal with -- presumably implementation specific.=20
So what are other implementers doing in this case? Generating a =
fault of one sort of another, or performing more heroic efforts to =
recover from the crash? I'm just interested in general approaches, since =
we don't want to require NDAs here! My development team is busy trying =
to create some recovery mechanisms for the scenario above, based on some =
sort of client/server interaction (client retries being the most likely =
sort). These guys are pretty clever, so I wouldn't doubt that they could =
invent something that, in many cases, actually recover from the crash =
scenario above.=20
Thoughts? Is anyone else concerned about crash recovery, perhaps =
with different scenarios?
-Ron
------_=_NextPart_001_01C392BD.73D321F6
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Diso-8859-1">
<TITLE></TITLE>
<META content=3D"MSHTML 6.00.2800.1264" name=3DGENERATOR></HEAD>
<BODY text=3D#000000 bgColor=3D#ffffff>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial=20
size=3D2>Ron,</FONT></SPAN></DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial=20
size=3D2></FONT></SPAN> </DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial size=3D2>From =
the point of=20
view of both SOAP 1.1 and WSDL 1.1 the question of whether we are =
dealing with a=20
synchronous request/response or an asynchronous one is up to the=20
binding.</FONT></SPAN></DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial=20
size=3D2></FONT></SPAN> </DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial size=3D2>From =
SOAP 1.1, sec.=20
2:</FONT></SPAN></DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial=20
size=3D2></FONT></SPAN> </DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial size=3D2>"SOAP=20
implementations can be optimized to exploit the unique characteristics =
of=20
particular<BR>network systems. For example, the HTTP binding described =
in=20
section 6 provides for SOAP<BR>response messages to be delivered as HTTP =
responses, using the same connection as the<BR>inbound=20
request".</FONT></SPAN></DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial=20
size=3D2></FONT></SPAN> </DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial size=3D2>As you =
mention=20
below, a synchronous binding to HTTP is just a way to "optimize" the=20
request/response MEP, and in principle other non-synchronous bindings =
are=20
possible.</FONT></SPAN></DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial=20
size=3D2></FONT></SPAN> </DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial size=3D2>Things =
are similar=20
from the point of view of WSDL 1.1. Sec. 2.4.2, Request-response =
Operation,=20
says:</FONT></SPAN></DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial=20
size=3D2></FONT></SPAN> </DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial size=3D2>"Note =
that a=20
request-response operation is an abstract notion; a particular binding =
must be=20
consulted to<BR>determine how the messages are actually sent: within a =
single=20
communication (such as a HTTP<BR>request/response), or as two =
independent=20
communications (such as two HTTP requests)".</FONT></SPAN></DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial=20
size=3D2></FONT></SPAN> </DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial size=3D2>So, if =
it was just a=20
matter of looking at SOAP and WSDL, I would say that BPEL should or =
should not=20
generate a fault upon resuming based on the particular binding=20
used.</FONT></SPAN></DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial=20
size=3D2></FONT></SPAN> </DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial size=3D2>But =
BPEL seems to=20
take a different direction when it comes to the receive/reply =
pattern, in=20
the sense that it seems to strongly imply that a receive/reply is only=20
acceptable with a synchronous binding, and that receive/invoke, combined =
with=20
call back interfaces, should instead be used with asynchronous =
bindings. The discussion in BPEL 1.1, page 23, second paragraph, seems =
to be=20
rather clear in this respect.</FONT></SPAN></DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial=20
size=3D2></FONT></SPAN> </DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial size=3D2>I =
think BPEL takes=20
this direction because of the desire of distinguishing =
synchronous=20
connections from asynchronous ones at the language level, while at the =
same time=20
restraining from specifying any bindings. I guess if WSDL allowed to =
distinguish=20
synchronous/asynchronous BPEL could have used that, but WSDL 1.1 does =
not and=20
BPEL uses receive/reply and receive/invoke, plus the call back=20
interfaces, to distinguish the two cases.</FONT></SPAN></DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial=20
size=3D2></FONT></SPAN> </DIV>
<DIV><SPAN class=3D539531401-15102003><FONT face=3DArial=20
size=3D2>Ugo</FONT></SPAN></DIV>
<DIV><SPAN class=3D539531401-15102003></SPAN><SPAN=20
class=3D539531401-15102003></SPAN><FONT face=3DTahoma><FONT =
size=3D2><SPAN=20
class=3D539531401-15102003><FONT=20
face=3DArial> </FONT></SPAN></FONT></FONT></DIV>
<DIV><FONT face=3DTahoma><FONT size=3D2><SPAN=20
class=3D539531401-15102003> </SPAN>-----Original =
Message-----<BR><B>From:</B>=20
Ron Ten-Hove [mailto:Ronald.Ten-Hove@Sun.COM]<BR><B>Sent:</B> Tuesday, =
October=20
14, 2003 5:48 PM<BR><B>To:</B> Marin, Mike<BR><B>Cc:</B> bpel=20
implementation<BR><B>Subject:</B> Re: [wsbpel-implement] Fault tolerance =
considerations<BR><BR></DIV></FONT></FONT>
<BLOCKQUOTE dir=3Dltr=20
style=3D"PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px =
solid; MARGIN-RIGHT: 0px">Mike,<BR><BR> =20
Interesting scenario. I have run into similar problems using HTTP in a =
product=20
I worked on a while back. Our solution was to periodically send a "100 =
Continue" response to the client, thus keeping the connection alive, =
and the=20
client happily waiting. It was an okay solution for the particular =
product,=20
but in general it encourages a lot of idle network resources to be =
tied up in=20
open connections. It also puts a crimp in the scaling=20
story.<BR><BR> Doesn't SOAP 1.1 talk about "natural" =
bindings for the request/response MEP, but does <B>not</B> mandate =
that=20
request/response be truly synchronous? (Just a vague recollection; I =
can't=20
seem to be able to raise the w3c site right =
now...).<BR><BR> =20
I believe WS-Routing allows specification of a return path, and some =
extra=20
context information, so that one could easily correlate an =
asynchronous=20
response to the originator of the request. WS-Reliability and ebXML MS =
have=20
mechanisms for such message correlation as well. As long as BPEL is =
built on=20
the abstract WSDL message model, it can largely ignore =
binding-specific=20
issues. Of course, interoperability demands that we at least consider =
them! If=20
WS-I BP 1.0 is considered the best bet for interoperability for BPEL=20
implementations, then we should give such HTTP-related issues extra=20
attention.<BR><BR>Cheers,<BR>-Ron <BR><BR>Marin, Mike wrote:<BR>
<BLOCKQUOTE=20
=
cite=3Dmid69FB2CA668C6D841BE0326C13071C69F0E1B29@hq-ex2kpo1.filenet.fn.co=
m=20
type=3D"cite">
<META content=3DWord.Document name=3DProgId>
<META content=3D"Microsoft Word 9" name=3DGenerator>
<META content=3D"Microsoft Word 9" name=3DOriginator><LINK=20
href=3D"cid:[email protected]" rel=3DFile-List><!--[if =
gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:Zoom>0</w:Zoom>
<w:DocumentKind>DocumentEmail</w:DocumentKind>
<w:EnvelopeVis/>
</w:WordDocument>
</xml><![endif]-->
<STYLE>@font-face {
font-family: Tahoma;
}
@page Section1 {size: 8.5in 11.0in; margin: 1.0in 1.25in 1.0in 1.25in; =
mso-header-margin: .5in; mso-footer-margin: .5in; mso-paper-source: 0; }
P.MsoNormal {
FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; COLOR: black; FONT-FAMILY: "Times =
New Roman"; mso-style-parent: ""; mso-pagination: widow-orphan; =
mso-fareast-font-family: "Times New Roman"
}
LI.MsoNormal {
FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; COLOR: black; FONT-FAMILY: "Times =
New Roman"; mso-style-parent: ""; mso-pagination: widow-orphan; =
mso-fareast-font-family: "Times New Roman"
}
DIV.MsoNormal {
FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; COLOR: black; FONT-FAMILY: "Times =
New Roman"; mso-style-parent: ""; mso-pagination: widow-orphan; =
mso-fareast-font-family: "Times New Roman"
}
P.MsoAutoSig {
FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; COLOR: black; FONT-FAMILY: "Times =
New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: =
"Times New Roman"
}
LI.MsoAutoSig {
FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; COLOR: black; FONT-FAMILY: "Times =
New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: =
"Times New Roman"
}
DIV.MsoAutoSig {
FONT-SIZE: 12pt; MARGIN: 0in 0in 0pt; COLOR: black; FONT-FAMILY: "Times =
New Roman"; mso-pagination: widow-orphan; mso-fareast-font-family: =
"Times New Roman"
}
PRE {
FONT-SIZE: 10pt; MARGIN: 0in 0in 0pt; COLOR: black; FONT-FAMILY: =
"Courier New"; mso-pagination: widow-orphan; mso-fareast-font-family: =
"Courier New"
}
SPAN.EmailStyle16 {
COLOR: navy; mso-style-type: personal-reply; mso-ansi-font-size: =
10.0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; =
mso-bidi-font-family: Arial
}
DIV.Section1 {
page: Section1
}
</STYLE>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1027"/>
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1"/>
</o:shapelayout></xml><![endif]-->
<DIV class=3DSection1>
<P class=3DMsoNormal><SPAN class=3DEmailStyle16><FONT face=3DArial =
color=3Dnavy=20
size=3D2><SPAN style=3D"FONT-SIZE: 10pt; FONT-FAMILY: =
Arial"><!--[if=20
=
!supportEmptyParas]--> <!--[endif]--><O:P></O:P></SPAN></FO=
NT></SPAN></P>
<P class=3DMsoNormal><SPAN class=3DEmailStyle16><FONT face=3DArial =
color=3Dnavy=20
size=3D2><SPAN style=3D"FONT-SIZE: 10pt; FONT-FAMILY: Arial">Well, I =
have the=20
same problem, and you do not need a crash to do that. The problem is =
that=20
BPEL prescribe receive-reply as implementing a synchronous WSDL =
operation,=20
when in practice you cannot enforce it. You just need add a wait for =
a week=20
between the receive and the reply, and I’m sure you do not =
want to keep the=20
connection open for that long.<O:P></O:P></SPAN></FONT></SPAN></P>
<P class=3DMsoNormal><SPAN class=3DEmailStyle16><FONT face=3DArial =
color=3Dnavy=20
size=3D2><SPAN style=3D"FONT-SIZE: 10pt; FONT-FAMILY: =
Arial"><!--[if=20
=
!supportEmptyParas]--> <!--[endif]--><O:P></O:P></SPAN></FO=
NT></SPAN></P>
<P class=3DMsoNormal><SPAN class=3DEmailStyle16><FONT face=3DArial =
color=3Dnavy=20
size=3D2><SPAN style=3D"FONT-SIZE: 10pt; FONT-FAMILY: Arial">I =
opened issue 17=20
(Asynchronous operations) a while back, but have not have time to =
pursue it.=20
IMHO the receive / reply pair does requires an asynchronous WSDL =
binding=20
(one that does not require the connection to remain open). In =
theory, you=20
could define such a binding, but nobody will be able to use it =
because first=20
is not WS-I compliant, and second does not fit most WSDL =
implementation=20
frameworks.<O:P></O:P></SPAN></FONT></SPAN></P>
<P class=3DMsoNormal><SPAN class=3DEmailStyle16><FONT face=3DArial =
color=3Dnavy=20
size=3D2><SPAN style=3D"FONT-SIZE: 10pt; FONT-FAMILY: =
Arial"><!--[if=20
=
!supportEmptyParas]--> <!--[endif]--><O:P></O:P></SPAN></FO=
NT></SPAN></P>
<P class=3DMsoNormal><SPAN class=3DEmailStyle16><FONT face=3DArial =
color=3Dnavy=20
size=3D2><SPAN style=3D"FONT-SIZE: 10pt; FONT-FAMILY: Arial">It may =
be that=20
WS-Routing provides a solution to this issue by allowing a reverse =
message=20
path for the reply. But, I have not had time to study this=20
alternative.<O:P></O:P></SPAN></FONT></SPAN></P>
<P class=3DMsoNormal><SPAN class=3DEmailStyle16><FONT face=3DArial =
color=3Dnavy=20
size=3D2><SPAN style=3D"FONT-SIZE: 10pt; FONT-FAMILY: =
Arial"><!--[if=20
=
!supportEmptyParas]--> <!--[endif]--><O:P></O:P></SPAN></FO=
NT></SPAN></P>
<P class=3DMsoNormal><SPAN class=3DEmailStyle16><FONT face=3DArial =
color=3Dnavy=20
size=3D2><SPAN style=3D"FONT-SIZE: 10pt; FONT-FAMILY: Arial">In any =
case, I’m=20
also interested on see (read) how others are tackling this =
implementation=20
issue….<O:P></O:P></SPAN></FONT></SPAN></P>
<P class=3DMsoNormal><SPAN class=3DEmailStyle16><FONT face=3DArial =
color=3Dnavy=20
size=3D2><SPAN style=3D"FONT-SIZE: 10pt; FONT-FAMILY: =
Arial"><!--[if=20
=
!supportEmptyParas]--> <!--[endif]--><O:P></O:P></SPAN></FO=
NT></SPAN></P>
<P class=3DMsoNormal><!--[if supportFields]><span=20
class=3DEmailStyle16><font size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:
10.0pt;mso-bidi-font-size:12.0pt;font-family:Arial'><span =
style=3D'mso-element:
field-begin'></span><span style=3D"mso-spacerun: =
yes"> </span>AUTOTEXTLIST=20
\s "E-mail Signature" <span =
style=3D'mso-element:field-separator'></span></span></font></span><![endi=
f]--><FONT=20
face=3D"Courier New" size=3D2><SPAN=20
style=3D"FONT-SIZE: 10pt; FONT-FAMILY: 'Courier =
New'">--</SPAN></FONT><FONT=20
face=3D"Courier New"><SPAN=20
style=3D"FONT-FAMILY: 'Courier New'"><O:P></O:P></SPAN></FONT></P>
<P class=3DMsoNormal><FONT face=3D"Courier New" color=3Dblack =
size=3D3><SPAN=20
style=3D"FONT-SIZE: 12pt; FONT-FAMILY: 'Courier =
New'">Regards,</SPAN></FONT><FONT=20
face=3D"Courier New" size=3D2><SPAN=20
style=3D"FONT-SIZE: 10pt; FONT-FAMILY: 'Courier =
New'"><O:P></O:P></SPAN></FONT></P>
<P class=3DMsoNormal><FONT face=3D"Courier New" color=3Dblack =
size=3D2><SPAN=20
style=3D"FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Mike=20
Marin<O:P></O:P></SPAN></FONT></P>
<P class=3DMsoNormal><!--[if supportFields]><span =
class=3DEmailStyle16><font=20
size=3D2 color=3Dnavy face=3DArial><span =
style=3D'font-size:10.0pt;mso-bidi-font-size:
12.0pt;font-family:Arial'><span =
style=3D'mso-element:field-end'></span></span></font></span><![endif]--><=
SPAN=20
class=3DEmailStyle16><FONT face=3DArial color=3Dnavy size=3D2><SPAN=20
style=3D"FONT-SIZE: 10pt; FONT-FAMILY: Arial"><!--[if=20
=
!supportEmptyParas]--> <!--[endif]--><O:P></O:P></SPAN></FO=
NT></SPAN></P>
<P class=3DMsoNormal style=3D"MARGIN-LEFT: 0.5in"><FONT =
face=3DTahoma color=3Dblack=20
size=3D2><SPAN style=3D"FONT-SIZE: 10pt; FONT-FAMILY: =
Tahoma">-----Original=20
Message-----<BR><B><SPAN style=3D"FONT-WEIGHT: =
bold">From:</SPAN></B> Ron=20
Ten-Hove [<A class=3Dmoz-txt-link-freetext=20
=
href=3D"mailto:Ronald.Ten-Hove@Sun.COM">mailto:Ronald.Ten-Hove@Sun.COM</A=
>]<BR><B><SPAN=20
style=3D"FONT-WEIGHT: bold">Sent:</SPAN></B> Tuesday, October 14, =
2003 4:25=20
PM<BR><B><SPAN style=3D"FONT-WEIGHT: bold">To:</SPAN></B> bpel=20
implementation<BR><B><SPAN style=3D"FONT-WEIGHT: =
bold">Subject:</SPAN></B>=20
[wsbpel-implement] Fault tolerance considerations</SPAN></FONT></P>
<P class=3DMsoNormal style=3D"MARGIN-LEFT: 0.5in"><FONT =
face=3D"Times New Roman"=20
color=3Dblack size=3D3><SPAN style=3D"FONT-SIZE: 12pt"><!--[if=20
=
!supportEmptyParas]--> <!--[endif]--><O:P></O:P></SPAN></FO=
NT></P>
<P class=3DMsoNormal style=3D"MARGIN-LEFT: 0.5in"><FONT =
face=3D"Times New Roman"=20
color=3Dblack size=3D3><SPAN=20
style=3D"FONT-SIZE: 12pt">Folks,<BR><BR> I was =
recently=20
given an interesting question from one of my development teams, and =
I=20
thought it would be of interest to this group, since it touches on =
universal=20
implementation issues.<BR><BR> The question is =
based on=20
the following scenario: given a process something like=20
this:<O:P></O:P></SPAN></FONT></P><PRE style=3D"MARGIN-BOTTOM: 0pt; =
MARGIN-LEFT: 1in; MARGIN-RIGHT: 0.5in"><FONT face=3D"Courier New" =
color=3Dblack size=3D2><SPAN style=3D"FONT-SIZE: =
10pt"><sequence><O:P></O:P></SPAN></FONT></PRE><PRE =
style=3D"MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 1in; MARGIN-RIGHT: =
0.5in"><FONT face=3D"Courier New" color=3Dblack size=3D2><SPAN =
style=3D"FONT-SIZE: 10pt"><SPAN> </SPAN><receive name=3D"rcv" =
... /><O:P></O:P></SPAN></FONT></PRE><PRE style=3D"MARGIN-BOTTOM: =
0pt; MARGIN-LEFT: 1in; MARGIN-RIGHT: 0.5in"><FONT face=3D"Courier New" =
color=3Dblack size=3D2><SPAN style=3D"FONT-SIZE: 10pt"><SPAN> =
</SPAN><assign<SPAN> </SPAN>name=3D"as1" ... =
/><O:P></O:P></SPAN></FONT></PRE><PRE style=3D"MARGIN-BOTTOM: 0pt; =
MARGIN-LEFT: 1in; MARGIN-RIGHT: 0.5in"><FONT face=3D"Courier New" =
color=3Dblack size=3D2><SPAN style=3D"FONT-SIZE: 10pt"><SPAN> =
</SPAN><invoke<SPAN> </SPAN>name=3D"inv" ... =
/><O:P></O:P></SPAN></FONT></PRE><PRE style=3D"MARGIN-BOTTOM: 0pt; =
MARGIN-LEFT: 1in; MARGIN-RIGHT: 0.5in"><FONT face=3D"Courier New" =
color=3Dblack size=3D2><SPAN style=3D"FONT-SIZE: 10pt"><SPAN> =
</SPAN><assign<SPAN> </SPAN>name=3D"as2" ... =
/><O:P></O:P></SPAN></FONT></PRE><PRE style=3D"MARGIN-BOTTOM: 0pt; =
MARGIN-LEFT: 1in; MARGIN-RIGHT: 0.5in"><FONT face=3D"Courier New" =
color=3Dblack size=3D2><SPAN style=3D"FONT-SIZE: 10pt"><SPAN> =
</SPAN><reply<SPAN> </SPAN>name=3D"rep" ... =
/><O:P></O:P></SPAN></FONT></PRE><PRE style=3D"MARGIN-BOTTOM: 0pt; =
MARGIN-LEFT: 1in; MARGIN-RIGHT: 0.5in"><FONT face=3D"Courier New" =
color=3Dblack size=3D2><SPAN style=3D"FONT-SIZE: =
10pt"></sequence><O:P></O:P></SPAN></FONT></PRE><PRE =
style=3D"MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 1in; MARGIN-RIGHT: =
0.5in"><FONT face=3D"Courier New" color=3Dblack size=3D2><SPAN =
style=3D"FONT-SIZE: 10pt"><SPAN> =
</SPAN><O:P></O:P></SPAN></FONT></PRE>
<P class=3DMsoNormal style=3D"MARGIN-LEFT: 0.5in"><FONT =
face=3D"Times New Roman"=20
color=3Dblack size=3D3><SPAN style=3D"FONT-SIZE: 12pt">The =
<receive> and=20
<reply> activities are part of a request-response MEP, bound =
to SOAP,=20
so that the request-response is synchronous (uses the same =
connection for=20
request and response).<BR><BR> Simple enough. But =
suppose=20
that during execution of an instance of the above process, somewhere =
after=20
the <receive> activity is completed but before the =
<reply>=20
activity is done, the BPEL engine suffers a crash. Since we =
have the=20
full state persistence, recovery is simple enough. We can therefore =
finish=20
creating the reply, but this is rather useless, since the client =
connection=20
is lost. <BR><BR> So what is the right thing to do =
under=20
these circumstances? Should the engine, upon recovery in this =
situation,=20
fault the running activity? Should it continue to the reply =
activity, and=20
presumably fault because the connection is =
closed?<BR><BR> =20
What of the client program? It sees that the HTTP connection closed =
while=20
awaiting a response to the request. It might reasonably resend the =
request=20
(HTTP being what it is). If this is the expected behaviour, might it =
not be=20
appropriate for the BPEL engine offering the service our client is =
using to,=20
upon recover, "roll back" or otherwise compensate the completed =
activities=20
in the sequence (not shown in the process above), to the point of =
the=20
<receive> activity, and restart the =
receive?<BR><BR> =20
I know that some of these complexities are the result of using =
unreliable=20
messaging, and you get what you pay for, right? On the other hand, =
this=20
illustrates some interesting states that a BPEL implementation might =
have to=20
deal with, which aren't discussed in the specification. At the very =
least,=20
we have some unspecified faults to deal with -- presumably =
implementation=20
specific. <BR><BR> So what are other implementers =
doing in=20
this case? Generating a fault of one sort of another, or performing =
more=20
heroic efforts to recover from the crash? I'm just interested in =
general=20
approaches, since we don't want to require NDAs here! My development =
team is=20
busy trying to create some recovery mechanisms for the scenario =
above, based=20
on some sort of client/server interaction (client retries being the =
most=20
likely sort). These guys are pretty clever, so I wouldn't doubt that =
they=20
could invent something that, in many cases, actually recover from =
the crash=20
scenario above. <BR><BR> Thoughts? Is anyone else=20
concerned about crash recovery, perhaps with different=20
=
scenarios?<BR><BR>-Ron<O:P></O:P></SPAN></FONT></P></DIV></BLOCKQUOTE></B=
LOCKQUOTE></BODY></HTML>
------_=_NextPart_001_01C392BD.73D321F6--
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]