<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUMDRHw_eSp7ImA9WhRaE0Q.&quot;"><id>tag:blogger.com,1999:blog-21698308</id><updated>2012-02-16T18:34:35.241+05:30</updated><category term="clustering" /><category term="javascript" /><category term="soa governance" /><category term="registry" /><category term="statcounter" /><category term="soa" /><category term="G-Reg" /><category term="vvt-i" /><category term="open ID" /><category term="open source" /><category term="stratoslive" /><category term="WebLogic" /><category term="openoffice" /><category term="wsrm" /><category term="gnome" /><category term="Amazon Web Services" /><category term="paas" /><category term="OFBiz" /><category term="dell" /><category term="firefox" /><category term="WSO2 WSF/C++" /><category term="Amazon S3" /><category term="osgi" /><category term="Amazon EC2" /><category term="Mashup" /><category term="sinhala" /><category term="public key cryptography" /><category term="Equinox P2" /><category term="patching" /><category term="autoscaling" /><category term="vvt" /><category term="bps" /><category term="Cloud computing" /><category term="Tsunami" /><category term="humor" /><category term="huawei e220" /><category term="apache" /><category term="Islam" /><category term="wso2 case study" /><category term="WSO2 IS" /><category term="stratos" /><category term="php" /><category term="QA" /><category term="howto" /><category term="automobiles" /><category term="esb" /><category term="synapse" /><category term="XMPP" /><category term="tooling" /><category term="Web services" /><category term="paa" /><category term="WSAS" /><category term="systems administration" /><category term="engine oil additive" /><category term="Java" /><category term="apachecon" /><category term="distributed computing" /><category term="SAML" /><category term="soa platform" /><category term="OpenID" /><category term="life" /><category term="XKMS" /><category term="Data services" /><category term="carbon" /><category term="Google Chrome" /><category term="structure101" /><category term="engine oil" /><category term="load balancing" /><category term="software" /><category term="Maven" /><category term="Linux" /><category term="XACML" /><category term="Eclipse" /><category term="IntelliJIDEA" /><category term="tomcat7" /><category term="Royal College" /><category term="middleware" /><category term="fun" /><category term="wso2con" /><category term="wso2" /><category term="Axis2" /><category term="InfoCard" /><title>Azeez's Notes</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.afkham.org/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.afkham.org/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>197</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/afkham/eBwc" /><feedburner:info uri="afkham/ebwc" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;AkEMQX04eCp7ImA9WhRRF0k.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-5518169066965086222</id><published>2011-12-01T19:12:00.001+05:30</published><updated>2011-12-01T19:41:20.330+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-01T19:41:20.330+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><category scheme="http://www.blogger.com/atom/ns#" term="wso2" /><title>6 years at WSO2!</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UOz3kvF4Aw01Sis-PmyzMeUZEGQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UOz3kvF4Aw01Sis-PmyzMeUZEGQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UOz3kvF4Aw01Sis-PmyzMeUZEGQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UOz3kvF4Aw01Sis-PmyzMeUZEGQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
3 years ago, I wrote a blog post titled "&lt;a href="http://blog.afkham.org/2008/12/3-years-at-wso2.html" target="_blank"&gt;3 years at WSO2&lt;/a&gt;". So, it's only befitting that I write a similar post at the end of 3 more years. These 3 years passed by very quickly. Time does fly when you are enjoying yourself.&lt;br /&gt;
&lt;br /&gt;
Over the past 3 years, the company has grown from strength to strength while continuing the maintain its culture &amp;amp; values, and emerged as a leader in the middleware space. We've built a comprehensive middleware stack, as well as built the first complete &lt;a href="http://wso2.org/projects/stratos" target="_blank"&gt;Cloud middleware platform&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Even after 6 long years, I'm still having a lot of fun &amp;amp; always learning something new all the time, which keeps me excited &amp;amp; motivated.&lt;br /&gt;
&lt;br /&gt;
Just like I did in my "3 years at WSO2" post, let me end this post with another team photo we took at ApacheCon 2011, Vancouver, Canada.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-x8QNMlTenIc/TteKk0U0DBI/AAAAAAAACPg/8EJo5sizUzg/s1600/team-wso2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://3.bp.blogspot.com/-x8QNMlTenIc/TteKk0U0DBI/AAAAAAAACPg/8EJo5sizUzg/s640/team-wso2.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-5518169066965086222?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/j3w9Zhk7qzg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/5518169066965086222/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=5518169066965086222" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/5518169066965086222?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/5518169066965086222?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/j3w9Zhk7qzg/6-years-at-wso2.html" title="6 years at WSO2!" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-x8QNMlTenIc/TteKk0U0DBI/AAAAAAAACPg/8EJo5sizUzg/s72-c/team-wso2.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/12/6-years-at-wso2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAGRHs-cCp7ImA9WhRSFko.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-2533888025293634350</id><published>2011-11-19T06:58:00.001+05:30</published><updated>2011-11-19T09:05:25.558+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-19T09:05:25.558+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><category scheme="http://www.blogger.com/atom/ns#" term="stratos" /><title>The birth of Stratos multi-tenancy</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ECTncbJIjFl1CvegmZKaRhIUeJA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ECTncbJIjFl1CvegmZKaRhIUeJA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ECTncbJIjFl1CvegmZKaRhIUeJA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ECTncbJIjFl1CvegmZKaRhIUeJA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
On Nov 14th, 2009, I was all by myself &amp;amp; had a LONG &amp;amp; BORING 12hr transit at the Hong Kong airport! I was returning to Sri Lanka after a trip to the US, where I was a speaker at ApacheCon NA, 2009.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-VylheY7HU1U/TscHoDmjblI/AAAAAAAACO0/yB_Hh1BFZmA/s1600/Screen+shot+2011-11-19+at+7.01.38+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="108" src="http://3.bp.blogspot.com/-VylheY7HU1U/TscHoDmjblI/AAAAAAAACO0/yB_Hh1BFZmA/s640/Screen+shot+2011-11-19+at+7.01.38+AM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
Since I had nothing better to do, I started looking at how multi-tenant service deployment &amp;amp; dispatching can be made to work in WSO2 WSAS (since then, this product has been renamed to WSO2 &lt;a href="http://wso2.org/projects/as" target="_blank"&gt;AppServer&lt;/a&gt;). I tweeted about what I was planning to do.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-fDYImNoiH_k/TscIM3uk5bI/AAAAAAAACO8/gW78-Z72AUY/s1600/Screen+shot+2011-11-19+at+7.06.28+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="108" src="http://2.bp.blogspot.com/-fDYImNoiH_k/TscIM3uk5bI/AAAAAAAACO8/gW78-Z72AUY/s640/Screen+shot+2011-11-19+at+7.06.28+AM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
I started implementing this, and got very excited when the first request got dispatched to a tenant. So, again I tweeted about this (now historic) event.&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-6_FLPKBgOGU/TscIpMij_tI/AAAAAAAACPE/B2y2XamHaDU/s1600/Screen+shot+2011-11-19+at+7.08.16+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="98" src="http://3.bp.blogspot.com/-6_FLPKBgOGU/TscIpMij_tI/AAAAAAAACPE/B2y2XamHaDU/s640/Screen+shot+2011-11-19+at+7.08.16+AM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
This was the birth of the WSO2&amp;nbsp;&lt;a href="http://wso2.org/projects/stratos" style="text-align: justify;" target="_blank"&gt;Stratos&lt;/a&gt;&lt;span class="Apple-style-span" style="text-align: justify;"&gt;&amp;nbsp;Cloud middleware platform! The code I wrote during this transit formed the basis for multi-tenancy in Stratos.&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="text-align: justify;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
During the next month, I got some of the other core stuff working, and like any good Tweep, tweeted about the progress.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-9sX4LoyOY-E/TscJsAwVDmI/AAAAAAAACPM/Sbk68Q4_LlE/s1600/Screen+shot+2011-11-19+at+7.11.39+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="490" src="http://2.bp.blogspot.com/-9sX4LoyOY-E/TscJsAwVDmI/AAAAAAAACPM/Sbk68Q4_LlE/s640/Screen+shot+2011-11-19+at+7.11.39+AM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
My tweets had gotten &lt;a href="http://sanjiva.weerawarana.org/" target="_blank"&gt;Sanjiva&lt;/a&gt; excited, prompting him to send me the following mail.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-49XlwTSkLPA/TscMO1IY9AI/AAAAAAAACPU/GZnVDD15PU8/s1600/Screen+shot+2011-11-19+at+7.22.50+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="451" src="http://4.bp.blogspot.com/-49XlwTSkLPA/TscMO1IY9AI/AAAAAAAACPU/GZnVDD15PU8/s640/Screen+shot+2011-11-19+at+7.22.50+AM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The very first bits of the multi-tenancy code was developed in a &lt;a href="https://wso2.org/repos/wso2/scratch/carbon-multitenancy" target="_blank"&gt;scratch section&lt;/a&gt; of the WSO2 Subversion repo before it became stable enough to be committed to the trunk.&lt;br /&gt;
&lt;br /&gt;
So, it's been 2 years since the first message got dispatched to a tenant at the HKG airport. Time well spent during a long transit. Over the past few years, this code was improved by many people &amp;amp; Stratos &amp;nbsp;has grown from strength to strength to become the only complete open source Cloud middeware platform. &lt;a href="http://stratoslive.wso2.com/" target="_blank"&gt;StratoLive&lt;/a&gt;, the PaaS based on Stratos, went onto to become the first &amp;amp; only complete PaaS.&lt;br /&gt;
&lt;br /&gt;
P.S. I used &lt;a href="http://snapbird.org/" target="_blank"&gt;SnapBird&lt;/a&gt; to search through my old tweets.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-2533888025293634350?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/KC7HCjNfrgo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/2533888025293634350/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=2533888025293634350" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/2533888025293634350?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/2533888025293634350?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/KC7HCjNfrgo/birth-of-stratos-multi-tenancy.html" title="The birth of Stratos multi-tenancy" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-VylheY7HU1U/TscHoDmjblI/AAAAAAAACO0/yB_Hh1BFZmA/s72-c/Screen+shot+2011-11-19+at+7.01.38+AM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/11/birth-of-stratos-multi-tenancy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEHQnk4fip7ImA9WhRSEkQ.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-8186986532449602825</id><published>2011-11-15T00:28:00.001+05:30</published><updated>2011-11-15T00:37:13.736+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-15T00:37:13.736+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="howto" /><category scheme="http://www.blogger.com/atom/ns#" term="carbon" /><title>How to customize WSO2 Carbon UI theme</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/di4zSMO8JGQgqkW6PGGshLPa5E8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/di4zSMO8JGQgqkW6PGGshLPa5E8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/di4zSMO8JGQgqkW6PGGshLPa5E8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/di4zSMO8JGQgqkW6PGGshLPa5E8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Chanaka has written an article showing how easy it is to introduce your own custom theme for any WSO2 &lt;a href="http://wso2.org/projects/carbon" target="_blank"&gt;Carbon&lt;/a&gt; based products. The interesting thing is, the theme itself is deployed as an OSGi bundle, so it is just a matter of replacing the OSGi bundle &amp;amp; refreshing it.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;See '&lt;a href="http://wso2.org/library/knowledge-base/2011/11/playing-around-carbon-product-themes"&gt;Playing Around With Carbon Product Themes&lt;/a&gt;' for more details.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-8186986532449602825?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/7ApCWwovUoM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/8186986532449602825/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=8186986532449602825" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/8186986532449602825?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/8186986532449602825?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/7ApCWwovUoM/how-to-customize-wso2-carbon-ui-theme.html" title="How to customize WSO2 Carbon UI theme" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/11/how-to-customize-wso2-carbon-ui-theme.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YFQX47eip7ImA9WhRTGUQ.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-1480261977333010838</id><published>2011-11-11T06:21:00.001+05:30</published><updated>2011-11-11T12:35:10.002+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-11T12:35:10.002+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="paas" /><category scheme="http://www.blogger.com/atom/ns#" term="Cloud computing" /><category scheme="http://www.blogger.com/atom/ns#" term="Axis2" /><title>ApacheCon 2011: A multi-tenant architecture for Apache Axis2</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OR_lL8x6y1FHTReEoga4S-IX_rY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OR_lL8x6y1FHTReEoga4S-IX_rY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OR_lL8x6y1FHTReEoga4S-IX_rY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OR_lL8x6y1FHTReEoga4S-IX_rY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="width:425px" id="__ss_10111851"&gt; &lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/afkham_azeez/a-multitenant-architecture-for-apache-axis2" title="A multi-tenant architecture for Apache Axis2" target="_blank"&gt;A multi-tenant architecture for Apache Axis2&lt;/a&gt;&lt;/strong&gt; &lt;object id="__sse10111851" width="425" height="355"&gt; &lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=arch-for-enabling-mt-for-axis2-111110183149-phpapp02&amp;stripped_title=a-multitenant-architecture-for-apache-axis2&amp;userName=afkham_azeez" /&gt; &lt;param name="allowFullScreen" value="true"/&gt; &lt;param name="allowScriptAccess" value="always"/&gt; &lt;embed name="__sse10111851" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=arch-for-enabling-mt-for-axis2-111110183149-phpapp02&amp;stripped_title=a-multitenant-architecture-for-apache-axis2&amp;userName=afkham_azeez" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt; &lt;/object&gt; &lt;div style="padding:5px 0 12px"&gt; View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/afkham_azeez" target="_blank"&gt;afkham_azeez&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-1480261977333010838?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/MVH5o_wpQR4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/1480261977333010838/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=1480261977333010838" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/1480261977333010838?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/1480261977333010838?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/MVH5o_wpQR4/apachecon-2011-multi-tenant.html" title="ApacheCon 2011: A multi-tenant architecture for Apache Axis2" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/11/apachecon-2011-multi-tenant.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYESH89eip7ImA9WhRSFk4.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-3746651004200976887</id><published>2011-11-10T08:52:00.001+05:30</published><updated>2011-11-18T22:38:29.162+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-18T22:38:29.162+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="synapse" /><category scheme="http://www.blogger.com/atom/ns#" term="paas" /><category scheme="http://www.blogger.com/atom/ns#" term="Axis2" /><category scheme="http://www.blogger.com/atom/ns#" term="tomcat7" /><category scheme="http://www.blogger.com/atom/ns#" term="apachecon" /><title>ApacheCon 2011: Building a scalable multi-tenanted Cloud-native Application Server using Tomcat, Axis2 &amp; Synapse</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1DtRwfa5PVZLnIz6e4IhzLlI_G4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1DtRwfa5PVZLnIz6e4IhzLlI_G4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1DtRwfa5PVZLnIz6e4IhzLlI_G4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1DtRwfa5PVZLnIz6e4IhzLlI_G4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div id="__ss_10098183" style="width: 425px;"&gt;
&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/afkham_azeez/building-a-multitenanted-cloudnative-appserver" title="Building a multi-tenanted Cloud-native AppServer"&gt;Building a multi-tenanted Cloud-native AppServer&lt;/a&gt;&lt;/strong&gt;&lt;object height="355" id="__sse10098183" width="425"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mt-as-using-tomcat-axis2-synapse-final-111109211503-phpapp02&amp;stripped_title=building-a-multitenanted-cloudnative-appserver&amp;userName=afkham_azeez" /&gt;


&lt;param name="allowFullScreen" value="true"/&gt;


&lt;param name="allowScriptAccess" value="always"/&gt;


&lt;embed name="__sse10098183" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mt-as-using-tomcat-axis2-synapse-final-111109211503-phpapp02&amp;stripped_title=building-a-multitenanted-cloudnative-appserver&amp;userName=afkham_azeez" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;div style="padding: 5px 0 12px;"&gt;
View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/afkham_azeez"&gt;afkham_azeez&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Listen to the presentation audio at &lt;a href="http://lanyrd.com/2011/apachecon-north-america/skdpt/"&gt;http://lanyrd.com/2011/apachecon-north-america/skdpt/&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-3746651004200976887?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/sCuhUJEojnI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/3746651004200976887/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=3746651004200976887" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/3746651004200976887?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/3746651004200976887?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/sCuhUJEojnI/apachecon-2011-building-scalable-multi.html" title="ApacheCon 2011: Building a scalable multi-tenanted Cloud-native Application Server using Tomcat, Axis2 &amp; Synapse" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/11/apachecon-2011-building-scalable-multi.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8NQX09cCp7ImA9WhRTFkk.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-710550707627121038</id><published>2011-11-06T21:42:00.002+05:30</published><updated>2011-11-07T12:08:10.368+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-07T12:08:10.368+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Cloud computing" /><category scheme="http://www.blogger.com/atom/ns#" term="stratoslive" /><category scheme="http://www.blogger.com/atom/ns#" term="paa" /><category scheme="http://www.blogger.com/atom/ns#" term="stratos" /><title>Lazy Loading Deployment Artifacts in a PaaS Deployment</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6y16jTU8c9qU9WXC2kjPoUBvvwg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6y16jTU8c9qU9WXC2kjPoUBvvwg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6y16jTU8c9qU9WXC2kjPoUBvvwg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6y16jTU8c9qU9WXC2kjPoUBvvwg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;1.0 Introduction&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
One of the fundamental goals of Cloud computing is optimal usage of limited resources. This involves maximizing ROI for all parties concerned, and making sure that all parties win. Multi-tenancy is a core attribute of a Cloud deployment. We have to ensure that all available resources can be optimally utilized by many tenants as possible. Lazy loading plays a major role in resource usage optimization.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
In this article, we will take a look at how deployment artifacts (webapps, service artifacts etc) can be optimally loaded in a Platform-as-a-Service (PaaS) implementation. We will describe how we have implemented lazy loading in the WSO2&amp;nbsp;&lt;a href="http://wso2.org/projects/stratos" target="_blank"&gt;Stratos&lt;/a&gt;&amp;nbsp;Cloud Middleware Platform &amp;amp; the WSO2 &lt;a href="http://stratoslive.wso2.com/" target="_blank"&gt;StratosLive&lt;/a&gt; PaaS.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;2.0 Lazy Loading&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
Lazy loading is a widely used &amp;amp; well-known concept in the field of computing. There are &lt;a href="http://martinfowler.com/eaaCatalog/lazyLoad.html"&gt;four different variants&lt;/a&gt; of the lazy loading pattern, as documented by Martin Fowler. The differences between these variants are subtle.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;b&gt;1. Lazy Initialization&lt;/b&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
A null field indicates that there is no data. When the value is requested, a null check is performed to see if the actual data needs to be loaded.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;b&gt;2. Virtual Proxy&lt;/b&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
The virtual proxy implements the same interface as the real object, and when called for the very first time, it loads the real object &amp;amp; delegates to that object.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;b&gt;3. Value Holder&lt;/b&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
A value holder is an object with a getValue&amp;nbsp;method, which the clients will invoke in order to obtain a reference to the real object. Note that the method may not necessarily be named getValue.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;b&gt;4. Ghost&lt;/b&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
The real object without any data. The data is loaded as and when required.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
In the next sections of the article, we will explain how we used the &lt;i&gt;Value Holder&lt;/i&gt; &amp;amp; &lt;i&gt;Ghost&lt;/i&gt; variants of the lazy loading pattern in the &lt;a href="http://wso2.org/projects/stratos" target="_blank"&gt;Stratos&lt;/a&gt; Cloud Middleware Platform &amp;amp; the &lt;a href="http://stratoslive.wso2.com/" target="_blank"&gt;StratosLive&lt;/a&gt; PaaS.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;3.0 Lazy Loading Tenant AxisConfiguration&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
The Stratos deployment model revolves around the Axis2 deployment model. We have found the &lt;a href="http://axis.apache.org/axis2/java/core/" target="_blank"&gt;Axis2&lt;/a&gt; deployment model to be a very flexible &amp;amp; powerful one, hence we decided to go ahead with the Axis2 deployment model for deploying artifacts in the WSO2 &lt;a href="http://wso2.org/projects/carbon" target="_blank"&gt;Carbon&lt;/a&gt; middleware platform &amp;amp; WSO2 &lt;a href="http://wso2.org/projects/stratos" target="_blank"&gt;Stratos&lt;/a&gt; Cloud middleware platform. The Axis2 deployment model totally isolates artifact deployment &amp;amp; classloader isolation, hence is a very good model to adopt for a multi-tenanted Cloud deployment.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
When the WSO2 Stratos processes start up, we do not load all the tenants into memory. Obviously, it will not scale if we were to do so. Tenants are loaded only when they are needed, and if a tenant is not being used for a certain time period, we unload such tenants. Tenants will be loaded in the following&amp;nbsp;scenarios;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
1. A request is received for an artifact deployed by the tenant.&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
These can be requests to webapps, Web services, proxy services, tenant UI components and so on.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
2. A tenant's management console view is loaded.&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
Tenant's can manage services in their view of the PaaS using the management console. When tenants want to perform such management activities, we load the tenant.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
3. A periodic task scheduled for the tenant gets activated&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
In a PaaS, tenants should be able to schedule tasks that run periodically. In such cases, when the task starts to run, if the tenant has not been loaded, we will load the tenant.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
In WSO2 Stratos, loading a tenant mainly translates to creation of an Axis2 Configuration &amp;amp; ConfigurationContext in programming terms. When an AxisConfiguration is created for a tenant, a series of OSGi service calls results in the relevant permission scheme &amp;amp; other metadata being loaded. These are lightweight service calls that do not impose high overhead.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
We have used the ValueHolder variant of lazy loading in this instance. The relevant method call is;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;i&gt;TenantAxisUtils.getTenantConfigurationContext(String tenantDomain)&lt;/i&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
The getTenantConfigurationContext method is the equivalent of the getValue method in the ValueHolder. This method will create &amp;amp; return a new Axis2 ConfigurationContext for that tenant domain, if it does not already exist, and will return the already created&amp;nbsp;ConfigurationContext if the tenant has already been loaded.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
One shortcoming of loading the entire AxisConfiguration is that all artifacts belonging to that particular tenant will also be loaded. Hence, the time taken for the execution of this method will increase with the number of artifacts deployed by the tenant. This can lead to unfavorable consequences such as the very first request received for a tenant always timing out. Such requests are targeted at a single artifact, but loading the AxisConfiguration means the entire Axis2 repo gets loaded, hence we will end up loading all artifacts, leading to unnecessary memory usage &amp;amp; processing time. In section 4.0, we will describe how we can overcome this issue by using the Ghost variant of the lazy loading pattern.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;4.0 Lazy Loading Tenant Deployment Artifacts&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
As described in section 3.0 above, loading an entire tenant AxisConfiguration can lead to increasing first-request response times since all artifacts have to be loaded. We can overcome this by loading the required artifact into a tenant's AxisConfiguration on demand.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
We use the Ghost variant of the lazy loading pattern to accomplish this. Let's take a look at how normal artifact deployment works.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-aGry762XGrE/TrPrFhwCKFI/AAAAAAAAA3I/qGwlHkjZMus/s1600/1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="351" src="http://1.bp.blogspot.com/-aGry762XGrE/TrPrFhwCKFI/AAAAAAAAA3I/qGwlHkjZMus/s400/1.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Figure 1: Deployment without Ghost Deployer &amp;amp; Ghost Dispatcher&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
As shown in the above diagram, a set of Axis2 deployers are registered for each artifact type. The DeploymentEngine maintains a collection of such deployers, and then when an AxisConfiguration is created, it will call all the deployers to load all the artifacts found in the Axis2 repository. The deployers will load all the artifacts into memory. Needless to say, this will take a long time if there are many artifacts to be loaded. Next let us look into the concept of Ghost artifact deployment, to see how we reduce this initial loading time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-kvUTR7d1RdI/TrPrctIA3ZI/AAAAAAAAA3Q/BpbqYcWmy9Q/s1600/2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="310" src="http://3.bp.blogspot.com/-kvUTR7d1RdI/TrPrctIA3ZI/AAAAAAAAA3Q/BpbqYcWmy9Q/s640/2.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Figure 2: Ghost Deployment with Ghost Deployer &amp;amp; Ghost Dispatcher&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
As shown in the above diagram, we change the deployment slightly &amp;amp; register GhostDeployers for all artifact types. The GhostDeployer instance will maintain references to the actual Axis2 deployers. Let us look at the sequence of events.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
1. When a new artifact is deployed, either by uploading using the Management console UI, or copying the artifact to the Axis2 repo, the GhostDeployer will call the real deployer, which will create the real Axis2 Service&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
2. The GhostDeployer will then pick up that Axis2 service, and create a simple metadata file which has some basic information needed to create a Ghost Axis2Service. This will mainly contain the service name &amp;amp; operations; information needed for dispatching requests.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
3. On subsequent deployments of the service which was first created in step 2, the GhostDeployer will pick it up from the metadata file created in step 2 above.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
4. Next the GhostDeployer will create a Ghost Axis2 Service which will contain a special parameter (Ghost Parameter) which will identify the service as a Ghost service, and register that service into the AxisConfig&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
5. Next, say a request comes in for the said service, which at the moment is deployed in Ghost form.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
6. There is a special Axis2 dispatching handler called the GhostDispatcher, which is registered after all standard Axis2 dispatchers. It will check the Ghost Parameter added to the service in step 4 above to check whether the Actual service deployment needs to take place, if the service in concern is a Ghost service.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
7. If the service is determined to be a Ghost service in step 6 above, the GhostDispatcher will call the GhostDeployer to carry out the actual service deployment. At that point, the GhostDeployer will call the actual deployer, which will load the rest of the metadata &amp;amp; information required by the actual service. This will load all metadata from the registry, load service policies &amp;amp; so on.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
In addition, if certain services are not used for some time, they will be undeployed &amp;amp; reloaded in Ghost form. This will ensure that rarely used services, or services that don't get called too often, do not&amp;nbsp;unnecessarily&amp;nbsp;use up resources.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;5.0 Performance Comparison&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
We carried out performance comparisons &amp;amp; plotted the graph of "Initial Response Time" vs. "Number of Artifacts". The initial response time is the response time seen by a client when a tenant has not been loaded. The number of artifacts is the number of deployment artifacts deployed under that tenant.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
We sent requests targeted at a particular operation in a particular service. We recorded the initial response times while linearly increasing the number of deployment artifacts up to 300 in that tenant. The resulting graph is shown below.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ZTVe3PFLqYQ/TrPs1am5OBI/AAAAAAAAA3Y/itQguQdObAY/s1600/Screen+shot+2011-11-04+at+7.21.25+PM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="380" src="http://1.bp.blogspot.com/-ZTVe3PFLqYQ/TrPs1am5OBI/AAAAAAAAA3Y/itQguQdObAY/s640/Screen+shot+2011-11-04+at+7.21.25+PM.png" width="640" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Figure 3: Performance comparison - with &amp;amp; without Ghost Deployment&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
As can be seen, without Ghost Deployment, the initial response time linearly increases. Eventually, clients sending the very first requests will start timing out. With Ghost Deployment, we ensure that the first response time is linear, hence this will improve the client experience on first request, and will also ensure that the first requests don't timeout.&lt;br /&gt;
&lt;br /&gt;
Ghost Deployment is one of the major enhancements we introduced in the recent StratosLive upgrades to enable our tenants to experience better performance.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;6.0 Conclusion&lt;/span&gt;&lt;br /&gt;
Lazy loading is a core requirement in Cloud deployments. In this article we looked at some of the core concepts behind lazy loading. We saw how Ghost Deployment yields drastic performance improvements in a multi-tenanted PaaS environment such as StratosLive. Future enhancements in this area in Stratos will include lazy loading of webapps using a GhostWebappDeployer Tomcat valve.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-710550707627121038?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/tH1z-FBXl6g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/710550707627121038/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=710550707627121038" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/710550707627121038?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/710550707627121038?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/tH1z-FBXl6g/lazy-loading-deployment-artifacts-in.html" title="Lazy Loading Deployment Artifacts in a PaaS Deployment" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-aGry762XGrE/TrPrFhwCKFI/AAAAAAAAA3I/qGwlHkjZMus/s72-c/1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/11/lazy-loading-deployment-artifacts-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYFRn0yeCp7ImA9WhRTEEs.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-4203654152808436054</id><published>2011-10-31T17:11:00.001+05:30</published><updated>2011-10-31T17:25:17.390+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-31T17:25:17.390+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wso2con" /><category scheme="http://www.blogger.com/atom/ns#" term="Cloud computing" /><category scheme="http://www.blogger.com/atom/ns#" term="soa" /><title>WSO2Con 2011: Panel: Cloud and SOA: The good, the bad and the ugly</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/03hrCowh04qjIe1hllBwSdhrwBo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/03hrCowh04qjIe1hllBwSdhrwBo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/03hrCowh04qjIe1hllBwSdhrwBo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/03hrCowh04qjIe1hllBwSdhrwBo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/mExDSctWItw" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-4203654152808436054?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/AC08Vxl3EDY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/4203654152808436054/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=4203654152808436054" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/4203654152808436054?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/4203654152808436054?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/AC08Vxl3EDY/wso2con-2011-panel-cloud-and-soa-good.html" title="WSO2Con 2011: Panel: Cloud and SOA: The good, the bad and the ugly" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/mExDSctWItw/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/10/wso2con-2011-panel-cloud-and-soa-good.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYHQXg-fyp7ImA9WhRTEEs.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-3079015332210445030</id><published>2011-10-31T16:51:00.001+05:30</published><updated>2011-10-31T17:25:30.657+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-31T17:25:30.657+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wso2con" /><category scheme="http://www.blogger.com/atom/ns#" term="paas" /><category scheme="http://www.blogger.com/atom/ns#" term="Cloud computing" /><category scheme="http://www.blogger.com/atom/ns#" term="stratoslive" /><category scheme="http://www.blogger.com/atom/ns#" term="stratos" /><title>WSO2Con 2011: Building Cool Applications with WSO2 StratosLive</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KDqTPxT-CF2qKFz-nuKeRU43yIU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KDqTPxT-CF2qKFz-nuKeRU43yIU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KDqTPxT-CF2qKFz-nuKeRU43yIU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KDqTPxT-CF2qKFz-nuKeRU43yIU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/wWHgCbMJ1iY" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-3079015332210445030?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/sfEqe_tQUEE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/3079015332210445030/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=3079015332210445030" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/3079015332210445030?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/3079015332210445030?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/sfEqe_tQUEE/wso2con-2011-building-cool-applications.html" title="WSO2Con 2011: Building Cool Applications with WSO2 StratosLive" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/wWHgCbMJ1iY/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/10/wso2con-2011-building-cool-applications.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYARXk5eSp7ImA9WhRTEEs.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-1113117848697051110</id><published>2011-10-31T16:41:00.001+05:30</published><updated>2011-10-31T17:25:44.721+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-31T17:25:44.721+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wso2con" /><category scheme="http://www.blogger.com/atom/ns#" term="paas" /><category scheme="http://www.blogger.com/atom/ns#" term="Cloud computing" /><category scheme="http://www.blogger.com/atom/ns#" term="stratos" /><title>WSO2Con 2011: Open Source Middleware for the Cloud</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HwmDcGWnQYL-cs6dT5ORqGmV3FI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HwmDcGWnQYL-cs6dT5ORqGmV3FI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HwmDcGWnQYL-cs6dT5ORqGmV3FI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HwmDcGWnQYL-cs6dT5ORqGmV3FI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/2fLNreOHchc" width="420"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-1113117848697051110?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/f3AbNkOPFkw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/1113117848697051110/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=1113117848697051110" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/1113117848697051110?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/1113117848697051110?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/f3AbNkOPFkw/wso2con-2011-open-source-middleware-for.html" title="WSO2Con 2011: Open Source Middleware for the Cloud" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/2fLNreOHchc/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/10/wso2con-2011-open-source-middleware-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkANR3Y_eCp7ImA9WhdaF0U.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-1009132160113396592</id><published>2011-10-28T11:16:00.001+05:30</published><updated>2011-10-28T11:16:36.840+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-28T11:16:36.840+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IntelliJIDEA" /><title>My Top 10 Third Party IntelliJ IDEA Plugins</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4zCKeol3R6HrqgM31exVifMFeeQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4zCKeol3R6HrqgM31exVifMFeeQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4zCKeol3R6HrqgM31exVifMFeeQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4zCKeol3R6HrqgM31exVifMFeeQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-RVKRWIefPX8/TqpAhfxlBqI/AAAAAAAAAyE/x3dVkTCHPR0/s1600/intellijidea_logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-RVKRWIefPX8/TqpAhfxlBqI/AAAAAAAAAyE/x3dVkTCHPR0/s1600/intellijidea_logo.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ol style="text-align: left;"&gt;
&lt;li&gt;&lt;a href="http://plugins.intellij.net/plugin/?id=162"&gt;Hungry backspace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://plugins.intellij.net/plugin/?id=3847"&gt;FindBugs-IDEA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://plugins.intellij.net/plugin/?id=87"&gt;CopyFQNPlugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://plugins.intellij.net/plugin/?id=6132"&gt;GrepCode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://plugins.intellij.net/plugin/?id=190"&gt;Copy As HTML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://plugins.intellij.net/plugin/?id=1184"&gt;SOAP UI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://plugins.intellij.net/plugin/?id=154"&gt;TCP Monitor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://plugins.intellij.net/plugin/?id=4230"&gt;BashSupport&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://plugins.intellij.net/plugin/?id=182"&gt;Generate toString&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://plugins.intellij.net/plugin/?id=2190"&gt;Atlassian Connector&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-1009132160113396592?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/HX5jxPWrgAM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/1009132160113396592/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=1009132160113396592" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/1009132160113396592?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/1009132160113396592?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/HX5jxPWrgAM/my-top-10-third-party-intellij-idea.html" title="My Top 10 Third Party IntelliJ IDEA Plugins" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-RVKRWIefPX8/TqpAhfxlBqI/AAAAAAAAAyE/x3dVkTCHPR0/s72-c/intellijidea_logo.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.afkham.org/2011/10/my-top-10-third-party-intellij-idea.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUMR3k7fyp7ImA9WhdaEU8.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-6593510926596823282</id><published>2011-10-20T19:48:00.001+05:30</published><updated>2011-10-20T19:48:06.707+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-20T19:48:06.707+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fun" /><title>iPaid</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YeUMsJqE7vggE5AaIvRkVx7vCWU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YeUMsJqE7vggE5AaIvRkVx7vCWU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YeUMsJqE7vggE5AaIvRkVx7vCWU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YeUMsJqE7vggE5AaIvRkVx7vCWU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-qwlrcDUWLpc/TqAtgASYAtI/AAAAAAAAAx4/jK7_oMxDPd0/s1600/iPaid.jpg" imageanchor="1"&gt;&lt;img border="0" height="553" src="http://3.bp.blogspot.com/-qwlrcDUWLpc/TqAtgASYAtI/AAAAAAAAAx4/jK7_oMxDPd0/s640/iPaid.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-6593510926596823282?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/ZgctJPFbaC0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/6593510926596823282/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=6593510926596823282" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/6593510926596823282?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/6593510926596823282?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/ZgctJPFbaC0/ipaid.html" title="iPaid" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-qwlrcDUWLpc/TqAtgASYAtI/AAAAAAAAAx4/jK7_oMxDPd0/s72-c/iPaid.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.afkham.org/2011/10/ipaid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4DSH0yfyp7ImA9WhdbGU4.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-7624082751298297009</id><published>2011-10-18T17:09:00.001+05:30</published><updated>2011-10-18T17:09:39.397+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-18T17:09:39.397+05:30</app:edited><title>Colombo, Sri Lanka</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gWwCJHsiPP_ISADQRQ3Lqv2f4hY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gWwCJHsiPP_ISADQRQ3Lqv2f4hY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gWwCJHsiPP_ISADQRQ3Lqv2f4hY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gWwCJHsiPP_ISADQRQ3Lqv2f4hY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="width:425px" id="__ss_9746509"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/afkham_azeez/colombo-9746509" title="Colombo"&gt;Colombo&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse9746509" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=colombo-august2011-111018063357-phpapp02&amp;stripped_title=colombo-9746509&amp;userName=afkham_azeez" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse9746509" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=colombo-august2011-111018063357-phpapp02&amp;stripped_title=colombo-9746509&amp;userName=afkham_azeez" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/afkham_azeez"&gt;afkham_azeez&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-7624082751298297009?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/KX4pOp9uRcE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/7624082751298297009/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=7624082751298297009" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/7624082751298297009?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/7624082751298297009?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/KX4pOp9uRcE/colombo-sri-lanka.html" title="Colombo, Sri Lanka" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/10/colombo-sri-lanka.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIGQns_eip7ImA9WhdbFUo.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-9096183524116684256</id><published>2011-10-14T10:28:00.000+05:30</published><updated>2011-10-14T11:05:23.542+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-14T11:05:23.542+05:30</app:edited><title>ApacheCon NA 2011, Vancouver</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mxmZnRoyalROjkSty_uWuXOk4qs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mxmZnRoyalROjkSty_uWuXOk4qs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mxmZnRoyalROjkSty_uWuXOk4qs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mxmZnRoyalROjkSty_uWuXOk4qs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://na11.apachecon.com/attachments/0002/0348/speaker-468x60.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://na11.apachecon.com/attachments/0002/0348/speaker-468x60.gif" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
I will be conducting a &lt;a href="http://na11.apachecon.com/speakers/15420"&gt;couple of sessions&lt;/a&gt; at ApacheCon NA 2011, which will be held in the beautiful seaport city of Vancouver.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://cravecanada.com/wp-content/uploads/2008/08/vancouver.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="425" src="http://cravecanada.com/wp-content/uploads/2008/08/vancouver.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;b style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://na11.apachecon.com/talks/19481" style="color: #47255d; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;Building a scalable multi-tenant Application Server on the Cloud using Tomcat, Axis2 &amp;amp; Synapse&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
November 9 5:00PM&lt;/div&gt;
Apache Tomcat is one of most popular &amp;amp; widely used Application Servers, and Apache Axis2 is one of most widely used Java Web services servers. Apache Synapse is one of the popular, high performant ESBs widely used in the industry.&lt;br /&gt;
&lt;br /&gt;
In this session, we will look at how we combine these great projects from the ASF into building a scalable, elastic,multi-tenanted Application Server, which allows you to deploy cloud-native webapps on the Cloud, and benefit from all the advantages that Cloud Computing brings in. We will also see how easy it is to deploy any standard webapp on the Cloud, and seamlessly integrate with the authentication, authorization &amp;amp; management infrastructure provided by the underlying Platform-as-a-Service (PaaS).&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"&gt;This session will be co-presented by Selvaratnam Uthaiyashankar, Senior Manager &amp;amp; Senior Architect at WSO2, and Apache Member.&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
&lt;b style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a href="http://na11.apachecon.com/talks/19485" style="color: #47255d; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;"&gt;An architecture for enabling multi-tenancy for Apache Axis2&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;
November 10 11:30AM&lt;/div&gt;
Web services is the most popular technology for implementing an SOA. SOA &amp;amp; Cloud computing are a natural fit. Apache Axis2 is the most widely used Java Web services server in the industry. Deploying Web services on the Cloud would give all the benefits provided by Cloud Computing. However, deploying Web service applications on the Cloud requires that sharing of resources &amp;amp; infrastructure has to be optimally done without compromising security.&lt;br /&gt;
&lt;br /&gt;
In this session, we will look at an architecture which will allow you to deploy Web services within a single Axis2 cluster in a multi-tenant fashion. We will also look at how to adopt this architecture for deploying Axis2 Web services as SaaS. We will demonstrate this in practice using the WSO2 Stratos Platform-as-a-Service (PaaS)&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;This session will be co-presented by Senaka Fernando, Associate Technical Lead &amp;amp; Product Manager - WSO2 Governance Registry, at WSO2, and Apache Member.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;In these sessions, we will be talking about the practical realities of building Cloud Middleware Platforms based on our real world experiences, so don't miss it!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://www.cvent.com/events/apachecon-north-america-2011/registration-dd5e547f9b4d47198187a59f67716440.aspx"&gt;&lt;img border="0" src="http://na11.apachecon.com/attachments/0001/6463/Register_for_ApacheCon.gif" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-9096183524116684256?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/3Mw1GGoMdxg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/9096183524116684256/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=9096183524116684256" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/9096183524116684256?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/9096183524116684256?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/3Mw1GGoMdxg/apachecon-na-2011-vancouver.html" title="ApacheCon NA 2011, Vancouver" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/10/apachecon-na-2011-vancouver.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IGRHw-fSp7ImA9WhdbE00.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-5288850389649815985</id><published>2011-09-24T21:14:00.001+05:30</published><updated>2011-10-11T10:35:25.255+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-11T10:35:25.255+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="load balancing" /><title>How to setup WSO2 Elastic Load Balancer</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QL3QhJA8DSfaMojlzcc8ejraN8k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QL3QhJA8DSfaMojlzcc8ejraN8k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QL3QhJA8DSfaMojlzcc8ejraN8k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QL3QhJA8DSfaMojlzcc8ejraN8k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div style="text-align: justify;"&gt;
In "&lt;a href="http://blog.afkham.org/2011/09/wso2-load-balancer-how-it-works.html"&gt;WSO2 Load Balancer - how it works&lt;/a&gt;" we discussed the internal workings of the WSO2 Elastic Load Balancer. In this article, we will discuss in detail how to configure this load balancer. Even though not necessary, understanding how the WSO2 load balancer works will enable the reader to understand the rationale behind the way certain things are configured.&lt;/div&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;1.0 Example Setup&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Let us take the example of configuring the following setup shown in the diagram below. We will look at how to configure the elastic load balancer as well as the worker node clusters in this setup. By understanding this setup, you should be able to setup WSO2 ELB fronted clusters with any of the &lt;a href="http://wso2.org/projects/carbon"&gt;WSO2 Carbon&lt;/a&gt; based products or &lt;a href="http://wso2.org/projects/stratos"&gt;WSO2 Stratos&lt;/a&gt; Services.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-d_eCjxlhzmI/Tn3lBHRq7fI/AAAAAAAAAr4/r9XVeJyWRQQ/s1600/Slide2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="249" src="http://3.bp.blogspot.com/-d_eCjxlhzmI/Tn3lBHRq7fI/AAAAAAAAAr4/r9XVeJyWRQQ/s640/Slide2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
In the above setup, we will have a LB cluster setup in primary-secondary configuration. This LB cluster will be fronting 2 clusters; App Server cluster &amp;amp; Data Services Server cluster.&lt;/div&gt;
&lt;br /&gt;
In this exercise, we will assume the following ports.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Load Balancer&lt;/b&gt;&lt;br /&gt;
HTTP port: 80&lt;br /&gt;
HTTPS port: 443&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;App Server&lt;/b&gt;&lt;br /&gt;
HTTP port: 9762 --&amp;gt; proxied via port 80&lt;br /&gt;
HTTPS port: 9443 --&amp;gt; proxied via port 443&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Data Services Server&lt;/b&gt;&lt;br /&gt;
HTTP port: 9762&amp;nbsp;--&amp;gt; proxied via port 80&lt;br /&gt;
HTTPS port: 9443&amp;nbsp;--&amp;gt; proxied via port 443&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
We will also assume &lt;a href="http://blog.afkham.org/2008/05/group-membership-management-schemes.html"&gt;well-known address based membership discovery&lt;/a&gt;&amp;nbsp;(wka) to keep the article simple. The same configuration will work with multicast based membership discovery too, with the membershipScheme set to multicast in the axis2.xml file.&lt;/div&gt;
&lt;br /&gt;
In the following sections, we will look at how to configure the worker node clusters &amp;amp; the ELB.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;2.0 Configuring the App Server Cluster&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
You will have to change the mgt-transports.xml, carbon.xml &amp;amp; axis2.xml file in order to configure the App Server cluster. These files are available in the CARBON_HOME/repository/conf directory.&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;2.1 mgt-transports.xml&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Uncomment the HTTP proxy port in this file. The HTTP proxy port has to be set to port 80. In this case, the LB is the HTTP proxy, and we are informing the App Server, that it is fronted by a proxy where the HTTP port is 80.

&lt;/div&gt;
&lt;pre class="xml" name="code"&gt; 
&amp;lt;transport name="http" class="org.wso2.carbon.server.transports.http.HttpTransport"&amp;gt;
    &amp;lt;parameter name="proxyPort"&amp;gt;80&amp;lt;/parameter&amp;gt;
&amp;lt;/transport &amp;gt;
&lt;/pre&gt;
Uncomment the HTTPS proxy port in this file. The HTTPS proxy port has to be set to port 443. In this case, the LB is the HTTPS proxy, and we are informing the App Server, that it is fronted by a proxy where the HTTPS port is 443.

&lt;br /&gt;
&lt;pre class="xml" name="code"&gt; 
 &amp;lt;transport name="http" class="org.wso2.carbon.server.transports.http.HttpTransport"&amp;gt;
    &amp;lt;parameter name="proxyPort"&amp;gt;443&amp;lt;/parameter&amp;gt;
 &amp;lt;/transport &amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2.2 carbon.xml&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
In this file, we have to specify the Host of the App Server. In this example, it is appserver.stratoslive.wso2.com. This is configured by uncommenting the HostName entry in the carbon.xml file and specifying the host as shown below.&lt;/div&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;HostName&amp;gt;appserver.stratoslive.wso2.com&amp;lt;/HostName&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2.3 axis2.xml


&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
In the axis2.xml file, you have to enable the clustering. This is used for mainly membership discovery. As explained in "&lt;a href="http://blog.afkham.org/2011/09/wso2-load-balancer-how-it-works.html"&gt;WSO2 Load Balancer - how it works&lt;/a&gt;", the LB discovers worker nodes using the underlying Axis2 clustering&amp;nbsp;mechanism.&lt;/div&gt;
&lt;pre class="xml" name="code"&gt;      
&amp;lt;clustering class="org.apache.axis2.clustering.tribes.TribesClusteringAgent" enable="true"&amp;gt;
    &amp;lt;parameter name="membershipScheme"&amp;gt;wka&amp;lt;/parameter&amp;gt;
    &amp;lt;parameter name="localMemberHost"&amp;gt;appserver.private.stratoslive.wso2.com&amp;lt;/parameter&amp;gt; 
    &amp;lt;parameter name="localMemberPort"&amp;gt;4100&amp;lt;/parameter&amp;gt;
    &amp;lt;parameter name="domain"&amp;gt;wso2.as.domain&amp;lt;/parameter&amp;gt;
    &amp;lt;members&amp;gt;
        &amp;lt;member&amp;gt;
            &amp;lt;hostName&amp;gt;appserver.stratoslive.wso2.com&amp;lt;/hostName&amp;gt;
            &amp;lt;port&amp;gt;4000&amp;lt;/port&amp;gt;
        &amp;lt;/member&amp;gt;
    &amp;lt;/members&amp;gt;
&amp;lt;/clustering&amp;gt;
&lt;/pre&gt;
&lt;div style="text-align: justify;"&gt;
Note that appserver.stratoslive.wso2.com maps to the public IP address of the load balancer. The localMemberHost can be an IP address which has private visibility. You can keep the localMemberHost entry empty, and if it is empty, one of the available interfaces of the machine the App Server node is running on will be picked. The important thing to note here is that the &lt;b&gt;clustering domain has been set to wso2.as.domain&lt;/b&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;3.0 Configuring the Data Services Server Cluster&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
You will have to change the mgt-transports.xml, carbon.xml &amp;amp; axis2.xml file in order to configure the Data Services Server cluster, and the configuration is almost the same as that of the App Server cluster.&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;3.1 mgt-transports.xml&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
The configuration is identical to what we saw in section 2.1 in the App Server cluster configuration section.&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;3.2 carbon.xml&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
In this file, we have to specify the Host of the Data Services Server. In this example, it is data.stratoslive.wso2.com. This is configured by uncommenting the HostName entry in the carbon.xml file and specifying the host as shown below.&lt;/div&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;HostName&amp;gt;data.stratoslive.wso2.com&amp;lt;/HostName&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3.3 axis2.xml
&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Most of the configuration is identical to what we've seen in section 2.3. The main difference will be that the clustering domain has to be set to wso2.ds.domain. The relevant configuration is shown below.&lt;/div&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;clustering class="org.apache.axis2.clustering.tribes.TribesClusteringAgent" enable="true"&amp;gt;
    &amp;lt;parameter name="membershipScheme"&amp;gt;wka&amp;lt;/parameter&amp;gt;
    &amp;lt;parameter name="localMemberHost"&amp;gt;data.private.stratoslive.wso2.com&amp;lt;/parameter&amp;gt; 
    &amp;lt;parameter name="localMemberPort"&amp;gt;4100&amp;lt;/parameter&amp;gt;
    &amp;lt;parameter name="domain"&amp;gt;wso2.ds.domain&amp;lt;/parameter&amp;gt;
    &amp;lt;members&amp;gt;
        &amp;lt;member&amp;gt;
            &amp;lt;hostName&amp;gt;data.stratoslive.wso2.com&amp;lt;/hostName&amp;gt;
            &amp;lt;port&amp;gt;4000&amp;lt;/port&amp;gt;
        &amp;lt;/member&amp;gt;
    &amp;lt;/members&amp;gt;
&amp;lt;/clustering&amp;gt;
&lt;/pre&gt;
Note that appserver.stratoslive.wso2.com maps to the public IP address of the load balancer.
&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;4.0 Configuring the Elastic Load Balancer Cluster&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;axis2.xml&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
In this file, locate the transportReceiver entries for the HTTP &amp;amp; HTTPS ports and change them to port 80 &amp;amp; 443 respectively. The relevant XML segments are shown below.&lt;/div&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;transportReceiver name="http" class="org.apache.synapse.transport.nhttp.HttpCoreNIOListener"&amp;gt;
    &amp;lt;parameter name="port" locked="false"&amp;gt;80&amp;lt;/parameter&amp;gt;
&amp;lt;/transportReceiver&amp;gt;

&amp;lt;transportReceiver name="https" class="org.apache.synapse.transport.nhttp.HttpCoreNIOSSLListener"&amp;gt;
    &amp;lt;parameter name="port" locked="false"&amp;gt;443&amp;lt;/parameter&amp;gt;
&amp;lt;/transportReceiver&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;loadbalancer.xml&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Generally, you will only need to change the CARBON_HOME/conf/&lt;b&gt;loadbalancer.xml&lt;/b&gt; file. All other relevant files have the proper defaults, and will have to be changed only in the case of advanced configurations.&lt;/div&gt;
&lt;br /&gt;
The following segment in the loadbalancer.xml file shows how we map the HTTP host to the clustering domain.&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;
&amp;lt;loadBalancerConfig xmlns="http://ws.apache.org/ns/synapse"&amp;gt;
    &amp;lt;services&amp;gt;
        &amp;lt;service&amp;gt;
            &amp;lt;hosts&amp;gt;
                &amp;lt;host&amp;gt;appserver.stratoslive.wso2.com&amp;lt;/host&amp;gt;
            &amp;lt;/hosts&amp;gt;
            &amp;lt;domain&amp;gt;wso2.as.domain&amp;lt;/domain&amp;gt;
        &amp;lt;/service&amp;gt;
        &amp;lt;service&amp;gt;
            &amp;lt;hosts&amp;gt;
                &amp;lt;host&amp;gt;data.stratoslive.wso2.com&amp;lt;/host&amp;gt;
            &amp;lt;/hosts&amp;gt;
            &amp;lt;domain&amp;gt;wso2.ds.domain&amp;lt;/domain&amp;gt;
        &amp;lt;/service&amp;gt;
    &amp;lt;services&amp;gt;
&amp;lt;/loadBalancerConfig&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4.1 Disabling Autoscaling&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
At the time of writing, the WSO2 Elastic Load Balancer only supports autoscaling on Amazon EC2 &amp;amp; compatible IaaSs since it is based on the EC2 API. So, you will see error messages if you try to run this setup on a local network, for example. So, in such cases, you will have to disable autoscaling. You have to do the following to disable autoscaling;&lt;/div&gt;
&lt;br /&gt;
&lt;ol style="text-align: left;"&gt;
&lt;li&gt;Delete $CARBON_HOME/repository/deployment/server/synapse-configs/tasks/autoscaler.xml&lt;/li&gt;
&lt;li&gt;Remove the autoscaleIn &amp;amp; autoscaleOut mediators from&amp;nbsp;$CARBON_HOME/repository/deployment/server/synapse-configs/sequences/main.xml&lt;/li&gt;
&lt;/ol&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;5.0 Testing the Setup&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Now we have completed setting up the system, so it is just a matter of starting up the nodes. If you have autoscaling setup, you will simply have to start only the Elastic Load Balancer. This LB will take care of starting up all other nodes in the system. If everything is properly setup, you should see messages on the LB log file saying members from wso2.as.domain &amp;amp; wso2.ds.domain joined the cluster.&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
To make sure that everything is working properly, in your client machine, map the appserver.stratoslive.wso2.com &amp;amp; data.stratoslive.wso2.com names to the relevant IP address of the primary Elastic load balancer &amp;amp; go to the following URLs using your Web browser.&lt;/div&gt;
&lt;br /&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;&lt;a href="http://data.stratoslive.wso2.com/"&gt;http://data.stratoslive.wso2.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://appserver.stratoslive.wso2.com/"&gt;http://appserver.stratoslive.wso2.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
If you have properly setup your cluster, you should see the login screens of the relevant WSO2 product.&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b&gt;
&lt;/b&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-5288850389649815985?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/sLUA6phcQbI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/5288850389649815985/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=5288850389649815985" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/5288850389649815985?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/5288850389649815985?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/sLUA6phcQbI/how-to-setup-wso2-elastic-load-balancer.html" title="How to setup WSO2 Elastic Load Balancer" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-d_eCjxlhzmI/Tn3lBHRq7fI/AAAAAAAAAr4/r9XVeJyWRQQ/s72-c/Slide2.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.afkham.org/2011/09/how-to-setup-wso2-elastic-load-balancer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8MQ3o_eyp7ImA9WhdVFks.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-5912437589400125010</id><published>2011-09-22T10:50:00.001+05:30</published><updated>2011-09-22T10:51:22.443+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-22T10:51:22.443+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IntelliJIDEA" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>IntelliJ IDEA - The best Java IDE!</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RRNN3IWNaGMjUM96nq-59BqkSDA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RRNN3IWNaGMjUM96nq-59BqkSDA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RRNN3IWNaGMjUM96nq-59BqkSDA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RRNN3IWNaGMjUM96nq-59BqkSDA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div id="__ss_9369062" style="width: 425px;"&gt;
&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/afkham_azeez/intelli-j-idea" target="_blank" title="Intelli J IDEA"&gt;Intelli J IDEA&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9369062" width="425"&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;div style="padding: 5px 0 12px;"&gt;
View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/afkham_azeez" target="_blank"&gt;afkham_azeez&lt;/a&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-5912437589400125010?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/GSbROPHOzIk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/5912437589400125010/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=5912437589400125010" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/5912437589400125010?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/5912437589400125010?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/GSbROPHOzIk/intellij-idea-best-java-ide.html" title="IntelliJ IDEA - The best Java IDE!" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.afkham.org/2011/09/intellij-idea-best-java-ide.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AASHY8fyp7ImA9WhdVEE8.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-2911166975156176765</id><published>2011-09-14T21:17:00.000+05:30</published><updated>2011-09-14T23:05:49.877+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-14T23:05:49.877+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="automobiles" /><category scheme="http://www.blogger.com/atom/ns#" term="wso2con" /><category scheme="http://www.blogger.com/atom/ns#" term="humor" /><title>Sun Certified Motor Mechanic (SCMM)</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2d2OabrrnHF2iG5ftuyFnWuyKqU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2d2OabrrnHF2iG5ftuyFnWuyKqU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2d2OabrrnHF2iG5ftuyFnWuyKqU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2d2OabrrnHF2iG5ftuyFnWuyKqU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Today just before my session on &lt;a href="http://blog.afkham.org/2011/09/wso2con-2011-introduction-to-wso2_14.html"&gt;WSO2 Stratos&lt;/a&gt; at &lt;a href="http://wso2.com/events/wso2con-2011-colombo/"&gt;WSO2Con&lt;/a&gt;, I got to know that I have a qualification which I didn't even know existed. The compere, Geethika Cooray, introduced me as a Sun Certified Motor Mechanic! I didn't even know Sun was providing such a certification :) Anyway folks, now it is official. Now I'm a Sun Certified Motor Mechanic :D&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-2911166975156176765?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/kAh843porhw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/2911166975156176765/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=2911166975156176765" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/2911166975156176765?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/2911166975156176765?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/kAh843porhw/sun-certified-motor-mechanic-scmc.html" title="Sun Certified Motor Mechanic (SCMM)" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.afkham.org/2011/09/sun-certified-motor-mechanic-scmc.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcDRns8eyp7ImA9WhdWGUQ.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-3655147974085318423</id><published>2011-09-14T16:30:00.000+05:30</published><updated>2011-09-14T16:31:17.573+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-14T16:31:17.573+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Cloud computing" /><category scheme="http://www.blogger.com/atom/ns#" term="Amazon Web Services" /><category scheme="http://www.blogger.com/atom/ns#" term="stratos" /><title>WSO2Con 2011: Introduction to WSO2 Stratos</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LuHEpcH2Ib_DsozUPn8RjHDmoIA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LuHEpcH2Ib_DsozUPn8RjHDmoIA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LuHEpcH2Ib_DsozUPn8RjHDmoIA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LuHEpcH2Ib_DsozUPn8RjHDmoIA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div id="__ss_9253686" style="width: 425px;"&gt;
&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/afkham_azeez/wso2con-2011-introduction-to-stratos-9253686" target="_blank" title="WSO2con 2011: Introduction to Stratos"&gt;WSO2con 2011: Introduction to Stratos&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9253686" width="425"&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;div style="padding: 5px 0 12px;"&gt;
View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/afkham_azeez" target="_blank"&gt;afkham_azeez&lt;/a&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-3655147974085318423?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/FIvLj0Brndc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/3655147974085318423/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=3655147974085318423" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/3655147974085318423?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/3655147974085318423?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/FIvLj0Brndc/wso2con-2011-introduction-to-wso2_14.html" title="WSO2Con 2011: Introduction to WSO2 Stratos" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.afkham.org/2011/09/wso2con-2011-introduction-to-wso2_14.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UAQ3kzfSp7ImA9WhdWGUU.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-3509509178364477030</id><published>2011-09-14T14:03:00.002+05:30</published><updated>2011-09-14T14:04:02.785+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-14T14:04:02.785+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="soa platform" /><category scheme="http://www.blogger.com/atom/ns#" term="wso2con" /><category scheme="http://www.blogger.com/atom/ns#" term="Cloud computing" /><category scheme="http://www.blogger.com/atom/ns#" term="carbon" /><category scheme="http://www.blogger.com/atom/ns#" term="stratos" /><category scheme="http://www.blogger.com/atom/ns#" term="soa" /><title>WSO2Con 2011: Introduction to the WSO2 Carbon Platform</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kTkJejR5Yq10RyVBspgGefdwL2s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kTkJejR5Yq10RyVBspgGefdwL2s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kTkJejR5Yq10RyVBspgGefdwL2s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kTkJejR5Yq10RyVBspgGefdwL2s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;br /&gt;
&lt;div id="__ss_9235468" style="width: 425px;"&gt;
&lt;strong style="display: block; margin: 12px 0 4px;"&gt;&lt;a href="http://www.slideshare.net/afkham_azeez/wso2con-2011-introduction-to-the-wso2-carbon-platform" target="_blank" title="WSO2Con 2011: Introduction to the WSO2 Carbon Platform"&gt;WSO2Con 2011: Introduction to the WSO2 Carbon Platform&lt;/a&gt;&lt;/strong&gt; &lt;iframe frameborder="0" height="355" marginheight="0" marginwidth="0" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/9235468" width="425"&gt;&lt;/iframe&gt; &lt;br /&gt;
&lt;div style="padding: 5px 0 12px;"&gt;
View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/afkham_azeez" target="_blank"&gt;afkham_azeez&lt;/a&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-3509509178364477030?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/dS3bCF5s3G0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/3509509178364477030/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=3509509178364477030" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/3509509178364477030?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/3509509178364477030?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/dS3bCF5s3G0/wso2con-2011-introduction-to-wso2.html" title="WSO2Con 2011: Introduction to the WSO2 Carbon Platform" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/09/wso2con-2011-introduction-to-wso2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcAQXc5cSp7ImA9WhdWFk4.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-4044946607428553422</id><published>2011-09-10T00:51:00.001+05:30</published><updated>2011-09-10T10:50:40.929+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-10T10:50:40.929+05:30</app:edited><title>This blog template uses SyntaxHighlighter hosted on StratosLive</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_l0qOqjjIE6QLdrWX4D9wM_hvsk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_l0qOqjjIE6QLdrWX4D9wM_hvsk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_l0qOqjjIE6QLdrWX4D9wM_hvsk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_l0qOqjjIE6QLdrWX4D9wM_hvsk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-SAss4J70uPI/TmpkTrMp0CI/AAAAAAAAAr0/B2LqVpHRbPY/s1600/Screen%2Bshot%2B2011-09-10%2Bat%2B12.42.26%2BAM.png" imageanchor="1"&gt;&lt;img border="0" height="124" src="http://4.bp.blogspot.com/-SAss4J70uPI/TmpkTrMp0CI/AAAAAAAAAr0/B2LqVpHRbPY/s640/Screen%2Bshot%2B2011-09-10%2Bat%2B12.42.26%2BAM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
I have included SyntaxHighlighter hosted on WSO2 &lt;a href="https://stratoslive.wso2.com/"&gt;StratosLive&lt;/a&gt;&amp;nbsp;under my tenant azeez.org&amp;nbsp;in this blog's template as shown in the above figure. If you'd like to include syntax highlighting on your blog &amp;amp; want to use this hosted SyntaxHighlighter, you need to add the following in the head section of your template:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre class="html" name="code"&gt;             
&amp;lt;link href=" http://appserver.stratoslive.wso2.com/t/azeez.org/webapps/highlighter/Styles/SyntaxHighlighter.css" rel="stylesheet" type="text/css"&amp;gt;&amp;lt;/link&amp;gt;
&amp;lt;script src=" http://appserver.stratoslive.wso2.com/t/azeez.org/webapps/highlighter/Scripts/shCore.js" type="text/javascript"/&amp;gt;
&amp;lt;script src=' http://appserver.stratoslive.wso2.com/t/azeez.org/webapps/highlighter/Scripts/shBrushCpp.js' type='text/javascript'/&amp;gt;
&amp;lt;script src=' http://appserver.stratoslive.wso2.com/t/azeez.org/webapps/highlighter/Scripts/shBrushCSharp.js' type='text/javascript'/&amp;gt;
&amp;lt;script src=' http://appserver.stratoslive.wso2.com/t/azeez.org/webapps/highlighter/Scripts/shBrushCss.js' type='text/javascript'/&amp;gt;
&amp;lt;script src=' http://appserver.stratoslive.wso2.com/t/azeez.org/webapps/highlighter/Scripts/shBrushJava.js' type='text/javascript'/&amp;gt;
&amp;lt;script src=' http://appserver.stratoslive.wso2.com/t/azeez.org/webapps/highlighter/Scripts/shBrushJScript.js' type='text/javascript'/&amp;gt;
&amp;lt;script src=' http://appserver.stratoslive.wso2.com/t/azeez.org/webapps/highlighter/Scripts/shBrushPhp.js' type='text/javascript'/&amp;gt;
&amp;lt;script src=' http://appserver.stratoslive.wso2.com/t/azeez.org/webapps/highlighter/Scripts/shBrushPython.js' type='text/javascript'/&amp;gt;
&amp;lt;script src=' http://appserver.stratoslive.wso2.com/t/azeez.org/webapps/highlighter/Scripts/shBrushRuby.js' type='text/javascript'/&amp;gt;
&amp;lt;script src=' http://appserver.stratoslive.wso2.com/t/azeez.org/webapps/highlighter/Scripts/shBrushSql.js' type='text/javascript'/&amp;gt;
&amp;lt;script src=' http://appserver.stratoslive.wso2.com/t/azeez.org/webapps/highlighter/Scripts/shBrushVb.js' type='text/javascript'/&amp;gt;
&amp;lt;script src=' http://appserver.stratoslive.wso2.com/t/azeez.org/webapps/highlighter/Scripts/shBrushXml.js' type='text/javascript'/&amp;gt;
&amp;lt;script src=' http://appserver.stratoslive.wso2.com/t/azeez.org/webapps/highlighter/Scripts/shBrushPerl.js' type='text/javascript'/&amp;gt;

&amp;lt;script language='javascript'&amp;gt;
    window.onload = function () {
        dp.SyntaxHighlighter.ClipboardSwf = '/Scripts/clipboard.swf';
        dp.SyntaxHighlighter.HighlightAll('code');
     }
&amp;lt;/script&amp;gt;
&lt;/pre&gt;
Now, whenever you need to include highlighted code, you simply have to do the following;&lt;br /&gt;
&lt;pre class="html" name="code"&gt;&amp;lt;pre name="code" class="c-sharp"&amp;gt;
... some code here ...
&amp;lt;/pre&amp;gt;
&lt;/pre&gt;
For more information, see &lt;a href="http://code.google.com/p/syntaxhighlighter/wiki/Usage"&gt;http://code.google.com/p/syntaxhighlighter/wiki/Usage&lt;/a&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-4044946607428553422?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/BvlDk6rph_U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/4044946607428553422/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=4044946607428553422" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/4044946607428553422?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/4044946607428553422?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/BvlDk6rph_U/this-blog-template-uses.html" title="This blog template uses SyntaxHighlighter hosted on StratosLive" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-SAss4J70uPI/TmpkTrMp0CI/AAAAAAAAAr0/B2LqVpHRbPY/s72-c/Screen%2Bshot%2B2011-09-10%2Bat%2B12.42.26%2BAM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/09/this-blog-template-uses.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMDQ38_cCp7ImA9WhdaGE8.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-3897589067538362399</id><published>2011-09-09T22:09:00.001+05:30</published><updated>2011-10-28T23:57:52.148+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-28T23:57:52.148+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="howto" /><category scheme="http://www.blogger.com/atom/ns#" term="tomcat7" /><category scheme="http://www.blogger.com/atom/ns#" term="osgi" /><title>Embedding Tomcat 7</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yGrxdTbQPX4_Y1XyWclqgU5rMRo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yGrxdTbQPX4_Y1XyWclqgU5rMRo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yGrxdTbQPX4_Y1XyWclqgU5rMRo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yGrxdTbQPX4_Y1XyWclqgU5rMRo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
The following code shows how easy it is to embed &lt;a href="http://tomcat.apache.org/"&gt;Apache Tomcat&lt;/a&gt; 7 using the API provided by &lt;a href="https://svn.wso2.org/repos/wso2/trunk/carbon/core/org.wso2.carbon.tomcat/src/main/java/org/wso2/carbon/tomcat/BetterTomcat.java"&gt;org.wso2.carbon.tomcat.BetterTomcat&lt;/a&gt;. BetterTomcat is a class which wraps an&amp;nbsp;&lt;span class="Apple-style-span" style="background-color: white; font-family: arial, sans-serif; font-size: 14px;"&gt;org.apache.catalina.startup.&lt;/span&gt;Tomcat object &amp;amp; provides a simpler API for some common scenarios. This class provides a simple API which enables you to embed &amp;amp; start Tomcat by writing just a few lines of code as shown below.&lt;br /&gt;
&lt;br /&gt;
&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;pre class="java" name="code"&gt;public void startServer() throws ServletException, LifecycleException { 
    BetterTomcat tomcat = new BetterTomcat(8080); 
    tomcat.addWebapp("/hello", WEBAPP_PATH); 
    tomcat.start(); 
} 
&lt;/pre&gt;
The following code shows how to start an embedded Tomcat server&amp;nbsp;with one HTTP connector on port 8080 &amp;amp; one HTTPS connector on port 8443.
&lt;br /&gt;
&lt;pre class="java" name="code"&gt;public void startMultipleConnectors() throws LifecycleException, ServletException { 
    BetterTomcat tomcat = new BetterTomcat(); 
    tomcat.addConnector(BetterTomcat.Protocol.HTTP_11_NIO, 8080); 
    Connector https = tomcat.addConnector(BetterTomcat.Protocol.HTTPS_11_NIO, 8443); 
    https.setProperty("keystoreFile", KEYSTORE_PATH); 
    https.setProperty("keystorePass", "wso2carbon"); 
    tomcat.addWebapp("/hello", WEBAPP_PATH); 
    tomcat.start(); 
}

&lt;/pre&gt;
&lt;/div&gt;
The BetterTomcat class is used for starting up embedded Tomcat 7, which forms the core of &lt;a href="http://wso2.org/projects/carbon"&gt;WSO2 Carbon&lt;/a&gt;, &lt;a href="http://wso2.org/projects/wsas"&gt;WSO2 AS&lt;/a&gt;, &lt;a href="http://wso2.org/projects/stratos"&gt;WSO2 Stratos&lt;/a&gt; &amp;amp; &lt;a href="http://stratoslive.wso2.com/"&gt;StratosLive&lt;/a&gt;. If you are interested in checking out the code, have a look at the following links.
&lt;br /&gt;
1. &lt;a href="https://svn.wso2.org/repos/wso2/trunk/carbon/core/org.wso2.carbon.tomcat"&gt;https://svn.wso2.org/repos/wso2/trunk/carbon/core/org.wso2.carbon.tomcat&lt;/a&gt;&lt;br /&gt;
2. &lt;a href="https://svn.wso2.org/repos/wso2/trunk/carbon/core/org.wso2.carbon.tomcat/src/main/java/org/wso2/carbon/tomcat/BetterTomcat.java"&gt;https://svn.wso2.org/repos/wso2/trunk/carbon/core/org.wso2.carbon.tomcat/src/main/java/org/wso2/carbon/tomcat/BetterTomcat.java&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The org.wso2.carbon.tomcat OSGi bundle (#2 above) is a self contained jar file which contains all the dependencies needed to run embedded Tomcat.&lt;br /&gt;
&lt;br /&gt;
Please note that &lt;b&gt;this is not distributed as a separate product&lt;/b&gt;, but only a class in the WSO2 Carbon core libraries, and is &amp;nbsp;only used internally.&lt;br /&gt;
&lt;br /&gt;
Tomcat is a trademark of the &lt;a href="http://apache.org/"&gt;Apache Software Foundation&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-3897589067538362399?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/hWqX6b_CZoM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/3897589067538362399/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=3897589067538362399" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/3897589067538362399?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/3897589067538362399?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/hWqX6b_CZoM/embedding-tomcat-7-bettertomcat.html" title="Embedding Tomcat 7" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.afkham.org/2011/09/embedding-tomcat-7-bettertomcat.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQDQ38-fCp7ImA9WhdWFUQ.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-8392146314676010825</id><published>2011-09-09T19:07:00.001+05:30</published><updated>2011-09-09T23:16:12.154+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T23:16:12.154+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="wso2con" /><title>[WSO2Con 2011] Introduction to the WSO2 Carbon Platform at WSOCon 2011</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8VFI1KERdOTUsNVWhvW4mKyJZqw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8VFI1KERdOTUsNVWhvW4mKyJZqw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8VFI1KERdOTUsNVWhvW4mKyJZqw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8VFI1KERdOTUsNVWhvW4mKyJZqw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;a href="http://wso2.com/events/wso2con-2011-colombo/agenda/#day1"&gt;Introduction to the WSO2 Carbon Platform&lt;/a&gt; is one of tutorials which will be conducted by &lt;a href="http://wso2.com/about/team/supun-malinga/"&gt;Supun Malinga&lt;/a&gt; &amp;amp; &lt;a href="http://wso2.com/about/team/afkham-azeez/"&gt;me&lt;/a&gt; at the &lt;a href="http://wso2con.com/"&gt;WSO2Con&lt;/a&gt; next week. This is a 3-4 hour session where we will be covering all the core concepts related to the award-winning &lt;a href="http://wso2.com/products/carbon/"&gt;WSO2 Carbon platform&lt;/a&gt;. Most importantly, you will be able to get an good idea about the entire suite of WSO2 products, where each of these product fit-in in an SOA deployment &amp;amp; what products/components should be used where in your &lt;a href="http://en.wikipedia.org/wiki/Solution_architecture"&gt;Solution Architecture&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://wso2.com/wp-content/themes/wso2ng-v3/images/platform-carbon-diagram.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="468" src="http://wso2.com/wp-content/themes/wso2ng-v3/images/platform-carbon-diagram.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In addition to getting a complete understanding about this platform, you will also learn the finer details about the platform, and the innovative aspects introduced by the Carbon framework. We will be having a very interesting hands on session where the participants will learn how to write a Carbon component &amp;amp; integrate it with a Carbon server instance. You will also be able to learn the development lifecycle of a Carbon component.&lt;br /&gt;
&lt;br /&gt;
I'd recommend you to first attend the &lt;a href="http://wso2.com/events/wso2con-2011-colombo/agenda/#day1"&gt;OSGi training session&lt;/a&gt; conducted by Sameera &amp;amp; Pradeep, since that will enable you to better understand some of the Carbon platform concepts. The Carbon platform is based on OSGi.&lt;/div&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-8392146314676010825?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/owLPtV8rr-4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/8392146314676010825/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=8392146314676010825" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/8392146314676010825?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/8392146314676010825?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/owLPtV8rr-4/introduction-to-wso2-carbon-platform-at.html" title="[WSO2Con 2011] Introduction to the WSO2 Carbon Platform at WSOCon 2011" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/09/introduction-to-wso2-carbon-platform-at.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQDQ3syeSp7ImA9WhdWFUo.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-3228889595940636974</id><published>2011-09-08T08:54:00.003+05:30</published><updated>2011-09-09T18:49:32.591+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T18:49:32.591+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="paas" /><category scheme="http://www.blogger.com/atom/ns#" term="autoscaling" /><category scheme="http://www.blogger.com/atom/ns#" term="Amazon Web Services" /><category scheme="http://www.blogger.com/atom/ns#" term="Amazon EC2" /><title>Is PaaS on top of IaaS the proper way to go?</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ib52GEZ2sdhkKKhi_PYED7Nhw9E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ib52GEZ2sdhkKKhi_PYED7Nhw9E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ib52GEZ2sdhkKKhi_PYED7Nhw9E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ib52GEZ2sdhkKKhi_PYED7Nhw9E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Traditionally, when people talk about Cloud computing, people talk about SaaS, PaaS &amp;amp; IaaS as depicted in the following diagram.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-DKVzfLgb_Xk/TmgvSwTV3jI/AAAAAAAAAro/RaPZEMPlmDA/s1600/saas-paas-iaas.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="219" src="http://3.bp.blogspot.com/-DKVzfLgb_Xk/TmgvSwTV3jI/AAAAAAAAAro/RaPZEMPlmDA/s320/saas-paas-iaas.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
So, traditionally people think about building a PaaS on top of an IaaS. Samisa recently blogged about the practical&amp;nbsp;&lt;a href="http://samisa-abeysinghe.blogspot.com/2011/09/cloud-computing-facts-iaas-is-not-prime.html"&gt;problems we have been facing with IaaS&lt;/a&gt;, in particular, Amazon Web Services (AWS). To be honest, working with AWS has been a big challenge since we experienced very bad performance when it comes to IO, as well as the infrastructure itself behaving in a very unpredictable manner from time to time. Every so often, we would lose the network, and we would not even be able to connect to 127.0.0.1 from our software, forcing restarts. So much for SLAs &amp;amp; high availability! It is also well known that virtualization leads to IO performance degradation, so if your PaaS or SaaS is IO intensive, you may see a considerable drop in performance.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="" style="clear: both; text-align: justify;"&gt;
Coming to think about it, running a PaaS on top of an IaaS such as AWS could be overkill. In such a setup, we have two levels of multi-tenancy; one at the IaaS layer, where the PaaS service provider is a tenant, the other level is at the PaaS layer itself. One level of multi-tenancy at the PaaS level is what is actually required. When it comes to elasticity in a PaaS, what we actually need is a new process; in the case of Java PaaS, a new JVM, but what we do in a setup such as the one shown in the above figure is, we spin up a new image instance (in the case of AWS, a new EC2 instance), and then start a process in that new instance. Spinning up a new instance can take up to 15 minutes, so by the time a new instance boots up &amp;amp; is able to perform some work, the need for starting up that instance may have passed due to the traffic dropping back to normal levels.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="http://4.bp.blogspot.com/-nworsLhdviM/TmoR4iA8vLI/AAAAAAAAArs/Y6ednH61s98/s1600/Slide3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="241" src="http://4.bp.blogspot.com/-nworsLhdviM/TmoR4iA8vLI/AAAAAAAAArs/Y6ednH61s98/s320/Slide3.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
Perhaps, the proper model would be to run your PaaS on the infrastructure (hardware+networking+OS) directly without virtualization as shown in the above diagram, and have a few cold standby EC2 instances for &lt;a href="http://cloudsecurity.trendmicro.com/what-is-cloudbursting/"&gt;Cloud bursting&lt;/a&gt;. This is the model we will have to go with, at least until the time where we have IaaSs that are much more stable. Another advantage is, the cost of having your own hardware will be very much less than the accumulated amount you would be paying the IaaS provider, since you will be running your PaaS 24x7.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
The challenges of going for such a setup include, having to implement alternatives to many of the functionality that is already provided by the IaaS. This includes geographically distributed deployments (AWS provides this through availability zones &amp;amp; regions), firewall functionality (AWS provide this using security groups), public IP address assignment (AWS provides this through Elastic IPs), and so on. However, the benefits of implementing such functionality at the infrastructure level will yield huge benefits for large scale Platforms-as-a-Service such as &lt;a href="http://stratoslive.wso2.com/"&gt;StratosLive&lt;/a&gt;.&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-3228889595940636974?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/OHiDH-5fVT0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/3228889595940636974/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=3228889595940636974" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/3228889595940636974?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/3228889595940636974?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/OHiDH-5fVT0/is-paas-on-top-of-iaas-good-idea-after.html" title="Is PaaS on top of IaaS the proper way to go?" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-DKVzfLgb_Xk/TmgvSwTV3jI/AAAAAAAAAro/RaPZEMPlmDA/s72-c/saas-paas-iaas.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/09/is-paas-on-top-of-iaas-good-idea-after.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AEQX85fCp7ImA9WhdbEks.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-3494053227790497130</id><published>2011-09-07T20:15:00.002+05:30</published><updated>2011-10-10T21:18:20.124+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-10T21:18:20.124+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="paas" /><category scheme="http://www.blogger.com/atom/ns#" term="load balancing" /><category scheme="http://www.blogger.com/atom/ns#" term="stratoslive" /><category scheme="http://www.blogger.com/atom/ns#" term="stratos" /><title>WSO2 Load Balancer - how it works</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3cHA1mTL_S99XgUXbYyXQqUlUGk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3cHA1mTL_S99XgUXbYyXQqUlUGk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3cHA1mTL_S99XgUXbYyXQqUlUGk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3cHA1mTL_S99XgUXbYyXQqUlUGk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
... an under the hood look at the WSO2 Elastic Load Balancer.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.pakwheels.com/blog/wp-content/uploads/2010/11/1997-toyota-hilux-under-the-hood-is-nissans-sr20det.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://www.pakwheels.com/blog/wp-content/uploads/2010/11/1997-toyota-hilux-under-the-hood-is-nissans-sr20det.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
In &lt;a href="http://blog.afkham.org/2011/09/role-of-load-balancer-in-platform-as.html"&gt;&lt;i&gt;The role of a Load Balancer in a Platform-as-a-Service&lt;/i&gt;&lt;/a&gt;, I explained some key concepts behind load balancing. In this article, we will take a look at the inner workings of the WSO2 Elastic Load Balancer to understand how some of these concepts have been incorporated. The WSO2 Elastic Load Balancer is the load balancer used in &lt;a href="https://stratoslive.wso2.com/"&gt;StratosLive&lt;/a&gt;, the first fully complete open Java Platform-as-a-Service (PaaS)&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;High Level Architecture&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-sotkUdq0QFc/TmXa6jhLKdI/AAAAAAAAArM/r4qH55XxWeA/s1600/Slide2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-sotkUdq0QFc/TmXa6jhLKdI/AAAAAAAAArM/r4qH55XxWeA/s1600/Slide2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
As shown in the diagram above, the WSO2 Elastic Load Balancer is built using Apache Tribes, which is the group management framework used by Apache Tomcat as well as Apache Axis2, Apache Axis2 clustering module, Apache Synapse - one of the best performant mediation frameworks, and the autoscaling component from the &lt;a href="http://wso2.com/about/news/wso2-wins-infoworld-best-of-open-source-award-for-wso2-carbon/"&gt;award-winning&lt;/a&gt; &lt;a href="http://wso2.org/projects/carbon"&gt;WSO2 Carbon&lt;/a&gt; framework. &amp;nbsp;The autoscaling component interacts with the Amazon EC2 API to carry out infrastructure related functionalities such as starting new instances, terminating running instances, mapping elastic IPs &amp;amp; so on.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
Let's start looking at the above diagram from the topmost layer. The &lt;b&gt;Carbon autoscaling component&lt;/b&gt; is responsible for keeping track of the traffic to each Cloud Service cluster, and making decisions related to scaling the system up when the load increases &amp;amp; scaling the system down when the load reduces. It is also responsible for keeping a sanity check on the system. This sanity check ensures that the minimum system configuration, such as the minimum number of running instances of each Service &amp;amp; load balancer cluster is maintained at all times. This autoscaling component calls out to the &lt;b&gt;EC2 API&lt;/b&gt; for infrastructure related activities. The autoscaling component has been implemented as two Apache Synapse mediators; autoscale-in &amp;amp; autoscale-out mediators, and a Synapse task.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
A &lt;b&gt;Synapse&lt;/b&gt; endpoint called the &lt;b&gt;ServiceDynamicLoadBalanceEndpoint&lt;/b&gt; is responsible for routing the messages to the appropriate node. First, the Cloud Service cluster to which the message has to be sent is identified using the Host HTTP header. Then a member from that Service cluster to which the message has to be routed to is selected according to the load balancing algorithm specified, and the message is sent to that member. The response from that member is sent back to the client which originated the request. While the LB is trying to forward a request to a member, that member may fail, and in such a case, if possible, the ServiceLoadBalanceEndpoint will try to failover to another available member. Such a member which failed will be suspended for a specified period. This endpoint is also responsible for handling &lt;b&gt;sticky sessions&lt;/b&gt;. In fact, when a request comes in, this endpoint first checks whether there is sticky session created for that client, and if such a session is found, the request is forwarded to the relevant member. Sticky sessions are identified using the value of the JSESSIONID cookie.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;a href="http://wso2.org/library/articles/binary-relay-efficient-way-pass-both-xml-non-xml-content-through-apache-synapse"&gt;Binary Relay or Message Relay&lt;/a&gt; is the message pass through mechanism in the WSO2 Elastic Load Balancer. This relay enables the LB to pass the messages without building or processing the message. This ensures that the overhead introduced by the LB is minimal.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
Membership discovery &amp;amp; management is handled by the &lt;b&gt;Axis2 Clustering&lt;/b&gt; module, which handles Service membership. There are multiple membership handlers, one for each clustering domain, responsible for handling membership. The ServiceDynamicLoadBalanceEndpoint will obtain the relevant members of the cluster from this Axis2 membership handlers, and then apply the load balance algorithm to determine the next member to which the request has to be sent. The Axis2 clustering implementation uses the underlying &lt;a href="http://tomcat.apache.org/tomcat-6.0-doc/tribes/introduction.html"&gt;Apache Tribes Group Management Framework&lt;/a&gt; for group membership management.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Dynamic Clusters &amp;amp; Group Management Agents&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-pdpSz0x7E8c/Tmdn9eHT1pI/AAAAAAAAArc/Mpd3J6PbnHA/s1600/Slide1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-pdpSz0x7E8c/Tmdn9eHT1pI/AAAAAAAAArc/Mpd3J6PbnHA/s1600/Slide1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
In the WSO2 Elastic Load Balancer, we have support for &lt;a href="http://blog.afkham.org/2008/05/group-membership-management-schemes.html"&gt;dynamic &amp;amp; hybrid membership&lt;/a&gt; discovery. As shown in the above diagram, the Elastic Load Balancer can be set up in a primary-secondary configuration. These LBs will be in a cluster, and state replication can take place between these nodes. The LBs are also configured as Group Management Agents, hence they can manage domains A, B &amp;amp; X. This means, any membership changes in the domains, A, B, X will be visible to LB&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;pri&lt;/span&gt; &amp;amp; LB&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;sec&lt;/span&gt;. A public IP address will be assigned to the LB&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;pri&lt;/span&gt; in a typical deployment. The LB&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;sec &lt;/span&gt;will keep observing LB&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;pri&lt;/span&gt;, and if LB&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;pri&lt;/span&gt; fails, LB&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;sec&lt;/span&gt; will map the public IP to itself, spawn another secondary LB, and then become the primary LB. The client sees the public IP address mapped to LB&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;pri&lt;/span&gt;, and needs to send the HTTP 1.1 Host header. This Host header will be used by LB&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;pri &lt;/span&gt;to determine the destination Service cluster. For example, if the Host is set as Hb, the LB&lt;span class="Apple-style-span" style="font-size: xx-small;"&gt;pri&lt;/span&gt; will select one of the nodes in domain B, and send the request to it.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
For this setup to work, clustering has to be enabled in all the backend worker nodes, as well as the load balancers, because the underlying Axis2 clustering mechanism &amp;amp; Tribes group management framework are used for dynamic membership management.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Real Port to Proxy Port Mapping&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-MFW5CsUP6nw/ToceZcekoaI/AAAAAAAAAsE/wtg9uQut2lc/s1600/Slide2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="290" src="http://4.bp.blogspot.com/-MFW5CsUP6nw/ToceZcekoaI/AAAAAAAAAsE/wtg9uQut2lc/s640/Slide2.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
The mapping between the proxy port &amp;amp; the real port on the member (worker node) is provided as shown in the diagram above. In the above diagram, we have shown an example of the LB exposing 4 ports; 2 for HTTP &amp;amp; 2 for HTTPS requests. The HTTP ports on the LB are 80 &amp;amp; 8280. The HTTPS ports on the LB are 443 &amp;amp; 8243.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
Member A1 exposes 4 ports; HTTP 9762 is proxied via port 80 in the LB, HTTP 9763 is proxied via port 8280 in the LB; HTTPS 9443 is proxied via port 443 in the LB &amp;amp; HTTPS 9444 is proxied via port 8243 in the LB.&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
Member A2 also has a similar real port to proxy port mapping as depicted in the diagram above.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
These ports &amp;amp; the mapped proxy ports will be advertised by the members when they join the cluster, and the LB can retrieve these values as properties of the member. When the LB receives a request, it will get the incoming port, and before dispatching the request to a member, it will try to get the mapped real port from the member, and route the request to the appropriately mapped port (as advertised by the member).&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
The diagram shown below shows how requests from clients will be proxied from the LB to member A1.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-qMBi782iHxo/Toc1Me8B3uI/AAAAAAAAAsI/DYEuxgKwUdM/s1600/Slide3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="208" src="http://3.bp.blogspot.com/-qMBi782iHxo/Toc1Me8B3uI/AAAAAAAAAsI/DYEuxgKwUdM/s640/Slide3.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;How Elasticity/Autoscaling is Handled&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
Autoscaling is handled by the WSO2 Carbon autoscaling component. This component keeps track of the number of messages in flight to each Service cluster, and decides whether to scale the system up or down. The autoscaler component consists of an AutoscaleIn mediator, AutoscaleOut mediator &amp;amp;&amp;nbsp;LoadAnalyzerTask, as shown in the diagram below. When a message is received, the AutoscaleIn mediator creates a unique token &amp;amp; puts it into a list. When a response to the message is sent, the AutoscaleOut mediator removes that token from that list. So, this list tracks the number of messages in flight for each backend Service. The LoadAnalyzerTask periodically check the list lengths &amp;amp; based on the configuration parameters, decides whether to scale up or scale down a backend Service.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-Se6xJslBHj0/TpMOWUgOPHI/AAAAAAAAAsQ/qGyarWBzkuo/s1600/synapse-flow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="275" src="http://4.bp.blogspot.com/-Se6xJslBHj0/TpMOWUgOPHI/AAAAAAAAAsQ/qGyarWBzkuo/s640/synapse-flow.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
This component will start new Service member instances, and once those members successfully boot up, they will join the relevant Service cluster. Now the load balancer will start forwarding the request to the new members as well.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Membership Management using Apache Tribes&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-hhaSjTWhDRw/TpMRw8tl-cI/AAAAAAAAAsY/dRlWFQkYkjo/s1600/tribes-dynamic-lb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="384" src="http://2.bp.blogspot.com/-hhaSjTWhDRw/TpMRw8tl-cI/AAAAAAAAAsY/dRlWFQkYkjo/s640/tribes-dynamic-lb.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
As shown in the above diagram, the WSO2 Elastic Load Balancer is a special Tribes member, which can sense membership changes in the groups it is managing. Each group has its dedicated membership channel, and the LB can connect to all these channels. The other Service members can only see membership changes in their respective channels. In the above diagram, members in Group A (A1, A2, A3,..., An) can sense membership changes in Membership Channel - A, but cannot see such changes in Membership Channel -B. However, the LB can see membership changes in Channels A, B &amp;amp; LB.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Deployment in a Data Center&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
If your network allows multicasting, you could use the multicast based membership scheme. In this case, membership will be handled using multicasting, hence a multicast socket needs to be configured.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Deployment on the Cloud&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
On a Cloud deployment, typically you would use well-known address based membership scheme since multicasting will be disabled on such setups. In such a setup, we will make the one or more LBs to be the well-known members. All nodes in the Service clusters, SA, SB &amp;amp; SX will see the LB as a well-known member. Membership will revolve around the well-known load balancer in this setup.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;WSO2 Elastic Load Balancer on StratosLive&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-J0pEdVyGOmQ/TmeDd8YRkVI/AAAAAAAAArk/HbcQl3k3E7M/s1600/StratosLiveDeploymentArchitecture.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="470" src="http://3.bp.blogspot.com/-J0pEdVyGOmQ/TmeDd8YRkVI/AAAAAAAAArk/HbcQl3k3E7M/s640/StratosLiveDeploymentArchitecture.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
The above diagram shows how we have deployed the WSO2 Elastic Load Balancers in &lt;a href="https://stratoslive.wso2.com/"&gt;StratosLive&lt;/a&gt;. The diagram shows how a single LB instance can front several Cloud Service clusters. For example, the Manager, Business Rules Server (BRS) &amp;amp; Business Process Server (BPS) Cloud Services are fronted by a single load balancer, and the Governance Registry (G-Reg), Mashup Server (MS) &amp;amp; Gadget Server (GS) Cloud Services are fronted by another load balancer. Some other services such as the Identity Server, Application Server, Business Activity Monotor (BAM) &amp;amp; Data Services Server (DSS) have dedicated load balancers, since these are popular Services with heavy incoming traffic. As you may note, some nodes are marked as permanent nodes. This means, these nodes are not supposed to be shutdown if the autoscaler makes a scale-down decision. Special flags mark these nodes as permanent nodes, and the autoscaler will check this flag before deciding to terminate an instance. It is the elastic nodes that can be terminated if a scale-down decision is made.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-3494053227790497130?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/GTLE7uZC6E8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/3494053227790497130/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=3494053227790497130" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/3494053227790497130?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/3494053227790497130?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/GTLE7uZC6E8/wso2-load-balancer-how-it-works.html" title="WSO2 Load Balancer - how it works" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-sotkUdq0QFc/TmXa6jhLKdI/AAAAAAAAArM/r4qH55XxWeA/s72-c/Slide2.jpg" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Dehiwala-Mount Lavinia, Sri Lanka</georss:featurename><georss:point>6.8397222 79.87583330000007</georss:point><georss:box>6.8160992 79.85722730000006 6.8633451999999995 79.89443930000007</georss:box><feedburner:origLink>http://blog.afkham.org/2011/09/wso2-load-balancer-how-it-works.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYGSHw9eSp7ImA9WhdWEE8.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-1018735432623073091</id><published>2011-09-02T21:51:00.014+05:30</published><updated>2011-09-03T09:42:09.261+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-03T09:42:09.261+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="paas" /><category scheme="http://www.blogger.com/atom/ns#" term="Cloud computing" /><category scheme="http://www.blogger.com/atom/ns#" term="autoscaling" /><category scheme="http://www.blogger.com/atom/ns#" term="load balancing" /><category scheme="http://www.blogger.com/atom/ns#" term="stratoslive" /><category scheme="http://www.blogger.com/atom/ns#" term="stratos" /><title>The role of a Load Balancer in a Platform-as-a-Service</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b-EZyV4sD7gJZww17uTC1C9eRdE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b-EZyV4sD7gJZww17uTC1C9eRdE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b-EZyV4sD7gJZww17uTC1C9eRdE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b-EZyV4sD7gJZww17uTC1C9eRdE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;
Load balancing is a key concern in a Platform-as-a-Service (PaaS) or a middleware platform deployed on the Cloud. In this article, we will look at some key concepts related to load balancing, and the the significance &amp;amp; usage of load balancers in PaaS deployments.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;The primary functionality of a load balancer is to distribute the load of the incoming traffic amongst a set of backend worker nodes. This set of worker nodes can be either statically configured or can be dynamically discovered. Traditionally, load balancers are configured with a set of static nodes. This means, new nodes outside this set cannot be added at runtime. Dynamic load balancers support addition &amp;amp; removal of worker nodes at runtime, and the IP addresses &amp;amp; other connection details of the backend nodes need not be known in advance by the load balancer. The load balancing algorithm is a central part of a load balancer. This algorithm specifies the load balancing policy, or how the load has to be distributed across multiple backend worker nodes. Generally, all worker nodes have identical hardware &amp;amp; software configuration, as well as host identical copies of deployment artifacts. Hence the round-robin load balancing algorithm is very suitable &amp;amp; widely used for such deployments.&lt;/div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Session Affinity&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Most modern load balancers support session affinity. This means, if the client sends a session ID, the load balancer will forward all requests containing a particular session ID, to the same backend worker node, irrespective of the specified load balancing algorithm. This may look like defeating the purpose of load balancing. But before the session is created, the request will first be dispatched to the worker node which is next in-line, and a session will be established with that worker node. We also have to keep in mind that stateful applications inherently do not scale well, and state replication can have huge overheads, so it is best to minimize server side state if you want your application to be massively scalable. So, session-affinity based load balancing is a compromise solution to the problem of deploying stateful applications in clusters.&lt;/div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Elastic Load Balancer&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;An Elastic Load Balancer (ELB), in addition to carrying out its functionality in load balancing, is also responsible for monitoring the load &amp;amp; starting up new worker nodes or terminating existing worker nodes, depending on the load. This behavior of scaling up the system while the load increases &amp;amp; scaling down the system when the load decreases is known as autoscaling.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;In a typical architecture, load balancing &amp;amp; autoscaling will be handled by two logically distinct components. It may even be possible to deploy the load balancer component &amp;amp; the autoscaler component separately.&lt;/div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Cloud-nativity &amp;amp; Load Balancing&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Load balancing is the key to Cloud-based deployment architectures. The Elastic Load Balancer is an essential component in the deployment architecture, when it comes to realizing the &lt;a href="http://pzf.fremantle.org/2010/05/cloud-native.html"&gt;Cloud native&lt;/a&gt; attributes of multi-tenancy, elasticity, distributed &amp;amp; dynamic wiring, and incremental deployment &amp;amp; testability.&lt;/div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Fronting Multiple Clusters - Service-aware Load Balancing&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Be8hO_YYfyc/TmEtslzJbKI/AAAAAAAAAq4/LElnILnxGDU/s1600/Slide1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-Be8hO_YYfyc/TmEtslzJbKI/AAAAAAAAAq4/LElnILnxGDU/s1600/Slide1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;When it comes to production deployments, a load balancer does not do much of the real work. The real work is done in the backend worker nodes. So, having load balancers introduces additional cost. Since load balancers do not do much of the real work, typically, the load on the load balancer itself should be very small. Hence, a load balancer is generally capable of fronting quite a large number of backend worker nodes. In a traditional deployment, one LB may front a cluster of homogenous worker nodes. However, a load balancer is generally capable of handling multiple clusters as shown in the figure above. The important thing to note is, the traffic has to be routed to the correct cluster, and the load has to be balanced according to the specified load balancing algorithm specified for that cluster. A cluster of homogeneous worker nodes is called a Cloud Service, in Cloud deployments. So, a load balancer which fronts multiple Cloud Services is typically called a Service-aware load balancer.&lt;/div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Multi-tenancy - Tenant-aware Load Balancing&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;If a Cloud deployment has to be able to scale to thousands, hundreds of thousands or millions of tenants, we need tenant-partitioning. This means, for a single Cloud service, there will be multiple clusters, and each of these Service clusters will handle a subset of the tenants in the system. Creating dynamic tenant clusters &amp;amp; tenant&amp;nbsp;partitioning&amp;nbsp;strategies are some of the ongoing research areas. In such a tenant-partitioned deployment, the load balancers themselves need to be tenant-aware, in order to be able to route the requests to the proper tenant clusters. This means the load balancer has to be tenant-aware as well as Service-aware, since it is the Service clusters that are partitioned according to the tenants.&lt;/div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Single Point of Failure?&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;The load balancer itself can become a single point of failure, defeating the purpose of having clustered deployments. This can be handled by having the LBs deployed in pairs in either hot-hot or hot-cold configuration. If the LBs are deployed in hot-hot configuration, we could do DNS round-robin between these LBs. In hot-cold setups, if the primary LB fails, we could do an IP remapping.&lt;/div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;WSO2 Elastic Load Balancer&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;The WSO2 Load Balancer (LB) is a load balancer based on &lt;a href="http://synapse.apache.org/"&gt;Apache Synapse&lt;/a&gt; &amp;amp; &lt;a href="http://wso2.org/projects/carbon"&gt;WSO2 Carbon&lt;/a&gt;. This is also an Elastic Load Balancer, and has been deployed on &lt;a href="http://stratoslive.wso2.com/"&gt;StratosLive&lt;/a&gt;, the Platform-as-a-Service from WSO2. It is also available for download as part of the &lt;a href="http://wso2.org/projects/stratos"&gt;WSO2 Stratos&lt;/a&gt; Cloud Middleware Platform. At present, the WSO2 Elastic Load Balancer (ELB) is only Service-aware, and can be deployed as a load balancer cluster.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: large;"&gt;Further Reading&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Load-Balancing-Servers-Firewalls-Caches/dp/0471415502?ie=UTF8&amp;amp;tag=azeesnot-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" target="_blank"&gt;&lt;img alt="Load Balancing Servers, Firewalls, and Caches" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=0471415502&amp;amp;tag=azeesnot-20" /&gt;&lt;/a&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=azeesnot-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0471415502" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;a href="http://www.amazon.com/Cloud-Computing-Explained-Implementation-Enterprises/dp/0956355609?ie=UTF8&amp;amp;tag=azeesnot-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" target="_blank"&gt;&lt;img alt="Cloud Computing Explained: Implementation Handbook for Enterprises" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=0956355609&amp;amp;tag=azeesnot-20" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=azeesnot-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0956355609" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=azeesnot-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0956355609" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;a href="http://www.amazon.com/Cloud-at-Your-Service/dp/1935182528?ie=UTF8&amp;amp;tag=azeesnot-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" target="_blank"&gt;&lt;img alt="The Cloud at Your Service" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=1935182528&amp;amp;tag=azeesnot-20" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=azeesnot-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1935182528" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href="http://www.amazon.com/Platform-Service-PaaS-High-impact-ebook/dp/B00528C0OO?ie=UTF8&amp;amp;tag=azeesnot-20&amp;amp;link_code=bil&amp;amp;camp=213689&amp;amp;creative=392969" imageanchor="1" target="_blank"&gt;&lt;img alt="Platform as a Service (PaaS): High-impact Emerging Technology - What You Need to Know: Definitions, Adoptions, Impact, Benefits, Maturity, Vendors" src="http://ws.amazon.com/widgets/q?MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;ID=AsinImage&amp;amp;WS=1&amp;amp;Format=_SL160_&amp;amp;ASIN=B00528C0OO&amp;amp;tag=azeesnot-20" /&gt;&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=azeesnot-20&amp;amp;l=bil&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=B00528C0OO" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-1018735432623073091?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/hFFqfCFTlko" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/1018735432623073091/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=1018735432623073091" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/1018735432623073091?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/1018735432623073091?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/hFFqfCFTlko/role-of-load-balancer-in-platform-as.html" title="The role of a Load Balancer in a Platform-as-a-Service" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-Be8hO_YYfyc/TmEtslzJbKI/AAAAAAAAAq4/LElnILnxGDU/s72-c/Slide1.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/09/role-of-load-balancer-in-platform-as.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cNRn06fip7ImA9WhdWFUU.&quot;"><id>tag:blogger.com,1999:blog-21698308.post-1819232774655539263</id><published>2011-08-30T18:39:00.000+05:30</published><updated>2011-09-09T21:48:17.316+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T21:48:17.316+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="soa platform" /><category scheme="http://www.blogger.com/atom/ns#" term="wso2con" /><category scheme="http://www.blogger.com/atom/ns#" term="Cloud computing" /><category scheme="http://www.blogger.com/atom/ns#" term="soa" /><title>[WSO2Con 2011] Open Source Middleware for the Cloud: WSO2 Stratos</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XnweHHaYyfBIOn8tUBVPqxxDjrU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XnweHHaYyfBIOn8tUBVPqxxDjrU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XnweHHaYyfBIOn8tUBVPqxxDjrU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XnweHHaYyfBIOn8tUBVPqxxDjrU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
I will be presenting this year as well at WSO2Con about the &lt;a href="http://wso2.com/events/wso2con-2011-colombo/agenda/"&gt;WSO2 Stratos Cloud Middleware Platform as well as WSO2 StratosLive Platform-as-a-Service&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Here is the abstract of my talk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
"More enterprises are recognizing the opportunity to extend the reach and cost-efficiency of their applications by delivering them as software-as-a-service (SaaS). However, the approach to deploying in the cloud and the choice of either cloud middleware software or a platform-as-a-service (PaaS) can significantly affect the success of a SaaS implementation.&lt;br /&gt;
&lt;br /&gt;
WSO2 Stratos is a complete enterprise-ready cloud middleware platform designed to extend SOAs to the cloud, and it is the software that powers the WSO2 StratosLive PaaS. By providing WSO2 Carbon products as services over public, private, and hybrid cloud infrastructure, WSO2 Stratos offers an ideal platform for SaaS developers to create, manage and run enterprise-class applications and services with all the inherent benefits of a true cloud-native environment.In this session, we will be looking at the WSO2 Stratos cloud middleware platform and the benefits it offers in developing, testing, deploying and managing cloud-native applications."&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/21698308-1819232774655539263?l=blog.afkham.org' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/afkham/eBwc/~4/IQ-7T6P6_HY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.afkham.org/feeds/1819232774655539263/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=21698308&amp;postID=1819232774655539263" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/1819232774655539263?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21698308/posts/default/1819232774655539263?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/afkham/eBwc/~3/IQ-7T6P6_HY/wso2con-2011-open-source-middleware-for.html" title="[WSO2Con 2011] Open Source Middleware for the Cloud: WSO2 Stratos" /><author><name>Afkham Azeez</name><uri>http://www.blogger.com/profile/03475634735349390668</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://2.bp.blogspot.com/_k5n6bZcNC_I/SN-ORQGD1KI/AAAAAAAAAU4/UmW6RKyGoDo/S220/afkham_azeez2.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.afkham.org/2011/08/wso2con-2011-open-source-middleware-for.html</feedburner:origLink></entry></feed>

