<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-6108350062572829885</atom:id><lastBuildDate>Sun, 08 Sep 2024 01:20:09 +0000</lastBuildDate><category>Java</category><category>-C-O-N-C-E-P-T-  Series</category><category>My Explorations</category><category>New innovations around</category><category>A J A X</category><category>Events</category><category>JavaScript</category><category>Technical Talks</category><category>Tomcat</category><category>Eclipse</category><category>General</category><category>J2EE</category><category>My Certifications</category><category>Open Source</category><category>Web Servers</category><category>+ve Tests</category><category>Design Patterns</category><category>JBoss</category><category>JMX</category><category>Log4j</category><category>Non-Technical Talks</category><category>Practice</category><category>Ruby</category><category>SCRUM</category><category>Struts</category><category>Ubuntu</category><title>Head  F i r s t...</title><description></description><link>http://atuls-blogs.blogspot.com/</link><managingEditor>noreply@blogger.com (Atul Shinkar)</managingEditor><generator>Blogger</generator><openSearch:totalResults>67</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-2137792732011148365</guid><pubDate>Thu, 23 Feb 2012 08:05:00 +0000</pubDate><atom:updated>2012-02-24T07:58:05.492+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Design Patterns</category><title>When to use and when not to use a Design Pattern?</title><description>&lt;span style=&quot;font-weight:bold;&quot;&gt;What is a design Pattern?&lt;/span&gt;&lt;br /&gt;A solution to a common problem in object-oriented programming context.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Base requirement is:&lt;/span&gt; We should not complicate the solution, i.e. it should be simple and clean.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;When to use a Design Pattern?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Scenario1&lt;/span&gt;: Starting solution without using any pattern and later you can decide to refactor the solution to add certain design pattern after evaluation, if it is applicable and can be correctly applied.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Scenario2&lt;/span&gt;: When you are pretty sure that you can correctly apply a design pattern, then you can start your solution directly with it or doing some sort of proof-of-concept before starting.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Points that should be remembered here:&lt;/b&gt;&lt;br /&gt;1. Try NOT doing over-engineering of the solution which may complicate it and will result into maintenance nightmare.&lt;br /&gt;2. Follow &lt;a href=&quot;http://en.wikipedia.org/wiki/KISS_principle&quot;&gt;KISS principle&lt;/a&gt;, i.e. keep your solution design simple.&lt;br /&gt;3. Use design pattern only when it&#39;s really needed.&lt;br /&gt;4. Following any given pattern rigidly is not really the answer.&lt;br /&gt;5. Using design patterns is a good coding practice, but again it doesn&#39;t mean that writing a simple and clean solution without any design pattern is bad. We just have to identify the points where in future the application have to be made scalable should not make the simple solution complex. Using design patterns can keep it simple to enhance in future.&lt;br /&gt;&lt;br /&gt;Frankly speaking, the rule is &#39;there is no rule&#39; about when to use and when not to use a Design Pattern. Your experiences (success more than failures) when to use them purely, when to adapt them or when not to use them at all will be a deciding factor here :)&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Happy coding :)&lt;/div&gt;</description><link>http://atuls-blogs.blogspot.com/2012/02/when-to-use-and-when-not-to-use-design.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-5687426356302526541</guid><pubDate>Fri, 10 Feb 2012 06:56:00 +0000</pubDate><atom:updated>2012-02-10T13:31:09.400+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">SCRUM</category><title>Please don&#39;t use the term &quot;Chicken and Pigs&quot; in SCRUM context</title><description>I came to know on one of the website that in SCRUM context, core roles are called as &quot;pigs&quot; and ancillary roles are called as &quot;chickens&quot;. This was named after the story/joke of &lt;a href=&quot;http://www.agilejedi.com/chickenandpig&quot;&gt;Chicken and Pig&lt;/a&gt;. The &quot;chicken-and-pigs&quot; joke was very old many years before it became a foundation of SCRUM, but still this terminology is been used today. The joke is meant to point out the difference between those who are committed on a project and those who are only involved. But it&#39;s ok if these terminologies are kept for understanding the core roles and not so called &#39;defining&#39; them.&lt;br /&gt;&lt;br /&gt;More info on this topic: &lt;a href=&quot;http://agilecoach.typepad.com/agile-coaching/2009/07/stop-calling-people-chickens-and-pigs.html&quot;&gt;Agile Coach&lt;/a&gt;</description><link>http://atuls-blogs.blogspot.com/2012/02/please-dont-use-term-chicken-and-pigs.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-4727564364155823125</guid><pubDate>Mon, 04 Apr 2011 02:43:00 +0000</pubDate><atom:updated>2011-04-04T08:22:28.583+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tomcat</category><title>&quot;SEVERE: Error filterStart&quot; - Occurs when starting Tomcat</title><description>This problem basically occurs when you&#39;ve different java versions for compiling the source code and for starting the Tomcat server.&lt;br /&gt;&lt;br /&gt;Checks you&#39;ve to do:&lt;br /&gt;1. Java version of your IDE with what you compile the source code&lt;br /&gt;2. Java version used by Tomcat&lt;br /&gt;&lt;br /&gt;If the above mismatches, you&#39;ll face the error &quot;SEVERE: Error filterStart&quot; during the Tomcat server start and your web application will not be deployed.</description><link>http://atuls-blogs.blogspot.com/2011/04/severe-error-filterstart-occurs-when.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-7314601138704144013</guid><pubDate>Sun, 13 Mar 2011 08:20:00 +0000</pubDate><atom:updated>2011-03-13T14:12:29.885+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Events</category><title>Attending: DevCamp Pune 2011</title><description>&lt;span style=&quot;font-weight:bold;&quot;&gt;DevCamp Pune - The Developer Community Meet Pune, &lt;br /&gt;April 9th, 2011 | 10:00 am - 6:00 pm&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEishjFz3y7B-hZp-cDESO1_GKOo7Gevtz8oCj_wOMF_goqve0tuOEIHR2rhhvyMO6InAx5gl5XlDxHEAZdH1q0spmgktJK2urC2mS65cCPUrc4hB1d00OAKMknEPIkl4yKkXqCI0izLUS3_/s1600/devcamppune_0.jpg&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;width: 250px; height: 100px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEishjFz3y7B-hZp-cDESO1_GKOo7Gevtz8oCj_wOMF_goqve0tuOEIHR2rhhvyMO6InAx5gl5XlDxHEAZdH1q0spmgktJK2urC2mS65cCPUrc4hB1d00OAKMknEPIkl4yKkXqCI0izLUS3_/s320/devcamppune_0.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5583481999796402674&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://devcamp.in/index.php/Pune/2011/1/Registrations&quot;&gt;Register here&lt;/a&gt;</description><link>http://atuls-blogs.blogspot.com/2011/03/attending-devcamp-pune-2011.html</link><author>noreply@blogger.com (Atul Shinkar)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEishjFz3y7B-hZp-cDESO1_GKOo7Gevtz8oCj_wOMF_goqve0tuOEIHR2rhhvyMO6InAx5gl5XlDxHEAZdH1q0spmgktJK2urC2mS65cCPUrc4hB1d00OAKMknEPIkl4yKkXqCI0izLUS3_/s72-c/devcamppune_0.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-2377724234168272817</guid><pubDate>Sun, 13 Mar 2011 07:33:00 +0000</pubDate><atom:updated>2011-03-13T13:42:16.197+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">-C-O-N-C-E-P-T-  Series</category><category domain="http://www.blogger.com/atom/ns#">Java</category><title>Serializing / De-serializing bean object using XMLEncoder / XMLDecoder</title><description>The &lt;span style=&quot;font-weight:bold;&quot;&gt;&lt;i&gt;java.beans&lt;/i&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; package provides very useful classes [XMLEncoder / XMLDecoder] to save an object state [persist] into an XML file [Serialize] and easily read it back [De-serialize]. It&#39;s very helpful while debugging the state of objects especially in the production environments.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;No need to provide any examples as the below are some useful links that already contains the same:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.exampledepot.com/egs/java.beans/WriteXml.html&quot;&gt;Example Depot&lt;/a&gt; &lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://java.sun.com/products/jfc/tsc/articles/persistence4/&quot;&gt;java.sun.com&lt;/a&gt;&lt;/div&gt;</description><link>http://atuls-blogs.blogspot.com/2011/03/serializing-de-serializing-bean-object.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-8416925049120824346</guid><pubDate>Sat, 20 Nov 2010 04:33:00 +0000</pubDate><atom:updated>2010-11-20T10:38:01.148+05:30</atom:updated><title>Developing distributed apps? Think &quot;JavaSpaces&quot;</title><description>We know that Distributed Computing is all about building network-based applications as a set of processes that are distributed across a network of computing nodes that work together to solve a problem. The advantages of this approach is like performance improvement, resource sharing, fault tolerance, scalability, etc. But still, to achieve this, special care should have to be taken while design and implementation of such systems. There are many challenges in distributed computing like synchronization of process across heterogeneous networks, network latency, partial failures of processes and language incompatibilities.&lt;br /&gt;&lt;br /&gt;JavaSpaces technology, to the rescue...&lt;br /&gt;&lt;br /&gt;1. JavaSpaces is both, distributed programming model and an API. &lt;br /&gt;2. It&#39;s a high-level coordination tool for gluing processes together into a distributed application.&lt;br /&gt;3. JavaSpaces are best considered as distributed shared memory with additional features which provide transactional integrity and support for the handling of failure.&lt;br /&gt;4. In JavaSpaces applications, processes don&#39;t communicate directly, but instead coordinate their activities by exchanging objects through a space, or shared memory.&lt;br /&gt;5. A process can write new objects into a space, take objects from a space, or read (make a copy of) objects in a space as shown in figure below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTRtlIwy9ahwjUS6jKBTOBC5SQ7B6GQrN-qSUtMujjORZT8vK0yGGqRXwEgNua3dliMO0AC7lCgkDtI8EREHb6ySLhP0ufaal26yPg7ZR_QEtrGjkfZKYvPapqgZZJn6kiP8ZBpQ7l9XZZ/s1600/java_spaces.gif&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 199px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTRtlIwy9ahwjUS6jKBTOBC5SQ7B6GQrN-qSUtMujjORZT8vK0yGGqRXwEgNua3dliMO0AC7lCgkDtI8EREHb6ySLhP0ufaal26yPg7ZR_QEtrGjkfZKYvPapqgZZJn6kiP8ZBpQ7l9XZZ/s320/java_spaces.gif&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5541492755554146498&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6. JavaSpaces uses the most common software pattern, the Master-Worker pattern. The Master hands out units of work to the &#39;space&#39;, and these are read, processed and written back to the space by the workers.&lt;br /&gt;&lt;br /&gt;7. JavaSpaces provides a simplified approach to dynamic communication, coordination and sharing of objects between network resources.&lt;br /&gt;&lt;br /&gt;Some useful pointers to know more about JavaSpaces:&lt;br /&gt;&lt;a href=&quot;http://java.sun.com/developer/Books/JavaSpaces/introduction.html&quot;&gt;Link1&lt;/a&gt;, &lt;a href=&quot;http://www.dancres.org/cottage/javaspaces.html&quot;&gt;Link2&lt;/a&gt;, &lt;a href=&quot;http://javaspaces.homestead.com/&quot;&gt;Link3&lt;/a&gt;</description><link>http://atuls-blogs.blogspot.com/2010/11/developing-distributed-apps-think.html</link><author>noreply@blogger.com (Atul Shinkar)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTRtlIwy9ahwjUS6jKBTOBC5SQ7B6GQrN-qSUtMujjORZT8vK0yGGqRXwEgNua3dliMO0AC7lCgkDtI8EREHb6ySLhP0ufaal26yPg7ZR_QEtrGjkfZKYvPapqgZZJn6kiP8ZBpQ7l9XZZ/s72-c/java_spaces.gif" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-2688955732851821427</guid><pubDate>Sat, 20 Nov 2010 04:22:00 +0000</pubDate><atom:updated>2010-11-20T10:03:44.961+05:30</atom:updated><title>Break ke baad</title><description>It&#39;s been long break from my last post... Hope such break doesn&#39;t occur this time round :)</description><link>http://atuls-blogs.blogspot.com/2010/11/break-ke-baad.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-3983402097501351247</guid><pubDate>Mon, 08 Mar 2010 04:26:00 +0000</pubDate><atom:updated>2010-03-08T10:16:08.652+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Events</category><category domain="http://www.blogger.com/atom/ns#">Technical Talks</category><title>TABS Series session on &quot;Agile and Lean Concepts for IT Professionals&quot;</title><description>On Friday, Mar 5th, 2010 attended ThoughtWorks TABS (ThoughtWorks Agile Business Series) session on &quot;Agile and Lean Concepts for IT Professionals&quot;. It was a great piece of experience. They took all the attendees to the actual Project teams and showed how their teams are agile. Followed by that was the session on &quot;Lean Concepts for IT&quot; by Scott Shaw. It was a really informative session.&lt;br /&gt;&lt;br /&gt;Now looking forward for ThoughtWorks Master Class Series talk on &quot;10 Ways to Improve Your Code&quot; by Neal Ford on Wednesday, Mar 10th, 2010.</description><link>http://atuls-blogs.blogspot.com/2010/03/tabs-series-session-on-agile-and-lean.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-1997948714238297801</guid><pubDate>Mon, 16 Nov 2009 10:05:00 +0000</pubDate><atom:updated>2009-11-16T16:35:33.146+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Events</category><category domain="http://www.blogger.com/atom/ns#">Technical Talks</category><title>Intel - Software Developer Supercomputing Conference, 2009</title><description>Today I attended Intel&#39;s - &lt;span style=&quot;font-style: italic; font-weight: bold;&quot;&gt;Software Developer Supercomputing Conference&lt;/span&gt;, 2009. It was a really great conference. Lot of ideas were shared by &lt;span style=&quot;font-family:courier new;&quot;&gt;intel&lt;/span&gt; people like how to improve application performance using threads, libraries (like MKL-Math Kernel Library), using their new products, etc. etc.&lt;br /&gt;&lt;br /&gt;The session was interactive enough and at the last they distributed Intel&#39;s T-shirts :)&lt;br /&gt;&lt;br /&gt;Some useful pointers:&lt;br /&gt;&lt;a href=&quot;http://software.intel.com/en-us/whatif/&quot;&gt;whatif.intel.com&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.ddj.com/go-parallel/&quot;&gt;go-parallel.com&lt;/a&gt;</description><link>http://atuls-blogs.blogspot.com/2009/11/intel-software-developer-supercomputing.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-7490336669176492927</guid><pubDate>Tue, 10 Nov 2009 08:47:00 +0000</pubDate><atom:updated>2012-01-21T10:10:17.162+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">New innovations around</category><category domain="http://www.blogger.com/atom/ns#">Open Source</category><title>...&quot;sixth sense&quot; - yes, it&#39;s coming...</title><description>Today I came across bleeding edge research of the year 2009 - Pranav Mistri&#39;s &quot;sixth sense&quot;. It&#39;s a simple, wearable device that enhances the real world with digital information.&lt;br /&gt;&lt;br /&gt;Great to see future developments in this area..&lt;br /&gt;&lt;br /&gt;&lt;div&gt;You can find more info on his website &lt;a href=&quot;http://www.pranavmistry.com/projects/sixthsense/&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://atuls-blogs.blogspot.com/2009/11/sixth-sense-yes-its-coming.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-3274012437849108502</guid><pubDate>Mon, 09 Nov 2009 08:37:00 +0000</pubDate><atom:updated>2009-11-09T14:14:38.112+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><title>J2SE 5.0 reached its End of Service Life (EOSL) Notice</title><description>On November 3, 2009, J2SE 5.0 reached its End of Service Life (EOSL), which is the date of final publicly available update of version 5.0 (i.e. J2SE 5.0 Update 22).&lt;br /&gt;&lt;br /&gt;You can find more information &lt;a href=&quot;http://java.sun.com/javase/downloads/index_jdk5.jsp&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;Learn more about EOL policy &lt;a href=&quot;http://java.sun.com/products/archive/eol.policy.html&quot;&gt;here&lt;/a&gt;.</description><link>http://atuls-blogs.blogspot.com/2009/11/j2se-50-reached-its-end-of-service-life.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-1419666478966010165</guid><pubDate>Thu, 29 Oct 2009 07:44:00 +0000</pubDate><atom:updated>2009-10-29T13:54:04.548+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Ubuntu</category><title>Ubuntu 9.10 coming...</title><description>&lt;a href=&quot;http://www.ubuntu.com/&quot;&gt;&lt;img src=&quot;http://www.ubuntu.com/files/countdown/static.png&quot; width=&quot;180&quot; height=&quot;150&quot; alt=&quot;Ubuntu: For Desktops, Servers, Netbooks and in the cloud&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</description><link>http://atuls-blogs.blogspot.com/2009/10/ubuntu-910-coming.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-644235698837078499</guid><pubDate>Wed, 23 Sep 2009 18:34:00 +0000</pubDate><atom:updated>2009-09-24T00:13:52.021+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Practice</category><title>Code Kata by Dave Thomas</title><description>Dave Thomas took the idea of coding practice and made something very well, pragmatic out of it.&lt;br /&gt;There are series of &lt;span style=&quot;font-style: italic;&quot;&gt;kata&lt;/span&gt;s, which are small, thought-provoking exercises that programmers can do in the language of their choice.&lt;br /&gt;&lt;br /&gt;You can find it &lt;a href=&quot;http://codekata.pragprog.com&quot;&gt;here&lt;/a&gt;. Really worth giving a try :)</description><link>http://atuls-blogs.blogspot.com/2009/09/code-kata-by-dave-thomas.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-5391700857290025102</guid><pubDate>Fri, 26 Jun 2009 12:57:00 +0000</pubDate><atom:updated>2009-06-26T20:23:38.664+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><title>Chaining methods using power of &quot;return this&quot;</title><description>In one of my older post [&lt;a href=&quot;http://atuls-blogs.blogspot.com/2007/10/implementing-fluent-interface-in-java.html&quot;&gt;here&lt;/a&gt;], I discussed about the power of &lt;span style=&quot;font-weight: bold;&quot;&gt;Fluent Interfaces&lt;/span&gt;. We can use those in building method chaining, thus improving the readability of code just &lt;span style=&quot;font-style: italic;&quot;&gt;english-like&lt;/span&gt; sentences.&lt;br /&gt;&lt;br /&gt;We can also implement this using &quot;return this&quot; in class methods.&lt;br /&gt;&lt;br /&gt;Take a look at below source code:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Bug.java&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLi6PT6WEtyYxbCDDQyKEBNmchitqtveh4acuViDPuhOzozdTWUt9MARaoqMdrohP6gfMGn4bd2O4hmC9EUrlyzCPHiRugGlTS3xlX-PGuT7etDzkRfGDMa8bpsVtgUHnJWfZDv2c4fqO3/s1600-h/Bug.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 155px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLi6PT6WEtyYxbCDDQyKEBNmchitqtveh4acuViDPuhOzozdTWUt9MARaoqMdrohP6gfMGn4bd2O4hmC9EUrlyzCPHiRugGlTS3xlX-PGuT7etDzkRfGDMa8bpsVtgUHnJWfZDv2c4fqO3/s320/Bug.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5351627552583915106&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;CreateBugs.java&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXuCKUMaKKSQcTJM_1-Cm7jt-kXpewrHNQowPssQQ0c7OlI0PQ_7H6cj2lK_sLSaKPHG-pYVk93ahUYU2xjZjRZb6U5pCDJzCt57EwMabz1qVkVAEen7Etd6ZXax8klfQsCBakmArdJwpi/s1600-h/CreateBugs.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 320px; height: 61px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXuCKUMaKKSQcTJM_1-Cm7jt-kXpewrHNQowPssQQ0c7OlI0PQ_7H6cj2lK_sLSaKPHG-pYVk93ahUYU2xjZjRZb6U5pCDJzCt57EwMabz1qVkVAEen7Etd6ZXax8klfQsCBakmArdJwpi/s320/CreateBugs.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5351636822495463730&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Output:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb3Mc_JqMzBL610FEkL1KnPLqNBFVF45I2_NnRYdfbPcZWdLBIswUIH1eIkP59mXUEL0BS2UjidtAW2nD1LtcP5WYYV4semrKSUWpMlAsKjZrfH0wHUWgikoy0i6LUF0FAFwdkamEhPiQc/s1600-h/Output.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 320px; height: 16px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb3Mc_JqMzBL610FEkL1KnPLqNBFVF45I2_NnRYdfbPcZWdLBIswUIH1eIkP59mXUEL0BS2UjidtAW2nD1LtcP5WYYV4semrKSUWpMlAsKjZrfH0wHUWgikoy0i6LUF0FAFwdkamEhPiQc/s320/Output.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5351628076144358066&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The above programs are self explanatory :)</description><link>http://atuls-blogs.blogspot.com/2009/06/chaining-methods-using-power-of-return.html</link><author>noreply@blogger.com (Atul Shinkar)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLi6PT6WEtyYxbCDDQyKEBNmchitqtveh4acuViDPuhOzozdTWUt9MARaoqMdrohP6gfMGn4bd2O4hmC9EUrlyzCPHiRugGlTS3xlX-PGuT7etDzkRfGDMa8bpsVtgUHnJWfZDv2c4fqO3/s72-c/Bug.JPG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-2367998763554721865</guid><pubDate>Mon, 25 May 2009 07:06:00 +0000</pubDate><atom:updated>2009-05-25T15:22:41.074+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><title>To overcome &quot;Maximum open cursors exceeded&quot; issue</title><description>When we execute a query in oracle, a ResultSet is created and stored in the  memory. Oracle allows the programmer to access this ResultSet in the memory  through cursors.&lt;br /&gt;&lt;br /&gt;When we fire SELECT query / DML query from Java code, Oracle returns the reference of this created cursor to the Java program, which we refer as a ResultSet. Following is the hierarchy of creating objects in JDBC:&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDp2uzw_SIlLuTI6x-jEkBTby5QCe-NYxtyTVo_whZJCjIh6_liRy7HrByww-euBSWjpFElWAgf5Ip4szKETsLfbVCb4Q63WGPVawQuT6pPyO2MHI6T1jfwa2PmhxvrnQ5WyL8mDV6zfPv/s1600-h/CreatingJDBCObjects.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 189px; height: 212px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDp2uzw_SIlLuTI6x-jEkBTby5QCe-NYxtyTVo_whZJCjIh6_liRy7HrByww-euBSWjpFElWAgf5Ip4szKETsLfbVCb4Q63WGPVawQuT6pPyO2MHI6T1jfwa2PmhxvrnQ5WyL8mDV6zfPv/s320/CreatingJDBCObjects.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5339659280863142626&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt;[For DML queries, we don&#39;t require &quot;ResultSet&quot; object]&lt;br /&gt;&lt;br /&gt;Now, when we execute this query in loop for multiple records, we can use the same &quot;Connection&quot; object, but we&#39;ll have to close ResultSet object and Statement object at the end of each loop.&lt;br /&gt;&lt;br /&gt;[Here we&#39;re using distributed database connection which means for each request, we create new &quot;Connection&quot; object and after the request is processed, we close this &quot;Connection&quot; object. Now, there might be the case that for one request, we need to fire multiple SELECT / DML queries, so we use the same &quot;Connection&quot; object to process this request.]&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbBUlxTGf5hnOO-9VQYRk9vXjmaW_-z-LMUt38KgfG65nUgz3rxqVKs50H2xyVAz2_bHr56lquj0bPzoync2JV48FJkErgB76QoHAep9NzfS3ETc1HsTpK5oYJzZe_BOum07_ahyJ1m7Ek/s1600-h/CloseJDBCObjects1.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 188px; height: 167px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbBUlxTGf5hnOO-9VQYRk9vXjmaW_-z-LMUt38KgfG65nUgz3rxqVKs50H2xyVAz2_bHr56lquj0bPzoync2JV48FJkErgB76QoHAep9NzfS3ETc1HsTpK5oYJzZe_BOum07_ahyJ1m7Ek/s320/CloseJDBCObjects1.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5339661480125436578&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;Closing ResultSet object and Statement object at the end of each loop will make sure that the cursors opened by executing this query will be closed / released.&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;br /&gt;[For DML queries, we need to close only &quot;Statement&quot; object].&lt;br /&gt;&lt;br /&gt;Finally we close the connection object when we finish executing the queries in loop.&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtMW3RnGnLA0qdqGmC43BhLmlelvcYK12mzdS6Us2JJ45Z1tvhq_bR77xHOSzKuzIaXUGNr-MfhYWzqGZ6Ahf8zVbu4R2cC63-LCvagOP-5snwSAKK4fmuLk9e0WqSjqEcNB1O_rkXQY-J/s1600-h/CloseJDBCObjects2.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 188px; height: 39px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtMW3RnGnLA0qdqGmC43BhLmlelvcYK12mzdS6Us2JJ45Z1tvhq_bR77xHOSzKuzIaXUGNr-MfhYWzqGZ6Ahf8zVbu4R2cC63-LCvagOP-5snwSAKK4fmuLk9e0WqSjqEcNB1O_rkXQY-J/s320/CloseJDBCObjects2.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5339663050232598610&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt; All the resources (including cursors) are released when the &quot;Connection&quot; object is closed. &lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Following this, we&#39;ll never encounter &quot;Maximum open cursors exceeded&quot; issue in any application :)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://atuls-blogs.blogspot.com/2009/05/to-overcome-maximum-open-cursors-issue.html</link><author>noreply@blogger.com (Atul Shinkar)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDp2uzw_SIlLuTI6x-jEkBTby5QCe-NYxtyTVo_whZJCjIh6_liRy7HrByww-euBSWjpFElWAgf5Ip4szKETsLfbVCb4Q63WGPVawQuT6pPyO2MHI6T1jfwa2PmhxvrnQ5WyL8mDV6zfPv/s72-c/CreatingJDBCObjects.JPG" height="72" width="72"/><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-5500246719203218602</guid><pubDate>Wed, 11 Feb 2009 09:01:00 +0000</pubDate><atom:updated>2009-02-11T16:10:51.554+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">My Explorations</category><title>Maintaining and Managing variables stored in application&#39;s session</title><description>In one of our project, we were storing frequently used application related data into the session, but now as the project is growing incrementally, storing new data / modifying existing data into session has became very confusing and difficult to manage.&lt;br /&gt;&lt;br /&gt;I was just thinking about the workaround for coming out of this havoc, and voila, I got one :). This workaround I&#39;ve implemented in our project. I would like to share the idea which brought us out of this mess.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; font-style: italic;&quot;&gt;Idea (Workaround):&lt;/span&gt; &lt;span style=&quot;color: rgb(153, 0, 0);font-size:85%;&quot; &gt;&lt;span style=&quot;font-family:verdana;&quot;&gt;We can use one singleton java class, which has one HashMap variable. There will be custom methods for getting, setting and removing (operations same as that of session operations) values from HashMap. Now we can use this implementation for storing data (which was supposed to be stored into the session) into the HashMap present in this class, and then we can put the object of this java class (we&#39;ll be having one object for each session) into the session. So, at the session level, there will be only one object present in the session, and now it&#39;s lot easy to maintain and manage session variables (now HashMap data). Also, there will be only two session operations in each class, first: getting this java class object from session, second: storing back this java class object back to the session.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Implementing this thing was really fun and gave us lot of flexibility to maintain and manage session variables... :)</description><link>http://atuls-blogs.blogspot.com/2009/02/maintaining-and-managing-variables.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-9217605057672057057</guid><pubDate>Thu, 05 Feb 2009 13:40:00 +0000</pubDate><atom:updated>2009-02-05T20:50:42.669+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">-C-O-N-C-E-P-T-  Series</category><category domain="http://www.blogger.com/atom/ns#">Java</category><title>-C-O-N-C-E-P-T- Series : Java</title><description>Difference between using &lt;span style=&quot;font-weight: bold;&quot;&gt;&quot;&quot;&lt;/span&gt; and &lt;span style=&quot;font-weight: bold;&quot;&gt;toString()&lt;/span&gt; method for converting object value to String:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Case I&lt;/span&gt; - &lt;span style=&quot;font-weight: bold;&quot;&gt;Using &quot;&quot;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;BigDecimal dec = new BigDecimal(&quot;1234567&quot;);&lt;br /&gt;String str = &quot;&quot; + dec; // converting dec to String&lt;br /&gt;System.out.println(&quot;str: &quot;+str);&lt;br /&gt;&lt;br /&gt;o/p:&lt;br /&gt;str: 1234567&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;BigDecimal dec = null;&lt;br /&gt;String str = &quot;&quot; + dec; // converting dec to String&lt;br /&gt;System.out.println(&quot;str: &quot;+str);&lt;br /&gt;&lt;br /&gt;o/p:&lt;br /&gt;str: null&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Case II&lt;/span&gt; - &lt;span style=&quot;font-weight: bold;&quot;&gt;Using toString() method:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;BigDecimal dec = new BigDecimal(&quot;1234567&quot;);&lt;br /&gt;String str = null;&lt;br /&gt;&lt;br /&gt;if( dec!=null ) {&lt;br /&gt;      str = dec.toString(); // converting dec to String&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;System.out.println(&quot;str: &quot;+str);&lt;br /&gt;&lt;br /&gt;o/p:&lt;br /&gt;str: 1234567&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;BigDecimal dec = null;&lt;br /&gt;String str = null;&lt;br /&gt;&lt;br /&gt;if( dec!=null ) {&lt;br /&gt;&lt;div style=&quot;text-align: left;&quot;&gt;       str = dec.toString(); // converting dec to String&lt;br /&gt;&lt;/div&gt;}&lt;br /&gt;&lt;br /&gt;System.out.println(&quot;str: &quot;+str);&lt;br /&gt;&lt;br /&gt;o/p:&lt;br /&gt;str: null&lt;br /&gt;-----------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;In first case, we don&#39;t require &lt;span style=&quot;font-style: italic;&quot;&gt;null&lt;/span&gt; check, but doesn&#39;t has readability.&lt;br /&gt;In second case, we require &lt;span style=&quot;font-style: italic;&quot;&gt;null&lt;/span&gt; check, but has readability.&lt;br /&gt;&lt;br /&gt;Each one has its own ease of use.</description><link>http://atuls-blogs.blogspot.com/2009/02/c-o-n-c-e-p-t-series-java.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-3355498550923401812</guid><pubDate>Sat, 03 Jan 2009 12:29:00 +0000</pubDate><atom:updated>2009-02-11T15:07:18.425+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">My Explorations</category><title>Custom Map Implementation in Java</title><description>Blogging after a long-long-long-... time :)&lt;br /&gt;&lt;br /&gt;When we fetch records from HashMap, it gives records according to hash code, i.e. the records returned are not in the order when they&#39;re placed in the Map.&lt;br /&gt;&lt;br /&gt;When we fetch records from TreeMap, it gives records in the sorted order of key, i.e. the records returned are not in the order when they&#39;re placed in the Map.&lt;br /&gt;&lt;br /&gt;What I want was a Map that should return sequential values/objects that are put into when they&#39;re fetched. So, why not to make our own custom implementation of Map that does what is needed.&lt;br /&gt;&lt;br /&gt;I constructed following Custom Map Implementation. Please find the code below:&lt;br /&gt;&lt;br /&gt;CustomMapImpl.java&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG6qChX49F22pEHW17PSfYR7DaOkcTBKsv67oC7XW09yYb95sFJ2vS5_gGj7CQXQFOgQnPgCpdnoWgn7xhGl6LTqPk3Ge0QYO9LtdacTOTKT4U_6H-mXo_mL0CQgYf5im7COwkwkhLprYP/s1600-h/CustomMapImpl.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 180px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG6qChX49F22pEHW17PSfYR7DaOkcTBKsv67oC7XW09yYb95sFJ2vS5_gGj7CQXQFOgQnPgCpdnoWgn7xhGl6LTqPk3Ge0QYO9LtdacTOTKT4U_6H-mXo_mL0CQgYf5im7COwkwkhLprYP/s320/CustomMapImpl.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5287042673850524642&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;===&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Supporting Class:&lt;/span&gt; CustomEntrySetImpl.java&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc7fY_DExouQxL1Ka6AwscjjjlJnb4KPZl5pUgjssOp3e7c82ttNrXu6xW26-vf8HiGvqEFDwZT8cPr-5vSpWv5n7uvZUWt8SOKiqIYTLW8Nmj9TypDEPTx1L-OorCXvTjFEdzIiu_jR9-/s1600-h/CustomEntrySetImpl.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 153px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc7fY_DExouQxL1Ka6AwscjjjlJnb4KPZl5pUgjssOp3e7c82ttNrXu6xW26-vf8HiGvqEFDwZT8cPr-5vSpWv5n7uvZUWt8SOKiqIYTLW8Nmj9TypDEPTx1L-OorCXvTjFEdzIiu_jR9-/s320/CustomEntrySetImpl.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5287044458825266770&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;===&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Output of above program:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;key1 : value1&lt;br /&gt;key2 : value2&lt;br /&gt;key4 : value4&lt;br /&gt;key5 : value5&lt;br /&gt;key6 : value6&lt;br /&gt;key7 : value7&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;It was a very great experience. I also digged into the actual Java Map source code which was an amazing experience.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTtLwPnVVsmDYrC-CUMLo4pjJ_GFNk-bRuEMKTdeyLdWYMb6eUUbVSsQb-8GAV4VvdCLQkvnx147yzCAmcHVNaZvYbx2D5LQio9uDutDyZz-VnDDvPKM4UJMTEmpG8MB2AHY1XglW7xGDn/s1600-h/Happy+New+Year+2009.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 198px; height: 39px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTtLwPnVVsmDYrC-CUMLo4pjJ_GFNk-bRuEMKTdeyLdWYMb6eUUbVSsQb-8GAV4VvdCLQkvnx147yzCAmcHVNaZvYbx2D5LQio9uDutDyZz-VnDDvPKM4UJMTEmpG8MB2AHY1XglW7xGDn/s320/Happy+New+Year+2009.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5287047567829842610&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</description><link>http://atuls-blogs.blogspot.com/2009/01/custom-map-implementation-in-java.html</link><author>noreply@blogger.com (Atul Shinkar)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG6qChX49F22pEHW17PSfYR7DaOkcTBKsv67oC7XW09yYb95sFJ2vS5_gGj7CQXQFOgQnPgCpdnoWgn7xhGl6LTqPk3Ge0QYO9LtdacTOTKT4U_6H-mXo_mL0CQgYf5im7COwkwkhLprYP/s72-c/CustomMapImpl.jpg" height="72" width="72"/><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-113145829983955782</guid><pubDate>Wed, 27 Aug 2008 10:52:00 +0000</pubDate><atom:updated>2008-08-28T11:01:43.587+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><title>Using &quot;synchronization&quot; effectively</title><description>&lt;span style=&quot;font-style:italic;&quot;&gt;&quot;Synchronization is anti-performance. So how can we use synchronization and still optimize on performance? So apply synchronization where it is absolutely necessary, or as minimum as possible.&quot;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We&#39;ll consider following two code snippets:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Scenario: Creating/accessing singleton object&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Method level synchronization:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcwwDs94D6Zw8rMn1GvrQl0_t6QuNn0-2sI91NCn9_Wb0_SHUI7Nddmg2GVRWTPuO_Gk-6Q0c5RN5jN4z1Rs7abX1ndH6zPfaPhgPbdqlZXRDww3hp1piE07EKOrMv0RB27KE7Ny_BqL7b/s1600-h/class1.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcwwDs94D6Zw8rMn1GvrQl0_t6QuNn0-2sI91NCn9_Wb0_SHUI7Nddmg2GVRWTPuO_Gk-6Q0c5RN5jN4z1Rs7abX1ndH6zPfaPhgPbdqlZXRDww3hp1piE07EKOrMv0RB27KE7Ny_BqL7b/s320/class1.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5239161197002808258&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see, the &quot;synchronized&quot; keyword is used at method level. So, now in multi-threaded environment, multiple threads accessing the getInstance() method will be queued-in. Following figure shows the scenario:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic3yTjQD3iOSBTDAzNOdDwRC1GOFq40iAviN_vyOgCXIzqlcs1yxNVCCxh-h84OZFTiJdmpG8bwbbunDcYWD7Bk8Znct_qOYEtNN_8B9vwzumXG6Zc03M345gftBr7-ATUghin1EpB2oUB/s1600-h/class1-effect.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEic3yTjQD3iOSBTDAzNOdDwRC1GOFq40iAviN_vyOgCXIzqlcs1yxNVCCxh-h84OZFTiJdmpG8bwbbunDcYWD7Bk8Znct_qOYEtNN_8B9vwzumXG6Zc03M345gftBr7-ATUghin1EpB2oUB/s320/class1-effect.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5239164837467480498&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As shown in above figure, thread &quot;t1&quot; (the thread that is allowed to enter the getInstance() method first) will create the first object of &quot;DemoClass&quot; class and other threads will just get the reference of that singleton object which was created by thread &quot;t1&quot;. Now this will definitely hamper the application&#39;s performance as every thread after &quot;t1&quot; will be queued-in, as there is no need after the singleton object is been created. So, we can use &quot;synchronized&quot; at block level which will reduce this performance bottle-neck. How, we&#39;ll see it soon :)&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Block level synchronization:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWvFKPcu5Hv1VKIW_5mAEuRUypahQJOrJAR4Q6YV9j6FsYaetKV8GWEGprSaMJc89V06czSzt6bV-qG144m3bi_43h0vsarLycbxxCTv075O7y0p1DCFMFtSahx8_fYKhN5sovi506dkZA/s1600-h/class2.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWvFKPcu5Hv1VKIW_5mAEuRUypahQJOrJAR4Q6YV9j6FsYaetKV8GWEGprSaMJc89V06czSzt6bV-qG144m3bi_43h0vsarLycbxxCTv075O7y0p1DCFMFtSahx8_fYKhN5sovi506dkZA/s320/class2.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5239178114860831698&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see, the &quot;synchronized&quot; keyword is used at block level. So, now in multi-threaded environment, multiple threads accessing the getInstance() method will &lt;span style=&quot;font-style:italic;&quot;&gt;NOT&lt;/span&gt; be queued-in. Following figure shows the scenario:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZV5qdkrHh7GbnRSIBHkdSb13psFZsmq57kyhHcooxBzg4xT6NHTZU6PUJ0mRZ9-ZQyIx6I3IUcF2qX6523lrDm7SIoBTN6CD1kDylxuSUDscolsivYNzgGJNJRVlR3TK6WP5HZ88bo841/s1600-h/class2-effect.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZV5qdkrHh7GbnRSIBHkdSb13psFZsmq57kyhHcooxBzg4xT6NHTZU6PUJ0mRZ9-ZQyIx6I3IUcF2qX6523lrDm7SIoBTN6CD1kDylxuSUDscolsivYNzgGJNJRVlR3TK6WP5HZ88bo841/s320/class2-effect.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5239180041013079474&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As shown in above figure, multiple threads can simultaneously access the getInstance() method. But, it can be that more than one threads can simultaneously hit the first &quot;if statement&quot;. So, we can use &quot;synchronized&quot; keyword inside &quot;if&quot; such that those number of threads which are arrived parallel-ly can be queued-in. The second &quot;if statement&quot; makes sure that only one object is created as we&#39;re dealing with singleton class. Now, multiple threads can parallel-ly access the getInstance() method to get the reference of a singleton object. This removes the performance bottle-neck as mentioned in the above scenario.&lt;br /&gt;&lt;br /&gt;Cool concept, isn&#39;t it :)</description><link>http://atuls-blogs.blogspot.com/2008/08/using-synchronization-effectively.html</link><author>noreply@blogger.com (Atul Shinkar)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcwwDs94D6Zw8rMn1GvrQl0_t6QuNn0-2sI91NCn9_Wb0_SHUI7Nddmg2GVRWTPuO_Gk-6Q0c5RN5jN4z1Rs7abX1ndH6zPfaPhgPbdqlZXRDww3hp1piE07EKOrMv0RB27KE7Ny_BqL7b/s72-c/class1.JPG" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-7097485709589662141</guid><pubDate>Thu, 31 Jul 2008 05:02:00 +0000</pubDate><atom:updated>2009-02-11T15:07:41.095+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">J2EE</category><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">My Explorations</category><title>Updating the state of a Singleton Object after specific interval of time</title><description>I&#39;ve created a Singleton Object which holds some values which are fetched from the database table. Following are the class specs:&lt;br /&gt;&lt;br /&gt;1) All setter methods are private&lt;br /&gt;2) All getter methods are public&lt;br /&gt;3) One configuration method that sets all the values in the related attributes of class using their private setters&lt;br /&gt;&lt;br /&gt;The need was to update the state of this singleton object when there are any changes made in the configuration table in the database. But to achieve this, I need to restart the server each time when any changes has been made in the configuration table.&lt;br /&gt;&lt;br /&gt;So I created one WatchDog class in a thread that continuously changes the state of a singleton configuration object after a specific interval of time, &amp;amp; this time interval in-turn is fetched dynamically from the same configuration table from the database :)</description><link>http://atuls-blogs.blogspot.com/2008/07/updating-state-of-singleton-object.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-5717411892405839812</guid><pubDate>Tue, 22 Jul 2008 02:12:00 +0000</pubDate><atom:updated>2009-02-11T15:08:37.610+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">Log4j</category><category domain="http://www.blogger.com/atom/ns#">My Explorations</category><title>Some experience with Log4j</title><description>I was doing some basic practice programs which implements Log4j for logging. I was getting following warning message on the console. Here I was using &lt;span style=&quot;font-style: italic;&quot;&gt;PropertyConfigurator&lt;/span&gt; to configure Log4j using the &lt;span style=&quot;font-weight: bold;&quot;&gt;log4j.properties&lt;/span&gt; file.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfZTPUQBuNw7vWG2LvH3j04RktRHDq8T3MOXh_cPCFREJUSHDQa0RtXma2KfXJzyFUtxP1kmEsZh6E_nAE8NWXdwOV1EcTimnqC_RwT64cN38ar_VOM1KwWsXGNUZsiXgWcdGqUE_lC6RE/s1600-h/warning_message.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfZTPUQBuNw7vWG2LvH3j04RktRHDq8T3MOXh_cPCFREJUSHDQa0RtXma2KfXJzyFUtxP1kmEsZh6E_nAE8NWXdwOV1EcTimnqC_RwT64cN38ar_VOM1KwWsXGNUZsiXgWcdGqUE_lC6RE/s320/warning_message.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5225658713284633522&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I found the description about the above warning on many of the technical forums which gave a reason that this warning occurs when the &lt;span style=&quot;font-weight: bold;&quot;&gt;log4j.properties&lt;/span&gt; file has not been found by the program in the specified path.&lt;br /&gt;&lt;br /&gt;But if that was the case, I purposely tried giving wrong file path to the same program, and whoa I got the following exception:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT1V-AHO5vtiL3pxuy2M_62nYhJm3X5Tk-V-9YXYPAdV4ZJUo0fl8i7vkGJFIBAdhBBL83rtDuZl7XH_F5Kmx-G5IBFGxQ5ibtsN8FEXxEQDVo57SZ5zqohEzF26TdA-Xefiz_0apXtOZs/s1600-h/exception_message.JPG&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT1V-AHO5vtiL3pxuy2M_62nYhJm3X5Tk-V-9YXYPAdV4ZJUo0fl8i7vkGJFIBAdhBBL83rtDuZl7XH_F5Kmx-G5IBFGxQ5ibtsN8FEXxEQDVo57SZ5zqohEzF26TdA-Xefiz_0apXtOZs/s320/exception_message.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5225660816606297090&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Later I found that there was a small spelling mistake in my &lt;span style=&quot;font-weight: bold;&quot;&gt;log4j.properties&lt;/span&gt; file, due to which it was failing to initialize the log4j system. So, when I corrected that mistake &amp;amp; tried to run the program, I got the expected output :)</description><link>http://atuls-blogs.blogspot.com/2008/07/some-experience-with-log4j.html</link><author>noreply@blogger.com (Atul Shinkar)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfZTPUQBuNw7vWG2LvH3j04RktRHDq8T3MOXh_cPCFREJUSHDQa0RtXma2KfXJzyFUtxP1kmEsZh6E_nAE8NWXdwOV1EcTimnqC_RwT64cN38ar_VOM1KwWsXGNUZsiXgWcdGqUE_lC6RE/s72-c/warning_message.JPG" height="72" width="72"/><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-5237584573598521636</guid><pubDate>Thu, 03 Jul 2008 10:05:00 +0000</pubDate><atom:updated>2008-07-07T15:54:14.127+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">-C-O-N-C-E-P-T-  Series</category><category domain="http://www.blogger.com/atom/ns#">Java</category><title>-C-O-N-C-E-P-T- Series : Java</title><description>&lt;span style=&quot;font-weight:bold;&quot;&gt;Synchronizing a static method and its effect in the multi-threading environment:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since static code can modify only the static data, you will protect a static data with synchronized keyword. We know that static data and methods have only one copy for all the objects of that class. Therefore, you only need one lock per class to synchronize static methods. Object locks are not required for static methods. Static methods use a class lock for synchronization. This special lock is also an object lock.&lt;br /&gt;&lt;br /&gt;Consider following java code:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpjvuUJtNl-vxc8KvOZfbB4NJ7NmpPeigLG2uB3VHBVzndovWe4LBXk9r3OJdL3TjYYEdqmm381UXGy5ul8ApXxHr9pKVI8wQNf9it1f1TGPYobEALnUKZ5QtDxW4B3t40wL415uX97epm/s1600-h/class_not_thread-safe.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpjvuUJtNl-vxc8KvOZfbB4NJ7NmpPeigLG2uB3VHBVzndovWe4LBXk9r3OJdL3TjYYEdqmm381UXGy5ul8ApXxHr9pKVI8wQNf9it1f1TGPYobEALnUKZ5QtDxW4B3t40wL415uX97epm/s320/class_not_thread-safe.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5218766650963378114&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Fig1&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1MS3_4rq3boJQOZBxQYIE9qVuLbthYcoxbwWkOZ-AdYcCceQ3vjCOYqotglzU6LCrJeWixoU54wKSkOvi4wnz8PyKXlGqZVa-oWoRR3ouCr85_lLEDMskKvTwdYjcg8jxXLp5iOiOs360/s1600-h/class_thread-safe.JPG&quot;&gt;&lt;img style=&quot;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1MS3_4rq3boJQOZBxQYIE9qVuLbthYcoxbwWkOZ-AdYcCceQ3vjCOYqotglzU6LCrJeWixoU54wKSkOvi4wnz8PyKXlGqZVa-oWoRR3ouCr85_lLEDMskKvTwdYjcg8jxXLp5iOiOs360/s320/class_thread-safe.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5219028579123908914&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Fig2&lt;br /&gt;&lt;br /&gt;Both the figure above are self explanatory, but I would like to elaborate more on Fig2. When we synchronize an instance method, the thread accessing that method acquires &lt;span style=&quot;font-style:italic;&quot;&gt;&quot;Object Lock&quot;&lt;/span&gt; on the object such that no other thread can access that method unless it completes its execution. Now for &quot;synchronized static&quot; method, it acquires &lt;span style=&quot;font-style:italic;&quot;&gt;&quot;Class Lock&quot;&lt;/span&gt; on that class. This &lt;span style=&quot;font-style:italic;&quot;&gt;class lock&lt;/span&gt; also implicitly has &lt;span style=&quot;font-style:italic;&quot;&gt;object lock&lt;/span&gt;, it&#39;s because as non-static methods can modify static variables, so we need to also put a lock on synchronized instance variables &amp; this is internally done by the class lock.&lt;br /&gt;Hence if one thread is executing a static synchronized method of a class then it holds a lock on all other synchronized methods of that class and in effect no other thread can call any of the synchronized static methods of that class until this current thread releases the lock.&lt;br /&gt;&lt;br /&gt;This concept is really very interesting to learn :)&lt;br /&gt;&lt;br /&gt;Stay tuned... :)</description><link>http://atuls-blogs.blogspot.com/2008/07/c-o-n-c-e-p-t-series-java.html</link><author>noreply@blogger.com (Atul Shinkar)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpjvuUJtNl-vxc8KvOZfbB4NJ7NmpPeigLG2uB3VHBVzndovWe4LBXk9r3OJdL3TjYYEdqmm381UXGy5ul8ApXxHr9pKVI8wQNf9it1f1TGPYobEALnUKZ5QtDxW4B3t40wL415uX97epm/s72-c/class_not_thread-safe.JPG" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-707657885041177557</guid><pubDate>Thu, 26 Jun 2008 09:41:00 +0000</pubDate><atom:updated>2008-06-26T16:01:25.311+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">-C-O-N-C-E-P-T-  Series</category><category domain="http://www.blogger.com/atom/ns#">Web Servers</category><title>-C-O-N-C-E-P-T- Series : Protocols for interfacing interactive web applications with web servers</title><description>&lt;span style=&quot;font-style:italic;&quot;&gt;In continuation with my previous post [&lt;a href=&quot;http://atuls-blogs.blogspot.com/2008/06/c-o-n-c-e-p-t-series-web-http-server.html&quot;&gt;here&lt;/a&gt;]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Following are different protocols for interfacing interactive web applications with web servers: SSI, CGI, SCGI, FastCGI, PHP, Java Servlet, JavaServer Pages, ASP, ASP .NET&lt;br /&gt;&lt;br /&gt;(1) &lt;span style=&quot;font-weight:bold;&quot;&gt;FastCGI&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Web servers using this protocol:&lt;/span&gt; Nginx, Apache HTTP server (partial), Lighttpd (partial), etc.&lt;br /&gt;&lt;br /&gt;(2) &lt;span style=&quot;font-weight:bold;&quot;&gt;Java Servlet &amp; JavaServer Pages&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Web servers using this protocol:&lt;/span&gt; Apache Tomcat, WebLogic, WebSphere, etc.&lt;br /&gt;&lt;br /&gt;(3) &lt;span style=&quot;font-weight:bold;&quot;&gt;ASP &amp; ASP .NET&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Web server using this protocol:&lt;/span&gt; Microsoft IIS</description><link>http://atuls-blogs.blogspot.com/2008/06/c-o-n-c-e-p-t-series-protocols-for.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-127771419734660081</guid><pubDate>Thu, 26 Jun 2008 08:04:00 +0000</pubDate><atom:updated>2009-02-11T15:09:13.913+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">My Explorations</category><category domain="http://www.blogger.com/atom/ns#">Web Servers</category><title>Deployed static web application on &quot;NGINX&quot; HTTP server</title><description>&lt;span style=&quot;font-weight: bold;&quot;&gt;NGINX&lt;/span&gt; which stands for &lt;span style=&quot;font-style: italic;&quot;&gt;&quot;ENGINE X&quot; &lt;/span&gt;is a light weight HTTP server which serves static content (normal HTML pages) efficiently. I was doing some R&#39;n&#39;D from yesterday and was successful in deploying my first Static Web Application on nginx server. Really it was a great experience.&lt;br /&gt;&lt;br /&gt;There is some sort of small configuration which is need to be done in &lt;span style=&quot;font-style: italic;&quot;&gt;&quot;nginx.conf&quot;&lt;/span&gt; to navigate between the static pages. You just need to understand the basics of these entries and there you&#39;re with the running application on nginx server :)&lt;br /&gt;&lt;br /&gt;Some useful pointers:&lt;br /&gt;&lt;a href=&quot;http://nginx.net/&quot;&gt;http://nginx.net&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.kevinworthington.com/&quot;&gt;http://www.kevinworthington.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Stay tuned... :)</description><link>http://atuls-blogs.blogspot.com/2008/06/deployed-static-web-application-on.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-6108350062572829885.post-4542936502426951038</guid><pubDate>Wed, 25 Jun 2008 09:56:00 +0000</pubDate><atom:updated>2008-06-26T12:13:46.122+05:30</atom:updated><category domain="http://www.blogger.com/atom/ns#">-C-O-N-C-E-P-T-  Series</category><category domain="http://www.blogger.com/atom/ns#">Tomcat</category><title>-C-O-N-C-E-P-T- Series : Web / HTTP Server, Sevlet Container and Application Server</title><description>&lt;span style=&quot;font-weight:bold;&quot;&gt;Static Web / HTTP server:&lt;/span&gt; It is responsible for handling HTTP requests and sending back static files as HTTP responses&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Examples:&lt;/span&gt; Apache, lighttpd, nginx, Microsoft IIS, etc.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Servlet container:&lt;/span&gt; It handles HTTP requests but also add layers to process those requests, wrap them around Java objects that implement well defined interfaces and implement the servlet container architecture so that a java developer can easily use the API to respond to the requests, manage sessions, cookies, receive GET &amp; POST params, and many more.&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Examples:&lt;/span&gt; Apache Tomcat, etc.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Application server:&lt;/span&gt; It&#39;s more than the web server and servlet container. You can find lot of information &lt;a href=&quot;http://en.wikipedia.org/wiki/Application_server&quot;&gt;here&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;font-style:italic;&quot;&gt;Examples:&lt;/span&gt; JBoss, WebLogic, WebSphere, etc.</description><link>http://atuls-blogs.blogspot.com/2008/06/c-o-n-c-e-p-t-series-web-http-server.html</link><author>noreply@blogger.com (Atul Shinkar)</author><thr:total>2</thr:total></item></channel></rss>