SCArred for life - a day in the life of an OO practioner taking SOA shortcuts
Jim thought he’d wind me up this morning and told me to read his blog about SCA.
This is another attempt at letting you expose an object-oriented business model to those who may wish to interoperate with your application. In summary, it’s a way of declaring an object interface in SOAP.
Sounds great, doesn’t it? All I have to do is have my tool spit out some WSDL, some SOAP, and some XMLBeans and whatever else is needed, et voila! all of my very well designed business model objects are available for others to manipulate as if their application was a part of my application (it’s a composite application! Oooooo.)
Damn I feel good. I’ve done some great OO today. I’ve applied a bunch of fantastic patterns. I’ve smeared on some interfaces to my objects, yet I didn’t use EJB. And I did it with some XML, and that XML was SOAP, and that SOAP was bound in a WSDL contract, and it was all auto-generated by my J2EE Application Server vendor’s tools (I love those guys). The best thing is, it uses acronyms and phrases that will make the CIO be very successful in being responsive to the business. I can quote “agility”, “service oriented”, “object-oriented”, “component oriented”, “composite application”, “reusable services”, and “rapidly adapt to meet changing business requirements” all in the one breath.
Trouble is, my business model objects aren’t usually so well designed, really. I’ll definately be fixing some of them in the next release. And applying a significant change due to a new feature those business guys need. And I just read a couple of pages of Refactoring, so I’ll do some of that to them too.
Trouble is, my business model objects are usually very specific to the application I’ve written, and aren’t exactly useful or directly usable in another context.
Trouble is, whenever I decide to alter my business model objects, those fabulous tools make concrete changes to things that my consuming interoperators have bound to (a “contract” as defined by WSDL, etc) - and because my vendor has chosen for me, I neither know nor understand what the hell just happened when I hit the redeploy button.
Trouble is, it’s all about ME ME ME, and I’m letting YOU go through pain each and every time I alter my object interface.
Trouble is, I’m only thinking about my local changing business requirements. I’m not thinking about the changing requirements of those who are approaching this problem in the same way as I just have. And when they change their business model for their changing business requirements, I’m the one who goes through pain. Now I understand why Siebel, SAP, and Oracle are into this - because they each think they are the centre of my system universe and everyone should integrate to them.
Trouble is, I didn’t use a service model at all, I was just doing RPC through SOAP. Worse, I was doing it against a Java type system, so it was just RMI through SOAP. Worse, I was doing it to my business model objects that have a high propensity to change with business requirements, not some abstracted service layer objects that change rarely (only when the service contracts change).
Trouble is, I’ve now introduced tight coupling to a language type system, tight coupling to an API, and tight coupling to a business object model. And all under a pretty veil of service orientation which explicitly provides me with loose coupling. What the hell just happened? I need a beer.
Looks like I’ve got another pig with lipstick. I should have stuck to screen-scrapping those CICS applications.




