<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-11558121</id><updated>2012-01-31T07:54:00.685-05:00</updated><category term='http://www.blogger.com/img/blank.gif'/><title type='text'>The View From The Bow</title><subtitle type='html'>Anne Thomas Manes's thoughts on what's happening in the software industry</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-11558121.post-6785202320448626295</id><published>2011-07-23T17:48:00.008-04:00</published><updated>2011-07-23T18:19:48.722-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http://www.blogger.com/img/blank.gif'/><title type='text'>RIP Sasha -- April 1, 1997 - July 21, 2011</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-PM82UL0EYGY/TitCSwIMphI/AAAAAAAAACs/PTjEGViPA6I/s1600/Sasha-0499b1.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 256px; height: 320px;" src="http://1.bp.blogspot.com/-PM82UL0EYGY/TitCSwIMphI/AAAAAAAAACs/PTjEGViPA6I/s320/Sasha-0499b1.JPG" alt="" id="BLOGGER_PHOTO_ID_5632668648881301010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Sasha was a miracle dog.&lt;br /&gt;&lt;br /&gt;We adopted her from a &lt;a href="http://cbrrescue.org/"&gt;Chesapeake Bay Retriever rescue&lt;/a&gt; group at 5 months.&lt;br /&gt;&lt;br /&gt;She was completely uncivilized when we got her. She came from a bad situation: Her people obviously did not understand Chessies. Sasha was remarkably intelligent, energetic, and driven. Her people didn't know how to handle her, so they kept her crated pretty much all the time. They also didn't understand about growing puppies. The breeder had told them to feed her a cup of food a day. They were still feeding her one cup of food a day at 5 months. She weighed just 24 lbs! Two weeks later, she weighed 32 lbs. Soon after, she developed &lt;a href="http://en.wikipedia.org/wiki/Panosteitis"&gt;panosteitis&lt;/a&gt; (growing pains). But we got through that.&lt;br /&gt;&lt;br /&gt;Initial training was ... challenging. She learned commands in next to no time--she just wasn't convinced that she needed to heed them. Keep-away was one of her favorite games. Fortunately, she was very food driven, and in time she became quite civilized. She developed an enormous vocabulary, including concepts like left, right, inside, and outside. She was most certainly the smartest dog we've ever known. And that look of mischief was always in her eye.&lt;br /&gt;&lt;br /&gt;From an early age, Sasha set her sights on the alpha spot in the pack. Sheba (our 9 year old golden) had other ideas. Poor Sheba endured 2 cruciate repairs, but managed to retain her alpha spot. We deemed it prudent to adopt another younger pup, Peter, (a chessie/golden mix -- 6 months younger than Sasha) to reduce some of Sasha's attentions on Sheba. It worked. Sasha and Peter were great playmates. Sheba and Tucker (our 11 year old golden) were relieved.&lt;br /&gt;&lt;br /&gt;Alas, Sasha developed bone cancer in her right knee at age 2. The prognosis was not good: 4 months without chemo; 18 months with chemo. Amputation was essential either way. They took the leg off at the hip. The vet went in to check on her after surgery and found her standing up in her cage waiting to get out. Once that nasty, painful bone was gone, she was raring to go. We then put her through a course of chemo -- 4 treatments over 3 months. She tolerated them very well. She did not appreciate her restricted activity period. She wanted to PLAY!&lt;br /&gt;&lt;br /&gt;And soon we got back to normal life. 18 months came and went, and Sasha showed no sign of a relapse. Sasha (now a tripod) wasn't quite as fast as she used to be, but she had just as much drive as ever. She had balls and sticks and bumpers to fetch. Most people didn't realize that she was a tripod unless we pointed it out. She was a very determined dog!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-scmMNkRxeaM/TitFMfNMcYI/AAAAAAAAAC8/n07IvQ2sPS8/s1600/FlyingChesapeakes.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 255px;" src="http://3.bp.blogspot.com/-scmMNkRxeaM/TitFMfNMcYI/AAAAAAAAAC8/n07IvQ2sPS8/s320/FlyingChesapeakes.jpg" alt="" id="BLOGGER_PHOTO_ID_5632671839794524546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Alas, her never-say-die approach to life put excessive strain on her remaining knee, and she blew out her cruciate ligament at age 4. We attempted a repair using &lt;a href="http://www.tplo.org/"&gt;TPLO&lt;/a&gt;. Remarkably, she was walking again in just a couple of days. Our attempts to restrict her activity failed, though, and she developed a complication: She broke the sliver of bone in her leg before the two pieces had healed.&lt;br /&gt;&lt;br /&gt;Have you ever tried to keep a high-energy 4 year old chessie on strict bed-rest for 12 weeks? Yikes! We concocted a barrier half-way up in her crate that forced her to remain lying down. The bone eventually healed, but Sasha had arthritis in that knee from that point forward. (Not that she would ever let on, though.)&lt;br /&gt;&lt;br /&gt;The two goldens passed on when Sasha was 5 -- Sheba was 13 and Tucker was one month shy of 15. Finally Sasha assumed the alpha spot. Somehow, though, being queen just isn't as satisfying if there's no one to push around. But we solved that. We adopted Cally -- a petite deadgrass chessie puppy. Sasha suddenly found herself on the other side of the fence: She was the queen defending her crown from this obnoxious little upstart! Cally didn't have a chance, though. But the two of them traded a number of scars over the years.&lt;br /&gt;&lt;br /&gt;Sasha was never one to admit that she had a disability. If we'd let her, she'd play fetch until she couldn't walk anymore. And she hated it when we forced her to rest. She couldn't sit by and let Peter and Cally have all the fun.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-UzcTL8zUjpQ/TitG8r8tiWI/AAAAAAAAADE/7e7HCIrfGPU/s1600/3chessiesBall.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 256px;" src="http://1.bp.blogspot.com/-UzcTL8zUjpQ/TitG8r8tiWI/AAAAAAAAADE/7e7HCIrfGPU/s320/3chessiesBall.JPG" alt="" id="BLOGGER_PHOTO_ID_5632673767360399714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Arthritis eventually took its toll, though, and Sasha finally started to slow down at about age 12. Perhaps Peter's death gave her tacit permission to take it more slowly. (Poor Peter -- just 11 years old -- died of &lt;a href="http://www.vet.uga.edu/VPP/clerk/lamp/index.php"&gt;histiocytic sarcoma&lt;/a&gt; -- very nasty.) In any case, stairs became a real challenge for Sasha, as well as navigating any type of uneven terrain. She never stopped dock diving though. This picture was taken when she was 13.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-FRTNWyo4biI/TitHtcv-2DI/AAAAAAAAADM/jjBfioo83Mg/s1600/SashaLeaping.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 255px;" src="http://1.bp.blogspot.com/-FRTNWyo4biI/TitHtcv-2DI/AAAAAAAAADM/jjBfioo83Mg/s320/SashaLeaping.jpg" alt="" id="BLOGGER_PHOTO_ID_5632674605094066226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This winter we bought her a &lt;a href="http://helpemup.com/"&gt;Help 'em up Harness&lt;/a&gt;. Fabulous! It made it so much easier to help her get around. I'd grab the rear handle and she'd be off running. We also got her a set of wheels from &lt;a href="http://eddieswheels.com/"&gt;Eddie's Wheels&lt;/a&gt;. She took to the wheels very quickly, but they were a bit heavy for her. And our hilly property limited her ability to get around.&lt;br /&gt;&lt;br /&gt;Sasha turned 14 in April, but you'd never know it to look at her. She was only slightly gray, and her expression was always vibrant. She did lose her hearing, though. I think she loved using it as an excuse not to obey. (She conveniently forgot her hand signal commands, too.)&lt;br /&gt;&lt;br /&gt;Two weeks ago, she lost her appetite. Given her puppy starvation phase, Sasha was always a voracious eater. I once tried an experiment to see how much she would eat in one sitting. I stopped after 12 cups of food. Sasha still wanted more. If she wouldn't eat, you knew something was wrong. So we went to the emergency room. An ultrasound revealed a large tumor in her liver. Another mass in her lungs indicated metastasis.&lt;br /&gt;&lt;br /&gt;There wasn't much we could do about the cancer, but at least we could do something about her symptoms. We gave her medications to reduce her nausea and indigestion. And within 2 days, she sprang back to life. We went to a barbecue at a friend's house -- a beautiful spot on a pond. There were 6 retrievers and a dozen children eager to throw Frisbees. Sasha played non-stop for 3 hours. Cally even has a new scar on her nose. (Sasha got the Frisbee.) It was a wonderful evening.&lt;br /&gt;&lt;br /&gt;All I can say is that I'm happy the end was swift. Tuesday evening, Sasha ate dinner with her usual gusto. Wednesday morning, she picked at her breakfast. By 1:00pm it was clear she was in great distress. We went back to the emergency room. They put her in ICU and tried to stabilize her -- they treated her for shock and gave her fluids and anti-nausea medication. Alas, she was no better in the morning. Her time had come. Thanks to euthanasia, we didn't prolong her agony. She drifted quietly off to sleep in my arms.&lt;br /&gt;&lt;br /&gt;A friend of mine gave me these words of comfort:&lt;br /&gt;&lt;br /&gt;I remember the Buddhist parable of the cup. The novice asks the master, aren't you sad when you see this beautiful cup, knowing that someday it will be broken? The master replies, no! Because the first day it was given to me I imagined it in pieces, and since then I have celebrated every day I have been allowed to spend with it.&lt;br /&gt;&lt;br /&gt;In 1999, they told us she had 18 months to live. I guess no one told her, though. She lived 12 more years! And I have celebrated every moment of them.&lt;br /&gt;&lt;br /&gt;No doubt she has caught up with Sheba at the Rainbow Bridge, and Sasha is doing her best to make Sheba's life miserable again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-6785202320448626295?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/6785202320448626295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=6785202320448626295' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/6785202320448626295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/6785202320448626295'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2011/07/rip-sasha-april-1-1997-july-21-2011.html' title='RIP Sasha -- April 1, 1997 - July 21, 2011'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-PM82UL0EYGY/TitCSwIMphI/AAAAAAAAACs/PTjEGViPA6I/s72-c/Sasha-0499b1.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-1978771320833352022</id><published>2009-01-27T13:23:00.002-05:00</published><updated>2009-01-27T13:41:58.868-05:00</updated><title type='text'>Podcast re: "SOA is Dead" Debate available</title><content type='html'>I participated in one of &lt;a href="http://friendfeed.com/danagardner"&gt;Dana Gardner&lt;/a&gt;'s BriefingsDirect podcasts last week. &lt;a href="http://weblog.infoworld.com/realworldsoa/"&gt;David Linthicum&lt;/a&gt;, &lt;a href="http://jkobielus.blogspot.com/"&gt;Jim Kobelius&lt;/a&gt;, &lt;a href="http://www.onstrategies.com/blog/"&gt;Tony Baer&lt;/a&gt;, &lt;a href="http://blogs.zdnet.com/service-oriented/"&gt;Joe McKendrick&lt;/a&gt;, &lt;a href="http://www.avorcor.com/morgenthal/"&gt;JP Morgenthal&lt;/a&gt;, and I debated the "SOA is Dead" theme. You can access the podcast or read the transcript &lt;a href="http://briefingsdirect.blogspot.com/2009/01/briefingsdirect-analysts-discuss.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I was a little surprised (and annoyed) at the "commercial sponsor" flavor of the show. The first two thirds of the show focused on communication services, which is a reasonably interesting topic, but the discussion was led by a vendor of one such product. If I'd realized that I was being asked to endorse a vendor product, I probably wouldn't have participated.&lt;br /&gt;&lt;br /&gt;The "SOA is Dead" debate starts about 35-40 minutes into the podcast.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-1978771320833352022?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/1978771320833352022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=1978771320833352022' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/1978771320833352022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/1978771320833352022'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2009/01/podcast-re-soa-is-dead-debate-available.html' title='Podcast re: &quot;SOA is Dead&quot; Debate available'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-2059570428277797083</id><published>2009-01-22T18:08:00.002-05:00</published><updated>2009-01-22T18:25:36.913-05:00</updated><title type='text'>"Common REST API"?</title><content type='html'>&lt;a href="http://www.ibm.com/developerworks/blogs/page/gcuomo"&gt;Jerry Cuomo&lt;/a&gt; published an article on InfoQ yesterday: &lt;a href="http://www.infoq.com/articles/cuomo-websphere-trends-2009"&gt;2009 Trends and Directions for WebSphere&lt;/a&gt;. In it he discusses his Top 10 list of R&amp;amp;D projects for the WebSphere team in 2009. One of the items on the list is REST (which for some reason he combines with Agile). He says:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/RESTful"&gt;Restful&lt;/a&gt; / &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;Agile&lt;/a&gt; – In 2008 we made solid progress in &lt;a href="http://en.wikipedia.org/wiki/REST"&gt;REST&lt;/a&gt; enabling our WebSphere portfolio. I’m quite proud of the team for aggressively responding to the call; including the REST enabling in CICS, &lt;a href="http://www-01.ibm.com/software/integration/wmqfamily/"&gt;WebSphere MQ&lt;/a&gt;, WAS, WSRR, Commerce, &lt;a href="http://www-01.ibm.com/software/websphere/portal/"&gt;Portal&lt;/a&gt;, Process Server, and the list goes on. We have more work to do in 2009. Specifically, with all this REST work, a Common REST API is needed across these products. Complementing our work on REST is our work on Agile programming – specifically the dynamic scripting capability (PHP and &lt;a href="http://en.wikipedia.org/wiki/Groovy_%28programming_language%29"&gt;Groovy&lt;/a&gt;) that is the hallmark of our &lt;a href="http://www-01.ibm.com/software/webservers/smash/"&gt;WebSphere sMash&lt;/a&gt; product... &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;I must say I'm flummoxed by his assertion that IBM needs to develop a "common REST API" across the WebSphere product family. I always thought that one of the fundamental constraints in REST is "uniform API". Wouldn't the common API be GET, PUT, POST, and DELETE?&lt;br /&gt;&lt;br /&gt;Maybe I should go back and read the REST dissertation again. I must be missing something.&lt;br /&gt;&lt;br /&gt;I'm also not sure I understand why Jerry appears to be linking Agile methodologies with dynamic languages. Again, I think I must be missing something. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-2059570428277797083?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/2059570428277797083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=2059570428277797083' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/2059570428277797083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/2059570428277797083'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2009/01/common-rest-api.html' title='&quot;Common REST API&quot;?'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-6222223892019131816</id><published>2009-01-08T15:34:00.003-05:00</published><updated>2009-01-08T16:36:00.216-05:00</updated><title type='text'>Response to the SOA Obituary</title><content type='html'>Well, this has been an entertaining week. Sensationalism is fun.&lt;br /&gt;&lt;br /&gt;On Monday afternoon I published a &lt;a href="http://apsblog.burtongroup.com/2009/01/soa-is-dead-long-live-services.html"&gt;SOA Obituary&lt;/a&gt;. Here are some of my favorite responses:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Miko renamed his soacenter.org web site to &lt;a href="http://whatevercenter.com/"&gt;whatevercenter.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Miko and friends (Ron Schmelzer, Todd Biske, JP Morgenthal, and others) decided to rename SOA to TAFKAS (The Architecture Formerly Known as SOA), which has been picked up by quite a few others &lt;/li&gt;&lt;li&gt;David Worthington named me the "&lt;a href="http://www.sdtimes.com/blog/post/2009/01/06/SOA-is-NOT-dead.aspx"&gt;Ann Coulter of the analyst community&lt;/a&gt;". (Actually I don't like this comparison at all)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.reddit.com/user/ribaribigrizerep/"&gt;ribaribigrizerep&lt;/a&gt; on reddit referred to me as "&lt;a href="http://www.reddit.com/r/programming/comments/7noo7/soa_proclaimed_dead_by_some_chick_on_her_blog/?sort=controversial"&gt;some chick&lt;/a&gt;"&lt;/li&gt;&lt;li&gt;Harvey Stage posted a comment to blog and referred to it as "a boat load of regurgitated crap"&lt;/li&gt;&lt;li&gt;Amin Abbasopour posted a comment saying, " 'Anne" is a new word in dictionary meaning 'insight + courage' "&lt;/li&gt;&lt;li&gt;Loraine Lawson gets it and adds excellent insight in &lt;a href="http://www.itbusinessedge.com/blogs/mia/?p=546"&gt;SOA:Dead as Elvis&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Sandy Carter doesn't get it, and &lt;a href="http://twitter.com/sandy_carter"&gt;Tweeted &lt;/a&gt;erroneously, "Well, this SOA is dead article is written by the same group that four years ago wrote a report called Java is Dead. (I’m not kidding.)" (The report was called "JEE5: The Beginning of the End of Java EE." There's a big difference between Java and Java EE.)&lt;/li&gt;&lt;li&gt;Nick Gall (as expected) used the opportunity to &lt;a href="http://blogs.gartner.com/nick_gall/"&gt;denounce services and promote WOA&lt;/a&gt;. (I don't wholy disagree with Nick -- I'm a proponent of exploiting the Web more effectively, and I firmly believe that REST is [in most circumstances] a better way to go -- but he and I have a very different definition of "service".) &lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-6222223892019131816?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/6222223892019131816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=6222223892019131816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/6222223892019131816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/6222223892019131816'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2009/01/response-to-soa-obituary.html' title='Response to the SOA Obituary'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-5843989162953700392</id><published>2007-11-19T18:32:00.000-05:00</published><updated>2007-11-19T18:36:19.127-05:00</updated><title type='text'>SOA Governance presentation available</title><content type='html'>I presented a session on SOA governance at the InfoWorld SOA Executive Forum in New York on November 8th. InfoWorld has published the slides from the event on their &lt;a href="http://www.infoworld.com/event/soa/07/november/soa_agenda.html"&gt;web site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My presentation was entitled, &lt;a href="http://images.infoworld.com/event/soa/07/november/docs/You_Cant.pdf"&gt;"You Can't Buy Governance"&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-5843989162953700392?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/5843989162953700392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=5843989162953700392' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/5843989162953700392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/5843989162953700392'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2007/11/soa-governance-presentation-available.html' title='SOA Governance presentation available'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-1286363146606571564</id><published>2007-06-01T09:21:00.000-04:00</published><updated>2007-06-01T10:14:55.686-04:00</updated><title type='text'>How NOT to do RESTful Web Services</title><content type='html'>A number of web service toolkits , including &lt;a href="http://ws.apache.org/axis2/"&gt;Apache Axis2&lt;/a&gt; and &lt;a href="http://incubator.apache.org/cxf/"&gt;Apache CXF&lt;/a&gt;, now claim to support REST. But in fact, these systems do NOT support REST. They support non-RESTful POX (plain old XML) over HTTP. Non-RESTful POX services are more accessible than SOAP services, but they don't exhibit the desirable characteristics associated with RESTful resources.&lt;br /&gt;&lt;br /&gt;The REST architectural style defines a number of basic rules (constraints), and if you adhere to these rules, your applications will exhibit a number of desirable characteristics, such as simplicity, scalability, performance, evolvability, visibility, portability, and reliability.&lt;br /&gt;&lt;br /&gt;The basic rules are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Everything that's interesting is named via a URI and becomes an addressable resource&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Every resource exposes a uniform interface (e.g., GET, PUT, POST, DELETE)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You interact with the resource by exchanging representations of the resource's state using the standard methods in the uniform interface&lt;/li&gt;&lt;/ul&gt;Non-RESTful POX applications violate these basic rules. First, they don't define a URI for every resource. And second, they don't constrain the interactions to the methods defined in the uniform interface. Instead they define a single URL that represents an operation that can be performed on any number of unnamed resources. Essentially they are tunneling RPC calls through the URL.&lt;br /&gt;&lt;br /&gt;Take this example from a &lt;a href="http://www.nabble.com/RE:calling-web-service-using-REST-t3839576.html"&gt;recent exchange&lt;/a&gt; on the Axis user list:&lt;br /&gt;&lt;br /&gt;Q:&lt;span&gt;&lt;span style="font-family:Arial;font-size:85%;color:#0000ff;"&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;How do  I call a web service operation from a browser having input and output?  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;   &lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:85%;"&gt;M&lt;span&gt;y target is end point is  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://localhost:81/axis2/services/MyService/getInfo" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;http://host/&lt;span&gt;My&lt;/span&gt;Service/getInfo&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span style="font-family:Arial;font-size:85%;color:#0000ff;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; and the SOAP body is:&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&amp;lt;soapenv:Body&gt;&lt;br /&gt;  &amp;lt;ns1:getInfo xmlns:ns1="&lt;a&gt;http://webservice.opt.srit.com/xsd" &gt;&lt;br /&gt;    &amp;lt;ns1:systemName&gt;Administr&lt;wbr&gt;ator&amp;lt;/ns1:systemName&gt;&lt;br /&gt;    &amp;lt;ns1&lt;wbr&gt;:systemPassword&gt;Password123&amp;lt;&lt;wbr&gt;/ns1:systemPassword&gt;&lt;br /&gt;  &amp;lt;/ns1&lt;wbr&gt;:getInfo&gt;&lt;br /&gt;&amp;lt;/soapenv:Body&lt;/a&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;A: &lt;a href="http://localhost:81/axis2/services/MyService/getInfo" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;http://host/&lt;span&gt;My&lt;/span&gt;Service/getInfo&lt;/span&gt;&lt;/a&gt;?&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;a&gt;systemName=&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;a&gt;Administrator&amp;amp;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;a&gt;systemPassword=&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;a&gt;"Password123"&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Notice that the URL contains a method name (getInfo) and query string containing the method parameters. This is NOT REST!&lt;br /&gt;&lt;br /&gt;A RESTful system would define a different URL for each systemName, and you would invoke GET, PUT, POST, and DELETE operations on the individual systemName resources. The GET query would look more like this:&lt;br /&gt;&lt;br /&gt;http://host/systems/Administrator&lt;br /&gt;&lt;br /&gt;Notice that I haven't included the systemPassword query parameter in a query string. The idea of passing a password via a URL query string simply boggles the mind. More likely you would use HTTP authentication rather than submitting a password as a query parameter.&lt;br /&gt;&lt;br /&gt;I've written more about REST in the Burton Group &lt;a href="http://apsblog.burtongroup.com/2007/05/rest_is_it_the_.html"&gt;blog&lt;/a&gt;, if you're interested.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-1286363146606571564?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/1286363146606571564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=1286363146606571564' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/1286363146606571564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/1286363146606571564'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2007/06/how-not-to-do-restful-web-services.html' title='How NOT to do RESTful Web Services'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-1637828321148254631</id><published>2007-06-01T08:51:00.000-04:00</published><updated>2007-06-01T08:53:22.318-04:00</updated><title type='text'>More detail on "wrapped" style best practices</title><content type='html'>Paul Fremantle has written a great &lt;a href="http://pzf.fremantle.org/2007/05/handlign.html"&gt;write-up&lt;/a&gt; on how to design WSDLs to ensure easy compatibility between Axis2 and .NET.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-1637828321148254631?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/1637828321148254631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=1637828321148254631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/1637828321148254631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/1637828321148254631'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2007/06/more-detail-on-wrapped-style-best.html' title='More detail on &quot;wrapped&quot; style best practices'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-2941016800262597552</id><published>2007-03-04T10:32:00.000-05:00</published><updated>2007-03-04T11:55:39.296-05:00</updated><title type='text'>Axis Message Style</title><content type='html'>I periodically see people asking questions about the Axis "message" style. So let me spend a moment to explain what it is and why you might want to use it.&lt;br /&gt;&lt;br /&gt;First let me explain about Axis "styles" and differentiate them from WSDL "styles".&lt;br /&gt;&lt;br /&gt;The WSDL "style" refers to the way the WSDL describes the content of a SOAP message body. There are two options:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Document: &lt;/span&gt;indicates that the WSDL &lt;span style="font-style: italic;"&gt;explicitly &lt;/span&gt;describes the content of the SOAP message body -- in all cases the body is described by a schema element definition. The message description contains at most one message part, and that message part must reference an element definition in a schema defined or imported into the types section.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;RPC: &lt;/span&gt;indicates that the WSDL &lt;span style="font-style: italic;"&gt;implicitly &lt;/span&gt;describes the content of the SOAP message body by specifying an operation name and a set of parameter types. The message description contains one message part for each parameter, and each message part must reference a type definition. At runtime, the SOAP engine dynamically constructs the message based on the following convention: The root element of the SOAP body has a local name that is equal to the operation name and is in the namespace specified in the namespace attribute from the &amp;lt;soap:body&gt; definition. The root element contains a child accessor element for each message part defined. Each accessor element gets its local name from the name attribute of the message part. All parameter accessor elements are in no namespace.&lt;/li&gt;&lt;/ul&gt;Bear in mind that the WSDL "style" only refers to the way the message content is described. It does not prescribe how an application interacts with the SOAP framework (i.e., the programming model). "RPC" style obviously lends itself to an RPC-style programming model, but what may not be obvious is that "Document" style can also support an RPC-style programming model. In fact, there's a particular convention, referred to as "wrapped document/literal" which enables easy mapping from document style to an RPC-style programming model. See my post on the &lt;a href="http://atmanes.blogspot.com/2005/03/wrapped-documentliteral-convention.html"&gt;wrapped convention&lt;/a&gt; for more information.&lt;br /&gt;&lt;br /&gt;The Axis "style" refers to the programming model that Axis exposes for a given service. The Axis "style" represents a combination of the WSDL "style" plus the message processing system--or "provider"--used to handle messages.&lt;br /&gt;&lt;br /&gt;Axis supports two types of providers:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;RPC: &lt;/span&gt;The RPC provider automatically converts the XML in a SOAP message into Java objects and invokes a specific method associated with the incoming message type. (There's also an EJB provider that can invoke an EJB rather than a POJO.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;MSG:&lt;/span&gt; The MSG provider converts the XML in a SOAP message into DOM and invokes a generic method to process the request&lt;/li&gt;&lt;/ul&gt;As I said before, the Axis "style" represents a combination of the WSDL "style" and the type of provider. There are four options:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;RPC: &lt;/span&gt;Uses the RPC provider and generates an RPC style WSDL&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Wrapped: &lt;/span&gt;Uses the RPC provider and generates a Document style WSDL that conforms to the "wrapped" convention. From a programming perspective, it feels exactly like RPC style. At runtime, Axis automatically "wraps" input parameters in a containing element.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Document:&lt;/span&gt; Uses the RPC provider and generates a Document style WSDL, but it does not conform to the "wrapped" convention. From a programming perspective, input and output parameters must be wrapped in a bean.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Message:&lt;/span&gt; Uses the Message provider and generates a Document style WSDL.&lt;/li&gt;&lt;/ul&gt;So, let's look a little more closely at Message style...&lt;br /&gt;&lt;br /&gt;Message style is basically do-it-yourself message processing. Axis will perform all SOAP header processing, but it's up to the developer to write the code to process the SOAP body contents. Message style support four method signatures:&lt;br /&gt;&lt;p&gt; &lt;span class="codefrag"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span class="codefrag"&gt;public Element [] method(Element [] bodies);&lt;/span&gt;&lt;br /&gt;   &lt;span class="codefrag"&gt;public SOAPBodyElement [] method (SOAPBodyElement [] bodies);&lt;/span&gt;&lt;br /&gt;   &lt;span class="codefrag"&gt;public Document method(Document body);&lt;/span&gt;&lt;br /&gt;   &lt;span class="codefrag"&gt;public void method(SOAPEnvelope req, SOAPEnvelope resp);&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="codefrag"&gt;&lt;/span&gt; &lt;/p&gt;This style is appropriate if the application wants to work natively in XML. It's also an effective means to support a completely dynamic system -- it can process any type of input or output message. If you use the RPC provider, Axis needs to know what type of messages to expect and how to map them to Java objects. When using the Message provider, Axis just maps them to DOM, and it's up to the application to then figure out how to process them.&lt;br /&gt;&lt;br /&gt;A word of caution, though: if you use the "Message" style and you ask Axis to generate a WSDL, the WSDL will have basically no information in it. Axis doesn't know anything about the content of the messages; therefore, it generates element definitions with type="xsd:anyType". Unless your goal is to build a completely dynamic processor, it's typically a bad idea to use "xsd:anyType" or "xsd:any"in a WSDL. For better interoperability, it really helps to explicitly define the expected contents of all input and output messages. (That's why WSDL Document style is preferred to RPC style.)&lt;br /&gt;&lt;br /&gt;So if you use the message style, make sure you also hand-craft your WSDL and add a schema definition of your input and output messages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-2941016800262597552?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/2941016800262597552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=2941016800262597552' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/2941016800262597552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/2941016800262597552'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2007/03/axis-message-style.html' title='Axis Message Style'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-115676988036990802</id><published>2006-08-28T08:15:00.000-04:00</published><updated>2006-08-28T08:58:00.426-04:00</updated><title type='text'>Axis 1.x or Axis2?</title><content type='html'>A lot of people have been asking which version of Axis should they use:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ws.apache.org/axis2/"&gt;Axis2&lt;/a&gt; is the next generation web services platform. It supports all the latest and greatest SOAP and REST capabilities. It's definitely the system you'll be wanting to use in 2007. Unfortunately, it is not yet stable. The developers are planning to release v1.1 in late September, and I'm hoping that version will be stable. But if you want to use Axis2 before that release comes out, you must be preprared to use the nightly builds, to help identify bugs, and to perhaps propose fixes. The documentation is also pretty sketchy for those unfamiliar with the Axis2 architecture.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ws.apache.org/axis/"&gt;Axis&lt;/a&gt; is pretty much on life support. It's pretty stable, although a few bugs still exist regarding arrays. If you find a bug, please report it, and it will probably get fixed, but don't expect to see any enhancements going forward.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;A little history&lt;/span&gt;&lt;br /&gt;Axis2 is actually Apache's third generation SOAP engine:&lt;br /&gt;&lt;br /&gt;Generation 1: Apache SOAP -- based on IBM's SOAP4J. Apache SOAP 1.0 was released on June 1, 2000. The last release, V2.3.1, came out on June 10, 2002. (This is now a dead project.) Apache SOAP was the first released SOAP engine, and it relied on DOM to process SOAP messages. It was extremely inefficient. It pre-dated WSDL, and it pretty much required RPC/encoded unless you wanted to programmatically manipulate the messages using DOM.&lt;br /&gt;&lt;br /&gt;Generation 2: Apache Axis -- a completely redesigned SOAP engine with native support for WSDL and the JAX-RPC and SAAJ APIs. The first alpha release came out on August 15, 2001, and V1.0 was released on October 7, 2002. The last release, V1.4, came out on April 22, 2006. It relies on SAX to process messages. It's much more performant than Apache SOAP, but definitely not the most efficient engine available. Releases prior to V1.3 provided minimal support for document/literal. &lt;br /&gt;&lt;br /&gt;Generation 3: Apache Axis2 -- yet another completely redesigned SOAP engine with an architecture that natively supports the next generation WS-* stack, including SOAP 1.2, WSDL 2.0, WS-Addressing, and plug-in modules for any WS-* header system. It also supports SOAP 1.1/WSDL 1.1, as well as RESTful services. The Axis2 native programming model is based on &lt;a href="http://ws.apache.org/commons/axiom/"&gt;AXIOM&lt;/a&gt;, the Axis Object Model -- which relies on StAX for XML processing. Axis2 supports automatic object/XML data mapping via optional plug-in data binding systems, such as the Axis2 Data Binding (ADB) and XMLBeans. The Axis2 developers are currently working on implementing the JAX-WS API over Axis2.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-115676988036990802?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/115676988036990802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=115676988036990802' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/115676988036990802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/115676988036990802'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2006/08/axis-1x-or-axis2.html' title='Axis 1.x or Axis2?'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-115230576946981723</id><published>2006-07-07T16:53:00.000-04:00</published><updated>2006-08-11T11:39:22.853-04:00</updated><title type='text'>A Short Explanation of XML Namespaces</title><content type='html'>I  wrote this up in response to a question on the Axis User discussion list, but thought others might appreciate it.&lt;br /&gt;&lt;br /&gt;The purpose of a namespace qualification is to disambiguate two&lt;br /&gt;components of the same name. For example, if you have multiple schemas&lt;br /&gt;that each defines an element called "foo", how do you tell them apart?&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;    &amp;lt;s:schema&lt;br /&gt;          xmlns:s="http://www.w3.org/2001/XMLSchema"&lt;br /&gt;          targetNamespace="urn:example:foo:1"&amp;gt;&lt;br /&gt;       &amp;lt;s:element name="foo" type=s:string"/&amp;gt;&lt;br /&gt;    &amp;lt;/s:schema&amp;gt;   &lt;br /&gt;&lt;br /&gt;    &amp;lt;s:schema&lt;br /&gt;          xmlns:s="http://www.w3.org/2001/XMLSchema"&lt;br /&gt;          targetNamespace="urn:example:foo:2"&amp;gt;&lt;br /&gt;       &amp;lt;s:element name="foo" type=s:int"/&amp;gt;&lt;br /&gt;    &amp;lt;/s:schema&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;s:schema s="http://www.w3.org/2001/XMLSchema"&lt;br /&gt;          xmlns:ns1="urn:example:foo:1"&lt;br /&gt;          xmlns:ns2="urn:example:foo:2"&lt;br /&gt;          targetNamespace="urn:example:foo:0"&amp;gt;&lt;br /&gt;      &amp;lt;s:import namespace="urn:example:foo:1"/&amp;gt;&lt;br /&gt;      &amp;lt;s:import namespace="urn:example:foo:2"/&amp;gt;&lt;br /&gt;      &amp;lt;s:element name="foo"&amp;gt;&lt;br /&gt;         &amp;lt;s:complexType&amp;gt;&lt;br /&gt;             &amp;lt;s:sequence&amp;gt;&lt;br /&gt;                &amp;lt;s:element ref="ns1:foo"/&amp;gt;&lt;br /&gt;                &amp;lt;s:element ref="ns2:foo"/&amp;gt;&lt;br /&gt;             &amp;lt;/s:sequence&amp;gt;&lt;br /&gt;         &amp;lt;/s:complexType&amp;gt;&lt;br /&gt;      &amp;lt;/s:element&amp;gt;&lt;br /&gt;    &amp;lt;/s:schema&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;br /&gt;&lt;br /&gt;An instance document of this element could look like this:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;    &amp;lt;ns0:foo&lt;br /&gt;        xmlns:ns0="urn:example:foo:0"&lt;br /&gt;        xmlns:ns1="urn:example:foo:1"&lt;br /&gt;        xmlns:ns2="urn:example:foo:2"&amp;gt;&lt;br /&gt;          &amp;lt;ns1:foo&amp;gt;some string&amp;lt;/ns1:foo&amp;gt;&lt;br /&gt;          &amp;lt;ns2:foo&amp;gt;12345&amp;lt;/ns2:foo&amp;gt;&lt;br /&gt;     &amp;lt;/ns0:foo&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This instance is equally valid (but less readable):&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;    &amp;lt;tns:foo xmlns:tns="urn:example:foo:0"&amp;gt;&lt;br /&gt;       &amp;lt;tns:foo xmlns:tns="urn:example:foo:1"&amp;gt;&lt;br /&gt;          some string&amp;lt;/tns:foo&amp;gt;&lt;br /&gt;       &amp;lt;tns:foo xmlns:tns="urn:example:foo:2"&amp;gt;&lt;br /&gt;          12345&amp;lt;/tns:foo&amp;gt;&lt;br /&gt;    &amp;lt;/tns:foo&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In other words, the string used for the prefix is irrelevant -- what&lt;br /&gt;matters is the namespace it's been assigned to and the scope of the&lt;br /&gt;namespace declaration. A namespace declaration applies to the element&lt;br /&gt;it's defined in and all that element's children, but you can always&lt;br /&gt;reassign the prefix to a different namespace in a child element.&lt;br /&gt;&lt;br /&gt;The default namespace declaration (e.g., xmlns="urn:example:foo:0")&lt;br /&gt;says that all non-explicitly qualified elements belong to the default&lt;br /&gt;namespace. I generally recommend avoiding use of the default namespace&lt;br /&gt;-- especially if you have unqualified elements -- because that forces&lt;br /&gt;you to override the default namespace (e.g., xmlns="") on all&lt;br /&gt;unqualified elements.&lt;br /&gt;&lt;br /&gt;So for example, let's say I have this schema:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;   &amp;lt;s:schema&lt;br /&gt;        xmlns:s="http://www.w3.org/2001/XMLSchema"&lt;br /&gt;        targetNamespace="urn:example:foobar"&amp;gt;&lt;br /&gt;      &amp;lt;s:element name="foobar"&amp;gt;&lt;br /&gt;         &amp;lt;s:complexType&amp;gt;&lt;br /&gt;            &amp;lt;s:sequence&amp;gt;&lt;br /&gt;               &amp;lt;s:element name="foo" type="s:string"/&amp;gt;&lt;br /&gt;               &amp;lt;s:element name="bar" type="s:string"/&amp;gt;&lt;br /&gt;            &amp;lt;/s:sequence&amp;gt;&lt;br /&gt;          &amp;lt;/s:complexType&amp;gt;&lt;br /&gt;      &amp;lt;/s:element&amp;gt;&lt;br /&gt;   &amp;lt;/s:schema&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Because the schema does not specify elementFormDefault="qualified",&lt;br /&gt;all local elements ("foo" and "bar") are unqualified. A valid instance&lt;br /&gt;of this schema is:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;  &amp;lt;tns:foobar xmlns:tns="urn:example:foobar"&amp;gt;&lt;br /&gt;     &amp;lt;foo&amp;gt;some string&amp;lt;/foo&amp;gt;&lt;br /&gt;     &amp;lt;bar&amp;gt;another string&amp;lt;/bar&amp;gt;&lt;br /&gt;  &amp;lt;/tns:foobar&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But the following instance is not valid because "foo" and "bar" must be unqualified:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;  &amp;lt;foobar xmlns="urn:example:foobar"&amp;gt;&lt;br /&gt;     &amp;lt;foo&amp;gt;some string&amp;lt;/foo&amp;gt;&lt;br /&gt;     &amp;lt;bar&amp;gt;another string&amp;lt;/bar&amp;gt;&lt;br /&gt;  &amp;lt;/foobar&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This instance is valid:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;  &amp;lt;foobar xmlns="urn:example:foobar"&amp;gt;&lt;br /&gt;     &amp;lt;foo xmlns=""&amp;gt;some string&amp;lt;/foo&amp;gt;&lt;br /&gt;     &amp;lt;bar xmlns=""&amp;gt;another string&amp;lt;/bar&amp;gt;&lt;br /&gt;  &amp;lt;/foobar&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-115230576946981723?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/115230576946981723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=115230576946981723' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/115230576946981723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/115230576946981723'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2006/07/short-explanation-of-xml-namespaces.html' title='A Short Explanation of XML Namespaces'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-115159019387595347</id><published>2006-06-29T09:33:00.000-04:00</published><updated>2006-06-29T10:09:53.906-04:00</updated><title type='text'>A Flash of Enlightenment in the SOAP vs REST Debate</title><content type='html'>I just came upon this great &lt;a href="http://service-architecture.blogspot.com/2006/05/soap-v-rest-more-pointless-than-vi-v.html"&gt;post&lt;/a&gt; by Steve Jones about the pointlessness of the debate about SOAP vs REST.&lt;br /&gt;&lt;br /&gt;I heartily concur. I will take Steve point one step further, though.&lt;br /&gt;&lt;br /&gt;The essence of Steve argument is that the actual technologies used to implement services should not be front of mind when designing services. What should be front of mind is:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;what is the functionality that needs to be exposed?&lt;/li&gt;&lt;li&gt;what are the messages that need to be exchanged to achieve that functionality?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;From that point on, tooling should just generate the endpoint middleware necessary to achieve the exchange, and infrastructure should ensure that the messages are delivered properly.&lt;br /&gt;&lt;br /&gt;But things are not always quite that simple -- any dependency on a specific type of middleware will constrain the reach of a service. The SOAP proponents will argue that SOAP makes XML messaging simpler and easier for people that are more familiar with the RPC-style programming model. The REST proponents argue that SOAP is too complex, and that automatic XML/object mapping is a myth, therefore the ease-of-use associated with SOAP is deceiving and misleading.&lt;br /&gt;&lt;br /&gt;Both arguments have merit, but they are beside the point.&lt;br /&gt;&lt;br /&gt;When you provide a service, you must cater to your customer. Therefore you must support whatever service interface your customer desires -- SOAP, REST, ebXML, "plain old XML" over HTTP, EDI, etc.&lt;br /&gt;&lt;br /&gt;Which brings me back to Steve's basic argument. The essence of your service design must be:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;what is the functionality that needs to be exposed?&lt;/li&gt;&lt;li&gt;what messages must be exchanged in order to achieve that functionality?&lt;/li&gt;&lt;/ul&gt;After you have designed the fundamental requirements of the service, then you can expose that functionality using as many middleware technologies as you need in order to support your customers' requirements. As long as you maintain clean separation of interface from implementation, you can do that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-115159019387595347?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/115159019387595347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=115159019387595347' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/115159019387595347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/115159019387595347'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2006/06/flash-of-enlightenment-in-soap-vs-rest.html' title='A Flash of Enlightenment in the SOAP vs REST Debate'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-115107534512870430</id><published>2006-06-23T10:28:00.000-04:00</published><updated>2006-06-23T13:45:09.206-04:00</updated><title type='text'>AMQP finally emerges from stealth</title><content type='html'>I first heard about AMQP in an &lt;a href="http://www.eweek.com/article2/0,1759,1761537,00.asp"&gt;eWeek article&lt;/a&gt; published in February, and I was very disappointed at the time that I couldn't find any other information. For a supposedly "open source" effort, the folks involved were keeping things tightly under wraps.&lt;br /&gt;&lt;br /&gt;Well, the AMQP Working Group finally emerged from stealth mode on June 20.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.twiststandards.org/tiki-index.php?page=AMQ"&gt;AMQP&lt;/a&gt; proposes a standard, interoperable protocol for message queuing systems. Such a protocol would enable any message queing system to interoperate with any other message queuing system -- assuming, of course, that the message queuing systems involved use AMQP. It remains to be seen, though, if the leading MOM vendors will adopt AMQP. I think it will breathe new life into the MOM market if they did so. I have to investigate this, but I also think that AMQP could be used as a standard protocol to support reliable messaging in SOAP -- e.g., WS-RX over AMQP. (AMQP is a binary protocol that has it's own typing system, but my guess is that an AMQP message can convey any type of message payload.)&lt;br /&gt;&lt;br /&gt;Information about AMQP is being hosted by &lt;a href="http://www.twiststandards.org/"&gt;TWIST&lt;/a&gt;, a non-profit organization focused on developing standards for the financial supply chain market. (The AMQP Working Group is a separate entity, though.)&lt;br /&gt;&lt;br /&gt;The AMQP Working Group has published a preliminary specification (&lt;a href="http://www.twiststandards.org/tiki-index.php?page=AMQP_JointSpecification&amp;pagenum=5"&gt;v0.8&lt;/a&gt;). The authors include JPMorgan Chase &amp;amp; Co., Cisco Systems, Inc., Envoy, iMatix Corporation, IONA Technologies, Red Hat, Inc., TWIST Process Innovations, and 29West. The specification grants a very open license:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"a worldwide, perpetual, royalty-free, nontransferable, nonexclusive license to (i) copy, display, and implement the Advanced Messaging Queue Protocol ("AMQP") Specification and (ii) the Licensed Claims that are held by the Authors, all for the purpose of implementing the Advanced Messaging Queue Protocol Specification."&lt;/blockquote&gt;&lt;br /&gt;Given these free terms, it seems likely that the open source and startup communities will readily adopt the protocol. But if the major players -- especially IBM, Tibco, and Microsoft -- don't get on board, AMQP may follow the path of BEEP. We'll see.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Where's the Code? &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I'm a little confused by the constant reference to "open source" when people talk about AMQP. As far as I can tell, there is no open source project currently implementing AMPQ. I grant that the licensing terms for the specification are quite open, but the process to develop the spec has been far from open. Besides... open &lt;span style="font-style:italic;"&gt;source&lt;/span&gt; typically implies source code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-115107534512870430?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/115107534512870430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=115107534512870430' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/115107534512870430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/115107534512870430'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2006/06/amqp-finally-emerges-from-stealth.html' title='AMQP finally emerges from stealth'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-114787195661517000</id><published>2006-05-17T08:50:00.000-04:00</published><updated>2006-05-17T09:19:16.643-04:00</updated><title type='text'>Thank you Jonathan Schwartz!</title><content type='html'>For the first time in 11 years, I did not make it to JavaOne this year. And now I'm really regretting it. I'm certain that there's a fabulous party going on at Moscone Center this week. &lt;br /&gt;&lt;br /&gt;Yesterday, Jonathan Schwartz and Rich Green announced their intention to release Java under an open source license. Timing, licensing, and other details are still to be determined, but I am confident that it will happen. &lt;br /&gt;&lt;br /&gt;I worked for Sun Software for 18 months in 2000-2001. I had 2 major objectives while I was there. Convince them to embrace SOAP and to open source Java. I was successful in the first objective, but my arguments for open sourcing Java fell on deaf ears. Or at least it felt that way. &lt;br /&gt;&lt;br /&gt;But I know that the open source faction was heard. I always got the sense that Sun would eventually open source Java -- the question was when. Being part of the open source proponent faction was never considered to be a bad thing. Many of my most ardent and vociferous comrades-in-arms have done quite well at Sun -- folks like &lt;a href="http://www.sun.com/aboutsun/media/bios/bios-phipps.html"&gt;Simon Phipps&lt;/a&gt;, who is now Sun's chief open source officer, and &lt;a href="http://www.sun.com/aboutsun/media/bios/bios-hoogen.html"&gt;Ingrid Van Den Hoogen&lt;/a&gt;, who is now Sun's VP of Brand Experience and Community Marketing. &lt;br /&gt;&lt;br /&gt;I really hoped it would happen after the court settlement between Sun and Microsoft. (That was the only excuse I would accept for waiting.) But I guess we had to wait for Scott to step down.&lt;br /&gt;&lt;br /&gt;In any case, thank you Jonathan.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-114787195661517000?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/114787195661517000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=114787195661517000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/114787195661517000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/114787195661517000'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2006/05/thank-you-jonathan-schwartz.html' title='Thank you Jonathan Schwartz!'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-114718461890342048</id><published>2006-05-09T09:07:00.001-04:00</published><updated>2006-05-09T13:00:10.710-04:00</updated><title type='text'>UnREST over WS-* and other "enterprisey" things</title><content type='html'>&lt;a href="http://fuzzypanic.blogspot.com/2006/05/spitting-up-j2ee-hippo-now-what-about.html"&gt;Mike Herrick&lt;/a&gt;, who just happens to be one of my Burton Group clients, has accused me of having "totally drunk the WS-* the Kool-Aid". He goes on to say, "I just was disturbed that given the history on things like J2EE she so easily assumed that WS-* will survive and thrive."&lt;br /&gt;&lt;br /&gt;Let me make this clear:&lt;br /&gt;&lt;br /&gt;I'm one of the folks responsible for &lt;span style="font-weight: bold; font-style: italic;"&gt;mixing&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;the Kool-Aid. I presented at the &lt;a href="http://www.w3.org/2001/03/wsws-program"&gt;W3C Workshop on Web Services&lt;/a&gt; (representing Sun). I participated in numerous standardization efforts at W3C, OASIS, WS-I, uddi.org, and JCP. I have a vested interest in making sure that WS-* succeeds.&lt;br /&gt;&lt;br /&gt;I had a similar vested interest in CORBA (I was working for DEC at the time), and I was just as enthusiastic about CORBA then as I am about WS-* now. At the time, CORBA was the state-of-art in distributed computing technology. And today, I think WS-* is the state-of-the-art in distributed computing technology. But I by no means assume that WS-* will always remain the state-of-the-art. I assume that something better will come along. Unfortunately, it hasn't come along yet, so we have to make do with what we have now.&lt;br /&gt;&lt;br /&gt;The single, most important feature that inspires my enthusiasm about WS-* is that it has universal support from all the major vendors. The technology has become pretty much pervasive (although the industry is still stuggling with interoperability issues), and there's a huge ecosystem of vendors and products and tools that support it. WS-* also has some really interesting innovations (separation of header and body, the composability of the various SOAP extensions, policy-based management and control via intermediaries, etc), which I think make it particularly well-suited for enterprise-class service-oriented application systems.&lt;br /&gt;&lt;br /&gt;There. I've qualified it. WS-* is &lt;a href="http://en.wikipedia.org/wiki/Enterprisey"&gt;enterprisey&lt;/a&gt;. But is that really such a bad thing? If you need comprehensive enterprise-class semantics (security, reliability, session management, transactions, etc), then it really helps to use an enterprisey middleware system.&lt;br /&gt;&lt;br /&gt;People accuse WS-* of being too complex. (Somewhat remarkable when you think back to 2000 when everyone was extolling SOAP's simplicity.) Well -- if, as a developer, you need to understand the details of all 60+ WS-* specs, then, yes, WS-* is way too complex. But that's a symptom of WS-*'s immaturity. If we had proper tooling, the only folks that would need to be concerned with all the 60+ specifications are the folks implementing the WS-* toolkits. Developers should really only need to be concerned with a handful of the specs: SOAP, WSDL, and XML Schema--maybe WS-MetadataExchange. Everything else should be handled transparently by the toolkits. I think we'll get there. Microsoft's WCF ("Indigo") demonstrates how easy it can be to use WS-Addressing, WS-ReliableMessaging, WS-Security, WS-Trust, and WS-SecureConversation. All you have to do is specify an annotation, and everything is automatically implemented behind the scenes. I expect the other vendors to deliver better tooling at some point. Now that WS-Policy has finally moved into the &lt;a href="http://www.w3.org/Submission/2006/06/"&gt;standards track&lt;/a&gt;, we should start getting much better configuration tools.&lt;br /&gt;&lt;br /&gt;But I can't ignore the debate between REST and WS-*. I'm a huge proponent of the &lt;a href="http://en.wikipedia.org/wiki/KISS_principle"&gt;KISS &lt;/a&gt;principle. So I don't recommend using WS-* for all service interactions. If an application doesn't require enterprisey infrastructure semantics, then it's much more appropriate to use a simpler middleware system, such as "plain old XML" (POX) over HTTP. In fact, for applications that require Internet scalability (e.g., mass consumer-oriented services), POX is a much better solution than WS-*.&lt;br /&gt;&lt;br /&gt;But that doesn't mean that POX is the best solution for all systems, either. POX doesn't support a clean separation of business and infrastructure functionality, so if you are using POX and you need enterprisey infrastructure semantics, then you need to code the infrastructure functionality in your application code. Bad idea. The reason you use middleware in the first place is to help reduce the amount of infrastructure functionality the developer has to write.&lt;br /&gt;&lt;br /&gt;The point is that you should always use the tool that best fits the job. Let the application requirements dictate your selection of middleware.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-114718461890342048?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/114718461890342048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=114718461890342048' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/114718461890342048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/114718461890342048'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2006/05/unrest-over-ws-and-other-enterprisey_09.html' title='UnREST over WS-* and other &quot;enterprisey&quot; things'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-114350392533580709</id><published>2006-03-27T18:03:00.000-05:00</published><updated>2006-05-14T15:12:46.453-04:00</updated><title type='text'>WS-Convergence</title><content type='html'>Please also listen to my &lt;a href="http://inflectionpoint.burtongroup.com/"&gt;PodCast&lt;/a&gt; on this topic.&lt;br /&gt;&lt;br /&gt;Remember a couple of years back when the vendors lined up in factions to fight over specifications?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;WS-Reliability vs WS-ReliableMessaging&lt;/li&gt;&lt;li&gt;WS-CAF vs WS-Transaction&lt;/li&gt;&lt;li&gt;WS-MessageDelivery vs WS-Addressing&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Liberty/SAML vs WS-Trust/WS-Federation&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Inevitably, the lines were drawn with Sun and Oracle on one side and IBM and Microsoft on the other. Sun and Oracle made a habit of submitting the first versions of their specs to a standards body, while IBM and Microsoft closely guarded the first two or three revisions, while promising to submit them to a standards body "at some point in the future". Nonetheless, the IBM/Microsoft faction always seemed to win more mindshare.&lt;br /&gt;&lt;br /&gt;The situation is much improved since Microsoft and Sun buried the hatchet two years ago, and IBM and Microsoft have finally submitted most of their specs (WS-SX, WS-RX, and WS-TX) to OASIS.&lt;br /&gt;&lt;br /&gt;But there's still one outstanding competing specification stack that still need to be resolved: that of  resources, events, and management. Unlike previous situations, in this case IBM and Microsoft are on different sides--and the dispute revolves around simplicity vs richness.&lt;br /&gt;&lt;br /&gt;The two stacks line up like this:&lt;br /&gt;&lt;br /&gt;&lt;table class="MsoTableGrid" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid windowtext; padding: 0in 5.4pt; width: 108.9pt;" valign="top" width="145"&gt;   &lt;p class="MsoNormal"&gt;&lt;p&gt; &lt;/p&gt;&lt;/p&gt;  &lt;br /&gt;&lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 135pt;" valign="top" width="180"&gt;   &lt;p class="MsoNormal"&gt;Microsoft Camp&lt;p&gt;&lt;/p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 148.5pt;" valign="top" width="198"&gt;   &lt;p class="MsoNormal"&gt;IBM Camp&lt;p&gt;&lt;/p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 108.9pt;" valign="top" width="145"&gt;   &lt;p class="MsoNormal"&gt;Resources&lt;p&gt;&lt;/p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 135pt;" valign="top" width="180"&gt;   &lt;p class="MsoNormal"&gt;WS-Transfer&lt;/p&gt;   &lt;p class="MsoNormal"&gt;WS-Enumeration&lt;p&gt;&lt;/p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 148.5pt;" valign="top" width="198"&gt;   &lt;p class="MsoNormal"&gt;WS-ResourceFramework&lt;p&gt;&lt;/p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 108.9pt;" valign="top" width="145"&gt;   &lt;p class="MsoNormal"&gt;Events&lt;p&gt;&lt;/p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 135pt;" valign="top" width="180"&gt;   &lt;p class="MsoNormal"&gt;WS-Eventing&lt;p&gt;&lt;/p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 148.5pt;" valign="top" width="198"&gt;   &lt;p class="MsoNormal"&gt;WS-Notification&lt;p&gt;&lt;/p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 108.9pt;" valign="top" width="145"&gt;   &lt;p class="MsoNormal"&gt;Management&lt;p&gt;&lt;/p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 135pt;" valign="top" width="180"&gt;   &lt;p class="MsoNormal"&gt;WS-Management&lt;p&gt;&lt;/p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 148.5pt;" valign="top" width="198"&gt;   &lt;p class="MsoNormal"&gt;WSDM&lt;p&gt;&lt;/p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;The Microsoft stack is lighterweight and was only recently placed on a standards track. (WS-Management is now governed by DMTF, and WS-Transfer, WS-Enumeration, and WS-Eventing were submitted to W3C in mid-March.) The IBM stack focuses on richness of functionality and is being managed by OASIS. WSDM is an OASIS standard.&lt;br /&gt;&lt;br /&gt;I find the management dicotomy particularly unsettling, so I was very pleased to see HP, IBM, Intel, and Microsoft publish a &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwebsrv/html/convergence.asp"&gt;white paper&lt;/a&gt; that I refer to as WS-Convergence. It defines a roadmap for converging these specifications. (A realistic timeframe for completion of this roadmap is 24-36 months.)&lt;br /&gt;&lt;br /&gt;The roadmap is divided into three sections, addressing resource management, event processing, and management.&lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;p&gt; &lt;/p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;Resource Management: &lt;/b&gt;The roadmap proposes using WS-Transfer and WS-Enumeration as the standard foundation for resource management. The roadmap also proposes developing two new specifications, WS-Transfer Addendum and WS-ResourceTransfer, as well as a revision of WS-MetadataExchange. &lt;p&gt;&lt;/p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;p&gt; &lt;/p&gt;&lt;/p&gt;  &lt;ul style="margin-top: 0in;" type="disc"&gt;&lt;li class="MsoNormal" style=""&gt;WS-Transfer      Addendum will extend WS-Transfer to add support for WS-Addressing endpoint      references &lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;WS-MetadataExchange      v1.1 will build on WS-Transfer and WS-Transfer Addendum in place of its      current domain-specific protocol&lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;WS-ResourceTransfer      builds on WS-Transfer, WS-Transfer Addendum, WS-Enumeration, and      WS-MetadataExchange, providing sophisticated resource management      capabilities comparable to those of WSRF&lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p class="MsoNormal"&gt;&lt;p&gt; &lt;/p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;All four vendors promise to deliver products that support these specifications. IBM further commits to influence the OASIS WSRF TC to refactor the WSRF specifications into extensions that build on WS-ResourceTransfer. &lt;p&gt;&lt;/p&gt;&lt;/p&gt;  &lt;p&gt;&lt;p&gt; &lt;/p&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Event Processing:&lt;/b&gt; The roadmap proposes using WS-Eventing as the standard foundation for event processing. It also proposes developing a new specification, called WS-EventNotification, that will integrate many capabilities from WS-Notification into WS-Eventing. WS-EventNotification builds on WS-ResourceTransfer to support resource management of subscriptions.&lt;p&gt;&lt;/p&gt;&lt;/p&gt;  &lt;p&gt;&lt;p&gt; &lt;/p&gt;&lt;/p&gt;  &lt;p&gt;All four vendors promise to deliver products that support WS-EventNotification. IBM intends to influence the OASIS WS-Notification TC to ensure compatibility between WS-EventNotification and WS-Notification, although WS-Notification will most likely continue on its own trajectory to support more complex use cases.&lt;p&gt;&lt;/p&gt;&lt;/p&gt;  &lt;p&gt;&lt;p&gt; &lt;/p&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Management: &lt;/b&gt;The roadmap proposes the development of a new management specification that builds on WS-EventNotification and WS-ResourceTransfer. The new specification will replace both WSDM and WS-Management. &lt;p&gt;&lt;/p&gt;&lt;/p&gt;  &lt;p&gt;&lt;p&gt; &lt;p&gt;&lt;/p&gt;  &lt;p&gt;All four vendors promise to deliver products that support the new converged management specification. In addition, IBM will continue to support WSDM, and Microsoft will continue to support WS-Management. &lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-114350392533580709?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/114350392533580709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=114350392533580709' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/114350392533580709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/114350392533580709'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2006/03/ws-convergence.html' title='WS-Convergence'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-113641718779993362</id><published>2006-01-04T18:26:00.000-05:00</published><updated>2006-01-04T18:26:27.836-05:00</updated><title type='text'>Technoracle (a.k.a. "Duane's World"): The Nickull Threshold Service Oriented Architecture (SOA) and related technologies</title><content type='html'>A must read: &lt;a href="http://technoracle.blogspot.com/2006/01/nickull-threshold.html"&gt;Technoracle (a.k.a. "Duane's World"): The Nickull Threshold Service Oriented Architecture (SOA) and related technologies&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-113641718779993362?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/113641718779993362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=113641718779993362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/113641718779993362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/113641718779993362'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2006/01/technoracle-aka-duanes-world-nickull.html' title='Technoracle (a.k.a. &quot;Duane&apos;s World&quot;): The Nickull Threshold Service Oriented Architecture (SOA) and related technologies'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-113171915340995239</id><published>2005-11-11T07:29:00.000-05:00</published><updated>2005-11-11T09:25:53.440-05:00</updated><title type='text'>Evaluating Superplatforms / The Google Threat</title><content type='html'>In a comment on my &lt;a href="http://atmanes.blogspot.com/2005/04/future-of-esb-market.html"&gt;The future of the ESB market&lt;/a&gt; posting, Matt Gunter asked a couple of questions. The first question is:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;I am curious what your latest thoughts are about the relative value of .NET vs. J2EE "superplatforms"&lt;br /&gt;&lt;br /&gt;Can they be fairly evaluated due to their radically different degrees of openness, standards support, and ability to leverage the value of open source-style collaboration?&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;These features are just some of the many features that should be considered when evaluating a superplatform. Personally I don't think that there are such radically different degrees of openness and standards support between the superplatforms. All superplatforms "embrace and extend" industry standards. .NET is built on an ISO standard. The Java platforms are built on JCP standards. All superplatforms provide excellent support for the stable bits of the web services framework (SOAP, WSDL, UDDI, WS-Security, and WS-I BP). Likewise, all superplatforms add their own proprietary bits that pretty much lock you into the platform. Users can avoid using these proprietary bits, but then they pass up some of the unique value-add of using the superplatform in the first place. If that's the goal, then I suggest using JBoss rather than one of the superplatforms.&lt;br /&gt;&lt;br /&gt;There is one important difference between the Microsoft and the other superplatforms -- .NET doesn't support Java, and therefore doesn't support the plethora of popular open source rebel frameworks out there, like Struts, Spring, and Hibernate. Likewise, the Java-based superplatforms don't support the .NET languages, and therefore don't support the plethora of .NET frameworks out there. Microsoft supplies a tremendous number of built-in frameworks, and there's a vibrant ecosystem of both open source and commercial add-on frameworks.&lt;br /&gt;&lt;br /&gt;One way of looking at the situation is that the open source community had to developed a bunch of rebel frameworks for Java mostly because the J2EE standard doesn't provide a reasonable set of built-in frameworks. Very few .NET users complain about how inadequate ASP.NET, ADO.NET, Avalon, and Indigo are. I don't know anyone that thinks that JSP/servlets is adequate without something like Struts, or that think that EJB CMP is a stellar piece of engineering.&lt;br /&gt;&lt;br /&gt;Openness, standards support, and ability to leverage the value of open source-style collaboration are important considerations, but just as important are things like:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;ease of use&lt;/li&gt;   &lt;li&gt;completeness of solution&lt;/li&gt;   &lt;li&gt;cohesiveness of the environment&lt;/li&gt;   &lt;li&gt;integration with user productivity applications (e.g., Office)&lt;/li&gt;   &lt;li&gt;integration with collaboration services&lt;/li&gt;   &lt;li&gt;price&lt;br /&gt;  &lt;/li&gt; &lt;/ul&gt; Platform selection is dependent on a number of factors and is strongly influenced by an organization's corporate principles. Every company has a slightly different position on a wide set of issues, e.g.:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;how do you feel about open source?&lt;/li&gt;   &lt;li&gt;are you risk takers or risk averse?&lt;/li&gt;   &lt;li&gt;Do you prefer to buy from a sinlge vendor or cobble together a best of breed solution?&lt;/li&gt;   &lt;li&gt;Do you tend to build or buy?&lt;/li&gt; &lt;/ul&gt; And now on to Matt's second question:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt; The same trends that are propelling Google seem to be working against Microsoft. Do these same trends not affect the longer-term prospects for "superplatforms"?&lt;/blockquote&gt;I agree that Google is a tremendous force to be reckoned with, and Google may very well emerge as the first in the next generation of superplatform vendors. But of all the current crop of superplatform vendors, I think Microsoft is best positioned to compete with Google. Microsoft is the only superplatform vendor that has any type of focus on the consumer marketplace. And Microsoft has already proven that it has the ability to make a massive mid-course change (embracing the Internet in the late '90s). I have a lot of confidence that Microsoft will remain in the game.&lt;br /&gt;&lt;br /&gt;As for the other superplatform vendors, I don't think they realize yet that Google is a threat to them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-113171915340995239?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/113171915340995239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=113171915340995239' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/113171915340995239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/113171915340995239'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2005/11/evaluating-superplatforms-google.html' title='Evaluating Superplatforms / The Google Threat'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-112699799896576776</id><published>2005-09-17T16:45:00.000-04:00</published><updated>2005-09-17T18:59:58.983-04:00</updated><title type='text'>REST and SOAP and document-oriented services</title><content type='html'>There's been an interesting discussion of REST and SOAP and document-oriented web services starting with Mark Baker's post called &lt;a href="http://www.coactus.com/blog/2005/07/towards-truly-document-oriented-web-services/"&gt;Towards truly document oriented Web services&lt;/a&gt;. I think this is one of Mark's best and most succinct efforts to explain the subtle, yet important differences between REST and SOAP, which continue to befuddle so many people.&lt;br /&gt;&lt;br /&gt;It all comes down to application semantics.&lt;br /&gt;&lt;br /&gt;One of the primary tenets of REST is the use of a uniform interface between components. In his &lt;a href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/rest_arch_style.htm"&gt;dissertation&lt;/a&gt; on REST, Roy Fielding describes the uniform interface as "the central feature that distinguishes the REST architectural style from other network-based styles". REST is closely associated with the HTTP application protocol because HTTP provides this type of uniform interface -- all components communicate using simple, generic methods: GET, POST, PUT, and DELETE.&lt;br /&gt;&lt;br /&gt;In Mark's post he explains the different application semantics expected when using POST versus PUT to send a SOAP message. POST implies "process this message", while PUT implies "store this message".&lt;br /&gt;&lt;br /&gt;SOAP is also an application protocol, with its own set of application protocol semantics. And these semantics are different from HTTP application protocol semantics. Even though SOAP messages are typically transferred using HTTP, for the most part SOAP hides/obscures the HTTP semantics from SOAP applications. The underlying SOAP runtime systems communicate using HTTP semantics, but SOAP applications communicate using SOAP semantics.&lt;br /&gt;&lt;br /&gt;SOAP uses (some would say abuses) the HTTP application protocol. Even though HTTP is an application protocol, SOAP treats HTTP as a lower-level communication protocol. But SOAP is an equal-opportunity application protocol abuser. SOAP treats other application protocols, such as WebSphere MQ, SMTP, and Jabber, the same way. From the SOAP perspective, these application protocols are all low-level communication protocols.&lt;br /&gt;&lt;br /&gt;The SOAP specifications define bindings of the SOAP application protocol semantics to other application protocol semantics, such as HTTP, SMTP, and WebSphere MQ (communication protocols). Simply put, SOAP uses HTTP and other application protocols to exchange messages between SOAP nodes. The SOAP nodes act as mediators between SOAP applications and the underlying communication protocols. Although there are some subtle differences between the various protocol bindings, SOAP does a fairly decent job of isolating the applications from the different semantics of the various underlying communication protocols. (SOAP 1.2 does a better job than SOAP 1.1 abstracting away the underlying protocol semantics.) In any case, the goal is that SOAP exposes the same application protocol semantics regardless of the underlying communication protocol.&lt;br /&gt;&lt;br /&gt;SOAP does not fully exploit the power of the HTTP application protocol. In fact, SOAP 1.1 explicitly constrains its use of HTTP to that of the HTTP POST operation. SOAP 1.1 over HTTP requires that SOAP requests be sent using POST. The specification doesn't indicate how to process requests using PUT. Therefore use of PUT is not supported by the SOAP protocol. SOAP 1.2 adds a description of using SOAP with HTTP GET, but it still doesn't describe how to use SOAP with HTTP PUT. Mark's example of using HTTP PUT to store a SOAP message is outside the scope of the SOAP protocol. In this example, HTTP PUT semantics apply, not SOAP semantics.&lt;br /&gt;&lt;br /&gt;Now -- getting back to the topic of REST and SOAP and document-oriented web services ...&lt;br /&gt;&lt;br /&gt;In his post, Mark references one of my &lt;a href="http://searchwebservices.techtarget.com/ateQuestionNResponse/0,289625,sid26_cid494324_tax289201,00.html"&gt;responses&lt;/a&gt; to an Ask the Expert question on TechTarget regarding the difference between Document and RPC style services. In my response I indicated that the difference between Document and RPC is fairly minor, but the more import consideration is the encoding style. Document style messages are encoded literally according to a schema. Back in 2002, when I wrote this response, RPC style messages were typically encoding using a data model called SOAP encoding. (Many SOAP engines now also support literal encoding of RPC style messages.)&lt;br /&gt;&lt;br /&gt;Mark has a different perspective, though. He claims that the more important difference between Document and RPC style services is whether or not the message contains a method name. When using RPC style, the message always contains the method name. When using document style, the message may or may not contain the method name. When using the "wrapped" programming convention, the message does contain the method name. When using the "unwrapped" programming style, the message typically doesn't contain the method name.&lt;br /&gt;&lt;br /&gt;To quote Mark's post:&lt;br /&gt;&lt;blockquote&gt;While the encodings used were certainly different, each with its own not-insignificant pros and cons, what Anne failed to point out is that the RPC example &lt;em&gt;included an operation name&lt;/em&gt; (”placeOrder”) while the document oriented example did not. This constitutes an extremely significant architectural difference, as it tells us that Anne’s document example uses a &lt;em&gt;state transfer&lt;/em&gt; style, while the RPC example does not.&lt;/blockquote&gt;But I have to disagree with Mark's assertion. And here I have to go back to the differences between HTTP and SOAP application protocol semantics. Mark makes the assumption that if the message does not include a method name, then it must therefore be using a uniform interface -- an implicit "processMessage" operation. But that's not how SOAP works. SOAP doesn't require that you specify a method name in order to map the request to a specific method. Per the SOAP specification, the SOAP node determines what method to invoke based on the qualified name (QName) of the child element of the SOAP Body  element.  It really doesn't matter if the name of that element is a noun ("purchaseOrder") or a verb ("placeOrder"). The QName determines the action to be performed. These SOAP semantics are fundamentally different from HTTP/REST semantics.&lt;br /&gt;&lt;br /&gt;In REST, the "method" that will be invoked is always determined by the URL to which the request is sent, not by the contents of the request message. REST has a uniform interface, therefore a POST to a URL will always invoke the implicit "processMessage" operation.&lt;br /&gt;&lt;br /&gt;In SOAP, the "method" that will be processed is determined by both the URL to which the request is sent &lt;span style="font-style: italic;"&gt;and &lt;/span&gt;the contents of the request -- the QName of the SOAP Body. So, for example, a single service might support multiple methods: placeOrder, cancelOrder, getOrderStatus. Each method is invoked by sending a different document:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;purchaseOrder invokes placeOrder&lt;/li&gt;   &lt;li&gt;canceledOrderID invokes cancelOrder&lt;/li&gt;   &lt;li&gt;pendingOrder invokes getOrderStatus&lt;br /&gt;  &lt;/li&gt; &lt;/ul&gt; I guess my point is that document-oriented doesn't mean that its RESTful. SOAP semantics are just different from REST/HTTP semantics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-112699799896576776?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/112699799896576776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=112699799896576776' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/112699799896576776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/112699799896576776'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2005/09/rest-and-soap-and-document-oriented.html' title='REST and SOAP and document-oriented services'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-111426714477133241</id><published>2005-04-23T08:25:00.000-04:00</published><updated>2005-04-23T10:39:04.776-04:00</updated><title type='text'>The future of the ESB market</title><content type='html'>There's been some interesting discussion of late regarding the value of ESBs.&lt;br /&gt;&lt;br /&gt;Richard Turner, a Program Manager at Microsoft, recently posted &lt;a href="http://blogs.msdn.com/richardt/archive/2005/03/23/401146.aspx"&gt;To ESB or not to ESB&lt;/a&gt;, which asks some questions regarding the usefulness of an ESB once Indigo is fully baked, and the WS-* stack becomes fully mature. In particular, Richard asks:&lt;br /&gt;&lt;ol&gt; &lt;li&gt;Does anyone out there want to build their Enterprise infrastructure on a technology from a single vendor, supporting a single platform? &lt;/li&gt;&lt;li&gt;Does anyone out there see benefit from building their Enterprise upon a technology which is closed and proprietary?&lt;/li&gt; &lt;/ol&gt; These questions pertain to the fact that most of the ESB products on the market today are based on Java and proprietary MOM protocols. (Note that IONA Artix is based on C++, it provides native bindings for C++, Java, COBOL, PL/I, and .NET, and it doesn't use a proprietary MOM -- so not all ESBs are Java- and MOM-centric.)&lt;br /&gt;&lt;br /&gt;Richard concludes his missive with this question:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;What value, therefore, is an ESB? To my mind, an ESB is smart-plumbing to which to attach dumb nodes. To my mind, the ESB approach is less about providing customers with value and more about extending attempts to lock customers into a given platform. How, for example, would I add mainframe nodes, COM+ nodes, Web Service nodes etc. running on different platforms and technologies on top of JBI/Sonic/&lt;enter&gt; without the use of adaptors and translators? And more importantly, if I chose to change vendors, how would I replace my ESB with that from someone else?&lt;/li&gt; &lt;/ul&gt; In response, Dave Chappell, renowned ESB evangelist for Sonic Software , posted &lt;a href="http://www.oreillynet.com/pub/wlg/6916"&gt;ESB and the Road to Indigo&lt;/a&gt;. Dave makes a few good points about the value of an ESB:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;an ESB is based on a philosophy that a SOA should be configured rather than coded&lt;/li&gt;   &lt;li&gt;an ESB can mediate between different protocols, API conventions, and invocation styles&lt;/li&gt;   &lt;li&gt;an ESB supports incremental adoption of a SOA&lt;/li&gt; &lt;/ul&gt; &lt;span style="font-weight: bold;"&gt;My take:&lt;/span&gt;&lt;br /&gt;I think an ESB provides an important value-add &lt;span style="font-style: italic;"&gt;today&lt;/span&gt;, but I view it as a short term solution, and people should use it with caution. Many ESBs promote the deployment of proprietary protocols, and in general, I think that's something you want to avoid. You don't want to lock yourself into a proprietary solution now that open. non-proprietary options are available. I also agree with Richard that once the core platforms (.NET, WebSphere, WebLogic, CICS, etc.) and application systems (e.g., SAP, Oracle, etc.) have inherent support for secure, reliable, transacted web services, the value of an ESB will be greatly diminished.&lt;br /&gt;&lt;br /&gt;The ESB market is heading for a severe squeeze play; expect some significant market consolidation.&lt;br /&gt;&lt;br /&gt;The first &lt;a href="http://blogs.msdn.com/richardt/archive/2005/03/23/401146.aspx#401194"&gt;comment&lt;/a&gt; posted to Richard's post asks this question:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;With WS, WSE and Indigo, aren't there still some missing "pieces", such as Monitoring, Auditing, Exception Management, Measurement, Definition and monitoring of SLAs, etc.? Isn't this the space that an ESB should cover?&lt;/li&gt; &lt;/ul&gt; I think this is a really interesting question. Today, none of the ESB products provide this type of functionality. Instead, this is the territory of the web services management (WSM) vendors (e.g., Actional, AmberPoint, Blue Titan, Infravio, SOA Software, and most recently Oracle [who acquired Oblix/Confluent]). Now what I find interesting is that some of these players -- particularly Blue Titan and SOA Software -- are starting to deliver ESB capabilities, such as reliable messaging and format/protocol/invocation mediation. And Systinet, Cape Clear, and IONA (traditionally web services platform [WSP] players) are also supplying ESB functionality. The major superplatform players also have plans to deliver ESB functionality (Microsoft "Indigo", IBM "Pyxis", BEA "QuickSilver", Oracle "Fusion", etc.) I just don't see the stand-alone ESB market surviving the combined assault from WSM and the superplatforms..&lt;br /&gt;&lt;br /&gt;When it comes right down to it, a web services infrastructure consists of three types of entities:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;endpoints&lt;br /&gt;  &lt;/li&gt;   &lt;li&gt;intermediaries&lt;/li&gt;   &lt;li&gt;registries&lt;/li&gt; &lt;/ul&gt; Endpoints are typically implemented using a WSP, although you can also implement an endpoint using an ESB. Essentially, an ESB provides a WSP for legacy applications (via adapters), and an ESB can expose a composite application as a web service (most ESBs provide an orchestration engine). Some ESBs (including Sonic) allow you to create a new POJO service, host it in the ESB container, and expose it as a web service.&lt;br /&gt;&lt;br /&gt;Intermediaries intercept web services traffic and enforce policies regarding security, reliability, routing, transformation, mediation, event processing, orchestration, transactions, monitoring, auditing, etc. Intermediaries can run either as proxies along the message path or as interceptors within an endpoint. Both WSM and ESB products provide intermediaries. WSM intermediaries typically support security, routing, transformation, mediation, monitoring, and auditing. ESB intermediaries typically support reliability, routing, transformation, mediation, orchestration, and event processing. (Obviously there's a lot of overlap between WSM and ESB.) You can also build custom intermediaries using a WSP. Most WSPs provide a mechanism to implement interceptors (handlers) that run inside the endpoint. And you can also develop your own proxy.&lt;br /&gt;&lt;br /&gt;Web service registries (WSR) maintain information about endpoints and intermediaries. Registries can be used at development time to discover services and metadata; and they can be used at runtime for dynamic location resolution or runtime service selection. Many WSM products also use a registry for provisioning and runtime management -- Amberpoint, Blue Titan, Infravio, and SOA Software all use registries for management.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The future of the ESB market&lt;br /&gt;&lt;/span&gt;I expect the pure-play ESB market to go away within the next 3-5 years. Today there are about a dozen vendors promoting their wares as ESB. I just don't see the market supporting this many vendors for very much longer.&lt;br /&gt;&lt;br /&gt;Consider what happened to the WSP market. Four years ago, there were about a dozon independent WSP startups. The only survivors today are Systinet and Cape Clear. And, in fact, neither company really markets itself as a WSP player anymore. Systinet is the leading independent registry vendor. Cape Clear is struggling to make it as an ESB vendor now.&lt;br /&gt;&lt;br /&gt;Also consider what has been happening in the WSM market. Three years ago, there were about a dozen WSM startups. But since then, CA acquired Adjoin, HP acquired Talking Blocks, Oracle acquired Oblix which acquired Confluent, SOA Software acquired Flamenco, and Actional acquired Westbridge. At this point, the survivors are Actional, Amberpoint, Blue Titan, Infravio, and SOA Software. I anticipate further consolidation.&lt;br /&gt;&lt;br /&gt;The ESB market includes Cape Clear, Fiorano, IONA, Polar Lake, SeeBeyond, Sonic, TIBCO, webMethods, and I'm sure a few others. In addition, superplatform players IBM, Microsoft, BEA, and Oracle are heading into this space. And Blue Titan, SOA Software, and Systinet all provide ESB-lite solutions.  Definitely this market will experience some serious consolidation.  More to the point, I expect that the ESB, WSM, and WSR markets will merge.&lt;br /&gt;&lt;br /&gt;In the long run, maybe 4-5 players will survive. My bets are on Sonic, Systinet, TIBCO, and webMethods.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-111426714477133241?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/111426714477133241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=111426714477133241' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/111426714477133241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/111426714477133241'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2005/04/future-of-esb-market.html' title='The future of the ESB market'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-111212346544803881</id><published>2005-03-29T13:57:00.000-05:00</published><updated>2005-03-29T14:11:05.450-05:00</updated><title type='text'>Web services are not distributed objects</title><content type='html'>One of the most important concepts to understand about the web services framework (WSF) is that it is not a distributed object system. Web services communicate by exchanging messages -- it's more like JMS than RMI. The WSF doesn't support remote references, remote object garbage collection, or any of the other distributed object features developers have come to rely upon in RMI, CORBA, DCOM, or other distributed object systems.&lt;br /&gt;&lt;br /&gt;The fundamental purpose of the WSF is to enable interoperability across dissimilar systems that don't necessarily understand concepts such as method overloading, object inheritance, and polymorphism. Hence web service interfaces should not expose these OO concepts.&lt;br /&gt;&lt;br /&gt;A service should expose a document-oriented interface rather than an object-oriented interface. The basic best practices are:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Flatten object graphs. Don’t expose language-specific object collections, such as maps, lists, or datasets. Instead convert all collections into arrays.&lt;/li&gt;   &lt;li&gt;Don’t use overloaded methods. Each method should have a different operation name.&lt;/li&gt;   &lt;li&gt;Expose a "chunky" interface rather than a "chatty" interface. In other words, don’t expose getter and setter operations for every member in the object class.&lt;br /&gt;  &lt;/li&gt; &lt;/ul&gt; These best practices relate back to the differentiation between message exchange versus distributed object systems. When using distributed objects, the object resides on the server side, and the client invokes operations on the object using a proxy. The client does not have its own copy of the object. When using a message exchange system, the client side application should have its own object -- not just a proxy. (And – by the way – the client’s object may be different from the server's object.) When the client communicates with the server, it simply passes data, not behavior. It's much more loosely coupled.&lt;br /&gt;&lt;br /&gt;It may be necessary to build an abstraction layer between the WSDL interface and the application that implements the service. This abstraction layer performs the necessary mapping between the document-oriented WSDL interface and the application's object model. It also provides much better insulation for flexibility and change.&lt;br /&gt;&lt;br /&gt;For best interoperability, developers should use document/literal with the “wrapped” programming convention. .NET uses the “wrapped” style by default. The JAX-RPC specification also requires support for the “wrapped” style. The "wrapped" style supports a programming model that makes document/literal feel like RPC style. "Wrapped" style is very similar to RPC/literal, except for two important distinctions:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;.NET supports "wrapped" style, but it doesn't support RPC/literal&lt;br /&gt;  &lt;/li&gt;   &lt;li&gt;"Wrapped" style defines a schema of the full soap body (which makes it very easy to validate), while RPC/Literal only defines type information rather that the full schema of the message elements (which makes validation slightly more complicated).&lt;/li&gt; &lt;/ol&gt; Please see my previous blog entry on the "&lt;a href="http://atmanes.blogspot.com/2005/03/wrapped-documentliteral-convention.html"&gt;wrapped&lt;/a&gt;" style for more information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-111212346544803881?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/111212346544803881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=111212346544803881' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/111212346544803881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/111212346544803881'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2005/03/web-services-are-not-distributed.html' title='Web services are not distributed objects'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-111133184767869262</id><published>2005-03-20T08:39:00.000-05:00</published><updated>2006-06-26T07:43:51.316-04:00</updated><title type='text'>The "wrapped" document/literal convention</title><content type='html'>In my &lt;a href="http://atmanes.blogspot.com/2005/03/first-stop-ws-i.html"&gt;First Stop: WS-I&lt;/a&gt; posting, I recommended that web service developers always use document/literal, even though the WS-I Basic Profile allows rpc/literal. Some people might resist this notion, thinking the document style is harder to work with than rpc style, but that just isn't true. For developers that want an RPC-like programming experience using document/literal, all you have to do is use the "wrapped" convention.&lt;br /&gt;&lt;br /&gt;Most SOAP implementations now support the "wrapped" convention. .NET uses it by default (and it doesn't support rpc/literal). All JAX-RPC compliant implementations also must support "wrapped". The "wrapped" convention yields the best results for interoperability.&lt;br /&gt;&lt;p class="MsoNormal"&gt;The "wrapped" convention produces document/literal services, and yet it supports an RPC-style programming interface (i.e., it performs automatic marshalling of input parameters and return values).&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/p&gt; &lt;o:p&gt;&lt;/o:p&gt;The rules for the "wrapped" convention are fairly simple:    &lt;ol&gt;   &lt;li&gt;"Wrapped" is a form of document/literal, therefore it must follow all the rules defined for document/literal. When defining a document/literal service, there can be at most one body part in your input message and at most one body part in your output message. You do *not* define each method parameter as a separate part in the message definition. (The parameters are defined in the types section, instead.)&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Each part definition must reference an element (not a type) defined, imported, or included in the types section of the WSDL document. These element definitions are "wrapper" elements (hence the name of this convention). You define your input and output parameters as element structures within these wrapper elements.&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;A wrapper element must be defined as a complex type that is a sequence of elements. Each child element in that sequence will be generated as a parameter in the service interface.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;   &lt;li&gt;The name of the input wrapper element must be the same as the operation name.&lt;/li&gt;   &lt;li&gt;The name of the output wrapper element should be (but doesn't have to be) the operation name appended with "Response" (e.g., if the operation name is "add", the output wrapper element should be called "addResponse").&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;In the binding definition, the soap:binding should specify style="document" (although this is the default value, so the attribute may be omitted), and the soap:body definitions must specify use="literal" and nothing else. You must not specify the namespace or encodingStyle attributes in the soap:body definition.&lt;/li&gt; &lt;/ol&gt;           &lt;p class="MsoNormal"&gt;The following WSDL shows an example of the "wrapped" convention. It defines a simple add operation that takes two ints in and returns an int . This WSDL permits you to invoke the service like this:&lt;/p&gt;             &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;span style=""&gt;         &lt;/span&gt;int sum = addProxy.add(arg1, arg2);&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;Notice that the portType defines an operation called "add". It takes the "addRequest" message in and returns the "addResponse" message out. The "addRequest" message has one body part called "parameters" (.&lt;st1:stockticker&gt;NET&lt;/st1:stockticker&gt; always uses this name for "wrapped" style). It references an element called "add". (The name of this input element must be the same as the operation name.) The "add" element is defined as a complex type that is a sequence of two elements (the input parameters), "arg1" and "arg2", which are both defined as ints. The "addResponse" message has one body part, also called "parameters", and it references an element called "addResponse". The "addResponse" element is defined as a complex type that is a sequence of one element (the return value), "sum", which is defined as an int.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;wsdl:definitions name=’addWrappedLiteral’&lt;br /&gt;&lt;br /&gt;    targetNamespace='urn:example/wrapped/add'&lt;br /&gt;&lt;br /&gt;    xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'&lt;br /&gt;&lt;br /&gt;    xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'&lt;br /&gt;&lt;br /&gt;    xmlns:types='urn:add/types'&lt;br /&gt;&lt;br /&gt;    xmlns:intf='urn:example/wrapped/add'&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;wsdl:types&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;xsd:schema elementFormDefault="qualified"&lt;br /&gt;&lt;br /&gt;        targetNamespace='urn:add/types'&lt;br /&gt;&lt;br /&gt;        xmlns:xsd='http://www.w3.org/2001/XMLSchema'&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;xsd:element name="add" type="types:add_t"/&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;xsd:element name="addResponse" type="types:addResponse_t"/&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;xsd:complexType name="add_t"&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;xsd:sequence&amp;gt;&lt;br /&gt;&lt;br /&gt;          &amp;lt;xsd:element name="arg1" type="xsd:int"/&amp;gt;&lt;br /&gt;&lt;br /&gt;          &amp;lt;xsd:element name="arg2" type="xsd:int"/&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;/xsd:sequence&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;/xsd:complexType&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;xsd:complexType name="addResponse_t"&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;xsd:sequence&amp;gt;&lt;br /&gt;&lt;br /&gt;          &amp;lt;xsd:element name="sum" type="xsd:int"/&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;/xsd:sequence&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;/xsd:complexType&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/xsd:schema&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/wsdl:types&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;wsdl:message name='addRequest'&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;wsdl:part name='parameters' element='types:add'/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/wsdl:message&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;wsdl:message name='addResponse'&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;wsdl:part name='parameters' element='types:addResponse'/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/wsdl:message&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;wsdl:portType name='addPT'&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;wsdl:operation name='add'&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;wsdl:input message='intf:addRequest'/&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;wsdl:output message='intf:addResponse'/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/wsdl:operation&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/wsdl:portType&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;wsdl:binding name='addSoapBinding' type='intf:addPT'&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;soap:binding&lt;br /&gt;&lt;br /&gt;       transport='http://schemas.xmlsoap.org/soap/http'&lt;br /&gt;&lt;br /&gt;       style='document'/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;wsdl:operation name='add'&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;soap:operation soapAction='urn:example/wrapped/add'/&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;wsdl:input&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;soap:body use='literal'/&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;/wsdl:input&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;wsdl:output&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;soap:body use='literal'/&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;/wsdl:output&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/wsdl:operation&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/wsdl:binding&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;wsdl:service name='addService'&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;wsdl:port name='addSoapPort' binding='intf:addSoapBinding'&amp;gt;&lt;br /&gt;&lt;br /&gt;      &amp;lt;soap:address location='...'/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/wsdl:port&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;/wsdl:service&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/wsdl:definitions&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-111133184767869262?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/111133184767869262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=111133184767869262' title='39 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/111133184767869262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/111133184767869262'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2005/03/wrapped-documentliteral-convention.html' title='The &quot;wrapped&quot; document/literal convention'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>39</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-111125999294070504</id><published>2005-03-19T13:17:00.000-05:00</published><updated>2005-03-19T14:19:52.943-05:00</updated><title type='text'>Sun's new Java licensing is disappointing</title><content type='html'>Last week Sun announced a &lt;a href="http://news.com.com/Door+to+Java+source+code+opens+a+crack+wider/2100-7344_3-5621235.html?tag=nefd.t"&gt;new licensing scheme for Java&lt;/a&gt;. It's part of a larger plan, referred to as "Project Peabody", designed to increase transparency into the development process of the Java specifications and reference implementations.&lt;br /&gt;&lt;p&gt;According to Sun, "Project Peabody" has the following goals: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Simplify licensing practices&lt;/li&gt;&lt;li&gt;Increase transparency&lt;/li&gt;&lt;li&gt;Give developers a chance to contribute&lt;/li&gt;&lt;li&gt;While maintaining Java compatibility&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Sun has devised three new licenses to replace SCSL (Sun Community Source License), which is the extremely complex license Sun now uses for Java source code. These licenses will apply to J2SE 6.0 ("Mustang"). The three new licenses include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Java Distribution License (JDL)&lt;/li&gt;&lt;li&gt;Java Research License (JRL)&lt;/li&gt;&lt;li&gt;Java Internal Use License (JIUL)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;JDL applies to anyone that wants to distribute a J2SE implementation for any purpose other than research. The license requires that the J2SE implementation must prove J2SE compatibility by passing the TCK (Test Compatibility Kit). &lt;/p&gt;&lt;p&gt;JRL is (supposedly) designed to support the needs of the research community. It permits research groups to develop and share J2SE implementations for research purposes. If anyone wants to redistribute a derivation of J2SE for any purpose other than research, that entity must obtain a JDL license and pass the TCK. J2SE 5.0 ("Tiger") is now available under JRL. Sun plans to release weekly builds of "Mustang" under the JRL, also.&lt;/p&gt;&lt;p&gt;JIUL (pronounced "jewel") is designed to support the needs of the average company that uses Java. It permits "users" (personal, academic, or corporate entities) to make fixes and enhancement to the Java source code for their own internal use. Such users are not required to pass the TCK, but they also may not share their fixes with other users (except for research purposes).  JIUL relies "on the honor system" to ensure compatibility, but what that really means is that compatibility is not assured if you make modifications.&lt;/p&gt;&lt;p&gt;Sun has also developed a new set of contribution agreements. Developers are "encouraged", but not required, to contribute bug fixes and modifications back to Sun. Contributing developers retain rights to their code, but they must also grant all rights to the code to Sun.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;My take on all this&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;First and foremost: &lt;em&gt;JRL and JIUL are not open source&lt;/em&gt;. The first rule of open source is that it allows developers to fork the code. These licenses clearly prevent developers from forking the code.&lt;/p&gt;&lt;p&gt;At least Sun is upfront about it. They clearly stated that these licenses are not open source. Sun made the usual excuses about ensuring compatibility as their reason for not open sourcing the code. But I totally reject this argument.&lt;/p&gt;&lt;p&gt;Sun protects Java compatibility through the licensing of the Java brand, not through the licensing of the source code. An implementation may not be called "Java" unless it passes the TCK (Test Compatibility Kit). Using a GPL license -- or even CDDL (the new Solaris 10 open source license) -- Sun can use a dual licensing strategy to open up the source code, and yet still maintain a commercial licensing practice. &lt;/p&gt;&lt;p&gt;Sun is being greedy. They want the benefits of open source -- getting vast hordes of developers to contribute fixes and new ideas to the Java code base for free -- but they aren't willing to actually contribute the source code to the open source/research community. &lt;/p&gt;&lt;p&gt;I explained the JRL to an acquaintance of mine that has a research position at MIT, and his response was, "Well that's of no use. And why should I contribute my work to Sun?". Researchers want the ability to fork the code, and Sun definitely doesn't want people to fork the code -- that's the essence of the compatibility argument. &lt;/p&gt;&lt;p&gt;JIUL does offer some value to users. One of the most valuable benefits of open source is that it allows users to debug, fix, and tweak code to suit their specific requirements, and the JIUL does give a company that capability. I doubt, though, that very many companies will take advantage of this opportunity. Java is a bit too complex for most companies to want to muck around in. It's also potentially dangerous -- because if user companies do muck around in the code, they are likely to break compatibility. &lt;/p&gt;&lt;p&gt;When dealing with this type of code base, the real beneficiary of open source is the research community, which would like to work on building the next, better VM. But Sun doesn't want someone to build a better VM. Not unless they own it. Now, if they did a GPL license, then all modifications would have to be contributed back into the code base. From my perspective, Sun would be better off using GPL rather than JRL and JIUL. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-111125999294070504?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/111125999294070504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=111125999294070504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/111125999294070504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/111125999294070504'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2005/03/suns-new-java-licensing-is.html' title='Sun&apos;s new Java licensing is disappointing'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-111125285689766662</id><published>2005-03-19T11:43:00.000-05:00</published><updated>2005-03-19T12:20:56.903-05:00</updated><title type='text'>First Stop: WS-I</title><content type='html'>From my perspective, the most important set of specifications that developers should pay attention to are the WS-I Profiles.&lt;br /&gt;&lt;br /&gt;A WS-I profile takes an existing set of standards and/or specifications and goes through them with a fine-toothed comb, finding all possible ambiguities (any place where the specification says MAY or SHOULD rather than MUST) and all places where some important behaviour isn't completely specified, and then the profile constrains the specs and says "don't use these features -- always do it this way". This type of profiling is particularly important when dealing with non-standardized specifications, such as SOAP 1.1 and WSDL 1.1, because these specs have a lot of ambiguities. But profiling is also necessary with more formal standards, such as WS-Security, which offer a broad spectrum of options and choices, or with UDDI, which provides a basic registry protocol, but doesn't go so far as to provide a specific model for registering services.&lt;br /&gt;&lt;br /&gt;WS-I's first deliverable was the &lt;a href="http://www.ws-i.org/Profiles/BasicProfile-1.1.html"&gt;Basic Profile &lt;/a&gt;(BP). The WS-I BP defines guidelines for developing web services using SOAP 1.1, WSDL 1.1, and UDDI 2.0. There are many ambiguities, contradictions, and errors in the SOAP 1.1 and WSDL 1.1 specifications, so it's critical that developers follow this profile if they want to build interoperable web services.&lt;br /&gt;&lt;br /&gt;WS-I has also defined an &lt;a href="http://www.ws-i.org/Profiles/AttachmentsProfile-1.0.html"&gt;Attachments Profile&lt;/a&gt;, which defines guidelines for passing attachments using SOAP with Attachments (SwA). Unfortunatley, because Microsoft refuses to support SwA, the Attachments Profile doesn't really enable interoperability. I can understand Microsoft position on SwA, though -- SwA is a remarkably insecure mechanism for passing attachments. In the future (probably 2006), most SOAP platforms will adopt MTOM as the standard mechanism to pass attachments, and Microsoft is implementing support for MTOM in Indigo. (I'll be posting more on attachment mechanisms in a future blog entry.)&lt;br /&gt;&lt;br /&gt;As the name implies, the WS-I BP is a &lt;em&gt;basic&lt;/em&gt; profile -- meaning that it supports only basic communications -- it does not define how to use security, reliability, or any other advanced features. But it is the bible for how to build basic web services. The biggest constraint defined by this profile is that it disallows use of the SOAP encoding system. The profile describes in detail how to build web services that use either Document/Literal or RPC/Literal style message formats. I'll go one step further and recommend that developers build only Document/Literal services. Developers should avoid using RPC/Literal because many SOAP implementations (including the two most popular implementations: .NET and Apache Axis) don't support RPC/Literal. (Axis 1.2 can support RPC/Literal, but it doesn't work very well. Microsoft is adding support for RPC/Literal in Indigo.  But even so, I still recommend Document/Literal over RPC/Literal. I'll be posting more on message styles in a future blog entry.)&lt;br /&gt;&lt;br /&gt;WS-I is currently working on the &lt;a href="http://www.ws-i.org/Profiles/BasicSecurityProfile-1.0.html"&gt;Basic Security Profile &lt;/a&gt;(BSP). The group has published a very interesting document that discusses the various &lt;a href="http://www.ws-i.org/Profiles/BasicSecurity/SecurityChallenges-1.0.pdf"&gt;Security Challenges, Threats and Countermeasures&lt;/a&gt; associated with using web services. The BSP profile (which is still in draft form) describes how to use transport-level (SSL/TLS) and message-level (WS-Security) security mechanisms to secure SOAP messages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-111125285689766662?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/111125285689766662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=111125285689766662' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/111125285689766662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/111125285689766662'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2005/03/first-stop-ws-i.html' title='First Stop: WS-I'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11558121.post-111125032337980547</id><published>2005-03-19T11:08:00.000-05:00</published><updated>2005-03-19T11:38:43.380-05:00</updated><title type='text'>Back online</title><content type='html'>After five months of being offline, I figure that I have no excuse anymore -- it's time to get my blog going again.&lt;br /&gt;&lt;br /&gt;For those of you that followed my previous blog, you'll know I'm not a frequent blogger. According to &lt;a href="http://www.rebeccablood.net/"&gt;Rebecca Blood's&lt;/a&gt; blogging taxonomy, I maintain a "notebook" blog. I tend to write longer (hopefully informative) posts on technical subject areas. My favorite subject areas are web services and open source.&lt;br /&gt;&lt;br /&gt;In my book, &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321185773/qid=1061297797/sr=8-1/ref=sr_8_1/102-7953549-6805728?v=glance&amp;s=books&amp;amp;n=507846"&gt;Web Services: A Manager's Guide&lt;/a&gt;, I promised to post periodic status updates on web services standards and specifications, and I am using this blog to fulfill that promise. For all the latest news on things happening in the world of XML, I also recommend that you visit Robin Cover's &lt;a href="http://xml.coverpages.org"&gt;Cover Pages&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'm also a regular contributor to the Apache Axis user discussion list, and periodically I will capture some of my more informative missives from that list and post them here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11558121-111125032337980547?l=atmanes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://atmanes.blogspot.com/feeds/111125032337980547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11558121&amp;postID=111125032337980547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/111125032337980547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11558121/posts/default/111125032337980547'/><link rel='alternate' type='text/html' href='http://atmanes.blogspot.com/2005/03/back-online.html' title='Back online'/><author><name>Anne Thomas Manes</name><uri>http://www.blogger.com/profile/12283197990602675422</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-sVMlB2aRRVU/TitKXbhBKoI/AAAAAAAAADU/acq1u2sr7aU/s220/atm-headshot.jpg'/></author><thr:total>0</thr:total></entry></feed>
