Ok, now I get your point. But solution # 3 will work *only* if the
"front-end" service exposes coarse grained operations, right? If so,
can't you expose coarse-grained operations in your stateful WS as well?

In point (c) of your conclusions you state that the third approach would
be a bit faster than the first one. However you forget to take the
network delay into account.

Michele

On Mon, 2007-10-22 at 10:38 -0400, Walker, Jeff wrote:
> Well,
> 
> 1st Approach: Stateful Service
> Most applications are finite state machines. People tend to want to put
> a web service on the front of their application, to say they are "SOA
> compliant" or simply because they think a web service will give their
> application some advantage. But because the application itself is
> stateful, most likely a first attempt at the web service will produce a
> stateful service.
> 
> You can definitely create stateful web services. It's just that they are
> very difficult to use. How do you force the client to make the operation
> calls in the expected calling sequence? The client will likely need to
> keep track of the order of the operations it has called. This is
> complicated book-keeping and often the client unable or unwilling to do
> this. Errors become a big issue. What do you do when the 5th call of 7
> expected calls fails? Should you abandon altogether? How do you retry?
> The complexity gets ugly, quickly.
> 
> 
> 2nd Approach: Stateless Service
> Here, the designer begins to see that a stateless service is far easier
> to handle and create. Any operation on the web service interface can be
> called at any time. No sequence of calls is necessary. Each call is
> fully independent of each other. Errors are localized to that called
> operation, and soap faults sent back to the client are localized to that
> operation. It's all very clean. It sounds great, but if my above premise
> is true (that most applications are stateful) then how can you mesh the
> multiple states of the application with a set of operations in a
> stateless service? What if a request comes in and is passed to the
> application and the application cannot service that request because it
> is no longer in a state that can satisfactorily create the right
> response?
> 
> 
> 3rd Approach: Intermediate Composite Service
> My suggestion (and it is just one of many possible design solutions, I'm
> sure) is to create an intermediate web service that communicates to the
> client. This intermediate, composite service offers a stateless
> interface to clients. Each stateless operation on it results in a
> sequence of stateful calls to the actual web service on behalf of the
> client. The composite has some intelligence to decide what to do when
> one of the calls in the middle of the sequence fails. (Usually it
> abandons the whole calling sequence and returns a soap fault to the
> client, but not always. It could conceivably abandon the current
> sequence and start a new one. But that requires memory of the calls and
> data passed in previously, before the error occurred).
> 
> a). The client is saved from knowing anything about the statefulness of
> your application.
> b). Your stateful application usually doesn't need altering. A big plus
> if the code is old and hard to maintain.
> c). The composite service takes approx. as long as the sum of stateful
> calls would take. (Slightly less because the marshaling of data into XML
> and back is less. It is only done on the one initial call from the
> client).
> d). Because the composite service is still a fairly long running service
> (you don't know exactly how long it will take on each of its
> operations), it is best called asynchronously, but that is another
> story.
> e). There are drawbacks. It means another service has to be written,
> tested, maintained and deployed to production.
> 
> The best approach is obviously to simplify and just create a fully
> stateless service, if that will work with your application. But don't be
> surprised if it doesn't fit well.
> -jeff
> 
> 
> 
> 
> 
> 
> -----Original Message-----
> From: Michele Mazzucco [mailto:[EMAIL PROTECTED] 
> Sent: Monday, October 22, 2007 9:41 AM
> To: axis-user@ws.apache.org
> Subject: RE: Best way to realize stateful services architecture
> withmassivedata?
> 
> On Mon, 2007-10-22 at 09:09 -0400, Walker, Jeff wrote:
> > 1. Web services shouldn't be stateful. (Far harder to keep that
> > promise than to recite it). My own current service is stateful, and it
> > breaks the SOA rules we have in place here, causing me no end to
> > issues. Removing the statefulness once it creeps into your project is
> > like getting blood from a stone. Best remedy is to create a composite
> > service that is stateless, and that talks to the client. It also
> > formulates a series of web service calls to your stateful service that
> > does the real work. The composite service then returns the result to
> > the client. BPEL could help here.
> 
> Jeff, can you tell me about a non-trivial stateless web service?
> What is the difference between the first (i.e. the stateful WS talks to
> the client) and the second approach (i.e. the stateful WS is hidden by a
> stateless one)?
> 
> > 
> > 2. Web services are not suitable for large data transfer, at all. I
> > have found past about 20Mb of data per request/response and the
> > service starts to timeout. That is even when RAM is added and
> > processors are upgraded. On one of my previous web services gigs I was
> > asked to build a web service to transfer files. They grew from 20Mb to
> > 75Mb with few troubles except for the occasional timeout, then to 1
> > Gig in size. The remedy was to call the service asynchronously. There
> > are various Microsoft and IBM websites that will explain that mode of
> > calling. (If you need them, I can send you the article urls, I just
> > don't have them handy right now).
> > Remedy is to rethink your architecture. Web services will perform very
> > badly for you on large data sets. (So bad as to be totally unusable).
> > So simply don't use the web services for the data transfer. Try FTP
> > instead, and use the web service to generate the files and pass back
> > the address of where to find the files. It sounds like the granularity
> > of your service is too fine-grained. You need to think in higher terms
> > for the web service operations. 
> 
> What about WS with JMS?
> 
> 
> Michele
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to