From: Simon Nash [mailto:[email protected]] Sent: Thursday, August 19, 2010 4:59 PM To: [email protected] Subject: Re: Error handling, bindings and business logic
[snip] >This is a tricky area and needs care to avoid pitfalls. > >In the general case, it is possible to end up with two interfaces with >equivalent semantics that aren't substitutable for each other. For example, >if a service CreditCardPayment1 were developed using a pure Java interface >(with exceptions thrown as AuthorizeException etc.) and another service >CreditCardPayment2 were developed using a WSDL interface using JAX-WS to >generate a Java interface from the WSDL (top down WSDL->Java), the services >CreditCardPayment1 and CreditCardPayment2 wouldn't be substitutable. > >If you want your services to have the greatest possible substitutability, >it's advisable to implement them using top-down WSDL interfaces as this >CreditCardPayment example shows. There's nothing to prevent a client and a >service from using a top-down WSDL interface (as shown in this example) and >being connected by a non-web services binding such as binding.sca. > >If you go the other way and use Java-specific interfaces with bottom-up >Java->WSDL generation, everything works OK as long as all your services >and clients are Java. You also have the convenience of being able to throw >and catch AuthorizeException. The downside is that this approach doesn't >scale >beyond Java, so it can cause problems of the kind you are mentioning when >non-Java services or clients are introduced. > > Simon Thank you for that explanation. I have a follow-up question with regard to the default binding: The book states in section 2.5.2 that "Tuscany uses Web services over SOAP/HTTP for remote calls over the default binding" (within the same domain). How does the pure Java bottom-up approach work when I deploy the client and service in different JVMs in the same domain, e. g. on different servers in a cluster? Or will it break even then? (When the client and service are within the same JVM, I assume there is no problem because this is not a remote call, and Java introspection would be used to discover and invoke the correct service method.) -- Sebastian
