<?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-35260402</id><updated>2011-04-21T12:37:56.789-07:00</updated><category term='AMQP'/><category term='Architecture'/><category term='General'/><category term='SOA'/><category term='REST'/><category term='Axis2'/><category term='Open Source'/><title type='text'>Rajith's Column -I have moved to a new blog at http://rajith.2rlabs.com/</title><subtitle type='html'>Welcome to my world</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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-35260402.post-3608040746594165809</id><published>2007-11-24T07:41:00.000-08:00</published><updated>2007-11-24T08:06:53.008-08:00</updated><title type='text'>Last post on this blog, starting my own at http://rajith.2rlabs.com/</title><content type='html'>I had some web space available for over an year and decided to use that space to run my own blog at &lt;a href="http://rajith.2rlabs.com/"&gt;http://rajith.2rlabs.com/&lt;/a&gt;.&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;I have imported all my previous posts into my new blog. I found Word Press easy to work with yet flexible and powerful enough to customize the way I want. I am using &lt;a href="http://www.fireandknowledge.org/archives/2007/09/05/blueprint-wordpress-theme/"&gt;blueprint&lt;/a&gt; as my theme and found it to be very elegant. It's built on the &lt;a href="http://code.google.com/p/blueprintcss/"&gt;Blueprint CSS framework&lt;/a&gt;. If anybody is interested you can download it from &lt;a href="http://www.fireandknowledge.org/archives/2007/09/05/blueprint-wordpress-theme/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Many thanks to the Blogger team for improving blogger over the last few months and I thorughly enjoyed my blogging experiance here. I like to be in control of my everyday life, including blogging. Hence my move  to my own thing.&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-3608040746594165809?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/3608040746594165809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=3608040746594165809' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/3608040746594165809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/3608040746594165809'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/11/last-post-on-this-blog-starting-my-own.html' title='Last post on this blog, starting my own at http://rajith.2rlabs.com/'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-2715048300750261298</id><published>2007-11-16T17:39:00.001-08:00</published><updated>2007-11-19T08:31:40.913-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><title type='text'>Scaling your system - What I learnt from Dan Pritchett's (eBay) talk</title><content type='html'>I was lucky enough to attend both talks given by &lt;a href="http://www.addsimplicity.com/"&gt;Dan Pritchett&lt;/a&gt; during the &lt;a href="http://softwaresummit.com/"&gt;Colorado Software Summit&lt;/a&gt; this year. The first one was, "You Scaled your what". If you want to know what scalability is, here is an excellent &lt;a href="http://www.allthingsdistributed.com/2006/03/a_word_on_scalability.html"&gt;introduction&lt;/a&gt; by Werner Vogels. After listening to what Dan had to say, the following points stood out in my mind&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You need to understand and take complete control of your architecture. Read my post on &lt;a href="http://mutlix.blogspot.com/2007/10/architecture-is-your-responsibility.html"&gt;Architecture is your responsibility&lt;/a&gt; for more thoughts on this.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You need to have scalability in mind right from the beginning. Trying to achieve scalability later can be time consuming and very costly. Quoting from Werner Vogels &lt;a href="http://www.allthingsdistributed.com/2006/03/a_word_on_scalability.html"&gt;post&lt;/a&gt; &lt;/li&gt;&lt;blockquote&gt;Why is scalability so hard? Because scalability cannot be an after-thought. It requires applications and platforms to be designed with scaling in mind, such that adding resources actually results in improving the performance or that if redundancy is introduced the system performance is not adversely affected. Many algorithms that perform reasonably well under low load and small datasets can explode in cost if either requests rates increase, the dataset grows or the number of nodes in the distributed system increases.&lt;br /&gt;&lt;/blockquote&gt;&lt;li&gt;Transactional scaling is just one dimension. You need to think about Scalability of data, operational,deployment, power ..etc. This is a minimalistic set. Try to figure out what dimensions are important to your organization.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;All scalability dimensions are related and impacts each other. Any dimension ignored can could evolve into a problem for your application&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Prefer vertical over horizontal scaling. Vertical scaling is better for your vendors and is not a viable long term strategy. There is so much you can get by increasing memory, CPU etc..&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;Transactional Scaling&lt;/u&gt;&lt;br /&gt;Usually measured in TPS and is a traditional indicator for application performance.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Keep asking the question "How long can the business survive?" based on,&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Time-to-live on current resources.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Time-to-live on maximum plausible configuration.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;These metrics should be taken regularly to anticipate possible production bottle necks and identify issues before they become a crisis.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;Data Scaling&lt;/u&gt;&lt;br /&gt;How well does your data scale? Think about,&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Functional Decomposition, group data by logical relationships, business importance,transactional volumes etc.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Think about partitioning data (sharding).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Is all data equally important? prioritizing your data and allocating resources accordingly will help you scale better.&lt;/li&gt;&lt;p&gt;&lt;/p&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;Operational Scalability&lt;/u&gt;&lt;br /&gt;How hard is it to run your software? Operational scalability is a software problem and you need to think about operational concerns right from the beginning. Pay attention to, &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Logging metrics, Monitoring.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Controlling/updating/tuning live apps without disrupting traffic.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;Deployment Scalability&lt;/u&gt;&lt;br /&gt;You need to design/architect your systems while keeping the following in mind,&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Ability to do incremental roll outs (and rollback if there are problems) without disrupting live traffic.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Managing component dependencies during deployment without disrupting live traffic.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your architecture shouldn't assume or decouple itself to any hardware,network topology or data center topology. This allows you to take advantage of new hardware, network topologies ..etc without significant changes.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;Power Scalability&lt;/u&gt;&lt;br /&gt;Power can be a limiting factor in a data center and may put bounds on transactional scaling.&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;How efficient is your software?, wasted clock cycles == wasted watts.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Consider vitalization for best utilization of your hardware resources.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;Some good tips I managed to note down&lt;/u&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Run old and new schema parallelly and then take out the old schema after a while when you gain enough confidence.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Prioritize services, willing to take a hit on certain services over others.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Incremental rollouts is a very good way to roll out new features while managing risk and also prevents taking the system offline.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Schedule deployment during working hours instead of weekends/nights as this enables your developers, support staff to attend to problems while they are alert and without being distracted by non work issues.If you do incremental rollouts this is possible as you are not disrupting traffic.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-2715048300750261298?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/2715048300750261298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=2715048300750261298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/2715048300750261298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/2715048300750261298'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/11/scaling-your-system-what-i-learnt-from.html' title='Scaling your system - What I learnt from Dan Pritchett&apos;s (eBay) talk'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-1499603742569694477</id><published>2007-11-14T15:34:00.000-08:00</published><updated>2007-11-14T18:18:07.136-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><title type='text'>The value of principled design - REST is just one example</title><content type='html'>To me the value of Roy Fielding's &lt;a href="http://www.ics.uci.edu/%7Efielding/pubs/dissertation/top.htm"&gt;dissertation&lt;/a&gt;  goes beyond  REST. Steve Vinoksi summarised it very well in one of his comments while answering a comment I made on his &lt;a href="http://steve.vinoski.net/blog/2007/11/11/soa-and-architectural-constraints/"&gt;blog&lt;/a&gt;.&lt;br /&gt;&lt;blockquote&gt;It’s(Roy's dissertation) not really primarily about REST; rather, it’s about principled design. Much of his dissertation is about architectural elements, principles, constraints, properties, and the relationships between them all. REST is used as a very clear example in chapter 5 of what principled design is all about.&lt;br /&gt;&lt;/blockquote&gt;Why can't we use a principled design approach when we do SOA or for that matter any other architecture?&lt;br /&gt;&lt;br /&gt;When we add contraints or relax constraints we induce certain properties in our architecture. As an architect you make an educated desision as to what constraints make sense in your environment and what doesn't. When designing systems don't we go through decisions like "should we make these services stateless or statefull ..etc" during our design meetings ?&lt;br /&gt;&lt;br /&gt;I think in what ever system you design as an architect you should think through and note down the constraints you want to impose on your system. This will provide a proper foundation to your system and an excellent guideline to your developers which will clearly communicate the desired goals of your system. Then later on when somebody else wants to relax any of these constraints or add more constraints they already have a guideline and can see how the "relaxing of an existing constraint" or the "addition of a new constraint" can impact the overall system.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;REST is just a name coined by Roy to identify a set of constraints&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;, and they are not the only constraints, nor the best combination of constraints in every situation.&lt;/span&gt; As Steve mentioned Roy spends the first few chapters providing an excellent analysis about "architectural elements, principles, constraints, properties, and the relationships between them all" and of course the value of a principled design approach.&lt;br /&gt;To me the value of Roy's thesis goes beyond REST and I hope most people would realize the same.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-1499603742569694477?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/1499603742569694477/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=1499603742569694477' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/1499603742569694477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/1499603742569694477'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/11/value-of-principled-design-rest-is-just.html' title='The value of principled design - REST is just one example'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-6577555680172449401</id><published>2007-11-01T15:35:00.000-07:00</published><updated>2007-11-01T15:54:41.147-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Global Warming ...is it really?</title><content type='html'>Dwight Hornbecker, the only geologist I've even known, had some very interesting facts about global warming. They sound kinda crazy, but I wonder if they are true. Here is what he told.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;One volcanic eruption can contribute to global warming more than what humans can do in an year&lt;/li&gt;&lt;li&gt;The earth was actually warmer than what it is now.&lt;/li&gt;&lt;/ul&gt;Dwight went onto explain that there is evidence to support that, a few million years ago the earth was a lot more warmer than what it is today. Then came the ice age.  And he maintains that we are still recovering from the ice age and earth is slowly returning back to it what it was. Not sure whom to believe. Is it Al Gore and his crew or Dwight?&lt;br /&gt;&lt;br /&gt;All I know is that humans haven't really figured it out yet. We think we do and try to mess around with nature, but I don't think we are even close at guessing/figuring out the real situation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-6577555680172449401?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/6577555680172449401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=6577555680172449401' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/6577555680172449401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/6577555680172449401'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/11/global-warming-is-it-really.html' title='Global Warming ...is it really?'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-6703806660790773549</id><published>2007-10-29T15:51:00.000-07:00</published><updated>2007-10-30T16:12:54.468-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><title type='text'>Architecture is YOUR responsibility</title><content type='html'>I read this post on &lt;a href="http://steve.vinoski.net/blog/2007/10/24/ron-schmelzer-on-esbs/"&gt;Steve &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Vinoski's&lt;/span&gt; blog&lt;/a&gt; that quoted &lt;a href="http://www.zapthink.com/management.html"&gt;Ron &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Schmelzer&lt;/span&gt; of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;ZapThink&lt;/span&gt;&lt;/a&gt;, who makes an excellent point. "&lt;span style="font-weight: bold; font-style: italic;"&gt;Architecture is YOUR responsibility&lt;/span&gt;". Well guess what, as much as vendors would like to say it is not, the reality is that you need to make the critical decisions about the architecture. Instead of some vendor, you need to be in charge of the direction and overall vision in terms of the architecture. Instead of choosing a vendor/product and building your strategy/architecture around it, you need to think through your strategy/architecture and choose the right vendor/product that can help you achieve your vision. If anybody was lucky enough to attend a talk given by &lt;a href="http://www.addsimplicity.com/"&gt;Dan &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Pritchett&lt;/span&gt; (eBay)&lt;/a&gt;, you would have realized that companies who understood this reality and took responsibility for the architectural decisions eventually made it big.&lt;br /&gt;&lt;br /&gt;Dan's comments on architecture was very insightful (I want to write a separate post on what I learned from his talk at the recently  concluded &lt;a href="http://www.softwaresummit.com/2007/speakers/pritchett.htm"&gt;Colorado Software Summit&lt;/a&gt;). The underlying truth of everything he said, was that they understood and took responsibility for the architectural decisions they made, instead of relying on some vendor to provide direction and overall vision.&lt;br /&gt;&lt;br /&gt;There is no vendor out there, that can provide you with some &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;ESB&lt;/span&gt; that can magically transform your enterprise into a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;SOA&lt;/span&gt; platform or some  messaging &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;middleware&lt;/span&gt; that can help you scale your enterprise  to whatever limits you want unless you know what you are doing and take ownership of the overall vision. You need to understand the overall architecture, make decisions and take responsibility for them. An &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;ESB&lt;/span&gt; or a messaging &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;middleware&lt;/span&gt; are merely a bunch of tools that help you get there or in other words they are just a means to an end not the end itself.&lt;br /&gt;&lt;br /&gt;There is no framework out there that can force architectural decisions on your solutions  that you are not willing to make yourself. During my &lt;a href="http://www.softwaresummit.com/2007/speakers/attapattu.htm"&gt;REST in peace talk&lt;/a&gt;, there was a surprising number of folks who asked me about a framework that can help them develop &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;RESFTful&lt;/span&gt; services. Guess what, the road to a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;RESTful&lt;/span&gt; approach (or for that matter any architectural style) starts with the architectural decisions you make (the way you think/design your services) and not with some framework where you have to flip a switch or use a bunch of annotations that turns your code into a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;RESTful&lt;/span&gt; service. That is precisely why the contract first approach is recommended over a code first approach when you do web services. You need to think about how you design your service first and then use some framework to generate your &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;WSDL&lt;/span&gt; and your code from that, not the other way around.&lt;br /&gt;&lt;br /&gt;We all remember how the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;EJB&lt;/span&gt; mania deceived us. Many companies paid millions of dollars to App Server vendors to solve their architectural problems. The whole notion of "you only need to think/write the business logic, and we will take care of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;remoting&lt;/span&gt;, transactions, persistence, scalability ..etc" was just an illusion. Neither did it preclude people from making extremely stupid architectural decisions nor did it provide anymore scalability than the simple tomcat web server for most of the use cases.&lt;br /&gt;&lt;br /&gt;You need to think carefully about the architectural &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_15"&gt;decisions&lt;/span&gt; you make and understand the impact it has on the overall goals/vision of your enterprise. You need to be aware of operational, load, managerial and geographical scalability from day one. You cannot offset your lack of architectural vision by using some framework, product or vendor.  It will only make your vendor happy, but not your customers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-6703806660790773549?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/6703806660790773549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=6703806660790773549' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/6703806660790773549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/6703806660790773549'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/10/architecture-is-your-responsibility.html' title='Architecture is YOUR responsibility'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-7583542685816926334</id><published>2007-10-29T14:11:00.000-07:00</published><updated>2007-10-30T16:16:21.488-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>Competition in open source is healthy</title><content type='html'>I read &lt;a href="http://sanjiva.weerawarana.org/2007/10/open-source-business-love-fest-not.html"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Sanjiva's&lt;/span&gt; post&lt;/a&gt; on the $subject and like to add my own observations. It is true that the Apache Web Server is the statue of liberty that stands tall among all the commercial web servers out there and has no peers in open source. However that is an isolated use case. We need to think more pragmatically. The predictions are such that, &lt;span style="font-weight: bold; font-style: italic;"&gt;most companies, in the future will have some form of involvement with Open Source&lt;/span&gt;. Naturally there will be some form of competition, and it is unavoidable.  But the more choice (open source or otherwise) a user has the better it gets, especially if there are several open source alternatives instead of one. If there is only one open source alternative and the user ends up with a bad experience with that solution, it can color the perspective of how that company, will look at open source in general.&lt;br /&gt;&lt;br /&gt;Competition provides choice and facilitates continuous growth and innovation in open source solutions. It drives a community to be more &lt;span style="font-weight: bold; font-style: italic;"&gt;responsive and responsible&lt;/span&gt; towards it's end users. This results in  better support in the form of fixing bugs or answering questions on the list. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Bcos&lt;/span&gt;&lt;span style="font-style: italic;"&gt; if you are not growing or &lt;/span&gt;&lt;span style="font-style: italic;"&gt;innovative&lt;/span&gt;&lt;span style="font-style: italic;"&gt; or if you are not responsive or responsible towards the end users then they will look elsewhere.&lt;/span&gt; One could argue that there are companies that provide support. However one should not forget that these companies are built on top of the community and rely heavily on the community for it's success. And any fixes/patches they make usually go upstream. Companies that don't usually have problems and fade away.&lt;br /&gt;&lt;br /&gt;Sometimes you would find that some community members are unhappy with the current direction of a project and they go ahead and form another project. &lt;span style="font-weight: bold; font-style: italic;"&gt;The difference in direction or focus is perhaps an integral part of the evolutionary process.&lt;/span&gt; Some of these projects eventually create a company behind it. One could also argue that these companies fragment a community and promote competition.  As long as this competition is both ethical and within the norms of standard industry practice, then the end users benefit from it. Why?? &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Bcos&lt;/span&gt; these companies will drive innovation, creativity and quality of the solutions they support, as their business model is based on it.&lt;br /&gt;&lt;br /&gt;Therefore some form of competition that is ethical (not mud slinging or cut throat competition) is healthy for making open source a viable option in enterprise software. The process of evolution will weed out inferior solutions and ensure the survival of the fittest. However this should not be based on how much marketing muscle a project/company behind it has, but rather be based on the community aspect and technical merits.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-7583542685816926334?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/7583542685816926334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=7583542685816926334' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/7583542685816926334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/7583542685816926334'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/10/competition-in-open-source-is-healthy.html' title='Competition in open source is healthy'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-3608908435099007739</id><published>2007-10-13T19:09:00.000-07:00</published><updated>2008-12-09T06:26:49.115-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AMQP'/><title type='text'>AMQP in 10 mins : Part4 - Standard Exchange Types And Supporting Common Messaging Use Cases</title><content type='html'>AMQP defines four standard exchange types (routing algorithms) that covers most of the common messaging use cases. &lt;span style="font-style: italic; font-weight: bold;"&gt;All AMQP brokers are required to support each of these exchange types and pre declare an instance of it identified by a standard name&lt;/span&gt;. The idea is to provide a simple out-of-the-box solution to most users. Users are free to create more instances of these exchange types with their own names.  Also as mentioned in the previous post, users can create different exchange types and instances of them.&lt;br /&gt;&lt;br /&gt;It is important to note that with any exchange type, a message can be matched with more than one queue if two or more queues are bound with the same routing criteria.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Direct Exchange&lt;/u&gt;&lt;br /&gt;The exchange does a &lt;span style="font-weight: bold; font-style: italic;"&gt;direct match&lt;/span&gt; between the routing key provided in the message and the routing criteria used when a queue is bound to this exchange.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HYd_TJzpt80/RyYP55cd8oI/AAAAAAAAAA0/t_CQX20iiCc/s1600-h/amq_direct.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_HYd_TJzpt80/RyYP55cd8oI/AAAAAAAAAA0/t_CQX20iiCc/s320/amq_direct.jpg" alt="" id="BLOGGER_PHOTO_ID_5126802713155072642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(Click on image)&lt;br /&gt;&lt;br /&gt;The most common use case is to bind the queue to the exchange using the queue name. However it is important to note that you could use any value for the binding.&lt;br /&gt;&lt;br /&gt;A broker is required to provide an instance of this exchange named "&lt;span style="font-weight: bold; font-style: italic;"&gt;amq.direct&lt;/span&gt;". The &lt;span style="font-style: italic; font-weight: bold;"&gt;Nameless Exchange&lt;/span&gt; is a special instance of the above exchange type where all queues are bound to this exchange automatically using the queue name as the routing criteria. This exchange instance has no public name, hence messages sent without specifying an exchange name are directed to this exchange.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Topic Exchange&lt;/u&gt;&lt;br /&gt;The exchange does a &lt;span style="font-weight: bold; font-style: italic;"&gt;wildcard match&lt;/span&gt; between the routing key and the routing pattern specified in the binding. The routing key is treated as zero or more more words,   delimited by '.' and supports special wildcard characters. "*" matches a single word and '#' matches zero or more words.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_HYd_TJzpt80/RyYQj5cd8pI/AAAAAAAAAA8/pjqF14NuAhU/s1600-h/amq_topic.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_HYd_TJzpt80/RyYQj5cd8pI/AAAAAAAAAA8/pjqF14NuAhU/s320/amq_topic.jpg" alt="" id="BLOGGER_PHOTO_ID_5126803434709578386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;(Click on image)&lt;br /&gt;&lt;br /&gt;A broker is required to provide an instance of this exchange named "&lt;span style="font-weight: bold; font-style: italic;"&gt;amq.topic&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Fanout Exchange&lt;/u&gt;&lt;br /&gt;Queues are &lt;span style="font-weight: bold; font-style: italic;"&gt;bound to this exchange with no arguments&lt;/span&gt;. Hence any message sent to this exchange will be forwarded to all queues bound to this exchange.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_HYd_TJzpt80/RyYQ1Zcd8qI/AAAAAAAAABE/3ywz9g59JxU/s1600-h/amq_fanout.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_HYd_TJzpt80/RyYQ1Zcd8qI/AAAAAAAAABE/3ywz9g59JxU/s320/amq_fanout.jpg" alt="" id="BLOGGER_PHOTO_ID_5126803735357289122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(Click on image)&lt;ul&gt;&lt;li&gt;One use case, is to use exchange chaining in a tree like hierarchy that can be used to push messages to a large number of subscribers. &lt;/li&gt;&lt;li&gt;Another use case is where a direct exchange or a topic exchange can do the initial filtering which then forwards the message to a fannout exchange which will push the messages to all it's queues.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;A broker is required to provide an instance of this exchange named "&lt;span style="font-weight: bold; font-style: italic;"&gt;amq.f&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;anout&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Headers Exchange&lt;/u&gt;&lt;br /&gt;Queues are &lt;span style="font-style: italic; font-weight: bold;"&gt;bound to this exchange with a table of arguments&lt;/span&gt; containing headers and values (optional). A special argument named &lt;span style="font-weight: bold; font-style: italic;"&gt;"x-match" &lt;/span&gt;determines the matching algorithm, where "all" implies an AND (all pairs must match) and "any" implies OR (at least one pair must match).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HYd_TJzpt80/RyYRYpcd8rI/AAAAAAAAABM/B57Anfd4Bkg/s1600-h/amq_match.jpg"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_HYd_TJzpt80/RyYRYpcd8rI/AAAAAAAAABM/B57Anfd4Bkg/s320/amq_match.jpg" alt="" id="BLOGGER_PHOTO_ID_5126804340947677874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(Click on image)&lt;br /&gt;&lt;br /&gt;A broker is required to provide an instance of this exchange named "&lt;span style="font-weight: bold; font-style: italic;"&gt;amq.match&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;&lt;u&gt;How AMQP Supports Common Messaging Use Cases&lt;/u&gt;&lt;br /&gt;The most common messaging use cases are point-to-point (or store and forward) and publisher/subscriber models. These models can be easily built on top of AMQP.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Point-to-Point&lt;/u&gt;&lt;br /&gt;routing_key == queue_name&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Pub/Sub&lt;/u&gt;&lt;br /&gt;routing_key == topic_heirarchy_value&lt;br /&gt;&lt;br /&gt;Next Part : Part5 - Lets look at some code - Python examples&lt;br /&gt;&lt;br /&gt;Prev Part : &lt;a href="http://mutlix.blogspot.com/2007/10/amqp-in-10-mins-part3-flexible-routing.html"&gt;Part3 - Flexible Routing Model&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-3608908435099007739?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/3608908435099007739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=3608908435099007739' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/3608908435099007739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/3608908435099007739'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/10/amqp-in-10-mins-part4-standard-exchange.html' title='AMQP in 10 mins : Part4 - Standard Exchange Types And Supporting Common Messaging Use Cases'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_HYd_TJzpt80/RyYP55cd8oI/AAAAAAAAAA0/t_CQX20iiCc/s72-c/amq_direct.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-3056905304264973985</id><published>2007-10-13T10:50:00.000-07:00</published><updated>2008-12-09T06:26:49.416-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AMQP'/><title type='text'>AMQP in 10 mins : Part3 - Flexible Routing Model</title><content type='html'>&lt;u&gt;Background&lt;/u&gt;&lt;br /&gt;Most pre-AMQP models had several issues with their routing models.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Opaque routing models that were not explicitly defined.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Since the semantics are not visible or explicit manipulating the routing model through the protocol was difficult.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rigid monolithic routing engines that had limited or no extensibility or compose-ability.&lt;/li&gt;&lt;/ul&gt;&lt;u&gt;The AMQP Routing Model&lt;/u&gt;&lt;br /&gt;One of AMQP 's primary goals was to define a flexible, extensible and transparent routing model where the semantics are explicitly defined. This permits the definition of management commands to manipulate the routing model. The AMQP model consists of three components&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Exchange&lt;/li&gt;&lt;li&gt;Queue&lt;/li&gt;&lt;li&gt;Binding&lt;/li&gt;&lt;/ul&gt;AMQP defines a set of rules on how to compose these components in to processing chains. &lt;span style="font-weight: bold; font-style: italic;"&gt;The routing model is analogues to how email works.&lt;/span&gt; The following diagram illustrates the routing model from a publisher and consumer's point of view.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_HYd_TJzpt80/RxENSkFq21I/AAAAAAAAAAM/wMx4mWxsJ9A/s1600-h/amqp_routing_model.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_HYd_TJzpt80/RxENSkFq21I/AAAAAAAAAAM/wMx4mWxsJ9A/s320/amqp_routing_model.jpg" alt="" id="BLOGGER_PHOTO_ID_5120888863873227602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(Click on image)&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;u&gt;Exchange&lt;/u&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;This is analogues to a Mail Transfer Agent.&lt;/span&gt; Queues (or other exchanges) are bound to an exchange using a 'Binding'.  A publisher sends a message to an exchange. The exchange will accept the message and routes it to one or more queues (or another exchange) based on the bindings.  An exchange completely decouples a publisher from queues and the consumers that consumes from those queues.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;An exchange type defines a routing algorithm to match the bindings with a given message&lt;/span&gt;. Hence an exchange type represents a class of routing algorithm. An instance of an exchange type can be thought if as an instance of a routing algorithm. A broker can have multiple instances of an exchange type which are identified by there name. An exchange instance can have the following properties.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Durable/Temporary&lt;/li&gt;&lt;li&gt;Auto-Delete&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;u&gt;Queue&lt;/u&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;This is analogues to a mail box&lt;/span&gt;. A queue will store the messages in memory or disk and deliver them to consumers. A queue binds itself to an exchange using a 'Binding' which describes the criteria for the type of messages it is interested in. Queues can have the following properties,&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Durable/Temporary&lt;/li&gt;&lt;li&gt;Shared/Private (exclusive)&lt;/li&gt;&lt;li&gt;Auto-Delete&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;u&gt;Binding&lt;/u&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;This is analogues to a Routing Table&lt;/span&gt;. A binding defines the relationship between an exchange and a queue.  In other words it defines the routing criteria. The most simple case is where the binding equals the queue name. A binding decouples a queue from an exchange. The same queue can be bound to any number of exchanges using the same criteria or different criteria. Different queues can be bound to the same exchange using the same routing criteria as well.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Routing Key&lt;/u&gt;&lt;br /&gt;Is a special field (Header) present in the Message Delivery Properties. It can be thought of as a virtual address, &lt;span style="font-weight: bold; font-style: italic;"&gt;analogues to a 'To' field in an email.&lt;/span&gt; An exchange may use this field to route a message. The standard exchange types defined in AMQP use the routing key in different ways to route messages.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Standard Exchange Types&lt;/u&gt;&lt;br /&gt;AMQP defines several standard exchange types that are described in detail in the next blog entry.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Extending The Routing Model&lt;/u&gt;&lt;br /&gt;One can define new exchange types with arbitrary routing criteria (routing algorithms). For example one can define an exchange that routes messages based on content (content based routing). &lt;span style="font-weight: bold; font-style: italic;"&gt;Thus AMQP provides a standard way of extending the routing model without impacting interoperability.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Next Part : &lt;a href="http://mutlix.blogspot.com/2007/10/amqp-in-10-mins-part4-standard-exchange.html"&gt;Part4 - Standard Exchange Types And Supporting Common Messaging Use Cases&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Prev Part : &lt;a href="http://mutlix.blogspot.com/2007/10/amqp-in-10-mins-part2-achieving.html"&gt;Part2 - Achieving Interoperability And Avoiding Vendor Lock-in&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-3056905304264973985?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/3056905304264973985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=3056905304264973985' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/3056905304264973985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/3056905304264973985'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/10/amqp-in-10-mins-part3-flexible-routing.html' title='AMQP in 10 mins : Part3 - Flexible Routing Model'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_HYd_TJzpt80/RxENSkFq21I/AAAAAAAAAAM/wMx4mWxsJ9A/s72-c/amqp_routing_model.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-4185003642949603687</id><published>2007-10-12T17:29:00.000-07:00</published><updated>2007-10-30T16:12:22.868-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AMQP'/><title type='text'>AMQP in 10 mins : Part2 - Achieving Interoperability And Avoiding Vendor Lock -in</title><content type='html'>&lt;u&gt;Background&lt;/u&gt;&lt;br /&gt;One of the key issues with any software is non-interoperability and vendor lock in. Most messaging systems prior to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;AMQP&lt;/span&gt; did not &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;interoperate&lt;/span&gt; with each other. For example messages from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Tibco's&lt;/span&gt; &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;Rendezvous&lt;/span&gt; couldn't be routed through IBM's &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;MQSeries&lt;/span&gt;.  If two messaging systems need to be connected, there are two options.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Using a &lt;span style="font-weight: bold; font-style: italic;"&gt;message bridge&lt;/span&gt; you could convert from one format to the other. However a bridge would be slow as the conversion adds latency.  Also you would need to understand the wire format of each of those systems.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Replacing one system with the other, which is costly and risky. Downtime can have a severe impact on the company's revenue model.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Therefore once a messaging system is chosen, users are reluctant to change and locked in with the same vendor while spending large sums of money as licensing costs.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;What if we have messaging systems(from different vendors) that can understand each other?&lt;/span&gt; If so connecting two messaging systems or replacing one system with the other can be done with minimum costs and risk. Since the  semantics (behaviour) are the same the chance of something going wrong is relatively low. This is a key goal for the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;AMQP&lt;/span&gt; protocol.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;So what does it take to achieve interoperability and avoid vendor lock-in?&lt;br /&gt;&lt;/u&gt;&lt;ul&gt;&lt;li&gt;All brokers need to behave the same way&lt;br /&gt;&lt;/li&gt;&lt;li&gt;All clients need to behave the same way&lt;/li&gt;&lt;li&gt;Use a standard for commands on the wire&lt;/li&gt;&lt;li&gt;Use a language neutral type System&lt;/li&gt;&lt;li&gt;Use open standards and permit royalty free usage of such a protocol.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;u&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;AMQP&lt;/span&gt; satisfies the above requirements by&lt;/u&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Defining a network wire-level protocol&lt;/li&gt;&lt;li&gt;A defined set of messaging capabilities (The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;AMQP&lt;/span&gt; Model)&lt;/li&gt;&lt;li&gt;A simple language neutral type system&lt;/li&gt;&lt;li&gt;Using open, existing, unencumbered, widely implemented standards   &lt;/li&gt;&lt;li&gt;Providing royalty free usage of the protocol&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; Broker semantics are defined explicitly. One can partially imply the semantics from the wire-protocol. However we need to define the semantics explicitly in order to guarantee exact behaviour in each broker/client implementation. So the protocol defines a set of commands to manipulate state in a peer. These commands are grouped by functionality into classes. For example the Queue class has various methods to manipulate state within a broker.&lt;br /&gt;Ex. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;queueDeclare&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;queueBind&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;queuePurge&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;queueDelete&lt;/span&gt; &amp;amp; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;queueQuerry&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;More details on the wire protocol will be &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;discussed&lt;/span&gt; later on. The next few posts will focus on discussing the semantic model.&lt;br /&gt;&lt;br /&gt;Next Part : &lt;a href="http://mutlix.blogspot.com/2007/10/amqp-in-10-mins-part3-flexible-routing.html"&gt;Part3 - Flexible Routing Model&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Prev Part : &lt;a href="http://mutlix.blogspot.com/2007/09/amqp-in-10-mins-part1-introduction.html"&gt;Part1 - Introduction&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-4185003642949603687?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/4185003642949603687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=4185003642949603687' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/4185003642949603687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/4185003642949603687'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/10/amqp-in-10-mins-part2-achieving.html' title='AMQP in 10 mins : Part2 - Achieving Interoperability And Avoiding Vendor Lock -in'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-5803988582400495839</id><published>2007-09-06T09:21:00.000-07:00</published><updated>2007-10-30T16:12:22.868-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AMQP'/><title type='text'>AMQP in 10 mins : Part1 - Introduction</title><content type='html'>&lt;u&gt;A&lt;/u&gt;dvanced &lt;u&gt;M&lt;/u&gt;essage &lt;u&gt;Q&lt;/u&gt;ueing &lt;u&gt;P&lt;/u&gt;rotocol is a an open standard with royalty free use. It has a strong focus on the financial services industry and provides the performance and reliability required by the said industry.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;AMQP Working Group&lt;/u&gt;&lt;br /&gt;The AMQP working group is responsible for defining and maintaining the sepcification. The website    &lt;a href="http://www.amqp.org/"&gt;www.amqp.org&lt;/a&gt; provides details on licensing, FAQ, JIRA and a list contributors and a download page.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Version Numbering&lt;/u&gt;&lt;br /&gt;The AMQP Version Numbering scheme consists of a major and minor revision number. Ex: 0-10.&lt;br /&gt;Major versions &gt; 0 will provide backward compatibility between minor versions. The current version of the protocol is 0-9. The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;AMQP&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;WG&lt;/span&gt; is expected to release the 0-10 version shortly. Currently the specification is in a rapid growth stage.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Interoperability&lt;/u&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;AMQP&lt;/span&gt; provides &lt;i&gt;complete interoperability&lt;/i&gt; via&lt;br /&gt;&lt;ul&gt;&lt;li&gt; A network wire-level protocol&lt;/li&gt;&lt;li&gt; A defined set of messaging capabilities a.k.a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;AMQP&lt;/span&gt; model&lt;/li&gt;&lt;/ul&gt;One can partially imply the semantics from the wire-protocol. However we need to define the semantics explicitly in order to guarantee exact behaviour in each broker implementation.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Reliability&lt;/u&gt;&lt;br /&gt;The 0-10 (in-progress) version has provided functionality to ensure &lt;i&gt;Guaranteed Delivery&lt;/i&gt; to satisfy the level of reliability required by the financial services industry. I will cover this topic in detail in a future blog post as part of the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;AMQP&lt;/span&gt; in 10 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;mins&lt;/span&gt; series.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Full Transaction Support&lt;/u&gt;&lt;br /&gt;The 0-10 spec also provides protocol level functionality for distributed transactions. This topic will also be covered in detail in a future blog post.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Security&lt;/u&gt;&lt;br /&gt;Security is the main focus for 0-11 version of the protocol. Currently there is only rudimentary support provided via &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;TLS&lt;/span&gt;. Planned features include but not limited to partial encryption and payload signing.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Known Implementations&lt;/u&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;AMQP&lt;/span&gt; is platform agnostic and language neutral. Currently we have implementations from a wide variety of languages from procedural to object oriented to functional.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://incubator.apache.org/qpid/"&gt;Apache &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Qpid&lt;/span&gt;&lt;/a&gt; project has broker implementations in &lt;i&gt;java&lt;/i&gt; and &lt;i&gt;c++&lt;/i&gt; and client implementations in &lt;i&gt;java, c++, python, ruby and .NET.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rabbitmq.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;RabbitMQ&lt;/span&gt;&lt;/a&gt; provides a broker implementation in &lt;i&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Erlang&lt;/span&gt;&lt;/i&gt; and a client implementation in &lt;i&gt;java&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.openamq.org/"&gt;Open &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;AMQ&lt;/span&gt;&lt;/a&gt; provides broker and client implementations in C.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;What about &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;JMS&lt;/span&gt;?&lt;/u&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;JMS&lt;/span&gt; can be implemented on top of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;AMQP&lt;/span&gt;. The &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;AMQP&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;WG&lt;/span&gt; is also working on standardising the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;AMQP&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;JMS&lt;/span&gt; mapping and is scoped for 0-11 version of the protocol. This will enable two different &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;JMS&lt;/span&gt; over &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;AMQP&lt;/span&gt; implementations to behave exactly the same way.&lt;br /&gt;The &lt;a href="http://incubator.apache.org/qpid/"&gt;Apache &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;Qpid&lt;/span&gt;&lt;/a&gt; project provides an implementation of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;JMS&lt;/span&gt; over &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;AMQP&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Next Part : &lt;a href="http://mutlix.blogspot.com/2007/10/amqp-in-10-mins-part2-achieving.html"&gt;Part2 - Achieving Interoperability And Avoiding Vendor Lock-in&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Prev Part : &lt;a href="http://mutlix.blogspot.com/2007/09/amqp-in-10-mins-part0.html"&gt;Part0&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-5803988582400495839?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/5803988582400495839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=5803988582400495839' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/5803988582400495839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/5803988582400495839'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/09/amqp-in-10-mins-part1-introduction.html' title='AMQP in 10 mins : Part1 - Introduction'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-4001781895079444343</id><published>2007-09-06T09:16:00.000-07:00</published><updated>2007-10-30T16:12:22.868-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AMQP'/><title type='text'>AMQP in 10 mins : Part0</title><content type='html'>From time to time people ask me what is AMQP? and how it is different from JMS? or why do we need another standard ..etc On the other hand the AMQP spec groups is finalizing it's work on the 0-10 version.&lt;br /&gt;&lt;br /&gt;So I decided to write a series of blog posts titled "AMQP in 10 mins", where each part can be read and understood in 10 mins. I hope to write a part every working day, or more depending on my mood. Comments and criticisms are equally encouraged.&lt;br /&gt;&lt;br /&gt;I am going to use the following terminology in my posts. Most of these terms have established definitions within the industry, but nevertheless I am specifying them for completeness.&lt;br /&gt;&lt;br /&gt;Broker/Server&amp;nbsp:&amp;nbsp Accepts connections and implements AMQP queuing and routing functionality&lt;br /&gt;&lt;br /&gt;Client &amp;nbsp:&amp;nbsp Initiates a connection&lt;br /&gt;&lt;br /&gt;Peer &amp;nbsp:&amp;nbsp Either party in a connection&lt;br /&gt;&lt;br /&gt;Producer &amp;nbsp:&amp;nbsp A client that publishes messages&lt;br /&gt;&lt;br /&gt;Consumer &amp;nbsp:&amp;nbsp A client that consumes messages&lt;br /&gt;&lt;br /&gt;Message Queue &amp;nbsp:&amp;nbsp A named entity that holds messages in memory or disk&lt;br /&gt;&lt;br /&gt;Message/Content &amp;nbsp:&amp;nbsp Application data&lt;br /&gt;&lt;br /&gt;Durable &amp;nbsp:&amp;nbsp Entity survives a server restart&lt;br /&gt;&lt;br /&gt;Transient &amp;nbsp:&amp;nbsp Entity doesn't survive a restart&lt;br /&gt;&lt;br /&gt;Next Part, &lt;a href="http://mutlix.blogspot.com/2007/09/amqp-in-10-mins-part1-introduction.html"&gt;Part1 - Introduction.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-4001781895079444343?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/4001781895079444343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=4001781895079444343' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/4001781895079444343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/4001781895079444343'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/09/amqp-in-10-mins-part0.html' title='AMQP in 10 mins : Part0'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-7550625008103488758</id><published>2007-08-14T12:37:00.000-07:00</published><updated>2007-10-30T16:17:08.868-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><title type='text'>Axis2 Clustering Support</title><content type='html'>&lt;p&gt;Axis2 1.3 release has experimental clustering support enabling you to deploy your services in a cluster for Scalability, Failover support and HA. In simple terms, we provide replication for Service Context, Service Group Context and ConfigurationContext. This enables you to deploy your services in a cluster and share state. Please give it a spin and provide feedback via the mailing lists.&lt;br /&gt;Please check the &lt;a href="http://ws.apache.org/axis2/1_3/clustering-guide.html"&gt;Axis2 Clustering  Guide&lt;/a&gt; for a good introduction. &lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;In Summary, here are a few points worth remembering&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;For Stateful Web Services it is recommended to deploy in pairs using the primary/secondary model. i.e Each Node will replicate to one or more backups (secondary nodes) for failover.&lt;br /&gt;&lt;li&gt; There will be only one active node at any given time. This is to avoid conflicts as we don't have a distributed locking mechanism.&lt;br /&gt;&lt;li&gt; To achieve Scalability, you need to deploy several of these pairs. In other words your cluster will consist of multiple pairs with one active node in each - and your pairs are isolated sub groups with no replication between them.&lt;br /&gt;&lt;li&gt; If your cluster consists of more than one pair, you need to use some sort of partitioning to avoid a user being serviced by more than one pair within a given session in order to avoid potential conflicts. You could use session affinity to achieve this.&lt;br /&gt;&lt;li&gt; There is no such restriction for Stateless Web Services.&lt;br /&gt;&lt;li&gt; If your Services read shared state more frequently and update very rarely, you could experiment with more than one active node. However conflicts are still possible.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;    &lt;br /&gt;Sanjiva asked me to help over a year ago and it got postponed month after month due to other commitments until I was finally able to produce a prototype. Many thanks to Afkam Azeez, Chamikara, Snajay and Sanjiva for the support they provided. Azeez and Chamikara was primarily responsible for bringing the clustering support to it's current state after I contributed an initial implementation. If not for those two it would have been next to impossible to get it included in the release. Special thanks to Philip Hanik for answering questions on Apache Tribes even while on vacation.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-7550625008103488758?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/7550625008103488758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=7550625008103488758' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/7550625008103488758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/7550625008103488758'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/08/axis2-clustering-support.html' title='Axis2 Clustering Support'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-1048719188634588041</id><published>2007-08-05T20:43:00.001-07:00</published><updated>2007-10-30T16:17:47.335-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>SCA vs Spring (A reply to Dan's post)</title><content type='html'>In Dans &lt;a href="http://netzooid.com/blog/2007/07/22/sca-assembly-vs-spring-cxf/"&gt;blog entry&lt;/a&gt;, he compares SCA vs Spring with an excellent example which highlights the similarities.&lt;br /&gt;&lt;br /&gt;I do not view them as competing technologies rather complementing as I see some synergy between these technologies.&lt;br /&gt;&lt;br /&gt;Clearly SCA and Spring share several design principles and it is no surprise that the SCA spec group views Spring as an implementation technology for components and composites. In fact the SCA spec group has gone as far as formalizing this approach with &lt;a href="http://www.osoa.org/download/attachments/35/SCA_SpringComponentImplementationSpecification-V100.pdf?version=1"&gt;SCA Spring Component Implementation Specification&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So Ke Jin's &lt;a href="http://www.infoq.com/news/2007/07/scaproblem"&gt;comment on InfoQ&lt;/a&gt; was right on the money when he said,&lt;br /&gt;&lt;blockquote&gt;"As the matter of fact, the so-called SCA assembly model is merely a DSL (domain specific language) that can easily be realized on top of Spring or any decent POJO IoC containers, with few hundreds lines of code and half day of work"&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;On his &lt;a href="http://www.infoq.com/news/2007/07/scaproblem"&gt;InfoQ comment&lt;/a&gt;, Dan asks?&lt;br /&gt;&lt;blockquote&gt;But why wouldn't I just use Spring to begin with?&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The simple answer is that SCA could become a standard and the ability to deploy my composites in any SCA runtime. The other SCA runtime could be using Spring or the next great thing under the covers.&lt;br /&gt;&lt;br /&gt;Mike Edwards points out on the same InfoQ &lt;a href="http://www.infoq.com/news/2007/07/scaproblem"&gt;thread&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;What the SCA Assembly model then brings to the party is a organized and standard way of describing how the different components in your (distributed) system are linked together to build a particular application.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This will only add value if and when SCA becomes a standard through OASIS and is adopted across different languages by the masses. Spring is great and I really like it. However distributed systems are not built only using java. It would be nice if we have a standard way of expressing how different components are linked together to build your application.&lt;br /&gt;&lt;br /&gt;Also unlike the EJB's if SCA composites can be truly portable across different runtimes (Ex Tuscany java runtime to ABC java runtime) with zero code changes it can be a very good selling point. Vendors shouldn't spoil the party with vendor specific addons in their runtime which can lock-in unsuspecting users.&lt;br /&gt;&lt;br /&gt;Dan asked&lt;br /&gt;&lt;blockquote&gt;Someone show me where Ke Jin is wrong and where SCA expands on Spring capabilties.&lt;/blockquote&gt;&lt;br /&gt;Technically the capabilities are more or less the same, albeit spring being a more simple model. The standardization and portability of SCA (if achieved) is where it can exapnd or add value on top of Spring. I am not advocating to replace Spring with SCA. You can continue to use Spring to realize SCA. They are certainly complementary. This &lt;a href="http://www.osoa.org/download/attachments/250/Power_Combination_SCA_Spring_OSGi.pdf?version=3"&gt;white paper&lt;/a&gt; explains how SCA can be used with OSGi and Spring.&lt;br /&gt;&lt;br /&gt;P.S I conveniently ignored the complexity issue. IMHO it is a red herring.&lt;br /&gt;Distributed systems are complex in nature. Thinking we can provide simple solutions is the biggest misconception.&lt;br /&gt;EJB, WS-*, REST, SCA they all prove this one after the other. That's a good topic for my next blog entry :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-1048719188634588041?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/1048719188634588041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=1048719188634588041' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/1048719188634588041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/1048719188634588041'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/08/sca-vs-spring-reply-to-dans-post.html' title='SCA vs Spring (A reply to Dan&apos;s post)'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-4128298448129588129</id><published>2007-07-03T09:30:00.001-07:00</published><updated>2007-10-30T16:18:00.733-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Being a single parent (for 2 weeks)</title><content type='html'>I had to go to Sri Lanka for my brothers wedding for 2 weeks. My wife was unable to make it due to exams as she is taking summer school. So I decided to go alone with my 3 yr old daughter.  I survived the long journey to Sri Lanka thanks to my daughter putting up her best behaviour. The next day we had the wedding and again the little angle held her composure while wearing her dress in extremely hot weather during the photo shoot and church ceremony. We spent the next couple of days going shopping,  a trip to the zoo and the beach. I had an extremely good time with my daughter and stayed away from my laptop (except during the Axis2 clustering hackathon at the WSO2 office in Colombo) for two weeks. I rarely checked email :) , instead I played with my kid and made the most of the time. She loved to go in three wheelers (tuk tuk) and insisted they were much more exciting than the kiddies roller coaster at Wonderland :).   The return journey was a bit tough due to flight cancellations. We got stranded in Paris for a day, but used that time to relax and rest a bit before making it home.&lt;br /&gt; I am well versed with diaper changing, feeding and putting her to sleep, as I take care of her when ever I work from home. But washing her at least 3 times a day and feeding 3 meals and putting her to sleep was extremely tiring. I wonder how my wife does it everyday while being a full time student. My daughter thinks Sri Lanka is much more exciting and charming with ants, flies and butterflies to chase around, cows and stray dogs all over the place, bumpy rides in three wheelers and grand parents who are ready to care for all her whim's and fancies. Sri Lanka is indeed a charming place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-4128298448129588129?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/4128298448129588129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=4128298448129588129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/4128298448129588129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/4128298448129588129'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/07/being-single-parent-for-2-weeks_03.html' title='Being a single parent (for 2 weeks)'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-9052457470963188029</id><published>2007-06-07T11:38:00.001-07:00</published><updated>2007-10-30T16:14:36.575-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>He was a visionary.....</title><content type='html'>I think &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Sanjiva&lt;/span&gt; already blogged on this, but I feel obliged to do so as well.&lt;br /&gt;If not for his efforts and most importantly his vision, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Sri&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Lanka&lt;/span&gt; would not have progressed this far in IT. Especially his efforts in the university circuit opened the doors for many kids who otherwise would have missed the opportunity to study IT. I have met him once or twice at (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ICT&lt;/span&gt;) Institute for Computing Technology at the Colombo university while I was a student when we were organizing an IT exhibition. If I am not mistaken, the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;ICT&lt;/span&gt; itself was his brain child. He was a pioneer in getting the ".&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;lk&lt;/span&gt;" domain name.&lt;br /&gt;Sometimes his work was disrupted by political pressure from various sources which didn't like the contributions the he was making. However he continued to push towards his vision until his last breath.&lt;br /&gt;Well done sir!!!! You made us all proud.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-9052457470963188029?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/9052457470963188029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=9052457470963188029' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/9052457470963188029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/9052457470963188029'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/06/blog-post.html' title='He was a visionary.....'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-8032252531948148923</id><published>2007-05-01T08:47:00.000-07:00</published><updated>2007-10-30T16:14:36.575-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Mahela, I thought u will pull us through !!!</title><content type='html'>I know enough has been written about the world cup dissapointment, but sadly I haven't got over it yet. It was a very bad day for us. It started with rain and a shortened game which suited the aussi style of power hitting. The ICC which is quickly turning out to be a joke, and is run by a bunch of  idiots who are pass their sell by date, should have postphoned the game. It's a shame that the 100 overs was not played in a world cup final !!!!&lt;br /&gt;We were at a huge disadvantage with the light deteriorating by the minute and the batsmen under pressure to stay on top of the duckworth lewis score. But yet we displayed courage and fought till the end. However credit should be given where it is due and I have to say Gillchrist played a one of a kind ininings.&lt;br /&gt;I knew mahela from school days and people thought he would be playing for Sri Lanka when they saw him batting at under 13 level. I was in a match with Nalanda college at under 15 level. And Mahela single handedly took that game away from us. He was always a big game player and thought he would pull us through, just like in the semi finals. But a bad umpiring decesion ended all that.  &lt;br /&gt;I am looking forward to 2011!!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-8032252531948148923?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/8032252531948148923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=8032252531948148923' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/8032252531948148923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/8032252531948148923'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/05/mahela-i-thought-u-will-pull-us-through.html' title='Mahela, I thought u will pull us through !!!'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-4216869575982490692</id><published>2007-02-16T09:28:00.000-08:00</published><updated>2007-10-30T16:14:54.110-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>My take on JSR 311, Java API for RESTful Web Services</title><content type='html'>&lt;span id="body_4994"&gt;&lt;span id="quote_4994"&gt; I think doing this inside the JAX-WS space seems to give the wrong impression. I heard that they were proposing to tunnel REST services through JAX-WS endpoints. But Dan sent me the following link to a blog post by &lt;a href="http://weblogs.java.net/blog/mhadley/archive/2007/02/jsr_311_java_ap.html"&gt;Marc Hadley&lt;/a&gt; which gave me some hope.&lt;br /&gt;&lt;br /&gt;Sun always messed it up with Web Services. JAX-RPC and JAX-WS were horribly complicated with no apparent benefit other than to say the implementer is J2EE compliant. What a price to pay to have that check box in your marketing literature. They may very well make the REST API equally useless by tying it to those JAX-WS API's.&lt;br /&gt;&lt;br /&gt;Anyways we already have an API for REST in the form of servlets and JSP, but I agree that they weren't good enough. IMHO they should have improved these APIs and add REST support over there, not inside JAX-WS which will fuel the myth, that REST is an alternative to SOAP, instead of REST is an alternative to SOA.&lt;br /&gt;&lt;br /&gt;All REST API's I have seen so far, are high level annotation driven API's on top of a HTTP binding (servlets). For example what Dan has in XFire. I strongly believe that REST support should go into an HTTP API (servlets) instead of a WS API&lt;/span&gt;&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-4216869575982490692?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/4216869575982490692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=4216869575982490692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/4216869575982490692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/4216869575982490692'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/02/my-take-on-jsr-311-java-api-for-restful.html' title='My take on JSR 311, Java API for RESTful Web Services'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-117103344897787558</id><published>2007-02-09T06:27:00.000-08:00</published><updated>2007-10-30T16:17:08.868-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><title type='text'>Benchmark Wars</title><content type='html'>&lt;p&gt;The recent posts by Paul, Dims and Dan have provided benchmarks pitting Axis2 vs XFire. I think that is a very good step and provides end users some good information. Also I would like if everybody provided the source code for these tests so non believers and end users can run it for themselves.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;However, racist ranting with no performance numbers to back it up is not acceptable at all. If a person cannot explain a technical argument without subjecting him self to such a low level, then I don't think the rest of world should care.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Dan I welcome your effort to work out the performance numbers. That is the right approach.  Healthy competition will only promote WS-* and help dispell the myth that SOAP is slow. If either Axis2 or XFire is slow in this round then let the respective teams make sure that they make an effort to beat the other in the next round. Now that is whats going to make each other better, not unwarranted racist comments that shows your sorry upbringing and publicly disgracing your parents. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;However Dan I believe that most enteprise systems do care about RM and Security (Addressing too). So there will be SOAPHeaders. With more SOAP stacks supporting these specs there will be an increase in the adoption of these standards in the enterprise world and so IMHO the SOAPHeaders should be part of the performance tests. However I also recognize the need for being efficient in the POX case too. As Dan said the POX use case maybe a popular one with SME's. If Axis2 is lagging behind in that area then we as a team can work on the performance.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;As for Hani, he is still motivated to spew out his garbage for the very same reason why Howard Stern is still in business. There is and will always be an audience for these type of people. Some would call it "Freedom of expression", others like me would see it as an abuse of the that very sacred principle.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-117103344897787558?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/117103344897787558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=117103344897787558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/117103344897787558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/117103344897787558'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/02/benchmark-wars.html' title='Benchmark Wars'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-116767118368574386</id><published>2007-01-01T08:29:00.000-08:00</published><updated>2007-10-30T16:14:36.576-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>I am gratefull to see the new year !!! (Please wear seat belts)</title><content type='html'>I am extreamly gratefull and feel blessed to see the new year considering the motor vehicle accident, I was involved with on the 30th Dec 06. It a was multi-vehicle accident (1 van and 3 cars) that was nothing short of a miracle considering every person involved made it through with only whiplash and one person with mild shock.&lt;br /&gt;  It was a routine grocery trip to costco and we were heading back home. I stopped at the lights with just one vehicle in front of us. I heard a bang behind us and before I could even think about it there was a massive bang and our car was violently thrust forward and rear ended the car in front of us. As it turned out a van had rear ended the car behind us and that in turn rear ended our car. &lt;br /&gt; When I looked around I saw the car that hit us has rolled into the ditch beside the road. The car was squashed so bad I was expecting the worse. The van was thrown on to the lane right of us and has stopped parallel to us with the engine collapsed and fuel leaking towards our car.&lt;br /&gt;  I quickly got out and yelled to my wife to take the baby out of the car seat and we all moved on to the ditch as there was a risk of fire. The ememergency vehicles arrived in 5 mins and the firefightes took control of the situation.&lt;br /&gt;  All passengers were saved bcos of seat belts and considering the damaged to the rear of my vehicle I am glad that my daughter and wife were ok. Three vehicles including ours were totaled. Property can always be replaced but not human lives. So please wear seat belts and be alert when you are on the road.&lt;br /&gt;&lt;br /&gt;  Last year was the toughest of my life so far. It was also the year which I learned so much about life and realized how precious your family is. But I am proud of my fighting sprit and the effort to keep the ship steady through all the troubled times. Humans have a remarkable ability to adapt and fightback when the going gets tough.&lt;br /&gt;&lt;br /&gt;  Wish you all a Happy and a Blessed New Year.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-116767118368574386?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/116767118368574386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=116767118368574386' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/116767118368574386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/116767118368574386'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2007/01/i-am-gratefull-to-see-new-year-please.html' title='I am gratefull to see the new year !!! (Please wear seat belts)'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-116370061006695155</id><published>2006-11-16T08:14:00.000-08:00</published><updated>2007-10-30T16:14:54.110-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>What is a RESTful Web Service ?</title><content type='html'>&lt;p&gt;I have to admit that I am very confused about the term "RESTful Web Services".  REST is one of the most highly missunderstood concepts out there and certainly one the most highly abused terms. For most REST means POX/HTTP GET or POST, simillar to some folks, who think they are doing "Web Services" simply bcos they are using SOAP, WSDL etc while there is utter disregard to loose coupling, service orientation ..etc. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I also see the endless debates on SOAP vs REST. I guess this stems from the fact that most think, REST is POX/HTTP GET or POST. While SOAP is a message format, REST is an architectural style. So there is absolutely no point in comparing apples to oranges.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;So what is a RESTful Web Service ?&lt;/b&gt;&lt;br /&gt;&lt;p&gt;I have been talking to Roy Fielding on email trying to understand REST and have also been bugging Sanjiva on IM trying to clarify the facts.  REST takes a "resource oriented approach" while Web Services (SOA) takes a "service oriented approach".  One can argue that a service is a resource (from a REST POV) and a resource can be exposed as a service (from a WS POV).  But there are some fundamental differences in these approaches. IMHO a service should be a more coarse grained concept than a resource. A service may encompass one or more resources. I assume what  RESTful  services means, is that the  respective Web Service obeys the REST principles. How possible is that ? To me this is still a grey area and I will continue to ask this question until I understand this properly. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-116370061006695155?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/116370061006695155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=116370061006695155' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/116370061006695155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/116370061006695155'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2006/11/what-is-restful-web-service.html' title='What is a RESTful Web Service ?'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-116300240193741435</id><published>2006-11-08T08:05:00.000-08:00</published><updated>2007-10-30T16:15:34.742-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>Web Services is NOT a Distributed Object access Architecture</title><content type='html'>It is surprising that many people still think of Web Services as a Distributed Object access architecture like CORBA or COM.&lt;br /&gt;&lt;br /&gt;This is quoted from the post by Leonard Richardson http://www.crummy.com/writing/REST-Web-Services/&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;“The answer is that "Web Services” aren’t the web. They’re a heavyweight architecture for distributed object access, like COM and CORBA"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is very misleading. Web Services is *NOT* a distributed object architecture.&lt;br /&gt;WS is not object centric and has no notion of an object reference or distributed garbage collection.&lt;br /&gt;&lt;br /&gt;So it is wrong to say *LIKE* CORBA or COM&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-116300240193741435?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/116300240193741435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=116300240193741435' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/116300240193741435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/116300240193741435'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2006/11/web-services-is-not-distributed-object.html' title='Web Services is NOT a Distributed Object access Architecture'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-116189624149176143</id><published>2006-10-26T13:56:00.000-07:00</published><updated>2007-10-30T16:17:08.868-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><title type='text'>A Case Study for Synapse</title><content type='html'>I wrote a Case Study for Synapse and it's available &lt;a href="http://apache-synapse.blogspot.com/2006/10/case-study-for-synapse.html"&gt;here &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-116189624149176143?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/116189624149176143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=116189624149176143' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/116189624149176143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/116189624149176143'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2006/10/case-study-for-synapse.html' title='A Case Study for Synapse'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-116189584117816974</id><published>2006-10-26T13:35:00.000-07:00</published><updated>2007-10-30T16:16:21.488-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>ApacheCon US 06</title><content type='html'>Finnaly I settled down to write something about Apache Con US 06, eventhough it's been about 2 weeks since I've been there. It was held in Austin, TX and I have to say it was very good. I  went out for dinner a couple of times, and enjoyed all the live music that was going on, on 6th Street. Well they say Austin is the live music capital of the world....not sure I agree there.&lt;br /&gt;&lt;br /&gt;Anyways I had a good time and met a lot of friends that I have only communicated through email/IM. I also presented on Axis2. The focus was on the usage of Axis2 with spring, pojo support, embedding being the main topics I coverd during the presentation.&lt;br /&gt;&lt;br /&gt;I loved the keynote by &lt;a href="http://us.apachecon.com/html/speakers.html#stoll"&gt;Dr. Cliff Stoll&lt;/a&gt; and I also managed to get &lt;a href="http://us.apachecon.com/html/speakers.html#tayler"&gt;Howard Taylor&lt;/a&gt; a cartoonist to draw a small caricature of me with a cricket bat.&lt;br /&gt;&lt;br /&gt;I met Roy Fielding the guy who invented HTTP and REST. But what really spoiled the whole thing was when I realized that somebody has taken my digital camera. I am pretty sure it was the hotel staff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-116189584117816974?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/116189584117816974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=116189584117816974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/116189584117816974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/116189584117816974'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2006/10/apachecon-us-06.html' title='ApacheCon US 06'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-35260402.post-115955744965518613</id><published>2006-09-29T12:07:00.000-07:00</published><updated>2007-10-30T16:16:21.488-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><title type='text'>My First Podcast</title><content type='html'>I finnaly started to blog again. The last time I bloged was in January and then I slacked off.&lt;br /&gt;So this time hopefully I will keep up to it. Lots of things happend between January and now and I feel bad that I didn't blog about it.&lt;br /&gt;&lt;br /&gt;Anyways I was fortunate enough to do a podcast about Apache Axis2 with &lt;a href="http://wooga.drbacchus.com/"&gt;Rich Bowen&lt;/a&gt; for &lt;a href="http://www.feathercast.org"&gt;feather cast&lt;/a&gt;. This was done at the Apache Con Asia 06 where I was a speaker for the first time at a conference of this magnitutde. Here is the link to my podcast &lt;a href="http://feathercast.org/?p=26"&gt;http://feathercast.org/?p=26&lt;/a&gt;&lt;br /&gt;&lt;span class="down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/35260402-115955744965518613?l=mutlix.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mutlix.blogspot.com/feeds/115955744965518613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=35260402&amp;postID=115955744965518613' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/115955744965518613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35260402/posts/default/115955744965518613'/><link rel='alternate' type='text/html' href='http://mutlix.blogspot.com/2006/09/my-first-poadcast.html' title='My First Podcast'/><author><name>Rajith Attapattu</name><uri>http://www.blogger.com/profile/09807573626341828740</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
