OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

sca-assembly message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [sca-assembly] Fwd: Conversational services


Thanks for the reply.

See inline <dab> </dab>

Dave Booz
STSM, BPM and SCA Architecture
Co-Chair OASIS SCA-Policy TC and SCA-J TC
"Distributed objects first, then world hunger"
Poughkeepsie, NY (845)-435-6093 or 8-295-6093
e-mail:booz@us.ibm.com

Inactive hide details for Jim Marino ---12/23/2008 01:24:11 PM---Thanks Dave. I'll try to comment inline inline.Jim Marino ---12/23/2008 01:24:11 PM---Thanks Dave. I'll try to comment inline inline.


From:

Jim Marino <jim.marino@gmail.com>

To:

OASIS Assembly <sca-assembly@lists.oasis-open.org>

Date:

12/23/2008 01:24 PM

Subject:

Re: [sca-assembly] Fwd: Conversational services





Thanks Dave.

I'll try to comment inline inline.

Jim

On Dec 18, 2008, at 1:28 PM, David Booz wrote:
I'd never say never but probably not. However, on the edge of a domain, we try to stay as basic and loosely coupled as possible. For our purposes, conversational interactions involve a tighter degree of coupling and generally shouldn't be done there (this is not to say its inappropriate for other cases). What we typically have are stateless services handling requests coming in from outside the domain via a number of different bindings and being processed by conversational services further down the invocation stack. I would actually be o.k. with that, not just with conversations but with any interaction semantic as long as it is possible to support using at least two bindings. In other words, I don't think we should be limiting SCA capabilities to the lowest common denominator as determined by an interopable protocol such as Web Services. If we do, I believe we will severely limit the utility of SCA for building applications.

I believe this position has precedent in what we are doing with callbacks (e.g. there is no existing, industry accepted "WS-Callback". There was a spec by that name, but it didn't gain traction outside of BEA Workshop). We should take the same approach with conversations.

However, I do see your point about treating conversations as an interface semantic. I sent a proposal to the Java mailing list where we would define conversations as an intent as opposed to an interface semantic. Does that sound like a valuable approach?
<dab> There is already an intent for conversational semantics in the interface. Using an intent makes it an interface semantic which is what I'd like to get rid of. </dab>
This would potentially allow for bindings to "op-out" of supporting conversational interactions.
<dab> There is no way for bindings to opt-out, but I have just introduced something in the policy TC that would enable the opt out feature you're looking for. </dab>
It would also maintain backward compatibility with the existing SCA conversational mechanisms, causing minimal disruption for users which I feel is very important. Most of our components are Java (JVM)-based. However, our applications are unfortunately not greenfield (yes, it would be nice if they were). For example, they must interact with clients and services external to domain that use a variety of communications protocols. We found the extensibility capabilities of SCA very useful in this respect as we were able to do such things as write a streaming FTP binding extension to our runtime.
<dab> Ok, so interop on the edges of the Domain is not what I see as integration, that's binding extensibility and it's easy with SCA. SCA is at it's best when everything is inside the Domain, and to do this you have to integrate all kinds of application implementation technology together. The services that are outside the Domain, why are they outside? If they were inside you'd see even more power from SCA. You don't have to answer, that was a rhetorical question. </dab>

Based on my experience, which may be different from yours, this predominantly Java/JVM-bent is likely to be a very common enterprise architecture, particularly given the vendors backing SCA.
<dab> You are correct in that this is where we differ greatly. The most common SOA deployments we see include only a smattering of Java as necessary to integrate with existing java services. </dab>
I am concerned with integration too but it may be slightly different than what you are focusing on. Our applications must interface with external banking systems (it's inter-bank processing) that use a combination of interoperable (WS-*) and proprietary protocols. SCA has allowed us to significantly reduce the complexity of our systems that were previously using a combination of Spring and an ESB. In our case SCA has provided value as an integration technology in the following ways:

1. As a simplified programming model for connecting distributed subsystems. SCA has provided us with a powerful asynchronous and conversational model that works well with other technologies we use (e.g. JPA), modularity, protocol abstraction, and policy reuse. In these cases, SCA controls both sides of the wire (literally).

2. As a technology for connecting to external systems and exposing services to external clients. The real benefit here is policy reuse and to some extent protocol abstraction. The benefits around protocol abstraction are a "nice-to-have" but not essential since protocols used for external communication rarely change. By external systems, I mean either a client or a provider not hosted in the same SCA domain.

From our perspective, SCA offers clear benefits over existing technologies in the first scenario. If SCA was reduced to just handling scenario #2 we probably wouldn't be much interested in it and would look to an alternative.
<dab> You probably aren't going to like this, and I don't mean it in a nasty or derogatory way, but it looks like what you've implemented is what I would call a giant mediation. It's a system that proxies and glues other stuff together. You're right that we have different views on this. Since you aren't meddling in the existing systems, maybe you can't in this case, you're integration job is more narrowly defined. That's fine, and SCA has to be able to do this too. </dab>
This is where I think out integration scenarios are different. We are using conversations and callbacks in the *processing* of requests coming into the domain and for internal domain operations, not as part of the contract for the service at the edge of the domain. More specifically, the "edge" service receives requests and delegates to a number of other services for processing. Once case we are using this is in processing very large documents (> 150MB) coming in using MTOM and FTP.<dab> You have a requirement for a complex programming FW that you want in Java. There's a bunch of them. SCA doesn't have to imitate them, that's not it's value proposition. </dab>

We are using SCA to create applications that are managed by a common infrastructure and must integrate with various external systems. We aren't using it as a way to link together loosely coupled but otherwise completely autonomous systems. If we were doing the latter, we would probably just use Web Services (the JAX-WS and .NET programming models are easy enough to use).
<dab> This is where we differ also. JAX-WS and .Net are horrendously complex for most people and I don't want that kind of complexity in SCA. As you said, if there is a need for a complex FW because you're doing complex things, then write in JEE or .Net or whatever and wrap that stuff up in SCA components and deploy them into a Domain. SCA Java is NOT the only tool in the toolbox. </dab>

I am interested in understanding more about what you have in mind with respect to activity sessions/sets. I do have some preconceptions. First, I have to disagree with you on activity sessions/sets being more broadly understood than conversations. Although CORBA had the former, the conversational model we have corresponds to analogous features in the JAX-WS RI and .NET. I that context, I would be in favor of looking into interoperating with those stacks. In the future, richer semantics such as callbacks, conversations, or activity sessions may become more prevalent at the edge of the domain. However, in our case, I think it is going to be easier for us to convince our business partners to use JAX-WS or .NET as opposed to a proprietary activity session model.
<dab> I'm thinking about a true shared context model where there is a central coordinator that is responsible for managing the lifecycle of the shared context and parties interested in the context can join/register in the context, once they get the key/token that represents the context. The key/token to the context is something that has to be passed around in app level interactions under the covers (this is the magic) and but is also exchanged between entities in the system in protocol level messages as part of establishing registrations of interest, etc. Applications express interest in the context by indicating that they will (a) join any context that is propogated to them, (b) always start a new context, etc. Contexts can be nested. Transactions can be nested inside them. Applications can set state into the shared context, which can be made available to all other interested parties. This is quite broad. </dab>
I'm one of the strongest proponents of getting rid of as many APIs as is feasible. The conversation and callback simplification proposal I sent to the Java TC list substantially reduces the number of APIs. In the case of the GUID, it is obtained entirely transparently from the client application. A few months back, I sent detailed sequence diagrams to the Java TC mailing list on how this can be done that I could repost if people are interested.
<dab> ok, so when you said the client requests a GUID, you meant the client runtime requests....</dab>
In my reading of the spec it is not. The reference parameter is opaque to the client. <dab> That's what I said </dab> The parameter would be obtained from the "issuer of the endpoint reference" - in this case the domain. This would require either:

1. A handshake - <dab> right, I call this a protocol flow. I don't want these unless we're doing a full blown shared context. </dab>
2. Piggy-backing the reference parameter on either the return of a synchronous response or a callback <dab> can't cover all the lifecycle notifications this way. </dab>

And would require that subsequent invocations not be delivered until the parameter is received. The sequence diagrams I drew up a while back demonstrate how this can be achieved. If the client and provider were both SCA components, this process would be transparent. The only time an extra step may be apparent is if a service provider had an operation that was marked to begin the conversation that was non-blocking and was called from a client over WS-*. I don't think that is too onerous given synchronous calls are much more common and they would be handled transparently.
Aren't we already doing this for callbacks?
<dab> We don't do protocols in SCA. We aren't standardizing the callback over WS semantic.We have an example of one way that a stateless callback could be done over WS. There is no requirement that any vendors do it this way. </dab>
<dab> If you're suggesting that conversations as we have them today could be an optional compliance point then I would probably agree to that.... </dab>
If we restrict any remotable communication in SCA to be bound by what is provided in standardized protocols, we will effectively limit SCA to what is achievable using WS-*. That will preclude a range of very important features, including callbacks, that are essential to enterprise development.

One area where we probably disagree is the issue of having to define how communications work for each binding spec. While it would be a nice to be able to define one communications model that works across all bindings for a majority of enterprise use cases, I don't believe that is realistic. In the Java TC, we have already seen how transacted messaging imposes different constraints over callbacks than WS-*. Changing conversational to an intent from a service attribute helps to address this issue. <dab> I have no idea what you're talking about. Conversation is already an intent, and I have no recollection of the tran problem you're talking about. In the policy spec, trans do have support for transacted messaging vs sync trans....but that's because of the ACID requirement of the transactions. </dab>
Conversation handles can be stored in a stateful proxy if the implementation is stateless. For multithreaded implementations, the handle can be stored as part of the context associated with the request in a stack-like form that is guaranteed to be visible to only one thread at a time. This will probably require verbal explanation, which I'm happy to do.
Conversations are shared context, however, they are a shared context between a client and a provider. I suspect we may have different understandings of what shared context means. Before I comment further, could you roughly sketch out what you mean by shared context and what it would look like to use in a Java (or other) component implementation?<dab> see above </dab>

I also believe we have enough time to get this right before February, particularly given these features have precedents in other programming models. IMO, these are essential features and I am willing to contribute as much time as necessary to get them right.

Jim



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]