>This is purely a terminology issue. IMO, the intent of "service" in >the SOA sense is that it provides coarse-grained business capability. >Data transformation is not a business capability, it is a technical >activity.
After talking to many people in OASIS SOA RM and RA, I believe that "service" in the SOA sense" is not necessary a business service. What is wrong, even from a business perspective, with creation of new/another view on the Client Business Data model (provided by a data transformation service)? This view has a well reasonable meaning for the business - I'm talking about single Client Business Data model represented as a different sub-views to different business interfaces/channels. - Michael ----- Original Message ---- From: Rob Eamon <[EMAIL PROTECTED]> To: [email protected] Sent: Wednesday, June 25, 2008 10:47:48 PM Subject: [service-orientated-architecture] ESB/Intermediary in SOA (was Data services (was Re: Definition of SOA)) --- In service-orientated- architecture@ yahoogroups. com, Michael Poulin <[EMAIL PROTECTED] .> wrote: > > > Let me rephrase. Some *components* may need help in becoming > > service consumers. For example, an application may have a new > > need to call service X. There are many ways in which the > > application can be made > > to successfully call service X. One of the options is to use ESB > > facilities to make the call on behalf of the application. > > > In this case , ESB becomes a consumer agent or delegate, i.e. > consumer still decides whether to use the service. Here is no > place for consumer's difficulties in understanding the service > (i.e. the things which would require a data translation by the > ESB). I agree with this interpretation. > > > > In the best case, the consumer may engage an additional service > > > for translation work. > > IMO, that's not a "service." That's a (potentially shared) > > technical/implement ation component. > > > Why it is not a service? It is definitely not a business service > but it may be an infrastructure service. Please, elaborate on this. This is purely a terminology issue. IMO, the intent of "service" in the SOA sense is that it provides coarse-grained business capability. Data transformation is not a business capability, it is a technical activity. The word service is most decidedly overloaded and overused. In the context of SO discussions (such as this one), I try (not always successfully) to reserve the term service for business capability. But I concede the point. The use of "service" in the infrastructure context is perfectly legit, as long as we understand each other--and with your clarification, I think we do! :-) > Let me put described scenarios into the > context of service discovery and following invocation. 1) The > consumer finds the service, i.e. Service Description with public > service interface(s) , communication and execution policies ( > execution context policies ), service functionality and promised > RWE; 2) the consumer decides the service is good for consumer's > needs and …What? In the aforementioned scenarios, the consumer sends > its private message to the announced end-point( which is actually > the ESB end-point). > The private message is not the one described in the Service > Description ! ( The scenarios assume that ESB would magically > transform consumer's message into the provider's message but > consumer does not know about it). Do you still think a consumer > would do this? You already classified this as a silly action… I guess I'm not explaining myself very well. The originating *component* (which is one part of the consumer) does not send its private message to the service provider's announced end- point. Instead, it sends its private message to its private entry point in the ESB. That ESB component (the other part of the consumer) translates the private message to the the message of the service provider--and then sends that message to the provider's "announced end-point." > My point, you cannot hide message transformation in the ESB unless > this transformation is neither for consumer nor for provider. I'm not sure I advocated hiding message transformation. I've explicitly stated that a component that translates a private format to the public format is best considered as part of the consumer or the provider (depending on the direction--consumer does private to public, provider does public to private; and maybe the reverse on a possible reply in a request/response scenario). A transformation that is neither for the consumer nor for the provider seems pointless to me. > This exact solution is taken by Sun Microsystems for their > ESB – "Composite Application" . They transform all private messages > from both communication sides into INTERNAL normalised message > format for transmission through the Bus. Internal to whom? The ESB? If so, that's quite wrong IMO. The "normalized" or "canonical" message definitions should be explicit and the service definition should explicitly state support for the appropriate public message definitions. An ESB can do all sorts of transformations. IMO, those transformations are defined and "owned" by the end-points, not the ESB. The ESB is simply the run-time environment hosting the transformations on behalf of the consumers and providers, when needed. Ideally, the ESB doesn't have to do *any* transformation since ideally the consumers and providers are using the right messages directly. > > So if the provider disappears (a > change) won't the consumer need to > >change too? If so, then there was coupling. > > I believe that consumer may stay the same. The only way it could stay the same is if another provider appears (or exists) that supports the same message(s), the same operations, and the same behaviors. Your consumer *depends* on those items, so therefore it is *coupled* to that service via those aspects. Change any of those items, and the consumer will need to change. > This is why I promoting an idea that robust SOA eco-system with > business services has to provide several different ways for the > consumers to reach the same RWE. We claim application redundancy > and saying that services would help avoid it. OK. How about > business continuity? Why even in a small town there are > 2 or more barbershops and laundries? Because consumers need more > than one! It is not about competition only; if one is closed > (disappeared) today, it is possible to use another one. The same is > with SOA services. I, as a consumer, do not need to change just to > go to another laundry (I hope). Am I coupled with > any laundry? I do not think so. You're describing loosely coupled, not "totally decoupled." You're correct that in theory a consumer may not need to change if a replacement exists or comes into being. But business systems typically don't include this type of redundancy (save for DR and business continuity-- but then that's a matter of cloning, not of another independent service providing the same interfaces and behaviors). Communication decoupling through the use of an intermediary is definitely a Good Thing. The provider can move anywhere at all, can be deployed anywhere, can even be unavailable for a time (if the service contract allows for such delays). All Good Things. We've collectively learned that using an intermediary allows for a great deal of flexibility (even with the added complexity). But the aspects mentioned above couple these end points, regardless of the use of an intermediary. > > Why would a producer create events if > no one is listening? Why would a > > consumer listen for events that will never come? > > > Logically, producers and consumers are coupled, at a minimum, by > > the events they exchange. Technology implementations do not > > change that, IMO. > > > This is a philosophical substance. I disagree. It is a concrete relationship between consumer and provider. > Of cause, in a society we all have ties to > others. Does it mean that I, living in London, is coupled > with somebody in Canadajust because we both speak English and the > Head of both countries > is Her Majesty? This analogy doesn't reflect the relationship I'm attempting to describe. > Does it mean that two programs written in Java are coupled because > of Java? This isn't an equivalent analogy either. If those two programs do not interact, they are not coupled. If they interact, even via an intermediary, they are. I think you feel that because a consumer and provider communicate with an intermediary instead of directly that they therefore do not interact and therefore do not have a relationship. From a communication standpoint they don't but from an interaction standpoint they do. They are interacting and that interaction is dependent upon the interface contract. > I think that the word `coupled' is too strong for those cases. Me too. I don't think those case are equivalent to what I've been explaining. I'll try my hand at a different analogy, though it isn't perfect. I go to a pub. I'm a consumer. The person that pours the beer is the provider. The contract is that I request a beer, indicating the type and size of beer. The provider pours the beer and gives it to me. I can make the request directly to the bartender. And the bartender will respond directly to me. I can't order just anything, I have to order in the manner the provider understands. The menu is my directory (sort of--its the operations supported by *this* service). Successful: "Give me a pint of Guinness." "Here you go." Unsuccessful: "Ein bier bitte." "I don't speak German." Unsuccessful: "Give me full tank of petrol." "What?" No bartender. No beer. So where did the menu come from? ;-) Or, I can interact with a bartender through a proxy, the waitperson. I indicate what I want to the waitperson. The waitperson relays that to the provider, gets the beer from the bartender, and delivers it to me. That person might translate my message. Perhaps from German to English. In this case, the ESB is acting as my proxy. Together, from the provider's viewpoint, myself and the waitperson are the consumer. Ordering from the waitperson doesn't change the fact that I'm still dependent on the bartender if I want to get a beer. No bartender, no beer (the waitperson isn't allowed to "become" a bartender). Since I'm loosely coupled to the bartender (yikes!), I can go to any bartender to get my beer. Which bartender is used doesn't matter but it does matter that it *is* a bartender. The waitperson might hide from me which bartender it is and do the legwork of getting to another bartender on my behalf. As long as I get a beer, I don't care. But I can't go to the barbershop. Nor to the car rental place. I'm dependent on a bartender. If none exist, anywhere, no beer for me. I do know and should know that I am dependent on a bartender, even if I don't directly communicate with one. This describes a request/reply interaction. So here's another scenario: I place an order to be delivered to someone else. I might specify that someone else. Or I might not care who the someone else is. But I do make the request, and I do rely on it being fulfilled. Otherwise, the someone else is going to come pound on me (if he can find me!). > At any particular moments in the market, there are a lot of > producers with no consumers as well as potential consumers > w/o producers. But we don't build software that way. And we don't create organizations that way. In both cases, there must be a reason to start producing something. A "build it and they will come" approach sometimes works out, but often we've seen that that is not the case. Consumers without producers indicates demand--which will be filled if it makes business sense. But you don't build a consumer organization or software system without at least the high likelihood that a producer is going to come along. > The relationship between them I would described as > intention or interest. This relationship is too weak to be called > coupling, IMO. They are coupled on the message format. They are coupled in the fact that they interact via an agreed upon mechanism. The fact that the mechanism is implemented in an ESB is immaterial. Perhaps someone else can chime in here. Are Michael and I really agreeing but don't know it? Are we tripping ourselves up on terminology? -Rob
