<?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-9388152</id><updated>2011-04-21T18:40:31.784-07:00</updated><title type='text'>IN Software,Thoughts</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9388152.post-113981163677753464</id><published>2006-02-12T20:56:00.000-08:00</published><updated>2006-02-12T22:20:37.493-08:00</updated><title type='text'>2 wishes ,2 useful things contd..</title><content type='html'>Continuing my previous post ...There is one more thing that I find extremely is needed :a way to create empty directory structures in your system, what I mean is something by which I can right click on a folder or a set of folders and say 'select to create directory structures' and wroom!!! You navigate to a specified directory and create empty directory structures of the selected source ..&lt;br /&gt;Applications of the above would be say :you want to replicate a directory structure for a source code at different places with different source code files but maintain the same directory structure.&lt;br /&gt;&lt;br /&gt;Another useful thing that you would need would be a facility that would help you copy a diff between the content two directories..A lots of times you would need to have the same content in two different directories .That's when this will be very useful..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-113981163677753464?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/113981163677753464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=113981163677753464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/113981163677753464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/113981163677753464'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2006/02/2-wishes-2-useful-things-contd.html' title='2 wishes ,2 useful things contd..'/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9388152.post-113352656296604714</id><published>2005-12-02T04:25:00.000-08:00</published><updated>2005-12-05T23:06:34.876-08:00</updated><title type='text'>Two wishes ..two useful things</title><content type='html'>I need two facilities one in my web e-mail services(eg. Yahoo) and another on my destkop.On the first one:there are situations where in you have to send e-mails that have the same attachments(documents,pictures etc).&lt;br /&gt;Cases could be:&lt;br /&gt;1.I need to send my company information documents(which are not subjected to change regularly) to a client who requests it.&lt;br /&gt;2.A job seeker post his resume to different companies but uses the same resume document each time to send.&lt;br /&gt;In these cases although the attachments are same ,the recipients are different each time and the e-mail is send at different times .I get to know to who I have to send, each day and not before hand.For such situations,if the web e-mail service could provide me a facility where I can keep these set of documents on its server.And then send it for me ,when I request it to do so as an attachment with my e-mails, wouldn't it be great ?.Of course the storage space will have to be judiciously utilized for storing these attachments,but it should not be a constraint considering the fact that most commercial web e mail services provide 1 Gig Inboxes!! these days.. Lets see if any of the e-mails services start providing it...&lt;br /&gt;&lt;br /&gt;The next thing I wish for..I will put in the next post.. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-113352656296604714?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/113352656296604714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=113352656296604714' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/113352656296604714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/113352656296604714'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2005/12/two-wishes-two-useful-things.html' title='Two wishes ..two useful things'/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9388152.post-112961207722892644</id><published>2005-10-17T21:51:00.000-07:00</published><updated>2005-10-17T22:07:57.233-07:00</updated><title type='text'>REST,SOA</title><content type='html'>REpresentational State Transfer is a new buzzword in the Integration world.It supports for a common set of interfaces and a only a limited few for all applications to use and varies from the SOA in this very sense that ,in SOA the wsdl defines different port interfaces for different services types..&lt;br /&gt;find more..&lt;br /&gt;&lt;a href = "http://searchwebservices.techtarget.com/topic/0,295492,sid26_tax301569,00.html"&gt;http://searchwebservices.techtarget.com/topic/0,295492,sid26_tax301569,00.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-112961207722892644?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/112961207722892644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=112961207722892644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/112961207722892644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/112961207722892644'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2005/10/restsoa.html' title='REST,SOA'/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9388152.post-112167905438359539</id><published>2005-07-18T02:04:00.000-07:00</published><updated>2005-07-26T02:44:13.846-07:00</updated><title type='text'>Connecting USBs</title><content type='html'>Today ,if I see, most electronic devices have a USB facility on them.I can connect my device to any computer system that can detect my device and connect the two systems for data transfer.But a negative that I observed is it is not possible to connect any two USB devices themselves and expect data to get transferred between them.&lt;br /&gt;Now with the expounding of the USB,what I think has become necessary is that of a universal driver for USB devices that would enable any two USB devices to communicate and this is what exactly products from companies like 'Delkin Devices' for example do&lt;br&gt;&lt;br /&gt;&lt;a href="http://www.delkin.com/"&gt;'Delkin Devices'&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;br /&gt;Companies like these have come with 'USB bridges' which connect USB devices that store data in FAT16/FAT32 file system format.It will make the life of consumers easier in downloading song files from an USB storage device to an IPOD or storing pics from the camera onto a USB storage device and many more things..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-112167905438359539?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/112167905438359539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=112167905438359539' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/112167905438359539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/112167905438359539'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2005/07/connecting-usbs.html' title='Connecting USBs'/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9388152.post-111872599650421792</id><published>2005-06-13T21:59:00.000-07:00</published><updated>2005-06-13T22:13:16.506-07:00</updated><title type='text'>Universal file storage format</title><content type='html'>Haven't blogged recently but,I realize that I did not find anything worth writing.But a recent development does sound interesting,using XML to store Microsoft office format files.Its good since many of the earlier binary formats were too proprietary.Now other applications can also make sense of the office formats and finally be able to process office documents..still a long shot though as some glitches are still around..&lt;br /&gt;For further reading...&lt;br /&gt;&lt;a href=http://wesnerm.blogs.com/net_undocumented/2005/06/has_microsoft_f.html&gt;Click here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-111872599650421792?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/111872599650421792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=111872599650421792' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/111872599650421792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/111872599650421792'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2005/06/universal-file-storage-format.html' title='Universal file storage format'/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9388152.post-111597469258566977</id><published>2005-05-13T01:47:00.000-07:00</published><updated>2005-05-13T01:58:12.586-07:00</updated><title type='text'>Binary XML Storage</title><content type='html'>A recent update on XML transmission has been the conversion of XML from being transmitted as text to a much optimized way of converting it to a compressed format and then transmitting('&lt;em&gt;gzip&lt;/em&gt;' in this context is pretty well known) for reasons such as network bandwith since XML as text is pretty verbose.&lt;br /&gt;&lt;br /&gt;What I have been imagining is why not always store XML in binary format and applications working on XML uncompress the XML.So much for saving storing space..but every 'bit' saved counts heee&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-111597469258566977?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/111597469258566977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=111597469258566977' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/111597469258566977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/111597469258566977'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2005/05/binary-xml-storage.html' title='Binary XML Storage'/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9388152.post-111458125341833138</id><published>2005-04-26T22:16:00.000-07:00</published><updated>2005-04-27T01:43:24.653-07:00</updated><title type='text'>Escalating</title><content type='html'>On a recent visit to the US I observed an increasing use of escalators.What I also observed was the fact that at peak times the escalators were heavily used, while at other times the escalators simply kept moving..I thought, what a huge waste of energy.Sophistication does come at a price..the price of wasting energy.I wondered why couldnt they be more efficient and perform dual function of sophistication as well as optimization.Afterall pitfalls of wasting energy are alaraming,added with the fact that energy resources are fast depleting,an efficient use of all devices,machines that consume energy is a must,no matter what the source of energy is..remember energy saved at one place could be a used hungrily elsewhere.There is enough demand for energy everywhere.&lt;br /&gt;What I was thinking on these lines was why couldnt sensors be placed on the escalator to detect if a person is standing on it or not.Just a simple thought which is quite possible with electronic sensing devices these days coming petty cheap :)&lt;br /&gt;&lt;br /&gt;In the meanwhile I started another blog sometime back just to log thoughts more generic in nature,more to do do with life and its idiosyncrasy..check out the link below:&lt;br /&gt;&lt;a href="http://musingsofawanderingmind.blogspot.com/"&gt;Musings of a Wandering Mind&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-111458125341833138?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/111458125341833138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=111458125341833138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/111458125341833138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/111458125341833138'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2005/04/escalating.html' title='Escalating'/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9388152.post-110846684435185087</id><published>2005-02-14T20:33:00.000-08:00</published><updated>2005-02-15T03:27:24.353-08:00</updated><title type='text'>Speeding XML processing</title><content type='html'>A few days back, I read what I thought was going to come one day:Hardware for accelarating XML processing.Yes, with XML as the medium in alomost all network communication,clogging of the processing bandwith with XML was sure to come.It was inevitable,as parsers for XML(SAX or DOM)resulted in slow performance in routers ,switches and other such network elements where XML processing occurs significantly.&lt;br /&gt;&lt;br /&gt;So the story today is that hardware will accelarate XML processing,the same way as Math Co-Processors one day took the onus of maths computing(although in this case number representation for different data also contributed, along with slow processing for the situation to have a co-processor).Altough only a few companies are out with the silicon for XML processing,many nore will surely follow.&lt;br /&gt;&lt;br /&gt;I have been thinking of the possiblity wherein the chip stores ahead of time the XPath queries in the XML, the moment it is asked to process a certain XML.If it does this all it has to do is index through this already stored Xpath results when a request for a particular XPath query is made.This would result in faster retrieval of the requested data.This is of considerable advantage since most of the systems requiring XML processing are either Retrieval systems or Assertion systems.Of course for tranformations and XML modifications this will not have as much significance.It remains to be seen if we see any development in this area?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-110846684435185087?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/110846684435185087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=110846684435185087' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110846684435185087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110846684435185087'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2005/02/speeding-xml-processing.html' title='Speeding XML processing'/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9388152.post-110594579022622581</id><published>2005-01-16T22:41:00.000-08:00</published><updated>2005-01-28T01:23:05.126-08:00</updated><title type='text'>On Software Patterns</title><content type='html'>Recently..I began to wonder about "Software Design Patterns".I began to wonder ,what are they based on?.Arent they afterall someone's experiences.For instance lets say we are talking about designs in civil engineering.The design, the engineer in that domain uses ,makes, are based on the solid foundations of mathematics.Lets assume that he has to construct a door,he will defintely follow a pattern based on usability and proper dimensions,he will know that the door has to be of 'x' feet high and 'y' feet wide(the maths of numbers again!!!).Proved and consistently proved mathematical formulas are the basis for the designer there, to determine what the dimensions of his structure are going to be.On the contrary when a software designer steps out to design something,what has he, to base his design on ?.Today I know that a code i had implemented long ago ,actually is a pattern..and I had done it without even having been aware of the fact that i had implemented the ADAPTER pattern.And to add to it,in most of the cases it has been found out that the design is more or less incomplete ,without its implementation in code bringing about some changes in the design again.And to think of it more than 60% of a project life cycle goes into planning and designing.So are we still very far from knowing what should be foundations of our designs ?.&lt;br /&gt;&lt;br /&gt;Turning my thoughts elsewhere,I have been lately wondering of a particular use of Aspect oriented programming or Adaptive programming(call it AOP for simplicity).Its been a well known fact the features of a AOP could be used for &lt;em&gt;logging&lt;/em&gt; et cetra..It is also a well realized fact that, database connections are a precious resource,and should be used as prudently as possible.In fact the shorter you hold the DB connection the better and the shortest we can try to hold a DB connection as programmers, could be at a method level.It is here that we could use the features of AOP to turn on the DB connection(get a hook to it) at the entry point of the method and release the same at the exit of the method.This sure follows a pattern,so we can as well, call this a &lt;em&gt;pattern&lt;/em&gt;.&lt;br /&gt;Links you may find useful :&lt;br /&gt;&lt;a href= http://www.martinfowler.com/articles/newMethodology.html&gt;Martin Fowlers ideas&lt;/a&gt;&lt;br /&gt;&lt;a href=http://www-106.ibm.com/developerworks/java/library/j-aspectj/&gt;IBM  DeveloperWorks &lt;/a&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-110594579022622581?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/110594579022622581/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=110594579022622581' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110594579022622581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110594579022622581'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2005/01/on-software-patterns.html' title='On Software Patterns'/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9388152.post-110473108040544254</id><published>2005-01-02T20:55:00.000-08:00</published><updated>2005-01-03T21:08:24.350-08:00</updated><title type='text'>Sample Event Brokerage</title><content type='html'>Sometime back I believe ,I said that I would post some code that demoed the process of Event Brokerage.I am putting the same in this blog.Having been so much hands on in .net throughout,I could but possibly put the code ,only in C# :) . I assume many are familiar with the language derived from Java and C++.It has this feature of delegates that so well suits our needs.Delegates are much similar to function pointers in C++ in terms of functionality and help in implementing callbacks.Note how the publisher and the subscriber have been isolated in the code,this imlementation is based on the observer pattern(for more information on Observer Pattern design &lt;a href="http://msdn.microsoft.com/library/en-us/dnbda/html/observerpattern.asp?frame=true"&gt;click here&lt;/a&gt;) .Much of the code has been explained in the commenting itself.It can also be easily followed of course!!!.The code requires at least version 1 of .net framework to execute.Here we go..........&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;namespace Event&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;//dummy events to be used by the subscribers&lt;br /&gt;public enum EventsToGenerate {NewEvent}&lt;br /&gt;//delegate used to pass the callback in the subscriber&lt;br /&gt;//to the event broker&lt;br /&gt;&lt;br /&gt;public delegate void Notify(object sender,EventsToGenerate evt) ;&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;Class is an end appliction that subscribes for&lt;br /&gt;/// an event and also invokes the publisher for publishing an event.&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;class RunEvent&lt;br /&gt;{&lt;br /&gt;/// &lt;summary&gt;The main entry point for the application. &lt;/summary&gt;&lt;br /&gt;[STAThread] static void Main(string[] args)&lt;br /&gt;{&lt;br /&gt;//subscribe for a particular event&lt;br /&gt;EventConsumer consumer = new EventConsumer() ;&lt;br /&gt;consumer.Subscribe(EventsToGenerate.NewEvent) ;&lt;br /&gt;&lt;br /&gt;//now publish a particular event type and&lt;br /&gt;//see if the consumer is called&lt;br /&gt;EventGenerator generateEvent = new EventGenerator() ; generateEvent.Publish (EventsToGenerate.NewEvent) ;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;descibes an user defined event &lt;/summary&gt;&lt;br /&gt;class Events : EventArgs&lt;br /&gt;{&lt;br /&gt;EventsToGenerate evt ;&lt;br /&gt;public Events(EventsToGenerate evt):base()&lt;br /&gt;{&lt;br /&gt;this.evt = evt ;&lt;br /&gt;}&lt;br /&gt;public EventsToGenerate Evt&lt;br /&gt;{&lt;br /&gt;get&lt;br /&gt;{&lt;br /&gt;return this.evt ;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;It is the event publisher &lt;/summary&gt;&lt;br /&gt;class EventGenerator&lt;br /&gt;{&lt;br /&gt;EventBroker broker = EventBroker.GetEventBroker() ;&lt;br /&gt;public void Publish( EventsToGenerate evt)&lt;br /&gt;{&lt;br /&gt;broker.Delegate(Event.EventsToGenerate.NewEvent) ;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;Defines the subscriber logic &lt;/summary&gt;&lt;br /&gt;class EventConsumer&lt;br /&gt;{&lt;br /&gt;public void Subscribe(EventsToGenerate evt)&lt;br /&gt;{&lt;br /&gt;if(evt == EventsToGenerate.NewEvent)&lt;br /&gt;{&lt;br /&gt;EventBroker broker = EventBroker.GetEventBroker() ;&lt;br /&gt;Notify notify = new Notify(Handler) ;&lt;br /&gt;broker.EventDistributor(notify) ;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;callback function which will be called by the event broker when events of a&lt;br /&gt;///particular type occur&lt;br /&gt;///&lt;/summary&gt;&lt;br /&gt;/// &lt;param name="sender"&gt;this can be used to determine the source of the event&lt;/param&gt;&lt;br /&gt;/// &lt;param name="evt"&gt;event that occurred&lt;/param&gt;&lt;br /&gt;protected void Handler(object sender,EventsToGenerate evt)&lt;br /&gt;{&lt;br /&gt;if(evt == EventsToGenerate.NewEvent)&lt;br /&gt;MessageBox.Show("Handled the NewEvent! My God!!!") ;&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;MessageBox.Show("Couldnt get the NewEvent! My God!!!") ;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;class provides brokerage between the publishers and the subscribers&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;class EventBroker&lt;br /&gt;{&lt;br /&gt;private static EventBroker broker ;&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;singleton event broker &lt;/summary&gt;&lt;br /&gt;/// &lt;returns&gt;single instance of event broker &lt;/returns&gt;&lt;br /&gt;public static EventBroker GetEventBroker()&lt;br /&gt;{&lt;br /&gt;if(broker == null)&lt;br /&gt;{&lt;br /&gt;broker = new EventBroker() ;&lt;br /&gt;return broker ;&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;return broker ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public event Notify notifyConsumers ;&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;notify the subscribers &lt;/summary&gt;&lt;br /&gt;/// &lt;param name="evt"&gt;the event to be notified to the subscribers&lt;/param&gt;&lt;br /&gt;public void Delegate(EventsToGenerate evt)&lt;br /&gt;{&lt;br /&gt;this.notifyConsumers(this,evt) ;&lt;br /&gt;}&lt;br /&gt;/// &lt;summary&gt;subscribers use this to register the callbacks&lt;br /&gt;/// with the event broker so that the event broker&lt;br /&gt;/// can notify the callbacks whenever events occur&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;/// &lt;param name="callback"&gt;&lt;/param&gt;&lt;br /&gt;public void EventDistributor(Notify callback)&lt;br /&gt;{&lt;br /&gt;notifyConsumers += new Notify(callback);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;Voila!!!!!&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-110473108040544254?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/110473108040544254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=110473108040544254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110473108040544254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110473108040544254'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2005/01/sample-event-brokerage.html' title='Sample Event Brokerage'/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9388152.post-110256988029106974</id><published>2004-12-08T05:50:00.000-08:00</published><updated>2004-12-08T22:58:17.950-08:00</updated><title type='text'>Web Services - Starring SOAP </title><content type='html'>As we know today..Services today are hot cakes and Web services are even more hotter.Reason being ,access to web services via the HTTP.With HTTP as the transport mechanism in most web browsers, web services are becoming even more attractive.Access to Web services is through standard defined ports, on which listen most of the web servers today.Security is easily provided by the firewalls and web servers too are equally wily.Thats why web services are becoming increasingly popular .They also offer:&lt;br /&gt;1. Functional services(Take for example, I have an application that allows online share transactions for the users.But before I actually allow the user to transact the shares I need to authenticate him or her.For this the Org/Corp where the user is registered usually exposes the authentication system as a web service so that the 'share transaction' Application can utilize the same for authentication.)&lt;br /&gt;2. Web services define implementation agnostic means of consuming services.That is the consumer of the service is hardly aware of the implementation details(you count the golden eggs..not on the hen laying it!!!) of the service.It may be written in Java C++,.net or any other lanaguage,it may be running on any OS platform too ,for that matter!!!.So tommorrow if the implementation of the web service changes, the code of the consumer doesnt break down as the interfaces remain same .&lt;br /&gt;3.Since the world W3C has come out with a set of protocols for invocation of web services via WSDL ,discovery using UDDI etc there is quite an amount of standardization on this front.So it is safe to use web services.&lt;br /&gt;4.Finally Web services make distributed applications working seamlessly a reality&lt;br /&gt;&lt;br /&gt;So much for using the web services but ,what are the ways of invoking the web services as of today?.Usually the way its implemented these days is :a SOAP message is wrapped over a HTTP call to the Web service.A proxy class resides on the client side that creates a SOAP message and invokes it over HTTP.There are enough library APIs both in open source world as well as Microsoft.net that help acheive this.On the other side-A SOAP handler resides on the Web server where the call is made .It extracts out the method name to be invoked from the SOAP message and then calls the proper method using this information.Essentially Web services are stateless much like everything on the web,they are request-response mechanisms.Hence each time a request is made a new object is created and on this object proper method to be invoked is determined by the SOAP message .The parameters for this method are also passed through SOAP messages.This way of invoking a web service today also known as RPC style of method invocation is a convinent apporach.But it has its own pitfalls.For one,&lt;br /&gt;A drawback using SOAP messages in this way is that the web services invocation become tightly coupled to the method that they invoke.Consider this follwing scenario:&lt;br /&gt;A SOAP message usually has a header and a body.The header contains the method name and the body the parameters .The SOAP message contains other things like whether its a request message or a response message and so on..we will only concentrate on the coupling part.Look at the SOAP message format&lt;br /&gt;&lt;br /&gt;&lt;?xml:namespace prefix = soap /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; soap:Envelope &amp;gt; &lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; soap:Header &amp;gt; &amp;lt; method name="method-name" &amp;gt; func1 &amp;lt; /method &amp;gt; &lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; soap:Header &amp;gt; &lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; soap:Body &amp;gt; &lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt;&lt;/soap:envelope&gt;&lt;soap:envelope soap="&lt;a href="&gt; params &amp;gt; &lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; param1 &amp;gt; ... &amp;lt; /param1 &amp;gt; &lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;. &lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;.&lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;. &amp;lt; param4 &amp;gt; ... &amp;lt; /param4 &amp;gt; &lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; /params &amp;gt; &lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; /soap:Body &amp;gt; &lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; /soap:Envelope &amp;gt; &lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;br /&gt;The above XML is usually the structure of the SOAP mesage in the RPC style of method invocation.Imagine what happens when the implementor of the web service decides that for method 'func1' he will have 3 parameters from say the existing 4 parameters.This simple change will result in the code breaking up on the client side,because remember it has a proxy class that build the SOAP message for the method invocation and that class will now have to undergo a change.This becomes unacceptable espcically when the number of clients are in a huge number and live systems are running.Instead we would want something that can cause no code break on the client side.There is another style of method invocation called as Document style based over SOAP that can also be used for Web Service invocation.Its philosophy is simple-Web services are not just method invocations but a larger service that does a sizeable chunk of data prcocessing that would have otherwise caused the client to spend a sizeable amount of resources as well as time doing the same.Thats how the Web Services should be used too in theory.So instead the SOAP message in the document sytle becomes something like &lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:body&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;params&gt;&amp;lt; soap:Envelope &amp;gt; &lt;/soap:envelope&gt;&lt;/soap:body&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:body&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; soap:Header &amp;gt; &amp;lt; method name="general-method-name" &amp;gt; GeneralMethod&lt;/soap:envelope&gt;&lt;/soap:body&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:body&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; /general-method-name &amp;gt; &lt;/soap:envelope&gt;&lt;/soap:body&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:body&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; /soap:Header &amp;gt;&lt;/soap:envelope&gt;&lt;/soap:body&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:body&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; soap:Body &amp;gt;&lt;/soap:envelope&gt;&lt;/soap:body&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:body&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt;&lt;/soap:envelope&gt;&lt;/soap:body&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:body&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;params &amp;gt; &lt;/soap:envelope&gt;&lt;/soap:body&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:body&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; param1 &amp;gt; ... &amp;lt; /param1 &amp;gt; &lt;/soap:envelope&gt;&lt;/soap:body&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:body&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;. &lt;/soap:envelope&gt;&lt;/soap:body&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:body&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;.&lt;/soap:envelope&gt;&lt;/soap:body&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:body&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;. &amp;lt; paramN &amp;gt; ... &amp;lt; /paramN &amp;gt;&lt;/soap:envelope&gt;&lt;/soap:body&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:body&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; /params &amp;gt;&lt;/soap:envelope&gt;&lt;/soap:body&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:body&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; /soap:Body &amp;gt; &lt;/soap:envelope&gt;&lt;/soap:body&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:body&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&amp;lt; /soap:Envelope&amp;gt; &lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;paramn&gt;&lt;paramn&gt;&lt;br /&gt;&lt;/params&gt;&lt;/soap:body&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;br /&gt;The general method based on some more inputs from the client determines the particular method to be called and the parameters now become those of a generic nature without actually coupling the method and its parameters.The server does some more processing to determine what all parameters should go the particular method by parsing through generic parameters list.The actual internal method never and neednt get exposed to the clients this way.This obviously seems a better way of invoking the Web services.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;method name="general-method-name"&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;soap:envelope soap="&lt;a href="&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/method&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&gt;&lt;/soap:envelope&amp;~~special_remove!#~~gt;&gt;&lt;/soap:envelope&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-110256988029106974?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/110256988029106974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=110256988029106974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110256988029106974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110256988029106974'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2004/12/web-services-starring-soap.html' title='Web Services - Starring SOAP '/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9388152.post-110205156791345363</id><published>2004-12-02T19:40:00.000-08:00</published><updated>2004-12-02T23:58:37.026-08:00</updated><title type='text'>Milking Event Brokers</title><content type='html'>This blog dwells over the idea of &lt;em&gt;event brokers &lt;/em&gt;comparing it with a real life sceanario.Most articles that I browsed on the Web were either too technical or were implementations; so I thought that I will start about something more conceptual and introductory than being specific.&lt;br /&gt;&lt;br /&gt;Brokers are any agents acting in between 2 or more parties,more specific is the case of brokers in between 'producers' and 'consumers'.Lets call applications that produce the events henceforth as &lt;em&gt;publishers&lt;/em&gt; and consumer applications henceforth as &lt;em&gt;subscribers&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;It is a well established fact that in an &lt;em&gt;event driven system,&lt;/em&gt;paradigm of producers and consumers decoupled are prevalent.Producers and Consumers neednt be aware of each other or dependent on one another.All they may be interested is the produce that exchanges between them.How are brokers mirrored in our day to day life,although one may find many, a simple one is that of which follows.Imagine of the daily 'milkman' who delivers milk packets at your doorstep(I know its hard to imagine a milkman in the context of a software event broker,but read along...perhaps u will find the analogy interesting). Imagine for a minute,what would happen if that milkman was not there.Obviously we would ourselves have to go to the milk dairies for it(but remember we are interested only in getting the milk and not where it comes from.) .Imagine we having to go to the milk dairies everyday to buy milk,isnt that a burden ?.Its the same as the subscribers going and asking the the publishers explicitly for event notfications.This obviously in a distributed envirnoment, results in coupling between the systems.I will tell how;tommorrow if suddenly I decide to go for a different brand of milk ,I cant go to the same milk dairy again and ask for that brand of milk packets ,can I ?.Instead if I had common place ,where in I can inform that I need to be delivered milk packets of any brand that I would want,it would be great.On similar lines ,in distributed systems too..the same problem occurs.If I place my subscription logic in the publishers and tommorrow if I want to add/change the subscription to another event,I will have to add/remove the logic again in the publisher .On the side of the publishers also, this is disadvantageous as the publishers tend to be heavy with the subscriber logic in them ,when many subscribers are interested in being notified about the events it produces(Imagine at a milk dairy thousands of people crowded to get milk packets..it is logistically impossible!!!).Thats exactly where the 'event broker' fits in.&lt;br /&gt;&lt;br /&gt;The job of the milk dairies is to produce milk packets and not bother about who uses them.Simlarly the consumers of the milk should only bother about getting the brand and quality of milk they are interested in.That is one should be independent of another.That being the case ,the same applies for applications that are interested in being notified about events,they neednt be aware of who the producer of the events are nor need to be aware of its intricacies..all they are interested is the events(milk packets in our case).This calls for decoupling between the applications and this is where the event broker plays a very important role.Event broker is the "milkman" or rather the 'middleman' who manages the event notifications.Just let the event broker know the events you are interested in and you will be notified about the same(like, let the milkman know what brand of milk packets you want and he will have them delivered at your doorstep).The only thing that needs to be done for event communications is that publishers need to tell the event broker what event they are publishing and subscribers need to tell what events they are interested in being notified about,thats it :) ,the chunk of the event communications will be then done by the event broker.Any change you require with event subscriptions ,just tell it to the event broker(its like telling your milkman[your event broker :) ] to deliver a different brand of milk from tommorrow) ..and voila your jobs done!!!.Its that easy&lt;br /&gt;&lt;br /&gt;Event Brokers also offer some exciting features of QOS&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When you are not at home ,the milkman may check once or twice again to see if you are there,if you are ,he will deliver your milk packets then.Its like having lifetime for events,the event broker can keep checking if the subscribers are up,within the life time of the event &lt;/li&gt;&lt;li&gt;Ensure delivery of events once or twice or as many desired .(Does your mikman dump all the milk packets at your doorstep?!!!!!,he will only deliver as many as would have ordered.).Its the same with Event Broker ,it will only deliver events that you would have subscriber for.&lt;/li&gt;&lt;li&gt;There may be many milkmen working for a milk dairy(similar to Load balancing,the events broker may be distributed among many servers for purposes of 'load balancing' and 'nearest to the delivery point' features)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This was briefly about some thoughts on how we could mirror event brokers in our day to day life and understand it better.&lt;/p&gt;&lt;p&gt;Will try to put some related code in the next blog :))&lt;/p&gt;&lt;p&gt;Happy blogging&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-110205156791345363?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/110205156791345363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=110205156791345363' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110205156791345363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110205156791345363'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2004/12/milking-event-brokers.html' title='Milking Event Brokers'/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9388152.post-110189106318233356</id><published>2004-12-01T00:51:00.000-08:00</published><updated>2004-12-01T00:51:03.183-08:00</updated><title type='text'></title><content type='html'>&lt;a href='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'&gt;&lt;img border='0' style='border:1px solid #FFFFFF; margin:2px' src='http://photos1.blogger.com/img/258/2497/320/PICT0009.2.jpg'&gt;&lt;/a&gt;&lt;br /&gt;Happier Me&amp;nbsp;&lt;a href='http://www.hello.com/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbh.gif' alt='Posted by Hello' border='0' style='border:0px;padding:0px;background:transparent;' align='absmiddle'&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-110189106318233356?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/110189106318233356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=110189106318233356' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110189106318233356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110189106318233356'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2004/12/happier-me.html' title=''/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9388152.post-110188346240578687</id><published>2004-11-30T22:44:00.000-08:00</published><updated>2004-11-30T22:44:22.406-08:00</updated><title type='text'></title><content type='html'>&lt;a href='http://photos1.blogger.com/img/258/2497/640/PICT0009.1.jpg'&gt;&lt;img border='0' style='border:1px solid #FFFFFF; margin:2px' src='http://photos1.blogger.com/img/258/2497/320/PICT0009.1.jpg'&gt;&lt;/a&gt;&lt;br /&gt;Happier Me&amp;nbsp;&lt;a href='http://www.hello.com/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbh.gif' alt='Posted by Hello' border='0' style='border:0px;padding:0px;background:transparent;' align='absmiddle'&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-110188346240578687?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/110188346240578687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=110188346240578687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110188346240578687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110188346240578687'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2004/11/happier-me.html' title=''/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9388152.post-110181482202187692</id><published>2004-11-29T22:21:00.000-08:00</published><updated>2004-11-30T06:41:01.973-08:00</updated><title type='text'>IN Software,Thoughts </title><content type='html'>This being my first blog ,let me take the name of Lord Ganesha, before before begining my blog efforts.I dont want to start with any technical stuff right in my first blog itself and send you to the castles of boredom right away.We have all the time in the world ahead of us for that ,but I thought, rather, lets look back. Being in Software development although for a very small time , makes me think back on its implications in our day to day life.Have we ever imagined how many softwares built and existing today affect our day to life.Come to think of it all of them do..there arent any that dont serve a purpose.So whats this evolution?,this journey from stone tools to 'soft tools', from stone spheres to 'Web spheres' ?.Yes ,software has evolved and is a part of us ,we accept that ,everybody does.&lt;br /&gt;From the the days of feeding binary code to machines to the present era of using frameworks which provide ,memory management ,code and network security ,software has always been evolving to make life of people making and using it easy.Bygone are the days when we had to struggle for writing procedures in assembly languages,and cometh have the days when we are talking abstractions to the level of Objects,Components and now today Services.I would love to talk about each one of the these :Assembly level code to OOP and Services(we will be henceforth always be doing it :) ) ,but probably not in this introductory note.&lt;br /&gt;&lt;br /&gt;Keep posting...&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9388152-110181482202187692?l=amarthoughtlogs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://amarthoughtlogs.blogspot.com/feeds/110181482202187692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9388152&amp;postID=110181482202187692' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110181482202187692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9388152/posts/default/110181482202187692'/><link rel='alternate' type='text/html' href='http://amarthoughtlogs.blogspot.com/2004/11/in-softwarethoughts.html' title='IN Software,Thoughts '/><author><name>Amarnath Karwekar</name><uri>http://www.blogger.com/profile/11284083451169313691</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photos1.blogger.com/img/258/2497/640/PICT0009.2.jpg'/></author><thr:total>0</thr:total></entry></feed>
