<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2324423793430033296</id><updated>2011-08-14T10:39:18.206-07:00</updated><title type='text'>Nayan Ambali</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nayan-ambali.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2324423793430033296/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nayan-ambali.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>nayan</name><uri>http://www.blogger.com/profile/09271853998240852770</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://2.bp.blogspot.com/_MRaZ-hk-sk4/SfSIqGXrnjI/AAAAAAAADos/gMOI38kuR0o/S220/DSC02001.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2324423793430033296.post-4165139507534694828</id><published>2010-06-27T05:17:00.000-07:00</published><updated>2010-06-27T05:31:27.014-07:00</updated><title type='text'>Two simple hacks for Weebly to get two pro features at free</title><content type='html'>&lt;div&gt;&lt;b&gt;&lt;span style="font-size: 13pt; font-family:&amp;quot;;font-size:12.0pt;"&gt;          Want to remove this from footer&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MRaZ-hk-sk4/TCdD4JO7tAI/AAAAAAAAEMk/ZBqK8O-G2i0/s1600/clip_image003.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MRaZ-hk-sk4/TCdD3oARlGI/AAAAAAAAEMc/ZupLswwq--4/s1600/clip_image002.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 61px;" src="http://1.bp.blogspot.com/_MRaZ-hk-sk4/TCdD3oARlGI/AAAAAAAAEMc/ZupLswwq--4/s320/clip_image002.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5487429293884675170" /&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;/span&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-text-decorations-in-effect: underline; "&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:180%;"&gt;&lt;span class="Apple-style-span" style="font-size: 17px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;               Click on Design -  Edit HTML / CSS and add below script after body end tag&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-weight: normal; "&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;p class="MsoNormal" style="margin-left: 0.5in; display: inline !important; "&gt;&lt;span class="xml-punctuation"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&amp;amp;gt &lt;/span&gt;&lt;/span&gt;&lt;span class="xml-tagname"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:#AA00BB"&gt;script&lt;/span&gt;&lt;/span&gt;&lt;span class="apple-converted-space"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:#AA00BB"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="xml-attname"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:blue"&gt;type&lt;/span&gt;&lt;/span&gt;&lt;span class="xml-punctuation"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="xml-attribute"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:#228811"&gt;"text/javascript" &lt;/span&gt;&lt;/span&gt;&lt;span class="xml-punctuation"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:black"&gt;&amp;amp;lt&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in"&gt;&lt;span style="font-size:11.0pt;font-family: &amp;quot;Courier New&amp;quot;;color:black"&gt; &lt;span class="js-variable"&gt;document&lt;/span&gt;&lt;span class="js-punctuation"&gt;.&lt;/span&gt;&lt;span class="js-property"&gt;getElementById&lt;/span&gt;&lt;span class="js-punctuation"&gt;(&lt;/span&gt;&lt;span class="js-string"&gt;'footer-contents'&lt;/span&gt;&lt;span class="js-punctuation"&gt;).&lt;/span&gt;&lt;span class="js-property"&gt;style&lt;/span&gt;&lt;span class="js-punctuation"&gt;.&lt;/span&gt;&lt;span class="js-property"&gt;visibility  &lt;/span&gt;&lt;span class="js-operator"&gt;=&lt;/span&gt;&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;span class="js-string"&gt;'hidden'&lt;/span&gt;&lt;span class="js-punctuation"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="xml-punctuation"&gt;&amp;amp;gt /&lt;/span&gt;&lt;/span&gt;&lt;span class="xml-tagname"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:#AA00BB"&gt;script &lt;/span&gt;&lt;/span&gt;&lt;span class="xml-punctuation"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:black"&gt;&amp;amp;lt&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in"&gt;&lt;span class="xml-punctuation"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:black"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-weight: normal; font-size: 17px; "&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;p class="MsoNormal" style="display: inline !important; "&gt;&lt;span class="xml-punctuation"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size:13.0pt;mso-bidi-font-size:11.0pt;font-family: Arial;color:black"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-left:.5in"&gt;&lt;span class="xml-punctuation"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:black"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-weight: normal; font-size: 17px; "&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;p class="MsoNormal" style="margin-left: 0.5in; display: inline !important; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-weight: normal; "&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;p class="MsoNormal" style="display: inline !important; "&gt;&lt;span class="xml-punctuation"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;&lt;span style="font-size:13.0pt;mso-bidi-font-size:11.0pt;font-family: Arial;color:black"&gt;Want to have Favicon to your site&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/b&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;div&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;&lt;span style="font-size:13.0pt;mso-bidi-font-family:Arial;mso-fareast-Times New Roman&amp;quot;;mso-ansi-language:EN-US;mso-fareast-language:EN-US; mso-bidi-language:AR-SAfont-family:&amp;quot;;font-size:12.0pt;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;&lt;span style="font-size:13.0pt;mso-bidi-font-family:Arial;mso-fareast-Times New Roman&amp;quot;;mso-ansi-language:EN-US;mso-fareast-language:EN-US; mso-bidi-language:AR-SAfont-family:&amp;quot;;font-size:12.0pt;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal; font-size: 16px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://1.bp.blogspot.com/_MRaZ-hk-sk4/TCdD4JO7tAI/AAAAAAAAEMk/ZBqK8O-G2i0/s320/clip_image003.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5487429302804526082" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 47px; " /&gt;&lt;/span&gt;&lt;div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;&lt;span style="font-size:13.0pt;mso-bidi-font-family:Arial;mso-fareast-Times New Roman&amp;quot;;mso-ansi-language:EN-US;mso-fareast-language:EN-US; mso-bidi-language:AR-SAfont-family:&amp;quot;;font-size:12.0pt;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal; font-size: 16px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b style="mso-bidi-font-weight:normal"&gt;&lt;span style="font-size:13.0pt;mso-bidi-font-family:Arial;mso-fareast-Times New Roman&amp;quot;;mso-ansi-language:EN-US;mso-fareast-language:EN-US; mso-bidi-language:AR-SAfont-family:&amp;quot;;font-size:12.0pt;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal; font-size: 16px; "&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;p class="MsoNormal" style="margin-left:.5in"&gt;&lt;span class="xml-punctuation"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;Generate Favicon using &lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.favicon.cc/"&gt;http://www.favicon.cc/&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left:.5in"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left:.5in"&gt;Go to Design - &lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;Click Files - upload Favicon and get the path of the file - Click HTML and below lines&lt;span class="xml-punctuation"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left:.5in"&gt;&lt;span class="xml-punctuation"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left:.5in"&gt;&lt;span class="xml-punctuation"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&amp;amp;gt&lt;/span&gt;&lt;/span&gt;&lt;span class="xml-tagname"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:#AA00BB"&gt; link&lt;/span&gt;&lt;/span&gt;&lt;span class="apple-converted-space"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:#AA00BB"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="xml-attname"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:blue"&gt;rel&lt;/span&gt;&lt;/span&gt;&lt;span class="xml-punctuation"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="xml-attribute"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:#228811"&gt;"shortcut icon"&lt;/span&gt;&lt;/span&gt;&lt;span class="apple-converted-space"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:#228811"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="xml-attname"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:blue"&gt;href&lt;/span&gt;&lt;/span&gt;&lt;span class="xml-punctuation"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:black"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="xml-attribute"&gt;&lt;span style="font-size: 11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:#228811"&gt;"/uploads/5/5/5/5/7592/custom_themes/919/files/favicon.ico"  &lt;/span&gt;&lt;/span&gt;&lt;span class="xml-attname"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:blue"&gt;type&lt;/span&gt;&lt;/span&gt;&lt;span class="xml-punctuation"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="xml-attribute"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:#228811"&gt;"image/x-icon"&lt;/span&gt;&lt;/span&gt;&lt;span class="apple-converted-space"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;; color:#228811"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="xml-punctuation"&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;/&amp;amp;lt&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11.0pt;font-family:&amp;quot;Courier New&amp;quot;;color:black"&gt;&lt;span class="Apple-style-span"    style="font-family:Georgia, serif;font-size:130%;color:#0000EE;"&gt;&lt;span class="Apple-style-span" style="font-size: 16px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&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/2324423793430033296-4165139507534694828?l=nayan-ambali.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayan-ambali.blogspot.com/feeds/4165139507534694828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayan-ambali.blogspot.com/2010/06/two-simple-hacks-for-weebly-to-get-two_27.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2324423793430033296/posts/default/4165139507534694828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2324423793430033296/posts/default/4165139507534694828'/><link rel='alternate' type='text/html' href='http://nayan-ambali.blogspot.com/2010/06/two-simple-hacks-for-weebly-to-get-two_27.html' title='Two simple hacks for Weebly to get two pro features at free'/><author><name>nayan</name><uri>http://www.blogger.com/profile/09271853998240852770</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://2.bp.blogspot.com/_MRaZ-hk-sk4/SfSIqGXrnjI/AAAAAAAADos/gMOI38kuR0o/S220/DSC02001.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_MRaZ-hk-sk4/TCdD3oARlGI/AAAAAAAAEMc/ZupLswwq--4/s72-c/clip_image002.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2324423793430033296.post-3799457383399144159</id><published>2010-03-18T06:05:00.000-07:00</published><updated>2010-03-20T22:53:00.509-07:00</updated><title type='text'>Meeting with Matt Duncan, Director of  Market Development MIFOS</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MRaZ-hk-sk4/S6W0Jmb5GKI/AAAAAAAAEEk/0bd7hlcrA7c/s1600-h/Picture+Downloas+2.6.10+136.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_MRaZ-hk-sk4/S6W0Jmb5GKI/AAAAAAAAEEk/0bd7hlcrA7c/s320/Picture+Downloas+2.6.10+136.jpg" alt="" id="BLOGGER_PHOTO_ID_5450961001031211170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;13 March 2010 morning 11 am, got call from Matt, he said "we are in 10th main, and I will pass the mobile to driver's hand", I asked driver do you know Kannada, he said yes, I replied him saying "innu swalpa munde banni [come little bit further...]"&lt;br /&gt;&lt;br /&gt;11.00Am ...&lt;br /&gt;[&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;Matt Duncan&lt;/span&gt;] I am Matt,&lt;br /&gt;[&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;Nayan&lt;/span&gt;]: 'Nayan :)', and we stepped into 2nd floor, our "Hackers Garage"&lt;br /&gt;[&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;Matt Duncan&lt;/span&gt;] :After looking into office " Cool place .. !!"&lt;br /&gt;[&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;Nayan&lt;/span&gt;] : Introduced Ashok to Matt, started with our teams future plans and present work, that is Customizing MIFOS for Nirantara and modifying MIFOS for multi-tenant SaaS architecture&lt;br /&gt;[&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;Matt Duncan&lt;/span&gt;] :How did you got Nirantara requirements ?&lt;br /&gt;[&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;Nayan&lt;/span&gt;] : I had visited Niratara, and understood their operations, field work and backend office work. And also looked into present MIS.&lt;br /&gt;[&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;Matt Duncan&lt;/span&gt;] : Why Nirantara is moving to MIFOS from present MIS&lt;br /&gt;[&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;Nayan&lt;/span&gt;]: Standalone , ownership cost for each branch office , branch office data consolidation.&lt;br /&gt;[&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;Matt Duncan&lt;/span&gt;]: It is very tedious to consolidate data from branches !! , Ketan stepped into office, had introduction with Ketan(was working on Data mapping). And dicussed with Ketan on data mapping activity. And suggested that need to cut down Migration activity time.&lt;br /&gt;[&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;Nayan&lt;/span&gt;]: We have developed MS-XL utility for data migration&lt;br /&gt;[&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;Matt Duncan&lt;/span&gt;]: Cool !! Do you expect any help from our side.&lt;br /&gt;[&lt;span style="font-weight: bold;"&gt;Ashok&lt;/span&gt;]: MIfos release plans and stable code to be made available&lt;br /&gt;[&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;Nayan&lt;/span&gt;]:  And standers collaborative platform for all Mifos developer across the world, and to avoid redundant work !! And Updated user manuals before new version is launched&lt;br /&gt;[&lt;span style="color: rgb(255, 102, 0); font-weight: bold;"&gt;Viswas&lt;/span&gt;]: Joined us bit late, and introduce himself to Matt&lt;br /&gt;[&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;Matt Duncan&lt;/span&gt;]: Sure.. We are doing ..&lt;br /&gt;[&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;Nayan&lt;/span&gt;]: Showed our Mifos customization, Organization announcements, ToDo , Today's activity , performance index, Today's repayment and disbursement dashboard.&lt;br /&gt;&lt;br /&gt;1.00 PM ...&lt;br /&gt;[&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;Matt Duncan&lt;/span&gt;]: Do you have any thing more to show in computer&lt;br /&gt;[&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;Nayan&lt;/span&gt;]: We do not anything more ..!!&lt;br /&gt;[&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;Matt Duncan&lt;/span&gt;]:  I will buy a lunch for all of you lets go !&lt;br /&gt;[&lt;span style="font-weight: bold;"&gt;Ketan&lt;/span&gt;]: Sip and Dine will be good place have lunch, all moved to ..&lt;br /&gt;[&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;Matt Duncan&lt;/span&gt;]: Can we have detailed introduction.&lt;br /&gt;[&lt;span style="font-weight: bold;"&gt;Ashok&lt;/span&gt;]: Talked about his education and work and some talk about cloud and open source !!&lt;br /&gt;[&lt;span style="font-weight: bold;"&gt;Ketan&lt;/span&gt;]: How to connect skilled labors from rural India to market and how MFI can play a role in this.&lt;br /&gt;[&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;Matt Duncan&lt;/span&gt;]:  I agree, it is great. And if MFI start marketing who will own the risk ? ....&lt;br /&gt;[&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;Matt Duncan&lt;/span&gt;]:    Shared his experience in CHINA, about having dinner with community, and most of the you do not get know what they are talking, but need to respond to it . :) :)&lt;br /&gt;And Chinese guys carry highend mobiles and women to have mobile phones but not high end&lt;br /&gt;[&lt;span style="color: rgb(0, 102, 0); font-weight: bold;"&gt;Matt Duncan&lt;/span&gt;]:     And talked about Philippines SHG/MFI and mobile trends in Philippines.&lt;br /&gt;was telling out 25 women group 20 to 22 were having mobile phone.&lt;br /&gt;And explained about how one of the MFI adopted Mifos hosted on EC2. And also explained about Mifos hosted service.&lt;br /&gt;&lt;br /&gt;Same time had cool lunch .. (I hope Matt liked Indian breads and veg side dish)&lt;br /&gt;&lt;br /&gt;Matt dropped us back to Office, And took foto of us (hope he will share those pics with us :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2324423793430033296-3799457383399144159?l=nayan-ambali.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayan-ambali.blogspot.com/feeds/3799457383399144159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayan-ambali.blogspot.com/2010/03/meeting-with-matt-duncan-director-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2324423793430033296/posts/default/3799457383399144159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2324423793430033296/posts/default/3799457383399144159'/><link rel='alternate' type='text/html' href='http://nayan-ambali.blogspot.com/2010/03/meeting-with-matt-duncan-director-of.html' title='Meeting with Matt Duncan, Director of  Market Development MIFOS'/><author><name>nayan</name><uri>http://www.blogger.com/profile/09271853998240852770</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://2.bp.blogspot.com/_MRaZ-hk-sk4/SfSIqGXrnjI/AAAAAAAADos/gMOI38kuR0o/S220/DSC02001.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_MRaZ-hk-sk4/S6W0Jmb5GKI/AAAAAAAAEEk/0bd7hlcrA7c/s72-c/Picture+Downloas+2.6.10+136.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2324423793430033296.post-42812916500981376</id><published>2009-04-30T22:05:00.000-07:00</published><updated>2009-04-30T22:09:44.221-07:00</updated><title type='text'>Liferay - SOA in Three Steps</title><content type='html'>&lt;div class="portlet-borderless-container" style=""&gt; &lt;div&gt; &lt;span class="journal-content-article" id="14_3074_1.0"&gt; &lt;div class="journal-basic-content-container"&gt; &lt;p&gt;The Liferay portal comes packaged with a powerful tool known as ServiceBuilder to helps developers quickly implement a Service-Oriented Architecture (SOA).  Most technologies needed for SOA (Web Services, Spring, Hibernate, etc.) require a tremendous amount of files to be written and configured.  For any developer, this can quickly become tedious and nurture an environment of copy-and-paste purgatory.&lt;/p&gt; &lt;p&gt;Liferay's ServiceBuilder automates most of this so that you, the developer, can focus your energy on your project's business logic.  It only takes three steps to implement a powerful SOA in Liferay.&lt;/p&gt; &lt;/div&gt; &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;  &lt;script type="text/javascript"&gt; document.getElementById("p_p_id_56_INSTANCE_LhFI_").portletId = "56_INSTANCE_LhFI"; document.getElementById("p_p_id_56_INSTANCE_LhFI_").columnPos = 1; document.getElementById("p_p_id_56_INSTANCE_LhFI_").isStatic = "end"; if (!Liferay.Portlet.isAjax("56_INSTANCE_LhFI")) { Liferay.Portlet.process("56_INSTANCE_LhFI"); } &lt;/script&gt; &lt;div id="p_p_id_56_INSTANCE_MsIb_" class="portlet-boundary portlet-boundary_56_"&gt; &lt;a name="p_56_INSTANCE_MsIb"&gt;&lt;/a&gt; &lt;div class="portlet-borderless-container" style=""&gt; &lt;div&gt; &lt;span class="journal-content-article" id="14_3076_1.0"&gt; &lt;div class="journal-image-flow-container"&gt; &lt;img style="width: 468px; height: 196px;" src="http://testdog.net/image/journal/article?img_id=1849" class="right" /&gt; &lt;h2&gt; 1. Define a Data Model &lt;/h2&gt; &lt;p&gt;All you need to do is write an XML file called &lt;span style="font-family:Courier New;"&gt;service.xml&lt;/span&gt;, based on a DTD provided by Liferay.  The file should specify all necessary fields, keys and finder methods.  Run ServiceBuilder using Ant, and you are done!&lt;br /&gt;&lt;br /&gt;Over a dozen files were generated for you for each table you specified.  This includes the following types of files:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Spring configuration files and Stubbed Remote/Local service classes&lt;/li&gt;&lt;li&gt;SOAP and Tunnel classes; WSDL files and Javascript Web Services methods&lt;/li&gt;&lt;li&gt;Data Model classes&lt;/li&gt;&lt;li&gt;Hibernate classes and configuration files&lt;/li&gt;&lt;li&gt;SQL create and index scripts&lt;/li&gt;&lt;/ul&gt; &lt;/div&gt; &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;script type="text/javascript"&gt; document.getElementById("p_p_id_56_INSTANCE_MsIb_").portletId = "56_INSTANCE_MsIb"; document.getElementById("p_p_id_56_INSTANCE_MsIb_").columnPos = 2; document.getElementById("p_p_id_56_INSTANCE_MsIb_").isStatic = "end"; if (!Liferay.Portlet.isAjax("56_INSTANCE_MsIb")) { Liferay.Portlet.process("56_INSTANCE_MsIb"); } &lt;/script&gt; &lt;div id="p_p_id_56_INSTANCE_PXd9_" class="portlet-boundary portlet-boundary_56_"&gt; &lt;a name="p_56_INSTANCE_PXd9"&gt;&lt;/a&gt; &lt;div class="portlet-borderless-container" style=""&gt; &lt;div&gt; &lt;span class="journal-content-article" id="14_3078_1.0"&gt; &lt;div class="journal-image-flow-container"&gt; &lt;img style="width: 467px; height: 179px;" src="http://testdog.net/image/journal/article?img_id=1852" class="right" /&gt; &lt;h2&gt; 2. Declare Business Methods &lt;/h2&gt; &lt;p&gt;Empty Remote and Local service classes have been stubbed out for your by ServiceBuilder.  All you have to do is declare the methods you want and run the ServiceBuilder task in Ant again, and you are done!&lt;/p&gt; &lt;p&gt;Any business methods declared in the Remote service classes will be propagated into the SOAP and Tunnel classes, WSDL files and added into the list of Javascript Web Services methods.  Like the definition of the data model, any subsequent changes should be followed by a run of the ServiceBuilder and the methods will be appropriately propagated.&lt;/p&gt; &lt;/div&gt; &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;script type="text/javascript"&gt; document.getElementById("p_p_id_56_INSTANCE_PXd9_").portletId = "56_INSTANCE_PXd9"; document.getElementById("p_p_id_56_INSTANCE_PXd9_").columnPos = 3; document.getElementById("p_p_id_56_INSTANCE_PXd9_").isStatic = "end"; if (!Liferay.Portlet.isAjax("56_INSTANCE_PXd9")) { Liferay.Portlet.process("56_INSTANCE_PXd9"); } &lt;/script&gt; &lt;div id="p_p_id_56_INSTANCE_7RvJ_" class="portlet-boundary portlet-boundary_56_"&gt; &lt;a name="p_56_INSTANCE_7RvJ"&gt;&lt;/a&gt; &lt;div class="portlet-borderless-container" style=""&gt; &lt;div&gt; &lt;span class="journal-content-article" id="14_3072_1.0"&gt; &lt;div class="journal-image-flow-container"&gt; &lt;img style="width: 486px; height: 168px;" src="http://testdog.net/image/journal/article?img_id=1853" class="right" /&gt; &lt;h2&gt; 3. Implement Business Logic &lt;/h2&gt; &lt;p&gt;Like any other J2EE application, the Remote implementation class should do any security and permission checks that you may need; the Local implementation class should contain the business logic that you allow trusted sources to invoke.  After you are done, compile your code and you now have a SOA!&lt;/p&gt;&lt;p&gt;Liferay's ServiceBuilder has created all the necessary files you need for a Service-Oriented Architecture.  Rather than hours and hours of tedious copy and pasting, the ServiceBuilder automates all of this in a matter of seconds.  You can now spend all that time saved on the place where your expertise should be focused: on the business logic.&lt;/p&gt; &lt;/div&gt; &lt;/span&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/2324423793430033296-42812916500981376?l=nayan-ambali.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayan-ambali.blogspot.com/feeds/42812916500981376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayan-ambali.blogspot.com/2009/04/liferay-soa-in-three-steps.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2324423793430033296/posts/default/42812916500981376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2324423793430033296/posts/default/42812916500981376'/><link rel='alternate' type='text/html' href='http://nayan-ambali.blogspot.com/2009/04/liferay-soa-in-three-steps.html' title='Liferay - SOA in Three Steps'/><author><name>nayan</name><uri>http://www.blogger.com/profile/09271853998240852770</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://2.bp.blogspot.com/_MRaZ-hk-sk4/SfSIqGXrnjI/AAAAAAAADos/gMOI38kuR0o/S220/DSC02001.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2324423793430033296.post-8922662366426124473</id><published>2009-04-25T22:05:00.000-07:00</published><updated>2009-04-26T05:38:14.370-07:00</updated><title type='text'>Liferay - Hope of Ray for Open Source Enterprise portal</title><content type='html'>&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:180%;"&gt;L&lt;/span&gt;iferay &lt;/span&gt;is designed to deploy portlets that adhere to the Portlet API (JSR-168 / 286). Many useful portlets are bundled with the portal (Mail, Document Library, Team Calendar, Social Office , Wikis , Blogs , Activity tracking , Message Boards, to name a few) and can be used as examples for adding your own custom portlets.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Over View of Architecture&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;   Users can access the portal from traditional and wireless devices. Developers can access the portal from the exposed APIs via SOAP, RMI, and our custom tunneling classes&lt;span style="font-size:130%;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MRaZ-hk-sk4/SfRVO1G1hhI/AAAAAAAADoI/MxCPxWbqVBs/s1600-h/article.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 248px; height: 320px;" src="http://3.bp.blogspot.com/_MRaZ-hk-sk4/SfRVO1G1hhI/AAAAAAAADoI/MxCPxWbqVBs/s320/article.gif" alt="" id="BLOGGER_PHOTO_ID_5328977972348421650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Portlet API (&lt;a href="http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-portlet.html"&gt;JSR-168&lt;/a&gt; , &lt;a href="http://www.javaworld.com/javaworld/jw-11-2008/jw-11-portletpacket1.html"&gt;JSR - 286&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;p&gt;JSR 168's goals are the following:&lt;/p&gt;                      &lt;ul&gt;&lt;li&gt;Define the runtime environment, or the portlet container, for portlets&lt;/li&gt;&lt;li&gt;Define the API between portlet container and portlets&lt;/li&gt;&lt;li&gt;Provide mechanisms to store transient and persistent data for portlets&lt;/li&gt;&lt;li&gt;Provide a mechanism that allows portlets to include servlets and JSP (JavaServer Pages)&lt;/li&gt;&lt;li&gt;Define a packaging of portlets to allow easy deployment&lt;/li&gt;&lt;li&gt;Allow binary portlet portability among JSR 168 portals&lt;/li&gt;&lt;li&gt;Run JSR 168 portlets as remote portlets using the Web Services for Remote Portlets (WSRP) protocol&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="font-xx-large" style="font-weight: bold;"&gt;Struts and Tiles&lt;/div&gt;&lt;br /&gt;   &lt;a name="p_56_INSTANCE_j5RR"&gt;&lt;/a&gt;     &lt;div id="_56_INSTANCE_j5RR_content0"&gt; &lt;div&gt;All HTTP and WAP requests go through &lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portal/servlet/MainServlet.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portal/servlet/MainServlet.html"&gt;MainServlet&lt;/a&gt; which extends the basic Struts &lt;a href="http://jakarta.apache.org/struts/api/org/apache/struts/action/ActionServlet.html" _fcksavedurl="http://jakarta.apache.org/struts/api/org/apache/struts/action/ActionServlet.html"&gt;ActionServlet&lt;/a&gt;. MainServlet processes all requests and ensures that each request is routed to the proper &lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portal/struts/PortletAction.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portal/struts/PortletAction.html"&gt;PortletAction&lt;/a&gt;. Refer to &lt;a href="http://jakarta.apache.org/struts" _fcksavedurl="http://jakarta.apache.org/struts"&gt;Struts&lt;/a&gt; for a better understanding of how the portal's web framework functions.&lt;br /&gt;&lt;br /&gt;Layout information for the portal is managed with customizable templates. Refer to articles about &lt;a href="http://www.javaworld.com/javaworld/jw-01-2002/jw-0104-tilestrut.html" _fcksavedurl="http://www.javaworld.com/javaworld/jw-01-2002/jw-0104-tilestrut.html"&gt;Tiles&lt;/a&gt; to get a better understanding of how Tiles works as a layout manager.&lt;br /&gt;&lt;br /&gt;&lt;div class="font-xx-large" style="font-weight: bold;"&gt;Session EJBs, Spring, and Hibernate&lt;/div&gt;&lt;br /&gt;   &lt;a name="p_56_INSTANCE_ZPNd"&gt;&lt;/a&gt;     &lt;div id="_56_INSTANCE_ZPNd_content0"&gt; &lt;div&gt;Liferay is no longer dependent on EJBs and can be deployed on a standalone servlet container. All business logic is concentrated inside POJO implementations that are looked up and instantiated by Spring. These implementations can be modified or enhanced via Spring's AOP and IOC capabilities.&lt;br /&gt;&lt;br /&gt;The enterprise release of the portal wraps the POJO implementations with Session EJBs to provide heavy scaling and transaction support required by large sites. The professional release of the portal calls the POJO implementations directly to provide a light weight facade.&lt;br /&gt;&lt;br /&gt;All data is persisted using Hibernate and is called through the POJO implementations. Liferay used to rely on CMP technology to achieve persistence, but switched over to Hibernate because of its raw speed and flexibility. Liferay is database agnostic and can run on a variety of popular &lt;a href="http://www.blokefood.com/liferay-portal-4.2.1/web/guest/devzone/documentation" _fcksavedurl="/liferay-portal-4.2.1/web/guest/devzone/documentation"&gt;databases&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Liferay uses JAAS Web security so that when a user logs in, their principal is propogated to the Servlet and EJB tiers. &lt;i&gt;Remote&lt;/i&gt; Session EJBs can take advantage of this by checking security and permissions at the EJB level so it does not have be duplicated else where. &lt;i&gt;Local&lt;/i&gt; Session EJBs exposes business logic to other Session EJBs and does not specifically check for security since they cannot be called remotely. Principals are also propagated to POJO implementations that are the base classes for &lt;i&gt;Remote&lt;/i&gt; Session EJBs.&lt;br /&gt;&lt;br /&gt;The enterprise release uses Session EJBs which allows the deployer to separate the Web server, EJB server, and database server to achieve clustering at three levels. This is true n-tier deploying because no one is forced to cluster at any single layer and allows the most flexibility for large companies.&lt;br /&gt;&lt;br /&gt;Most of our EJBs, HBMs, and Models are generated through the ant task &lt;b&gt;build-service&lt;/b&gt; which reads the file &lt;b&gt;service.xml&lt;/b&gt; in /portal-ejb. Each portlet that persist data has its own service.xml (do a search in /portal-ejb and you will get a list back). We copy this file to /portal-ejb when we want to generate the persistence classes for that portlet. This is an internal tool that is built on top of the XDoclet engine.&lt;br /&gt;&lt;br /&gt;For example, upon reading service.xml found in the Bookmarks portlet, the following model classes are generated. Each model class reflects a table in the database. Never edit BookmarksEntryModel. Do edit BookmarksEntry to add hand massaged code. BookmarksEntry is generated once and extends BookmarksEntryModel. This allows us the ease of generated code and flexibility of hand massaged code.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/model/BookmarksEntry.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/model/BookmarksEntry.html"&gt;com.liferay.portlet.bookmarks.model.BookmarksEntry&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/model/BookmarksEntryModel.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/model/BookmarksEntryModel.html"&gt;com.liferay.portlet.bookmarks.model.BookmarksEntryModel&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/model/BookmarksFolder.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/model/BookmarksFolder.html"&gt;com.liferay.portlet.bookmarks.model.BookmarksFolder&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/model/BookmarksFolderModel.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/model/BookmarksFolderModel.html"&gt;com.liferay.portlet.bookmarks.model.BookmarksFolderModel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Hibernate classes are generated that map to the model classes. This allows for an n-tier architecture for cases where your model classes are marshalled across the wire and your Hibernate classes are not.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksEntryHBM.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksEntryHBM.html"&gt;com.liferay.portlet.bookmarks.service.persistence.BookmarksEntryHBM&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksFolderHBM.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksFolderHBM.html"&gt;com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderHBM&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Persistence methods to add, update, delete, find, remove, and count the Hibernate entries are generated as the default persistence mechaninsm.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksEntryPersistence.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksEntryPersistence.html"&gt;com.liferay.portlet.bookmarks.service.persistence.BookmarksEntryPersistence&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksFolderPersistence.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksFolderPersistence.html"&gt;com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderPersistence&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Helper classes are generated that call the persistence methods. By default, the helper classes call the Hibernate persistence methods to update the database. You can override this in &lt;a href="http://www.blokefood.com/liferay-portal-4.2.1/web/guest/devzone/documentation" _fcksavedurl="/liferay-portal-4.2.1/web/guest/devzone/documentation"&gt;portal.properties&lt;/a&gt; and set your own persistence class as long as it extends the default persistence class. This means you can customize where you store your data. It can be a traditional database, a LDAP server, or even something else.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksEntryUtil.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksEntryUtil.html"&gt;com.liferay.portlet.bookmarks.service.persistence.BookmarksEntryUtil&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksFolderUtil.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksFolderUtil.html"&gt;com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderUtil&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pooling classes are also created to minimize object creation. Behavior can be modified in &lt;a href="http://www.blokefood.com/liferay-portal-4.2.1/web/guest/devzone/documentation" _fcksavedurl="/liferay-portal-4.2.1/web/guest/devzone/documentation"&gt;portal.properties&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksEntryPool.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksEntryPool.html"&gt;com.liferay.portlet.bookmarks.service.persistence.BookmarksEntryPool&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksFolderPool.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/persistence/BookmarksFolderPool.html"&gt;com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderPool&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;POJO implementations that extend &lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portal/service/impl/PrincipalBean.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portal/service/impl/PrincipalBean.html"&gt;PrincipalBean&lt;/a&gt; are generated to hold business logic that check the caller principal and can be called &lt;b&gt;remotely&lt;/b&gt;. Calling getUserId() returns the user id of the current user. Calling getUser() returns the &lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portal/model/User.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portal/model/User.html"&gt;User&lt;/a&gt; model that represents the current user. The Session EJB that extends the POJO implementation implements &lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portal/service/impl/PrincipalSessionBean.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portal/service/impl/PrincipalSessionBean.html"&gt;PrincipalSessionBean&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For example, these classes allow you to delete a bookmark entry or folder if and only if you are the creator of that entry or folder.&lt;br /&gt;&lt;br /&gt;These classes are only generated once if they do not already exist.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/impl/BookmarksEntryServiceImpl.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/impl/BookmarksEntryServiceImpl.html"&gt;com.liferay.portlet.bookmarks.service.impl.BookmarksEntryServiceImpl&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/impl/BookmarksFolderServiceImpl.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/impl/BookmarksFolderServiceImpl.html"&gt;com.liferay.portlet.bookmarks.service.impl.BookmarksFolderServiceImpl&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Helper classes are generated based on the POJO implementations. They help save developer time and prevent polluted code. Instead of writing many lines of code just to look up the appropriate Session EJB wrapper or POJO implementation, you simply call BookmarksEntryServiceUtil.addEntry to call the equivalent method in BookmarksEntryServiceImpl.addEntry.&lt;br /&gt;&lt;br /&gt;BookmarksEntryServiceUtil calls BookmarksFolderServiceFactory to look up the class that implements BookmarksEntryService. BookmarksFolderServiceFactory defers to Spring and settings in &lt;a href="http://www.blokefood.com/liferay-portal-4.2.1/web/guest/devzone/documentation" _fcksavedurl="/liferay-portal-4.2.1/web/guest/devzone/documentation"&gt;portal.properties&lt;/a&gt; on whether to load the Session EJB wrapper or the plain POJO implementation. The Session EJB extends the POJO implementation.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryServiceEJB.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryServiceEJB.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryServiceEJB&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryServiceEJBImpl.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryServiceEJBImpl.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryServiceEJBImpl&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryServiceHome.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryServiceHome.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryServiceHome&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryService.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryService.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksEntryService&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryServiceFactory.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryServiceFactory.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksEntryServiceFactory&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryServiceUtil.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryServiceUtil.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksEntryServiceUtil&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderServiceEJB.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderServiceEJB.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderServiceEJB&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderServiceEJBImpl.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderServiceEJBImpl.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderServiceEJBImpl&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderServiceHome.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderServiceHome.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderServiceHome&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderService.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderService.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksFolderService&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderServiceFactory.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderServiceFactory.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksFolderServiceFactory&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderServiceUtil.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderServiceUtil.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksFolderServiceUtil&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tunneling classes are generated so that developers can call the POJO implementations over port 80. An example of this given in the section V of this document.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/http/BookmarksEntryServiceHttp.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/http/BookmarksEntryServiceHttp.html"&gt;com.liferay.portlet.bookmarks.service.http.BookmarksEntryServiceHttp&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/http/BookmarksFolderServiceHttp.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/http/BookmarksFolderServiceHttp.html"&gt;com.liferay.portlet.bookmarks.service.http.BookmarksFolderServiceHttp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Soap classes are generated so that developers can call the POJO implementations over port 80. Soap is slower than tunneling because tunneling streams requests in binary format. Soap is more flexible than tunneling because the client classes are not limited to Java.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/http/BookmarksEntryServiceSoap.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/http/BookmarksEntryServiceSoap.html"&gt;com.liferay.portlet.bookmarks.service.http.BookmarksEntryServiceSoap&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/http/BookmarksFolderServiceSoap.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/http/BookmarksFolderServiceSoap.html"&gt;com.liferay.portlet.bookmarks.service.http.BookmarksFolderServiceSoap&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;POJO implementations classes that do &lt;b&gt;not&lt;/b&gt; extend &lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portal/service/impl/PrincipalBean.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portal/service/impl/PrincipalBean.html"&gt;PrincipalBean&lt;/a&gt; are generated to hold business logic that do &lt;b&gt;not&lt;/b&gt; check the caller principal and can be called &lt;b&gt;locally&lt;/b&gt;. These classes exist so that business logic can be easily integrated with other projects.&lt;br /&gt;&lt;br /&gt;These classes are only generated once if they do not already exist.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/impl/BookmarksEntryLocalServiceImpl.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/impl/BookmarksEntryLocalServiceImpl.html"&gt;com.liferay.portlet.bookmarks.service.impl.BookmarksEntryLocalServiceImpl&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/impl/BookmarksFolderLocalServiceImpl.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/impl/BookmarksFolderLocalServiceImpl.html"&gt;com.liferay.portlet.bookmarks.service.impl.BookmarksFolderLocalServiceImpl&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Helper classes are also generated.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryLocalServiceEJB.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryLocalServiceEJB.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryLocalServiceEJB&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryLocalServiceEJBImpl.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryLocalServiceEJBImpl.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryLocalServiceEJBImpl&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryLocalServiceHome.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryLocalServiceHome.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryLocalServiceHome&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryLocalService.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryLocalService.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksEntryLocalService&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryLocalServiceFactory.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryLocalServiceFactory.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksEntryLocalServiceFactory&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryLocalServiceUtil.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryLocalServiceUtil.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksEntryLocalServiceUtil&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderLocalServiceEJB.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderLocalServiceEJB.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderLocalServiceEJB&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderLocalServiceEJBImpl.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderLocalServiceEJBImpl.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderLocalServiceEJBImpl&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderLocalServiceHome.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderLocalServiceHome.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderLocalServiceHome&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderLocalService.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderLocalService.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksFolderLocalService&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderLocalServiceFactory.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderLocalServiceFactory.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksFolderLocalServiceFactory&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderLocalServiceUtil.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderLocalServiceUtil.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksFolderLocalServiceUtil&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Some of our users needed to call the Local Service classes remotely, so Remote Service classes that parallel their Local counterparts are also generated.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryRemoteServiceEJB.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryRemoteServiceEJB.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryRemoteServiceEJB&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryRemoteServiceEJBImpl.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryRemoteServiceEJBImpl.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryRemoteServiceEJBImpl&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryRemoteServiceHome.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksEntryRemoteServiceHome.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksEntryRemoteServiceHome&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryRemoteService.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryRemoteService.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksEntryRemoteService&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryRemoteServiceFactory.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryRemoteServiceFactory.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksEntryRemoteServiceFactory&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryRemoteServiceUtil.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksEntryRemoteServiceUtil.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksEntryRemoteServiceUtil&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderRemoteServiceEJB.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderRemoteServiceEJB.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderRemoteServiceEJB&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderRemoteServiceEJBImpl.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderRemoteServiceEJBImpl.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderRemoteServiceEJBImpl&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderRemoteServiceHome.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/ejb/BookmarksFolderRemoteServiceHome.html"&gt;com.liferay.portlet.bookmarks.service.ejb.BookmarksFolderRemoteServiceHome&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderRemoteService.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderRemoteService.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksFolderRemoteService&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderRemoteServiceFactory.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderRemoteServiceFactory.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksFolderRemoteServiceFactory&lt;/a&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderRemoteServiceUtil.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/bookmarks/service/spring/BookmarksFolderRemoteServiceUtil.html"&gt;com.liferay.portlet.bookmarks.service.spring.BookmarksFolderRemoteServiceUtil&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A lot of people stay away from Session EJBs because they are heavy and require a lot of coding. Our build scripts show that you can leverage the advantages of Session EJBs while minimizing repetitive labor so that you can strike a good balance between effort and results.&lt;br /&gt;&lt;br /&gt;Spring gives Liferay additional flexibility. Developers can test their POJO implementations with Liferay Portal Professional in a servlet container and deploy to production with Liferay Portal Enterprise in an application server.&lt;br /&gt;&lt;br /&gt;&lt;div class="font-xx-large" style="font-weight: bold;"&gt;SOAP, RMI, and Tunneling&lt;/div&gt;&lt;br /&gt;   &lt;a name="p_56_INSTANCE_PdWQ"&gt;&lt;/a&gt;     &lt;div id="_56_INSTANCE_PdWQ_content0"&gt; &lt;div&gt;All of our remote POJO implementations are exposed to the external world via SOAP, RMI, and our custom tunneling classes.&lt;br /&gt;&lt;br /&gt;We do not do this simply because Web services is a buzz word, but because we find it extremely useful for integration. The following is an example of a company that leverages these resources.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.3sixteen.com/" _fcksavedurl="http://www.3sixteen.com/"&gt;3sixteen&lt;/a&gt; is a t-shirt company that needed to get up and running fast. In the fashion industry that relies on cutting-edge appearance and presentation, 3sixteen needed to keep its Flash MX front-end "brochure" website that would not be used to sell clothing but to offer an experience through the music, graphics, and articles. Due to the static nature of Flash, the brochure site was not an e-commerce solution because products would need to be added, removed, and updated on a constant basis. To solve this problem, they decided to separate their web presence into two sites: a brochure site and shopping site.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.3sixteen.com/" _fcksavedurl="http://www.3sixteen.com/"&gt;www.3sixteen.com&lt;/a&gt; became the graphic oriented site built in Flash and &lt;a href="http://my.3sixteen.com/c/extranet/home" _fcksavedurl="http://my.3sixteen.com/c/extranet/home"&gt;my.3sixteen.com&lt;/a&gt; became the shopping site using the vanilla Liferay distribution. These two sites are hosted on two different Linux machines, and for all intents and purposes could have resided on different continents.&lt;br /&gt;&lt;br /&gt;They also needed to build a mailing list to collect email addresses for all their interested customers. To accomplish this, they added a JSP pop up box on their Flash site that would tell the portal server to add the email address to a contact in the Address Book portlet.&lt;br /&gt;&lt;br /&gt;The following is a JSP snippet that shows how the guys at 3sixteen leveraged &lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/addressbook/service/http/ABContactServiceHttp.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/addressbook/service/http/ABContactServiceHttp.html"&gt;ABContactServiceHttp&lt;/a&gt; to add a contact.&lt;br /&gt;&lt;br /&gt;&lt;div class="code-fragment"&gt;String URL = "http://my.3sixteen.com";&lt;br /&gt;&lt;br /&gt;HttpPrincipal httpPrincipal = new HttpPrincipal(URL, "joe_bloggs", "password");&lt;br /&gt;&lt;br /&gt;ABContactServiceHttp.addContact(httpPrincipal, firstName, lastName, emailAddress);&lt;/div&gt;&lt;br /&gt;&lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/addressbook/service/http/ABContactServiceHttp.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/addressbook/service/http/ABContactServiceHttp.html"&gt;ABContactServiceHttp&lt;/a&gt; invoked &lt;i&gt;addContact&lt;/i&gt; in &lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/addressbook/service/spring/ABContactServiceUtil.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/addressbook/service/spring/ABContactServiceUtil.html"&gt;ABContactServiceUtil&lt;/a&gt;. The invocation was sent over port 80 and received by http://my.3sixteen.com/tunnel/servlet/AuthTunnelServlet. The application server made sure the authentication matched and then processed ABContactServiceUtil as if the user with the id &lt;b&gt;joe_bloggs&lt;/b&gt; was calling &lt;i&gt;addContact&lt;/i&gt;. ABContactServiceUtil then called &lt;a href="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/addressbook/service/impl/ABContactServiceImpl.html" _fcksavedurl="http://content.liferay.com/4.0.0/docs/api/portal-ejb/com/liferay/portlet/addressbook/service/impl/ABContactServiceImpl.html"&gt;ABContactServiceImpl&lt;/a&gt; to do the actual work. You can trace the logic of this by viewing the source included in the generated JavaDocs.&lt;br /&gt;&lt;br /&gt;Now Joe Bloggs can log into the portal and look in his Address Book portlet to see that he has a new contact. All of the included portlets have this capability because these helper classses are generated. This means you can write applets or any other Java application to access the Session EJBs that contain your business logic. This can be a security hazard if someone had your password, so you can configure to limit the Tunnel Servlet to only listen on certain ports by editing &lt;a href="http://www.blokefood.com/liferay-portal-4.2.1/web/guest/devzone/documentation" _fcksavedurl="/liferay-portal-4.2.1/web/guest/devzone/documentation"&gt;portal.properties&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can also access the Session EJBs over SOAP and RMI. We will post more examples of that shortly.&lt;br /&gt;&lt;br /&gt;&lt;div class="font-xx-large" style="font-weight: bold;"&gt;Application Service Provider&lt;/div&gt;&lt;br /&gt;   &lt;a name="p_56_INSTANCE_9Ecu"&gt;&lt;/a&gt;     &lt;div id="_56_INSTANCE_9Ecu_content0"&gt; &lt;div&gt;Liferay was built from the ground up to be used by application service providers. The following is a sample list of portals running off of one portal instance hitting one database and shows the capabilities of Liferay.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://demo.liferay.net/" _fcksavedurl="http://demo.liferay.net/"&gt;http://demo.liferay.net&lt;/a&gt;&lt;br /&gt;&lt;a href="http://my.ccuc.net/" _fcksavedurl="http://my.ccuc.net/"&gt;http://my.ccuc.net&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.gatewayfriends.org/" _fcksavedurl="http://www.gatewayfriends.org/"&gt;http://www.gatewayfriends.org&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hope-harvest.org/" _fcksavedurl="http://www.hope-harvest.org/"&gt;http://www.hope-harvest.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Users in each of these portals have no information about the other portals. They are separated by domain and each portal exists in its own space based on the company's id.&lt;br /&gt;&lt;br /&gt;See &lt;a href="http://www.blokefood.com/liferay-portal-4.2.1/web/guest/devzone/documentation" _fcksavedurl="/liferay-portal-4.2.1/web/guest/devzone/documentation"&gt;Multiple Portals&lt;/a&gt; for detailed informaton on how to set up multiple instances of Liferay on one machine.&lt;/div&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt;&lt;br /&gt;&lt;/div&gt; &lt;/div&gt;&lt;br /&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/2324423793430033296-8922662366426124473?l=nayan-ambali.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayan-ambali.blogspot.com/feeds/8922662366426124473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayan-ambali.blogspot.com/2009/04/liferay-portal-52.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2324423793430033296/posts/default/8922662366426124473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2324423793430033296/posts/default/8922662366426124473'/><link rel='alternate' type='text/html' href='http://nayan-ambali.blogspot.com/2009/04/liferay-portal-52.html' title='Liferay - Hope of Ray for Open Source Enterprise portal'/><author><name>nayan</name><uri>http://www.blogger.com/profile/09271853998240852770</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://2.bp.blogspot.com/_MRaZ-hk-sk4/SfSIqGXrnjI/AAAAAAAADos/gMOI38kuR0o/S220/DSC02001.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_MRaZ-hk-sk4/SfRVO1G1hhI/AAAAAAAADoI/MxCPxWbqVBs/s72-c/article.gif' height='72' width='72'/><thr:total>1</thr:total></entry></feed>
