<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-637499528247154499</atom:id><lastBuildDate>Tue, 31 Jan 2012 05:41:13 +0000</lastBuildDate><category>Tomcat</category><category>Collections</category><category>JSP</category><category>Linux</category><category>Hadoop</category><category>GlassFish</category><category>AJAX</category><category>How-To</category><category>Obfuscation</category><category>Hacking</category><category>Tips</category><category>.Popular</category><category>Liferay</category><category>CDN</category><category>Java</category><category>.Upcoming</category><category>Interview</category><category>OpenSource</category><category>Tutorials</category><category>Exception Handling</category><category>Struts 2</category><category>JDBC</category><category>Example Code</category><title>FromDev</title><description>FromDev is a technology blog about Programming, Web Development, Tips &amp;amp; Tutorials created by Sachin.</description><link>http://www.fromdev.com/</link><managingEditor>noreply@blogger.com (Sachin)</managingEditor><generator>Blogger</generator><openSearch:totalResults>62</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><feedburner:info uri="fromdev" /><feedburner:emailServiceId>Fromdev</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SearchEngineLucene" /><feedburner:info uri="searchenginelucene" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-572432562494764146</guid><pubDate>Sat, 21 Jan 2012 16:55:00 +0000</pubDate><atom:updated>2012-01-21T08:55:55.968-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">OpenSource</category><category domain="http://www.blogger.com/atom/ns#">Tips</category><title>5 Excellent Opensource Database Change Management tool for complex projects</title><description>Database change management tools are of great help to developers and database administrators. These tools increase the efficiency of their work. Earlier database administrators used command lines to delete, create and edit databases. However now with the introduction of Database Change Management tools, the work load of the DBA’s has reduced considerably. &lt;br /&gt;
&lt;br /&gt;
Below are given 7 different types of open source database change management tools which are of great help to the DBA’s:  &lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ol&gt;&lt;h2&gt;
&lt;li&gt;&lt;a name="liquibase" href="http://www.liquibase.org" title="LIQUIBASE" &gt;LIQUIBASE&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-rZIKtTFx99M/TxrttaeCTwI/AAAAAAAAAxg/jFYpXbqTCUc/s1600/sql-database.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="118" width="200" src="http://4.bp.blogspot.com/-rZIKtTFx99M/TxrttaeCTwI/AAAAAAAAAxg/jFYpXbqTCUc/s200/sql-database.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Liquibase is an open source (Apache 2.0 Licensed), database-independent library for tracking, managing and applying database changes.  LIQUIBASE is used by developers in locating and making amendments in the database. The track of all these changes are maintained in an XML file (database changelog file) which serves to overview the list of changes made. It is compatible with any database which java can easily connect to.   &lt;h3&gt;Key Features&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Efficiently manage multiple databases &lt;/li&gt;
&lt;li&gt;Extensible to make changes &lt;/li&gt;
&lt;li&gt;Able to keep a track record of database changes&lt;/li&gt;
&lt;li&gt; Execution can take place through Maven, command line, Ant etc.  &lt;/ul&gt;Download is available at  &lt;a href="http://www.liquibase.org/download"&gt;http://www.liquibase.org/download&lt;/a&gt;   &lt;div class="clear"&gt;&lt;/div&gt;&lt;h2&gt;
&lt;li&gt;&lt;a name="dbdeploy" href="http://dbdeploy.com/" title="DBDeploy" &gt;DBDeploy&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;Designed by a team of professionals at “Thoughworks”, this database change management tool is basically used by developers to manage and enhance their database designs. It is much more useful for those who refactor their database more often. Dbdeploy has employed java for its code construction and unifies with Sybase and Hypersonic SQL databases, Apache Ant build tool supporting Oracle. &lt;h3&gt;Key Features&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Simple to use&lt;/li&gt;
&lt;li&gt;Works well with Ant&lt;/li&gt;
&lt;/ul&gt;Download is available at &lt;a href="http://code.google.com/p/dbdeploy/downloads/list"&gt;http://code.google.com/p/dbdeploy/downloads/list&lt;/a&gt;   &lt;div class="clear"&gt;&lt;/div&gt;&lt;h2&gt;
&lt;li&gt;&lt;a name="ruckusing" href="https://github.com/ruckus/ruckusing-migrations" title="Ruckusing" &gt;Ruckusing&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;This database tool is a frame of reference written in PHP5. Its use is to create and manage “database migrations”. These “database migrations” are files that define the present status of a database like its indexes, columns etc. The salient feature of this database is that multiple users can simultaneously work on the same application. In case of a crash by an individual the other users shall not be disrupted. The idea of the framework was influenced from the migration system built into Ruby on Rails. Any one who is familiar with Migrations in RoR will be able to use this quickly   &lt;h3&gt;Key Features&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Portability: The migration files are initially written in PHP5 which are further translated to appropriate SQL during runtime.  Thus providing an option of supporting any RDBMS with a single migration file.&lt;/li&gt;
&lt;li&gt;The ability to move (up and down) to particular migration state&lt;/li&gt;
&lt;/ul&gt;Download is available at  &lt;a href="https://github.com/ruckus/ruckusing-migrations/downloads"&gt;https://github.com/ruckus/ruckusing-migrations/downloads&lt;/a&gt; &lt;div class="clear"&gt;&lt;/div&gt;&lt;h2&gt;
&lt;li&gt;&lt;a name="dbsource-tools" href="http://dbsourcetools.codeplex.com/" title="DBSource Tools" &gt;DBSource Tools&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;This database management tool is in there in form of a GUI service. Its use is to bring SQL server database under source control.   &lt;h3&gt;Key Features&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Can be used to compare schemas&lt;/li&gt;
&lt;li&gt;Strong database scripter&lt;/li&gt;
&lt;/ul&gt;Download is available at &lt;a href="http://dbsourcetools.codeplex.com/"&gt;http://dbsourcetools.codeplex.com/&lt;/a&gt;  &lt;div class="clear"&gt;&lt;/div&gt;&lt;h2&gt;
&lt;li&gt;&lt;a name="nextep-open-designer" href="http://www.nextep-softwares.com/index.php/products" title="Nextep Open Designer" &gt;Nextep Open Designer&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;This IDE is used as a remedial measure for the deployment and development of the database as well as automating you test processes and your deployment. This software is available for free and its installation has many advantages. NeXtep Open Designer uses a centralized version control repository to track any change you make on your database model, source code (PL/SQL, T-SQL, etc.) and reference data. This repository is a simple database schema that can be automatically deployed to any supported database.   &lt;h3&gt;Key Features&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Ease of merging database during development&lt;/li&gt;
&lt;li&gt;Helps in integrating deployment processes&lt;/li&gt;
&lt;/ul&gt;Download is available at &lt;a href="http://www.nextep-softwares.com/index.php/products"&gt;http://www.nextep-softwares.com/index.php/products&lt;/a&gt; &lt;div class="clear"&gt;&lt;/div&gt;&lt;/ol&gt;Tasks like maintaining and updating the relational databases are done by these tools very quickly and efficiently. These tools also help in maintaining the complex projects thus making the task easier for developers. Thus if you wish to increase your efficiency then these Database Management Tools are highly recommended. &lt;div class="clear"&gt;&lt;/div&gt;Hope you found this list useful! What are the tools you have used for database management? Please don't forget to share with us in comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-572432562494764146?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=iND66Dkh-Do:SejJx_nf3Ow:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=iND66Dkh-Do:SejJx_nf3Ow:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=iND66Dkh-Do:SejJx_nf3Ow:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=iND66Dkh-Do:SejJx_nf3Ow:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=iND66Dkh-Do:SejJx_nf3Ow:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=iND66Dkh-Do:SejJx_nf3Ow:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=iND66Dkh-Do:SejJx_nf3Ow:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=iND66Dkh-Do:SejJx_nf3Ow:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=iND66Dkh-Do:SejJx_nf3Ow:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=iND66Dkh-Do:SejJx_nf3Ow:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=iND66Dkh-Do:SejJx_nf3Ow:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/iND66Dkh-Do" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/L9D68dUnVJWnXvEj48zpWKnrCKM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L9D68dUnVJWnXvEj48zpWKnrCKM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/L9D68dUnVJWnXvEj48zpWKnrCKM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L9D68dUnVJWnXvEj48zpWKnrCKM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=9m5RCaRDBZk:SejJx_nf3Ow:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=9m5RCaRDBZk:SejJx_nf3Ow:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=9m5RCaRDBZk:SejJx_nf3Ow:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=9m5RCaRDBZk:SejJx_nf3Ow:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/iND66Dkh-Do/5-excellent-opensource-database-change.html</link><author>noreply@blogger.com (Sachin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-rZIKtTFx99M/TxrttaeCTwI/AAAAAAAAAxg/jFYpXbqTCUc/s72-c/sql-database.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.fromdev.com/2012/01/5-excellent-opensource-database-change.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-6086148059354736248</guid><pubDate>Sun, 15 Jan 2012 04:55:00 +0000</pubDate><atom:updated>2012-01-14T20:55:33.033-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips</category><title>8 Best Software Requirements Analysis Books Every Business Analyst Must read</title><description>Every aspiring business analyst in software development field must be aware of the software requirements analysis methods, tools and techniques to ensure timely and easy implementation of software projects. Below is given the list of eight best software requirement analysis books which should be read by every business analyst.  &lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ol&gt;&lt;h2&gt;
&lt;li&gt;&lt;a name="software-requirements--" href="http://amzn.to/vQPpij" title="Software Requirements 2" &gt;Software Requirements 2&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;&lt;a name="software-requirements--" href="http://amzn.to/vQPpij" title="Software Requirements 2" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Software Requirements 2" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0735618798&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt;  (By: Karl Wiegers)   The book provides classical view of software requirements and delivers more than 40 best practices which are highly valuable for business analysts, project managers and IT account managers. The book provides the big picture of requirement engineering. It is broken into requirement engineering best practices, requirement discovery, validations and verification processes. Wiegers provides best practices which are classified as per priority and difficulty, and helps the readers to get adequate ideas to use cases, text requirements and dialog map etc.   &lt;div class="clear"&gt;&lt;/div&gt;&lt;h2&gt;
&lt;li&gt;&lt;a name="writing-effective-use-cases" href="http://amzn.to/w5jBAU" title="Writing Effective Use Cases" &gt;Writing Effective Use Cases&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;&lt;a name="writing-effective-use-cases" href="http://amzn.to/w5jBAU" title="Writing Effective Use Cases" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Writing Effective Use Cases" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0201702258&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt;  (By: Alistair Cockburn)   The book provides information about the behavioral requirements of software systems and processes which are necessary. It informs about the ways to use cases and considers basic, intermediate concepts and advanced concepts to discuss the key elements including the stakeholders, actors, scenarios, design scopes, and also suggest actions and formats. The Part 1 provides guidance to write, manage and use cases and Part 2 informs about the addresses discussed in the topics and Part 3 contains reminders and rules which can guide you. The main drawback is its approach is centered on an actor.   &lt;div class="clear"&gt;&lt;/div&gt;&lt;h2&gt;
&lt;li&gt;&lt;a name="the-software-requirements-memory-jogger--a-pocket-guide-to-help-software-and-business-teams-develop-and-manage-requirements--memory-jogger-" href="http://amzn.to/sSPEFl" title="The Software Requirements Memory Jogger: A Pocket Guide to Help Software And Business Teams Develop And Manage Requirements (Memory Jogger)" &gt;The Software Requirements Memory Jogger: A Pocket Guide to Help Software And Business Teams Develop And Manage Requirements (Memory Jogger)&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;&lt;a name="the-software-requirements-memory-jogger--a-pocket-guide-to-help-software-and-business-teams-develop-and-manage-requirements--memory-jogger-" href="http://amzn.to/sSPEFl" title="The Software Requirements Memory Jogger: A Pocket Guide to Help Software And Business Teams Develop And Manage Requirements (Memory Jogger)" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="The Software Requirements Memory Jogger: A Pocket Guide to Help Software And Business Teams Develop And Manage Requirements (Memory Jogger)" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=1576810607&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt;  (By: Ellen Gottesdiener)   The book provides valuable information about requirements engineering process, elicitation, analysis, validation, specification and management, and gives practical techniques to improve the performance of software team and its output. The book is logically organized covering a number of application tools. The main issue with the book is its small prints. The book is designed in a way to help software development management teams, QA / QC personnel and stakeholders at all levels as it provides guidelines to streamline communication, to write clear and concise about the requirement documents.   &lt;div class="clear"&gt;&lt;/div&gt;&lt;h2&gt;
&lt;li&gt;&lt;a name="agile-software-requirements--lean-requirements-practices-for-teams--programs--and-the-enterprise--agile-software-development-series-" href="http://amzn.to/vRVzel" title="Agile Software Requirements: Lean Requirements Practices for Teams, Programs, and the Enterprise (Agile Software Development Series)" &gt;Agile Software Requirements: Lean Requirements Practices for Teams, Programs, and the Enterprise (Agile Software Development Series)&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;&lt;a name="agile-software-requirements--lean-requirements-practices-for-teams--programs--and-the-enterprise--agile-software-development-series-" href="http://amzn.to/vRVzel" title="Agile Software Requirements: Lean Requirements Practices for Teams, Programs, and the Enterprise (Agile Software Development Series)" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Agile Software Requirements: Lean Requirements Practices for Teams, Programs, and the Enterprise (Agile Software Development Series)" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0321635841&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt;  (By: Dean Leffingwell)   The book gives practical agile approaches for a software team which helps to collaborate and work with the enterprise. The approach is easy to understand, pragmatic and helps to give hands on guide to address many key issues (not all) which are faced by enterprises. It provides effective requirement analysis and explains about the critically best practices. It covers programs, portfolios and also architectural management which is backed by consistent framework .It is well written easy to understand and can be adopted in daily activities.   &lt;div class="clear"&gt;&lt;/div&gt;&lt;h2&gt;
&lt;li&gt;&lt;a name="software-requirements-and-specifications--a-lexicon-of-practice--principles-and-prejudices--acm-press-" href="http://amzn.to/uZT76x" title="Software Requirements and Specifications: A Lexicon of Practice, Principles and Prejudices (ACM Press)" &gt;Software Requirements and Specifications: A Lexicon of Practice, Principles and Prejudices (ACM Press)&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;&lt;a name="software-requirements-and-specifications--a-lexicon-of-practice--principles-and-prejudices--acm-press-" href="http://amzn.to/uZT76x" title="Software Requirements and Specifications: A Lexicon of Practice, Principles and Prejudices (ACM Press)" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Software Requirements and Specifications: A Lexicon of Practice, Principles and Prejudices (ACM Press)" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0201877120&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt; (By: Michael Jackson)    The Jackson’s book gives some critical information and guidelines such as idea of promoting software system in multiple problem domains and application domains where the system users can conduct businesses. It is a great book which can be used by project managers and business analysts for implementation to ensure easy integration of customers need into the developmental processes. The book extensively informs about the use of mathematical notations, although, it does not provide extensive case studies and also the content is not very structured.   &lt;div class="clear"&gt;&lt;/div&gt;&lt;h2&gt;
&lt;li&gt;&lt;a name="more-about-software-requirements--thorny-issues-and-practical-advice" href="http://amzn.to/utFCWH" title="More About Software Requirements: Thorny Issues and Practical Advice" &gt;More About Software Requirements: Thorny Issues and Practical Advice&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;&lt;a name="more-about-software-requirements--thorny-issues-and-practical-advice" href="http://amzn.to/utFCWH" title="More About Software Requirements: Thorny Issues and Practical Advice" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="More About Software Requirements: Thorny Issues and Practical Advice" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0735622671&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt;  (By: Karl Wiegers)   It provides practical information related to software requirements and the basic level of knowledge needed for resolving software issues. It is very easy to read and gives insight into the real life problems faced by software projects. "10 cosmic truths about software requirements" is a valuable section of the book and the content is fully backed by reference and theory.   &lt;div class="clear"&gt;&lt;/div&gt;&lt;h2&gt;
&lt;li&gt;&lt;a name="seven-steps-to-mastering-business-analysis" href="http://amzn.to/vV9Fs7" title="Seven Steps to Mastering Business Analysis" &gt;Seven Steps to Mastering Business Analysis&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;&lt;a name="seven-steps-to-mastering-business-analysis" href="http://amzn.to/vV9Fs7" title="Seven Steps to Mastering Business Analysis" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Seven Steps to Mastering Business Analysis" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=1604270071&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt;  (By: Barbara A. Carkeno)   People who are new to business analysis will find the book highly helpful as it explains many complicated business analysis concepts, fundamental concepts, strategies, valuable insights and gives many references tools and tips. It explains about the role of system analyst, business analyst and gives the ways, in which, the analyst can deliver work.   &lt;div class="clear"&gt;&lt;/div&gt;&lt;h2&gt;
&lt;li&gt;&lt;a name="the-business-analyst-s-handbook" href="http://amzn.to/sATFPc" title="The Business Analyst's Handbook" &gt;The Business Analyst's Handbook&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;&lt;a name="the-business-analyst-s-handbook" href="http://amzn.to/sATFPc" title="The Business Analyst's Handbook" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="The Business Analyst's Handbook" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=1598635654&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt; (By: Howard Podeswa)    It provides combined resources backed by practice and theory, and gives reference material which can be used on any assignment. The book provides formalized way to BA .The book is written by engineer and its reference material can be used on any assignment. The models and techniques explained are highly comprehensive and give great insight into every step of Business Analysis.   &lt;div class="clear"&gt;&lt;/div&gt;&lt;/ol&gt;The above given books ensure to provide the knowledge which will be helpful to both experienced and inexperienced project team members and business analysts. &lt;br /&gt;
&lt;div class="clear"&gt;&lt;/div&gt;Hope you found this list useful! What are the best books you have read? Please don't forget to share with us in comments.&lt;br /&gt;
&lt;div style="display:none"&gt;Software Requirement Best Top books list for reference, Analysis of software needs, Use case analysis. Business Analyst must have book&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-6086148059354736248?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=BY2GBsSDao0:spAyRSFbC-4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=BY2GBsSDao0:spAyRSFbC-4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=BY2GBsSDao0:spAyRSFbC-4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=BY2GBsSDao0:spAyRSFbC-4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=BY2GBsSDao0:spAyRSFbC-4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=BY2GBsSDao0:spAyRSFbC-4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=BY2GBsSDao0:spAyRSFbC-4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=BY2GBsSDao0:spAyRSFbC-4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=BY2GBsSDao0:spAyRSFbC-4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=BY2GBsSDao0:spAyRSFbC-4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=BY2GBsSDao0:spAyRSFbC-4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/BY2GBsSDao0" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PHZwkbJGkq-jU6uwa1KZuoHd2xg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PHZwkbJGkq-jU6uwa1KZuoHd2xg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PHZwkbJGkq-jU6uwa1KZuoHd2xg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PHZwkbJGkq-jU6uwa1KZuoHd2xg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=qUfz1LC83Nw:spAyRSFbC-4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=qUfz1LC83Nw:spAyRSFbC-4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=qUfz1LC83Nw:spAyRSFbC-4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=qUfz1LC83Nw:spAyRSFbC-4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/BY2GBsSDao0/8-best-software-requirements-analysis.html</link><author>noreply@blogger.com (Sachin)</author><thr:total>0</thr:total><feedburner:origLink>http://www.fromdev.com/2011/12/8-best-software-requirements-analysis.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-3168286292314659609</guid><pubDate>Sat, 07 Jan 2012 17:57:00 +0000</pubDate><atom:updated>2012-01-07T09:57:48.496-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">OpenSource</category><category domain="http://www.blogger.com/atom/ns#">Tips</category><title>25 Best Free Eclipse Plug-ins for Java Developer to be Productive</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a title="25 Best Free Eclipse Plug-ins for Java Developer to be Productive" href="http://4.bp.blogspot.com/-QiOhgmaJhCs/TwiGjwYmv9I/AAAAAAAAAxU/LwSfiTVJifk/s1600/eclipse-plugin-logo.gif" imageanchor="1" style="clear:right; float:left; margin-left:1em; margin-bottom:1em;  margin-right:1em"&gt;&lt;img border="0" height="80" width="175" src="http://4.bp.blogspot.com/-QiOhgmaJhCs/TwiGjwYmv9I/AAAAAAAAAxU/LwSfiTVJifk/s200/eclipse-plugin-logo.gif" title="25 Best Free Eclipse Plug-ins for Java Developer to be Productive" /&gt;&lt;/a&gt;&lt;/div&gt;
Eclipse offers an integrated development environment having an extensible plug-in system. This enables Eclipse to provide all functionality on the top of its runtime system. It’s also different from other applications (where the functionalities provided by plug-ins are mostly hard coded). Having the appropriate Eclipse plug is important, since it facilitates the Java developers to seamlessly develop and implement applications which are J2EE and service-based. Eclipse plug-ins also helps them to implement their application on several types of application infrastructures. 

&lt;a name='more'&gt;&lt;/a&gt;

&lt;br /&gt;
&lt;br /&gt;
Below is the list of 25 best free Eclipse plug-ins for a developer to be more productive - &lt;br /&gt;
&lt;br /&gt;

&lt;ol&gt;
&lt;h1&gt;Code Quality Plugins&lt;/h1&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="findbugs" href="#findbugs" title="FindBugs" &gt;FindBugs&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

FindBugs plug-in is used with eclipse IDE and it is the software used to find bugs in Java programs. It’s free software licensed under Lesser GNU Public License.
&lt;br/&gt;&lt;br/&gt;&lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="checkstyle" href="#checkstyle" title="Checkstyle" &gt;Checkstyle&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;  
Checkstyle plug-ins can be integrated to IDE Eclipse and it ensures the Java code follows the coding standards.
&lt;br/&gt;&lt;br/&gt;&lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="eclemma" href="#eclemma" title="ECLemma" &gt;ECLemma&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; ECLemma is a free tool available through Eclipse Public License and it provides fast development and test cycles. You can use “launch” in the code coverage mode which works like actual run/debug mode. One can render the analysis of the code through coverage view, source highlighting, counters and sessions.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="jdepend-eclipse" href="#jdepend-eclipse" title="JDepend4Eclipse" &gt;JDepend4Eclipse&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; JDepend4Eclipse helps to traverse file directories and assists in measuring the quality of design. It is an open source tool licensed under Eclipse Public License v1.0.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="pmd" href="#pmd" title="PMD" &gt;PMD&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; PMD is a source code analyzer which helps to detect used variables and bad codes.
&lt;br/&gt;
(Update URL - &lt;a href="http://pmd.sourceforge.net/eclipse/"&gt;http://pmd.sourceforge.net/eclipse/&lt;/a&gt;)
&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="sourcehelper" href="#sourcehelper" title="SourceHelper" &gt;SourceHelper&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; SourceHelper helps to code and debug, and it also aids in providing clarity to the written code.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;


&lt;h2&gt;&lt;li&gt;&lt;a name="structure---" href="http://www.headwaysoftware.com/products/structure101/plugins/" title="Structure101" &gt;Structure101&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; Structure101 helps to influence architecture when the code is edited, which means you can change the architecture without disrupting the code.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h1&gt;Text Editor Plugins&lt;/h1&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="anyedit-tools" href="#anyedit-tools" title="AnyEdit Tools" &gt;AnyEdit Tools&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; The plug-in helps to add new editor to output consoles, toolbar, and it also help to import and export data. It is licensed under Eclipse Public License v1.0.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="eclim" href="#eclim" title="Eclim" &gt;Eclim&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; Eclim helps to bring Eclipse functionality to one of the best editors - Vim, wherein development can be done in various languages and it also provides bug fixing provisions. It is released under GPLV3.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="eclipse-rbe" href="http://sourceforge.net/projects/eclipse-rbe/" title="Eclipse-rbe" &gt;Eclipse-rbe&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; Eclipse-rbe is used for editing Java resources and its features include warnings for missing values, sorted keys, conversion from/to Unicode etc. It is licensed under GNU library or LGPL.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h1&gt;Dependency Management&lt;/h1&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="apache-ivyde" href="#apache-ivyde" title="Apache IvyDE" &gt;Apache IvyDE&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; Apache IvyDE is an Eclipse plug-in which helps to integrate Apache Ivy’s feature of dependency management to Eclipse. Additionally, it helps to manage dependencies in ‘ivy.xml’. It can be used with plug-in WTP and Ant.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="m-eclipse--maven-plugin-" href="#m-eclipse--maven-plugin-" title="M2eclipse (Maven Plugin)" &gt;M2eclipse (Maven Plugin)&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; M2eclipse helps to manage both simple and multi module projects, and Maven integration for Eclipse (M2eclipise) helps to launch maven from Eclipse. It provides features such as dependency management and automatic downloading.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;


&lt;h1&gt;Version Control Integration Plugins&lt;/h1&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="subclipse" href="#subclipse" title="Subclipse" &gt;Subclipse&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; Subclipse is a SVN plug-in which offers support for subversion of Eclipse IDE and it is licensed under EPL 1.0. Subeclipse 1.6.x supports ColabNet Merge Client. Subclipse provides easy interface to use the features.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="egit" href="#egit" title="EGit" &gt;EGit&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; EGit plug-in provides support, synchronizes view, reading for .git/ exclude files, provides rebasing and has streamlined commands for pulling and pushing.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="mercurialeclipse" href="#mercurialeclipse" title="MercurialEclipse" &gt;MercurialEclipse&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; MercurialEclipse is one of the active VCS which gives you access on registration. It is a reliable plug-in which provides cloning repositories, push-pull synchronization and enables easy rollback.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="p-eclipse" href="http://www.perforce.com/downloads/http/p4-eclipse/" title="P4Eclipse" &gt;P4Eclipse&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; P4Eclipse seamlessly integrates the strengths of Perforce's version management system with Eclipse's. P4Eclipse provides a developer-oriented set of features from within the Eclipse Team framework that support a wide range of Agile and traditional development workflows.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h1&gt; Framework Development &lt;/h1&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="spring-tool-suite" href="http://www.springsource.com/products/eclipse-downloads" title="Spring Tool Suite" &gt;Spring Tool Suite&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; Spring Tool Suite provides development environment and tools such as XML file wizards and graphical spring configuration editor, which can be used for easy development.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="spring-ide" href="http://springide.org/" title="Spring IDE" &gt;Spring IDE&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; Spring IDE helps in developing Spring Application and provides interface to use the graphical editing framework. What’s more, Spring IDE display graphs of relationships and beans using configuration files. (Update site - http://springide.org/updatesite
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="hibernator" href="http://hibernator.sourceforge.net/" title="Hibernator" &gt;Hibernator&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; Hibernator helps to create or update schema, run hibernate queries and create mapping documents. The user can synchronize a Java class to a related mapped file.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="jbosstools" href="http://docs.jboss.org/tools/2.1.0.Beta1/hibernatetools/html/setup.html" title="JbossTools" &gt;JbossTools&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; JbossTools 3.2x support JBoss, Hibernate, Drools, XHTML, Seam etc. (Update site - http://download.jboss.org/jbosstools/updates/JBossTools-2.1.2.GA)
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;


&lt;h1&gt;Other Utility Plugins&lt;/h1&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="asm---bytecode-outline-plugin" href="http://asm.ow2.org/eclipse/index.html" title="ASM - Bytecode Outline plugin" &gt;ASM - Bytecode Outline plugin&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; ASM Bytecode Outline plugin shows disassembled bytecode of current Java editor or class file, allows bytecode compare for Java/class files and shows ASMifier code for current bytecode. You can install ASM from Eclipse Update Manager. It allows bytecode comparison to Java class. 
(Update site - &lt;a href="http://download.forge.objectweb.org/eclipse-update/"&gt;http://download.forge.objectweb.org/eclipse-update/&lt;/a&gt;)
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="mylyn" href="#mylyn" title="Mylyn" &gt;Mylyn - Task Management&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; Mylyn has a task focused interface and it provides a task management tool to the developers. Moreover, it helps to integrate rich editing tools and monitor activities.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="eclipse-launcher" href="Eclipse launcher is written in Delphi 6 and it helps to launch Eclipse IDE with configuration." title="Eclipse Launcher" &gt;Eclipse Launcher&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; Eclipse launcher is written in Delphi 6 and it helps to launch Eclipse IDE with configuration.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;


&lt;h2&gt;&lt;li&gt;&lt;a name="filesync" href="http://andrei.gmxhome.de/filesync/" title="FileSync" &gt;FileSync&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; FileSync is licensed under Eclipse Public License v1.0 and it is a file synchronization tool used for creating, deleting and mapping files.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="log-e" href="http://log4e.jayefem.de/" title="Log4E" &gt;Log4E&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; Log4E helps to use logger easily without getting bound to a special logging framework. Also, you can define your own preferences for logging templates.
&lt;br/&gt;&lt;br/&gt; &lt;div class="clear"&gt;&lt;/div&gt;
&lt;/ol&gt;
&lt;div class="clear"&gt;&lt;/div&gt;
All in all, plug-ins allows Eclipse to be coded in other languages. Eclipse plug-ins is indispensable nowadays, since it greatly streamlines Java applications and reduces the complexity of Java. However, installing too many plug-ins can slow down Eclipse. Hence you require selecting the plug-ins judiciously. 
&lt;div class="clear"&gt;&lt;/div&gt;
There are a number of other productivity plug-ins too, besides the ones mentioned. Checkstyle, JBoss Tools and Jadclipse are three of them. Do let us know if you have used some other plug-ins which you were impressed with.
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-3168286292314659609?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=L2pWJOmVE4w:6I-WE1wKMC0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=L2pWJOmVE4w:6I-WE1wKMC0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=L2pWJOmVE4w:6I-WE1wKMC0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=L2pWJOmVE4w:6I-WE1wKMC0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=L2pWJOmVE4w:6I-WE1wKMC0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=L2pWJOmVE4w:6I-WE1wKMC0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=L2pWJOmVE4w:6I-WE1wKMC0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=L2pWJOmVE4w:6I-WE1wKMC0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=L2pWJOmVE4w:6I-WE1wKMC0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=L2pWJOmVE4w:6I-WE1wKMC0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=L2pWJOmVE4w:6I-WE1wKMC0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/L2pWJOmVE4w" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/E1SKBLKh3X0wRwj1g428GprT9ac/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/E1SKBLKh3X0wRwj1g428GprT9ac/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/E1SKBLKh3X0wRwj1g428GprT9ac/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/E1SKBLKh3X0wRwj1g428GprT9ac/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=isy2NomSATM:6I-WE1wKMC0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=isy2NomSATM:6I-WE1wKMC0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=isy2NomSATM:6I-WE1wKMC0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=isy2NomSATM:6I-WE1wKMC0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/L2pWJOmVE4w/25-best-free-eclipse-plug-ins-for-java.html</link><author>noreply@blogger.com (Sachin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-QiOhgmaJhCs/TwiGjwYmv9I/AAAAAAAAAxU/LwSfiTVJifk/s72-c/eclipse-plugin-logo.gif" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://www.fromdev.com/2012/01/25-best-free-eclipse-plug-ins-for-java.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-3867561988958905130</guid><pubDate>Sun, 25 Dec 2011 08:19:00 +0000</pubDate><atom:updated>2011-12-25T00:19:41.665-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips</category><title>9 Excellent Books Product Managers must read to Create Great Products</title><description>A product manager’s role involves designing, operating, building and maintaining a good service. The role of product manager differs from one project to another which involves working on directing market strategies and products, and also educating executives about the related strategies. The below list of books covers almost all the topics related to product management, presentations and Agile, and are highly recommended to entry and mid- level product managers -  


&lt;a name='more'&gt;&lt;/a&gt;
&lt;ol&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="---rules-of-product-management--learn-the-rules-of-product-management-from-leading-experts--from--around-the-world" href="http://amzn.to/s7Ta8Y" title="42 Rules of Product Management: Learn the Rules of Product Management from Leading Experts "from" Around the World" &gt;42 Rules of Product Management: Learn the Rules of Product Management from Leading Experts "from" Around the World&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="---rules-of-product-management--learn-the-rules-of-product-management-from-leading-experts--from--around-the-world" href="http://amzn.to/s7Ta8Y" title="42 Rules of Product Management: Learn the Rules of Product Management from Leading Experts "from" Around the World" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="42 Rules of Product Management: Learn the Rules of Product Management from Leading Experts "from" Around the World" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=1607730863&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt; 
(By: Brian Lawley, Greg Cohen, Laura Lowell )
&lt;br/&gt;&lt;br/&gt; 
The book provides strategies and information related to Product Management and Product Marketing experience with Apple, SAP, Yahoo, Intuit and eBay, collected from the experience of 40 experts from across the world. The book helps to provide information about how to focus on market needs, requirements, clarifies product positioning, provides guidelines to align product strategy and get execution. The book suggests a number of strategies to built capabilities and helps to understand the key roles involved in product management.
&lt;br/&gt;&lt;br/&gt;

&lt;div class='clear'&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="inspired--how-to-create-products-customers-love" href="http://amzn.to/rNrnt6" title="Inspired: How To Create Products Customers Love" &gt;Inspired: How To Create Products Customers Love&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="inspired--how-to-create-products-customers-love" href="http://amzn.to/rNrnt6" title="Inspired: How To Create Products Customers Love" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Inspired: How To Create Products Customers Love" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0981690408&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt; 
(By: Marty Cagan )
&lt;br/&gt;&lt;br/&gt; 
The book is a popular products management resource providing a number of immeasurable traits and points of distinction between products management and products marketing management. The book provides every aspect of product management and involves chapters explaining the challenges faced by a startup-company in engineering. It basically provides many blog posts and gives explanation of most of the major topics of product management.
&lt;br/&gt;&lt;br/&gt;
&lt;div class='clear'&gt;&lt;/div&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="the-product-manager-s-desk-reference" href="http://amzn.to/ub34PI" title="The Product Manager's Desk Reference" &gt;The Product Manager's Desk Reference&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="the-product-manager-s-desk-reference" href="http://amzn.to/ub34PI" title="The Product Manager's Desk Reference" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="The Product Manager's Desk Reference" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0071591346&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt; 
(By: Steven Haines)
&lt;br/&gt;&lt;br/&gt; 
The book provides best practices and list for effective products management through a number of diagrams, templates and tables. It helps to create strategies, get decisions and helps to apply financial techniques to improve product profitability. The book provides guidance into leadership, decision making and cross functional teams. It provides executives summaries, set of questions and suggestions which are helpful to a product manager.
&lt;br/&gt;&lt;br/&gt;&lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="take-charge-product-management--take-charge-of-your-product-management-development--tips--tactics--and-tools-to-increase-your-effectiveness-as-a-product-manager" href="http://amzn.to/uNNZS1" title="Take Charge Product Management: Take Charge of Your Product Management Development; Tips, Tactics, and Tools to Increase Your Effectiveness as a Product Manager" &gt;Take Charge Product Management: Take Charge of Your Product Management Development; Tips, Tactics, and Tools to Increase Your Effectiveness as a Product Manager&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="take-charge-product-management--take-charge-of-your-product-management-development--tips--tactics--and-tools-to-increase-your-effectiveness-as-a-product-manager" href="http://amzn.to/uNNZS1" title="Take Charge Product Management: Take Charge of Your Product Management Development; Tips, Tactics, and Tools to Increase Your Effectiveness as a Product Manager" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Take Charge Product Management: Take Charge of Your Product Management Development; Tips, Tactics, and Tools to Increase Your Effectiveness as a Product Manager" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0615379273&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt; 
(By: Greg Geracie)
&lt;br/&gt;&lt;br/&gt; 
The book provides story like description about project management, tips on taking charges, growth stages, and it presents the project manager’s job in a revealing manner. It provides vision and instructions to help you to succeed as a product manager. Moreover, it provides user friendly directions, commentary, advice, tools and techniques to improve corporate vision and to get effective project management.
&lt;br/&gt;&lt;br/&gt;&lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="agile-excellence-for-product-managers--a-guide-to-creating-winning-products-with-agile-development-teams" href="http://amzn.to/tMpAvP" title="Agile Excellence for Product Managers: A Guide to Creating Winning Products with Agile Development Teams" &gt;Agile Excellence for Product Managers: A Guide to Creating Winning Products with Agile Development Teams&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="agile-excellence-for-product-managers--a-guide-to-creating-winning-products-with-agile-development-teams" href="http://amzn.to/tMpAvP" title="Agile Excellence for Product Managers: A Guide to Creating Winning Products with Agile Development Teams" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Agile Excellence for Product Managers: A Guide to Creating Winning Products with Agile Development Teams" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=160773074X&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt;
(By: Greg Cohen) 
&lt;br/&gt;&lt;br/&gt; 
The book is very easy to read and provides suggestions and processes to operate Agile development programs. It covers all the needs of Product owners and also covers various implementation techniques, comparison and impact of implementation. It is recommended for getting quick and concise information on Agile Implementation and Scrum. The book helps to compare implementation of Scrum and XP.
&lt;br/&gt;&lt;br/&gt;&lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="agile-product-management-with-scrum--creating-products-that-customers-love--addison-wesley-signature-series--cohn--" href="http://amzn.to/sptYzf" title="Agile Product Management with Scrum: Creating Products that Customers Love (Addison-Wesley Signature Series (Cohn))" &gt;Agile Product Management with Scrum: Creating Products that Customers Love (Addison-Wesley Signature Series (Cohn))&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="agile-product-management-with-scrum--creating-products-that-customers-love--addison-wesley-signature-series--cohn--" href="http://amzn.to/sptYzf" title="Agile Product Management with Scrum: Creating Products that Customers Love (Addison-Wesley Signature Series (Cohn))" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Agile Product Management with Scrum: Creating Products that Customers Love (Addison-Wesley Signature Series (Cohn))" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0321605780&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt; 
(By: Roman Pichler)
&lt;br/&gt;&lt;br/&gt; 
It is a 118 page book providing several practical guidelines and solutions on project management. It is a great help for beginners into project management and it provides understanding of product owner’s role, helps in envisioning the product, grooming product backlog and it helps to plan the release and transitioning into product ownership.
&lt;br/&gt;&lt;br/&gt;&lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="product-strategy-for-high-technology-companies" href="http://amzn.to/sLBM9k" title="Product Strategy for High Technology Companies" &gt;Product Strategy for High Technology Companies&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="product-strategy-for-high-technology-companies" href="http://amzn.to/sLBM9k" title="Product Strategy for High Technology Companies" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Product Strategy for High Technology Companies" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0071362460&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt;
(By: Michael McGrath) 
&lt;br/&gt;&lt;br/&gt; 
It provides in-depth information about core strategic vision and market platform plan framework. It provides case studies useful for high technology platform, and gives concise and systematic method of handling the subjects related to product management. It also provides examples to explain the failures of products strategies.
&lt;br/&gt;&lt;br/&gt;&lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="the-product-managers-handbook" href="http://amzn.to/ruXCvR" title="The Product Managers Handbook" &gt;The Product Managers Handbook&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="the-product-managers-handbook" href="http://amzn.to/ruXCvR" title="The Product Managers Handbook" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="The Product Managers Handbook" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0071772987&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt; 
(By: Linda Gorchels)
&lt;br/&gt;&lt;br/&gt; 
The book provides extensive information about market and customer analysis, design branding strategies, establishing prices, targeting current and new markets, developing new products, managing existing products and mature products, and working effectively with operations, sales and in-research fields. It provides great resources for beginners but it may not provide very specific and extensive information on one topic of product management. Additionally, it contains a number of charts, case studies and checklists for providing comparative information.
&lt;br/&gt;&lt;br/&gt;&lt;div class="clear"&gt;&lt;/div&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="the-art-of-product-management--lessons-from-a-silicon-valley-innovator" href="http://amzn.to/ugOQJL" title="The Art of Product Management: Lessons from a Silicon Valley Innovator" &gt;The Art of Product Management: Lessons from a Silicon Valley Innovator&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="the-art-of-product-management--lessons-from-a-silicon-valley-innovator" href="http://amzn.to/ugOQJL" title="The Art of Product Management: Lessons from a Silicon Valley Innovator" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="The Art of Product Management: Lessons from a Silicon Valley Innovator" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=1439216061&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt; 
(By: Rich Mironov)
&lt;br/&gt;&lt;br/&gt; 
The book provides generic knowledge about product management, balancing the position of product manager, sales and engineering. It explains defensive processes and guidelines for bureaucracy required by a product manager. It also serves as a great collection of essay, stories and is useful for mid - start product manager.
&lt;br/&gt;&lt;br/&gt;&lt;div class="clear"&gt;&lt;/div&gt;
&lt;/ol&gt;
&lt;div class="clear"&gt;&lt;/div&gt;
A product manager has to manage a number of activities, departments and provide tools and information to meet the requirements of various departments in an organization. The above given list of books helps a product manager to assess the requirements, situations and handle the various circumstances efficiently.
&lt;br/&gt;&lt;br/&gt;
&lt;div class="clear"&gt;&lt;/div&gt;
Hope you found this list useful! What are the best books you have read? Please don't forget to share with us in comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-3867561988958905130?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=VmZuv2bSfNA:8Be2oK1No5w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=VmZuv2bSfNA:8Be2oK1No5w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=VmZuv2bSfNA:8Be2oK1No5w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=VmZuv2bSfNA:8Be2oK1No5w:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=VmZuv2bSfNA:8Be2oK1No5w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=VmZuv2bSfNA:8Be2oK1No5w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=VmZuv2bSfNA:8Be2oK1No5w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=VmZuv2bSfNA:8Be2oK1No5w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=VmZuv2bSfNA:8Be2oK1No5w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=VmZuv2bSfNA:8Be2oK1No5w:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=VmZuv2bSfNA:8Be2oK1No5w:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/VmZuv2bSfNA" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IPQ3AFrfIufPXoZLKnLPmLj_7JQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IPQ3AFrfIufPXoZLKnLPmLj_7JQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IPQ3AFrfIufPXoZLKnLPmLj_7JQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IPQ3AFrfIufPXoZLKnLPmLj_7JQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=q-ErzFhpY9c:8Be2oK1No5w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=q-ErzFhpY9c:8Be2oK1No5w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=q-ErzFhpY9c:8Be2oK1No5w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=q-ErzFhpY9c:8Be2oK1No5w:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/VmZuv2bSfNA/9-excellent-books-product-managers-must.html</link><author>noreply@blogger.com (Sachin)</author><thr:total>0</thr:total><feedburner:origLink>http://www.fromdev.com/2011/12/9-excellent-books-product-managers-must.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-564775743450082719</guid><pubDate>Sun, 18 Dec 2011 00:17:00 +0000</pubDate><atom:updated>2011-12-21T16:25:00.975-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">OpenSource</category><category domain="http://www.blogger.com/atom/ns#">.Upcoming</category><title>10 Excellent OpenSource VPN Solutions for your Business</title><description>VPN connections are important for business establishments because of the sensitivity of the data that are being transmitted across the web. It is quite easy to use snooping software to crack the connection and trap the packets that are being transmitted through the web. Both wired and Wi-Fi connections don’t allow the basic security of the data. VPN systems thus allow a secure connection which encrypts the data and ensures that it cannot be tapped into.

&lt;a name='more'&gt;&lt;/a&gt;
&lt;ol&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="openvpn" href="#openvpn" title="OpenVPN" &gt;OpenVPN&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

It’s an open source Virtual Private Network solution that is compatible with Windows, Linux and Mac operating systems and offers a secure environment to connect to your network. OpenVPN allows simplified OpenVPN Connect UI, OpenVPN server capabilities and enterprise management capabilities. It also allows a secure environment for access to your private cloud network resources.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="the-securepoint-terra" href="#the-securepoint-terra" title="The Securepoint TERRA" &gt;The Securepoint TERRA&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

It’s a wired VPN gateway which is a secure service for small companies for having their own private networks. The built in firewall allows secure remote access using PSec, OpenVPN (SSL), L2TP and PPTP VPN. One of the major benefits of Securepoint TERRA wired VPN gateway is its compatibility with other VPN systems.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="tunnelblick" href="#tunnelblick" title="Tunnelblick" &gt;Tunnelblick&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

It’s a free open source VPN GUI which works between your computer at one end and the VN on the other end. It works for the Mac OS versions and is based on OS X 10.4 (Tiger).
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="tomato-vpn" href="#tomato-vpn" title="Tomato VPN" &gt;Tomato VPN&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
 
It’s a free open source VPN which is based on Tomato 1.27. It offers automatic adding and removing of firewall rules as needed, Site-to-site tunnels creation sans custom configuration, option to redirect the internet traffic through the network tunnel and accept and push DNS options.
&lt;br/&gt;&lt;br/&gt;


&lt;h2&gt;&lt;li&gt;&lt;a name="ipig" href="#ipig" title="iPIG" &gt;iPIG&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

It’s free VPN which works with only Windows 2000, Windows XP, Windows 2003 or Windows Vista (32bit). iPIG works seamlessly with major firewall software like Zonealarm or Norton Internet Security. It uses a powerful 256-bit AES encryption technology which ensures that your connection with any WiFi network or wired network is completely secure. iPIG can secure your data against any forms of snooping or spying technique. What’s more, the iPIG server express edition allows up to 5 users free of charge.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="logmein-hamachi" href="#logmein-hamachi" title="LogMeIn Hamachi" &gt;LogMeIn Hamachi&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

LogMeIn Hamachi is a VPN which supports both Windows and Mac OS systems to create a secure private network which can be created on demand across any internet connection, for both compute and mobile users. LogMeIn Hamachi can be managed across the web securely. LogMeIn Hamachi also offers multiple options for networking including Gateway Virtual Networking, Hub-and-spoke virtual networking and mesh networking. It works for Windows, Linux and Mac OS.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="shrew-soft-s-vpn" href="#shrew-soft-s-vpn" title="Shrew Soft’s VPN" &gt;Shrew Soft’s VPN&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
 
It’s a 64 bit VPN which is compatible with the Windows 7 64 bit version. It became popular when Cisco failed to upgrade its VPN to 64 bit and found that Shrew Soft is a better alternative. It is compatible with most VPN hardware manufactured by major companies such as Cisco, Juniper and Checkpoint. It is also compatible with Linux and BSD versions.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="lilivpn" href="#lilivpn" title="LiliVPN" &gt;LiliVPN&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

It’s is an open source GUI for BSD, Windows and Linux operating systems. LiliVPN works primarily for Windows version 7.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="kovpn" href="#kovpn" title="KOVpn" &gt;KOVpn&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
 
It’s an open source VPN which has features such as connect and disconnect, username and password input, supporting multiple open source VPN connections, and has a feature called Kwallet which stores all login details. Furthermore, KOVpn supports the open VPNS management interface access control.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="oast" href="#oast" title="OAST" &gt;OAST&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
 
OAST is a platform independent GUI for OpenVPN-client, which allows the user to manage multiple VPN connections at a time. It has an overall simple look and feel to it and has simple functions like monitoring the connection status.
&lt;br/&gt;&lt;br/&gt;

&lt;/ol&gt;
A Virtual Private Network (VPN) Solution denotes the hardware, software, encryption and authentication protocols used to ensure that users across two physical locations separated by a few miles or a few thousand or more, can securely exchange data and access all network data without any third party interfering or accessing the same. VPN uses an internet connection for transmitting the information packets to and fro. It uses encryption to ensure that the packets which are transmitted over the internet cannot be deciphered or read by third party software or humans. It also uses authentication protocols to ensure that only computers which are given access to the network, can access it. 
&lt;br/&gt;&lt;br/&gt;

Hope you found this list useful, What is the VPN solution you have use? Please don't forget to share with me in comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-564775743450082719?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=7vBW39I6IoY:Iy-Olcyd5uU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=7vBW39I6IoY:Iy-Olcyd5uU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=7vBW39I6IoY:Iy-Olcyd5uU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=7vBW39I6IoY:Iy-Olcyd5uU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=7vBW39I6IoY:Iy-Olcyd5uU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=7vBW39I6IoY:Iy-Olcyd5uU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=7vBW39I6IoY:Iy-Olcyd5uU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=7vBW39I6IoY:Iy-Olcyd5uU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=7vBW39I6IoY:Iy-Olcyd5uU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=7vBW39I6IoY:Iy-Olcyd5uU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=7vBW39I6IoY:Iy-Olcyd5uU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/7vBW39I6IoY" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iHM5glbLvfZ7bCfuh5ZdE75lyNo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iHM5glbLvfZ7bCfuh5ZdE75lyNo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iHM5glbLvfZ7bCfuh5ZdE75lyNo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iHM5glbLvfZ7bCfuh5ZdE75lyNo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=DYOICb3CIXc:Iy-Olcyd5uU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=DYOICb3CIXc:Iy-Olcyd5uU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=DYOICb3CIXc:Iy-Olcyd5uU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=DYOICb3CIXc:Iy-Olcyd5uU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/7vBW39I6IoY/10-excellent-opensource-vpn-solutions.html</link><author>noreply@blogger.com (Sachin)</author><thr:total>0</thr:total><feedburner:origLink>http://www.fromdev.com/2011/12/10-excellent-opensource-vpn-solutions.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-4992539375302576049</guid><pubDate>Thu, 01 Sep 2011 01:09:00 +0000</pubDate><atom:updated>2011-12-21T16:46:52.160-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips</category><category domain="http://www.blogger.com/atom/ns#">.Upcoming</category><title>11 Most Influential Books Every Programmer / Developer Must Read</title><description>Every programmer needs to learn new and updated programming methods as per the changes in technology to tackle complex situations. You should make use of clean code and latest programming methods to design efficient, scalable and accurate programs. The 11 most influential books which provide enormous information for a computer programmer are – 

&lt;a name='more'&gt;&lt;/a&gt;

&lt;ol&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="code-complete" href="http://www.amazon.com/dp/0735619670?tag=good-read-books-20" title="Code Complete" &gt;Code Complete&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

&lt;a name="code-complete" href="http://www.amazon.com/dp/0735619670?tag=good-read-books-20" title="Code Complete" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;"&gt;&lt;img  title="Code Complete" src="http://ecx.images-amazon.com/images/I/51nWkLCu1SL._SL160_.jpg"/&gt;&lt;/a&gt; 

“Code Complete: A practical handbook of Software Construction” is written by Steve McConnell and the first edition provided classical programming information while the second edition provides chapters related to C++ and Java programming, which helps to improve the overall capabilities of a developer and resolve doubts. The book provides information on how to write high quality code, use variables and statements. It helps to improve software craftsmanship of a programmer as well.
&lt;br/&gt;&lt;br/&gt;
Author Site: &lt;a name="code-complete-author" href="http://cc2e.com" title="Code Complete" &gt;Code Complete&lt;/a&gt;

&lt;div class='clear'/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="pragmatic-programmer" href="http://www.amazon.com/gp/product/020161622X/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=020161622X" title="Pragmatic Programmer" &gt;Pragmatic Programmer&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

&lt;a name="pragmatic-programmer" href="http://www.amazon.com/gp/product/020161622X/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=020161622X" title="Pragmatic Programmer" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;"&gt;&lt;img title="Pragmatic Programmer" src="http://ecx.images-amazon.com/images/I/41HXiIojloL._SL160_.jpg"/&gt;&lt;/a&gt; 

The book “The Pragmatic Programmer” explains the mechanics of programming which helps you to write flexible and adaptable code. It provides guidelines to use tools and test codes effectively. Moreover, it provides many concepts to develop high quality code, and uses the pragmatic approach towards programming.
&lt;br/&gt;&lt;br/&gt;

Author Site: &lt;a name="code-complete-author" href="http://pragprog.com/book/tpp/the-pragmatic-programmer
" title="The Pragmatic Programmer" &gt;The Pragmatic Programmer&lt;/a&gt;
&lt;div class='clear'/&gt; 
&lt;h2&gt;&lt;li&gt;&lt;a name="structure-and-interpretation-of-computer-programs" href="http://www.amazon.com/gp/product/0070004846/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0070004846" title="Structure and Interpretation of Computer Programs" &gt;Structure and Interpretation of Computer Programs&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

&lt;a name="structure-and-interpretation-of-computer-programs" href="http://www.amazon.com/gp/product/0070004846/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0070004846" title="Structure and Interpretation of Computer Programs" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Structure and Interpretation of Computer Programs" src="http://ecx.images-amazon.com/images/I/41AJV8G0ZTL._SL160_.jpg"/&gt;&lt;/a&gt; 
 
Professors Abelson and Sussman offer researched material for students to learn complex programming languages in the book “Structure and Interpretation of Computer Programs”. This provides answers to many difficult questions of programming. Additionally, the book provides simple solutions to complex programming. The book further explains the four trends of programming languages – imperative, object-oriented, logic based and applicative programming.
&lt;div class='clear'/&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="c-programming-language---nd-edition-" href="http://www.amazon.com/gp/product/0131103628/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0131103628" title="C Programming Language (2nd Edition)" &gt;C Programming Language (2nd Edition)&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

&lt;a name="c-programming-language---nd-edition-" href="http://www.amazon.com/gp/product/0131103628/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0131103628" title="C Programming Language (2nd Edition)" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img  title="C Programming Language (2nd Edition)" src="http://ecx.images-amazon.com/images/I/41G0l2eBPNL._SL160_.jpg"/&gt;&lt;/a&gt; 
 
The book by Kernighan and Ritchie provide classic programming structures for hardcore C programmers, which includes- the use of data types, if/else, for, printf, while, functions, arrays, variables etc. It even touches upon good programming methods and code reuse.
&lt;br/&gt;&lt;br/&gt;

&lt;div class='clear'/&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="introduction-to-algorithms" href="http://www.amazon.com/gp/product/0262033844/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0262033844" title="Introduction to Algorithms" &gt;Introduction to Algorithms&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

&lt;a name="introduction-to-algorithms" href="http://www.amazon.com/gp/product/0262033844/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0262033844" title="Introduction to Algorithms" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Introduction to Algorithms" src="http://ecx.images-amazon.com/images/I/41kXXE4mAKL._SL160_.jpg"/&gt;&lt;/a&gt; 

A series of mathematical operations and algorithm is provided by the book which is required for core programming. The lessons on introduction to algorithm provide programming courses designed specifically for college students learning programming courses. The book is written by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein.
&lt;br/&gt;&lt;br/&gt;
&lt;div class='clear'/&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="refactoring--improving-the-design-of-existing-code" href="http://www.amazon.com/gp/product/0201485672/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0201485672" title="Refactoring: Improving the Design of Existing Code" &gt;Refactoring: Improving the Design of Existing Code&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

&lt;a name="refactoring--improving-the-design-of-existing-code" href="http://www.amazon.com/gp/product/0201485672/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0201485672" title="Refactoring: Improving the Design of Existing Code" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Refactoring: Improving the Design of Existing Code" src="http://ecx.images-amazon.com/images/I/51T4YZ3HieL._SL160_.jpg"/&gt;&lt;/a&gt; 
 
The book written by Martin Fowler, Kent Beck, John Brant, William Opdyke and Don Roberts deals with refactoring, principles of refactoring, smell codes, building test scripts, composing methods, organizing data, designing methods, generalization and using tools. It is a good book on UML, COM related technology, and provides different approaches for software development. The book explains numerous refactoring methods to eliminate smell (code).
&lt;br/&gt;&lt;br/&gt;
&lt;div class='clear'/&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="the-mythical-man-month" href="http://www.amazon.com/gp/product/0201835959/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0201835959" title="The Mythical Man-Month" &gt;The Mythical Man-Month&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
 
&lt;a name="the-mythical-man-month" href="http://www.amazon.com/gp/product/0201835959/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0201835959" title="The Mythical Man-Month" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="The Mythical Man-Month" src="http://ecx.images-amazon.com/images/I/51WIpM70FEL._SL160_.jpg"/&gt;&lt;/a&gt; 
 
The book by Frederick P. Brooks provides information into the various developments in software tools and environment for the last 21 years. It also details man-month system, second system effect, the conceptual integrity, pilot plant, documentation, communication, code freezing, system versioning and tools.
&lt;br/&gt;&lt;br/&gt;
&lt;div class='clear'/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="the-art-of-computer-programming" href="http://www.amazon.com/gp/product/0201896834/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0201896834" title="The Art of Computer Programming" &gt;The Art of Computer Programming&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
 
&lt;a name="the-art-of-computer-programming" href="http://www.amazon.com/gp/product/0201896834/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0201896834" title="The Art of Computer Programming" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="The Art of Computer Programming" src="http://ws.assoc-amazon.com/widgets/q?_encoding=UTF8&amp;Format=_SL160_&amp;ASIN=0201896834&amp;MarketPlace=US&amp;ID=AsinImage&amp;WS=1&amp;tag=good-read-books-20&amp;ServiceVersion=20070822"/&gt;&lt;/a&gt; 
 
The book is written by Donald Knuth and it provides chapters on fundamental algorithm, sorting &amp; searching, semi-numerical algorithm, syntactic algorithms, combinatorial algorithm, compilers and the theory of context free languages. The book can be used as a reference by a programmer.
&lt;br/&gt;&lt;br/&gt;
&lt;div class='clear'/&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="clean-code--a-handbook-of-agile-software-craftsmanship" href="http://www.amazon.com/gp/product/0132350882/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0132350882" title="Clean Code: A Handbook of Agile Software Craftsmanship" &gt;Clean Code: A Handbook of Agile Software Craftsmanship&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
 
&lt;a name="clean-code--a-handbook-of-agile-software-craftsmanship" href="http://www.amazon.com/gp/product/0132350882/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0132350882" title="Clean Code: A Handbook of Agile Software Craftsmanship" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Clean Code: A Handbook of Agile Software Craftsmanship" src="http://ecx.images-amazon.com/images/I/41znMZniZ1L._SL160_.jpg"/&gt;&lt;/a&gt; 
 
The book “Clean Code: A Handbook of Agile Software Craftsmanship” by Robert C. Martin tells about clean code practices and suggests the Boy Scout Rule to write clean code. The code examples explained in the books are mostly in Java but the guidelines have also been explained in other languages. It is a great book for object orientated coding.
&lt;br/&gt;&lt;br/&gt;
&lt;div class='clear'/&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="coders-at-work--reflections-on-the-craft-of-programming" href="http://www.amazon.com/gp/product/1430219483/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=1430219483" title="Coders at Work: Reflections on the Craft of Programming" &gt;Coders at Work: Reflections on the Craft of Programming&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
 
&lt;a name="coders-at-work--reflections-on-the-craft-of-programming" href="http://www.amazon.com/gp/product/1430219483/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=1430219483" title="Coders at Work: Reflections on the Craft of Programming" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="Coders at Work: Reflections on the Craft of Programming" src="http://ecx.images-amazon.com/images/I/41JzhuA--iL._SL160_.jpg"/&gt;&lt;/a&gt; 
 
The book “Coders at Work: Reflections on the Craft of Programming” written by Peter Seibel is based on conversation with computer scientists and great programmers. The whole concept is based on the series of 15 interviews which is written with an introduction in the format of transcripts. The Q &amp; A part explains how programmers learn programming and practice it, and what their views of expert programmers regarding future programming are.
&lt;br/&gt;&lt;br/&gt;
&lt;div class='clear'/&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="code--the-hidden-language-of-computer-hardware-and-software" href="http://www.amazon.com/gp/product/0735611319/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0735611319" title="CODE: The Hidden Language of Computer Hardware and Software" &gt;CODE: The Hidden Language of Computer Hardware and Software&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
 
&lt;a name="code--the-hidden-language-of-computer-hardware-and-software" href="http://www.amazon.com/gp/product/0735611319/ref=as_li_tf_il?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0735611319" title="CODE: The Hidden Language of Computer Hardware and Software" style="clear:left; float:left;margin-right:2em; margin-bottom:1em;" &gt;&lt;img title="CODE: The Hidden Language of Computer Hardware and Software" src="http://ecx.images-amazon.com/images/I/31GBgcA5PML._SL160_.jpg"/&gt;&lt;/a&gt; 
 
The book “CODE: The Hidden Language of Computer Hardware and Software” by Charles Petzold deals with a number of programming concepts starting from number systems - decimal, octal, binary to high level languages. The book explains packet based communication protocols and TCP. Many chapters are about hardware concepts and five chapters are devoted for software and explain about the operating system, floating point arithmetic and GUIs.
&lt;br/&gt;&lt;br/&gt;

&lt;div class='clear'/&gt;
&lt;/ol&gt;

It is very important for a programmer to write clean and reusable code that can easily handle complex programming and system requirements. Thus these eleven books provide you in-depth information which can be used to improve coding practices.

&lt;div class='clear'/&gt;

Hope you found this list useful, What are the most influential books you have read? Please don't forget to share with me in comments.&lt;br/&gt;&lt;br/&gt;
&lt;div style='display:none'&gt;
best influential book for software developer designer architect and programmer &lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-4992539375302576049?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=3y1MzeQfk0Y:bZPvncM9kWU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=3y1MzeQfk0Y:bZPvncM9kWU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=3y1MzeQfk0Y:bZPvncM9kWU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=3y1MzeQfk0Y:bZPvncM9kWU:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=3y1MzeQfk0Y:bZPvncM9kWU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=3y1MzeQfk0Y:bZPvncM9kWU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=3y1MzeQfk0Y:bZPvncM9kWU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=3y1MzeQfk0Y:bZPvncM9kWU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=3y1MzeQfk0Y:bZPvncM9kWU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=3y1MzeQfk0Y:bZPvncM9kWU:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=3y1MzeQfk0Y:bZPvncM9kWU:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/3y1MzeQfk0Y" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gcqEoT-y5bz3GOT605ymxgz7i2E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gcqEoT-y5bz3GOT605ymxgz7i2E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gcqEoT-y5bz3GOT605ymxgz7i2E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gcqEoT-y5bz3GOT605ymxgz7i2E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=Qp3eYgVjA9Y:bZPvncM9kWU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=Qp3eYgVjA9Y:bZPvncM9kWU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=Qp3eYgVjA9Y:bZPvncM9kWU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=Qp3eYgVjA9Y:bZPvncM9kWU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/3y1MzeQfk0Y/11-most-influential-books-every.html</link><author>noreply@blogger.com (Sachin)</author><thr:total>3</thr:total><feedburner:origLink>http://www.fromdev.com/2011/08/11-most-influential-books-every.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-8073427583872232109</guid><pubDate>Fri, 29 Jul 2011 19:07:00 +0000</pubDate><atom:updated>2011-08-11T10:38:19.520-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips</category><title>Top 10 RSS Feeds a Java Developer Must Subscribe to be on Cutting-Edge Technologies</title><description>RSS feed gives web readers the freedom to choose from bulk of information spread across the World Wide Web. Though there are ways to choose, its not easy to decide what RSS feed you must subscribe and/or NOT subscribe.
&lt;a name='more'&gt;&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;
For choosing the correct feeds, it's important that you search the internet extensively. Below are the Top ten feeds we think perfectly fits the need of a Java Developer to be up to date on cutting edge technologies and related news.
&lt;br/&gt;&lt;br/&gt;
&lt;ol&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="martinfowler-com" href="http://martinfowler.com" title="MartinFowler.com" &gt;MartinFowler.com&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
Martin Fowler is a renowned author, software consultant and speaker. His blog about software technology is a must read for any software developer (Not only Java). 
&lt;br/&gt;&lt;br/&gt; 
RSS - &lt;a href="http://martinfowler.com/feed.atom"&gt; MortinFowler.com RSS Feed &lt;/a&gt; 

&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="codinghorror" href="http://www.codinghorror.com/blog/" title="Codinghorror" &gt;Coding Horror&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;  
Coding Horror is one of the most popular RSS feeds, which is used by more than 115,000 RSS readers. People who are interested in programming or those who are starting into the field of programming, should visit the site as it provides many different types of information.
&lt;br/&gt;&lt;br/&gt;

RSS - &lt;a href="http://feeds.feedburner.com/codinghorror/"&gt; Codinghorror RSS Feed&lt;/a&gt; 

&lt;h2&gt;&lt;li&gt;&lt;a name="dzone" href="http://www.dzone.com" title="DZone" &gt;DZone&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
DZone is for web developers and programmers, and it is one of the most helpful technical sites for developers. There are more than 20,000 subscribers to Dzone RSS feeds (as given on the website) in the popular links, while more than 1000 users are found in the new links section.
&lt;br/&gt;&lt;br/&gt;
RSS - &lt;a href="http://feeds.dzone.com/dzone/frontpage/"&gt; DZone Front Page RSS Feed &lt;/a&gt; 

&lt;h2&gt;&lt;li&gt;&lt;a name="webappers" href="http://www.webappers.com/" title="Webappers" &gt;Webappers&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
Webappers is a blog dedicated to open source projects and developers, and it has more than 16,000 regular readers who are web designer or developers. The website has more than 27,437 RSS subscribers.
&lt;br/&gt;&lt;br/&gt;

RSS - &lt;a href="http://feeds2.feedburner.com/Webappers"&gt; WebAppers RSS Feed &lt;/a&gt; 

&lt;h2&gt;&lt;li&gt;&lt;a name="techcrunch" href="http://techcrunch.com/" title="TechCrunch" &gt;TechCrunch&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

TechCrunch was founded in 2005 and currently, the website gets more than 10 million visitors in a month. The website has a global network and in 2010, the company was acquired by AOL. It has around 1905,000 RSS subscribers throughout the world.
&lt;br/&gt;&lt;br/&gt;

RSS - &lt;a href="http://feeds.feedburner.com/TechCrunch"&gt; TechCrunch RSS Feed &lt;/a&gt; 

&lt;h2&gt;&lt;li&gt;&lt;a name="digg-com" href="http://digg.com/news/technology/media/recent" title="Digg.com" &gt;Digg.com&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
Digg is one of the most popular bookmarking sites and it does provide RSS in the field of technology; and there are no hired editors for the articles. Digg promotes the user's stuff and determines the content. Subscribers to Digg API can get all the latest stories, and you can view the stories at the url provided. Digg can be a really good source of latest trending technology news.
&lt;br/&gt;&lt;br/&gt;

RSS - &lt;a href="http://services.digg.com/2.0/story.getTopNews?type=rss&amp;topic=technology"&gt; Digg Technology RSS Feed &lt;/a&gt; 


&lt;h2&gt;&lt;li&gt;&lt;a name="sun-developer-network--sdn-" href="http://www.oracle.com/technetwork/java/index.html" title="Sun Developer Network (SDN)" &gt;Oracle Technology Network for Java Developers [formerly known as Sun Developer Network (SDN) ]&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

This is the official Java developer website which provides latest resources for Java developers. You can access information in three different categories of interest - Java technology highlights, Java ME Technology and Solaris Technology highlights - all three are XML based news feed categories. A Java developer can set up RSS Aware news reader on the client computer to get the latest information. 
&lt;br/&gt;&lt;br/&gt;

RSS - &lt;a href="http://developers.sun.com/rss/java.xml"&gt; Sun Developer Network RSS Feed &lt;/a&gt; 


&lt;h2&gt;&lt;li&gt;&lt;a name="ibm-s-developerworks" href="http://www.ibm.com/developerworks/java/" title="IBM's DeveloperWorks" &gt;IBM's DeveloperWorks&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 

IBM provides tutorials and technical resources for Java students and developers. RSS feeds are provided for information management products, Lotus products, Rational products, Tivoli products, Websphere products and IBM software products. The user can download a RSS reader and subscribe to feeds which have a title of content which is like a tech-note, a description and a link to the content. 
&lt;br/&gt;&lt;br/&gt;

RSS - &lt;a href="http://www.ibm.com/developerworks/views/java/rss/libraryview.jsp"&gt; DeveloperWorks RSS Feed &lt;/a&gt; 


&lt;h2&gt;&lt;li&gt;&lt;a name="o--reilly--onjava" href="http://oreilly.com/java/index.html" title="O' Reilly OnJava" &gt;O' Reilly OnJava&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
 
The website was established in 2000 and it provides news about the latest innovations in Java as well as quality code snippets. It has numerous Java based coding examples. Moreover' it provides news in number of sections such as Java and XML, Java IDE Tools, security, SysAdmin, servlets, open source, P2P, web services and wireless Java. 
&lt;br/&gt;&lt;br/&gt;

RSS - &lt;a href="http://feeds2.feedburner.com/oreilly/all"&gt; OnJava RSS Feed &lt;/a&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="reddit-programming" href="http://www.reddit.com/r/programming" title="Reddit Programming" &gt;Reddit Programming&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
Reddit is another popular bookmarking website, just like digg.com. It. Its programming feed contains some of the interesting articles related to Java. 

RSS - &lt;a href="http://www.reddit.com/r/programming/.rss"&gt; OnJava RSS Feed &lt;/a&gt;

&lt;br/&gt;&lt;br/&gt;

&lt;/ol&gt;

It's quintessential for a Java developer to subscribe to some of the best RSS feeds, in order to be in sync with latest developments in technology, and consequently utilize the knowledge of the latest software breakthroughs for better Java programming and development. At the moment, very few web avenues can match the hassle free and minute by minute updates of RSS feeds.
&lt;br/&gt;&lt;br/&gt;
Really simple syndication or RSS  refers to a syndication format which is used to view updated news, headlines, videos and audios in the standard format. An RSS feed contains a channel, a title, link, description and language followed by series of items. The original RSS was 0.90 version designed by Netscape. UserLand later evolved it to form 0.9 x branches, which can be used for metadata rich syndication. RSS feeds prevent the need to individually visit websites to see the latest content or modified content as you automatically get it through feeds anytime, as per your convenience.
&lt;br/&gt;&lt;br/&gt;
Do you subscribe to a RSS feed which is not part of this list? Please don't forget to share it with me in comments section &amp; I will try to include it in the list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-8073427583872232109?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=P-xbBD5Goj4:WlwVGf4THw8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=P-xbBD5Goj4:WlwVGf4THw8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=P-xbBD5Goj4:WlwVGf4THw8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=P-xbBD5Goj4:WlwVGf4THw8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=P-xbBD5Goj4:WlwVGf4THw8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=P-xbBD5Goj4:WlwVGf4THw8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=P-xbBD5Goj4:WlwVGf4THw8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=P-xbBD5Goj4:WlwVGf4THw8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=P-xbBD5Goj4:WlwVGf4THw8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=P-xbBD5Goj4:WlwVGf4THw8:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=P-xbBD5Goj4:WlwVGf4THw8:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/P-xbBD5Goj4" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GH2UOErBhl9JZ3es5fBard7Sovs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GH2UOErBhl9JZ3es5fBard7Sovs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GH2UOErBhl9JZ3es5fBard7Sovs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GH2UOErBhl9JZ3es5fBard7Sovs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=rfGvwKGk37s:WlwVGf4THw8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=rfGvwKGk37s:WlwVGf4THw8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=rfGvwKGk37s:WlwVGf4THw8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=rfGvwKGk37s:WlwVGf4THw8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/P-xbBD5Goj4/top-10-rss-feeds-java-developer-must.html</link><author>noreply@blogger.com (Sachin)</author><thr:total>7</thr:total><feedburner:origLink>http://www.fromdev.com/2011/07/top-10-rss-feeds-java-developer-must.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-4268753494041635673</guid><pubDate>Fri, 01 Jul 2011 18:02:00 +0000</pubDate><atom:updated>2011-07-05T15:46:11.239-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">OpenSource</category><category domain="http://www.blogger.com/atom/ns#">Tips</category><category domain="http://www.blogger.com/atom/ns#">.Popular</category><title>Top 10 Open Source Web Application Firewalls (WAF) for WebApp Security</title><description>Web application firewalls provide security at the application layer. Essentially, WAF provides all your web applications a secure solution which ensures the data and web applications are safe. 
&lt;br/&gt;&lt;br/&gt;
A web application firewall applies a set of rules to HTTP conversation to identify and restrict the attacks of cross site scripting, SQL injections etc. You can also get web application framework and web based commercial tools, for providing security to web applications. Web Application Firewalls allows you to customize the rules by identifying and blocking malicious content. Some of the most popular and widely used open source web application firewalls for web application security are – 

&lt;a name='more'&gt;&lt;/a&gt;
&lt;ol&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="modsecurity--trustwave-spiderlabs-" href="http://www.modsecurity.org/" title="ModSecurity (Trustwave SpiderLabs)" &gt;ModSecurity (Trustwave SpiderLabs)&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="modsecurity--trustwave-spiderlabs-" href="http://www.modsecurity.org/" title="ModSecurity (Trustwave SpiderLabs)" &gt;&lt;img height="315px" width="400px" title="ModSecurity (Trustwave SpiderLabs)" src="http://4.bp.blogspot.com/-V4FTIA4Rqq8/Tg4MIyKMibI/AAAAAAAAAws/z68xKcgctx4/s400/ModSecurity.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
ModSecurity is one of the oldest and widely used open source web application firewall which can detect application level threats on internet, and provides security against a range of security issues to web applications. It provides non viral open sources license and it can be integrated to Apache programs. Recently, ModSecurity released the version 2.6.0 which provides features for safe browsing API integration, sensitive data tracking and data modification features.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="aqtronix-webknight" href="http://www.aqtronix.com/?PageID=99" title="AQTRONIX WebKnight" &gt;AQTRONIX WebKnight&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="aqtronix-webknight" href="http://www.aqtronix.com/?PageID=99" title="AQTRONIX WebKnight" &gt;&lt;img height="315px" width="400px" title="AQTRONIX WebKnight" src="http://4.bp.blogspot.com/-v3tgED-UUEs/Tg4L7_UYMEI/AAAAAAAAAwE/nLz30a0l1nY/s400/Aqtronix.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
AQTRONIX WebKnight is an open source application firewall designed specifically for web servers and IIS, and it is licensed through the GNU – General Public License. It provides the features of buffer overflow, directory traversal, encoding and SQL injection to identify / restrict the attacks.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="esapi-waf" href="https://www.owasp.org/index.php/The_ESAPI_Web_Application_Firewall_%28ESAPI_WAF%29" title="ESAPI WAF" &gt;ESAPI WAF&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="esapi-waf" href="https://www.owasp.org/index.php/The_ESAPI_Web_Application_Firewall_%28ESAPI_WAF%29" title="ESAPI WAF" &gt;&lt;img height="315px" width="400px" title="ESAPI WAF" src="http://4.bp.blogspot.com/-zCGoa3oI7Ao/Tg4L8Pejf6I/AAAAAAAAAwU/0n-BKIngXBI/s400/ESAPIWAF.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
ESAPI WAF is developed by Aspect Security and it is designed to provide protection at the application layer instead of network layer. It is a Java based WAF which provides complete security from online attacks. Some of the unique features of the solution include outbound filtering features which reduce information leakage. It is configuration driven and not code based, and it enables easy installation by just adding configuration details in the text file.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="webcastellum" href="http://www.webcastellum.org/" title="WebCastellum" &gt;WebCastellum&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="webcastellum" href="http://www.webcastellum.org/" title="WebCastellum" &gt;&lt;img height="315px" width="400px" title="WebCastellum" src="http://4.bp.blogspot.com/-_Fm2mBcXJNA/Tg4MKDTbmFI/AAAAAAAAAxM/S1JsK2PfSG8/s400/WebCastellum.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
WebCastellum is a Java based web application firewall which can protect application against cross site scripting, SQL injections, command injections, parameter manipulation, and it can be integrated easily to a java based application. It is based on new technology and it can use existing code to provide protection.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="binarysec" href="http://www.binarysec.com/cms/index.html" title="Binarysec" &gt;Binarysec&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="binarysec" href="http://www.binarysec.com/cms/index.html" title="Binarysec" &gt;&lt;img height="315px" width="400px" title="Binarysec" src="http://1.bp.blogspot.com/-Mxd49d345CA/Tg4L8HWoqNI/AAAAAAAAAwM/bBR_oJ7Yvm8/s400/BinarySec.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
Binarysec is web application software firewall for Apache, and it protects applications against illegitimate HTTP and blocks suspicious requests as well. It provides protection against cross site scripting, commend injections, parameter tampering, buffer overflow, directory traversal, SQL injection and attack obstruction. It takes not more than 10 minutes to install the software, and its user interface can manage Apache servers and many sites on one machine.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="guardian-jumperz-net" href="http://www.jumperz.net/index.php" title="Guardian@JUMPERZ.NET" &gt;Guardian@JUMPERZ.NET&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="guardian-jumperz-net" href="http://www.jumperz.net/index.php" title="Guardian@JUMPERZ.NET" &gt;&lt;img height="315px" width="400px" title="Guardian@JUMPERZ.NET" src="http://3.bp.blogspot.com/--XN7ofwpm18/Tg4L8mMY3UI/AAAAAAAAAwc/4Tcxw3v5FOs/s400/GuardianJumperz.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
Guardian@JUMPERZ.NET is an open source application layer firewall for HTTPS / HTTP and it assesses the HTTP / HTTPS traffic to protect the web application from external attacks. Guardian@JUMPERZ.NET immediately disconnects the TCP connection when the application comes in contact with a malicious / unauthorized request.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="openwaf" href="http://openwaf.org/" title="OpenWAF" &gt;OpenWAF&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="openwaf" href="http://openwaf.org/" title="OpenWAF" &gt;&lt;img height="315px" width="400px" title="OpenWAF" src="http://1.bp.blogspot.com/-WEjogogZKmw/Tg4MIw_VszI/AAAAAAAAAw0/Y3eB1wVcvmU/s400/openWAF.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
Art of defense is a San Francisco based web application security provider which started a project on open source OpenWAF in February 2011. It’s also the first company to provide distributed web application firewall for Apache servers.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="ironbee" href="https://www.ironbee.com/" title="Ironbee" &gt;Ironbee&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="ironbee" href="https://www.ironbee.com/" title="Ironbee" &gt;&lt;img height="315px" width="400px" title="Ironbee" src="http://2.bp.blogspot.com/-cnVZcA3Ajh0/Tg4L9EXt8MI/AAAAAAAAAwk/LqqE9X8FQ0o/s400/IronBee.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
Qualys created cloud based open source web application firewall - Ironbee which examines the HTTP instead of the traditional IP packets to evaluate a data. It can even track attacks on cross site scripting code. Ironbee is published through Apache License version 2 and it provides no copyright assignment. It has modular structure and is quite easy to use.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="profense" href="http://www.zionsecurity.com/solutions/implementation/web-application-firewall.aspx" title="Profense" &gt;Profense&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="profense" href="http://www.zionsecurity.com/solutions/implementation/web-application-firewall.aspx" title="Profense" &gt;&lt;img height="315px" width="400px" title="Profense" src="http://2.bp.blogspot.com/-WXxSAUmCGv8/Tg4MJSkgmZI/AAAAAAAAAw8/6dLTKwzsJok/s400/Profense.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
ZION security offers an open source web application firewall similar to ModSecurity, and is called Profense. The web application firewall provided by Zion is essentially a Layer-7 firewall (which is also called “proxy firewall”) and it inspects the traffic to block content.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="smoothwall" href="http://www.smoothwall.net/live/index.php" title="Smoothwall" &gt;Smoothwall&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="smoothwall" href="http://www.smoothwall.net/live/index.php" title="Smoothwall" &gt;&lt;img height="315px" width="400px" title="Smoothwall" src="http://3.bp.blogspot.com/-sNDxiu7KCKE/Tg4MJsVISsI/AAAAAAAAAxE/HEhLffYIcvM/s400/smoothWall.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
Smoothwall provides strong web security tools to manage emails. The open source web filtering engine of Smoothwall is called DansGuardian. It has flexible user rules and a fully integrated component for web filtering and security. What’s more, it provides authenticated network access and traffic blocking. Smoothwall free firewall has security hardened Linux GNU OS too.
&lt;br/&gt;&lt;br/&gt;



&lt;/ol&gt;
&lt;br/&gt;&lt;br/&gt;

Internet based protection is also provided by companies which provide security at the network layer with features such as packet filter. Besides, there are some other types of firewalls which are designed to ensure security of the database. Therefore, the criteria for selecting an open source WAF should be the types of vulnerabilities the WAF can prevent and the exact requirements that your company is having. This list of open source web application firewalls would hence assist you in determining the apt WAF for Webapp security. 

&lt;br/&gt;&lt;br/&gt;

Hope you found this list useful! What is your experience with WAF? Please don't forget to share with me in comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-4268753494041635673?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=do-FfPV8_-I:QqdfZznde6E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=do-FfPV8_-I:QqdfZznde6E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=do-FfPV8_-I:QqdfZznde6E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=do-FfPV8_-I:QqdfZznde6E:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=do-FfPV8_-I:QqdfZznde6E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=do-FfPV8_-I:QqdfZznde6E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=do-FfPV8_-I:QqdfZznde6E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=do-FfPV8_-I:QqdfZznde6E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=do-FfPV8_-I:QqdfZznde6E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=do-FfPV8_-I:QqdfZznde6E:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=do-FfPV8_-I:QqdfZznde6E:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/do-FfPV8_-I" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cTQhm8xaAGOVWLi_icNLqnuFQVA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cTQhm8xaAGOVWLi_icNLqnuFQVA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cTQhm8xaAGOVWLi_icNLqnuFQVA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cTQhm8xaAGOVWLi_icNLqnuFQVA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=z6Ztf44JXTo:QqdfZznde6E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=z6Ztf44JXTo:QqdfZznde6E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=z6Ztf44JXTo:QqdfZznde6E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=z6Ztf44JXTo:QqdfZznde6E:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/do-FfPV8_-I/opensource-web-application-firewall-waf.html</link><author>noreply@blogger.com (Sachin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-V4FTIA4Rqq8/Tg4MIyKMibI/AAAAAAAAAws/z68xKcgctx4/s72-c/ModSecurity.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.fromdev.com/2011/07/opensource-web-application-firewall-waf.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-1061465500844959809</guid><pubDate>Fri, 24 Jun 2011 17:55:00 +0000</pubDate><atom:updated>2011-12-21T16:47:23.015-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CDN</category><category domain="http://www.blogger.com/atom/ns#">OpenSource</category><category domain="http://www.blogger.com/atom/ns#">Tips</category><title>10 Excellent Free Open Source Projects to create your own CDN - Content Delivery Network</title><description>A content delivery network helps to host content such as images, media files, static content and style sheets of a large website by reproducing a copy of data through the various nodes of a network. Additionally, content delivery software helps to reduce load of websites and to improve downloading time of the websites. CDN is not just software; instead, it is a mix of hardware and software which helps to solve the problem of web content downloading and management using synchronization, logging, authentication and load balancing.
&lt;a name='more'&gt;&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;

Here is the list of open source projects which can be used to create your own CDN – 

&lt;ol&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="cacheboy" href="http://cacheboy.net/" title="Cacheboy" &gt;Cacheboy&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="cacheboy" href="http://cacheboy.net/" title="Cacheboy" &gt;&lt;img height="315px" width="400px" title="Cacheboy" src="http://4.bp.blogspot.com/-zYj6pORR0tw/TgTpZd9QdPI/AAAAAAAAAu8/QWlY7Zf696g/s400/Cacheboy.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
Cacheboy provides an open platform to provide efficient content delivery. The open source project’s mirror infrastructure is donated to service providers across the world and these mirrors are connected through internet. The project redirects the user to a mirror close to the user’s location. Hence Cacheboy essentially works through mirrors and it is licensed under GPLv3 license.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="mod-cdn---apache-module" href="http://www.voxel.net/mod_cdn" title="Mod CDN - Apache Module" &gt;Mod CDN - Apache Module&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="mod-cdn---apache-module" href="http://www.voxel.net/mod_cdn" title="Mod CDN - Apache Module" &gt;&lt;img height="315px" width="400px" title="Mod CDN - Apache Module" src="http://2.bp.blogspot.com/-uLTiPrFattI/TgTpmBj3PqI/AAAAAAAAAvk/PLzJoaeNemc/s400/modCDN.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
Mod_cdn is a Apache Module developed at Voxwl and it helps in sending proper headers and validating authentication tokens. It can be installed and configured at customer’s server and it is licensed under GPL v2 license. There is no package for Mod_cdn and the user will have to compile from the source.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="coralcdn" href="http://www.coralcdn.org/" title="CoralCDN" &gt;CoralCDN&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="coralcdn" href="http://www.coralcdn.org/" title="CoralCDN" &gt;&lt;img height="315px" width="400px" title="CoralCDN" src="http://2.bp.blogspot.com/-slrvxlHC3hs/TgTo41QwOyI/AAAAAAAAAu0/Pne6cqS7BnA/s400/CoralCDN.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
CoralCDN is one of the most popular and free peer-to-peer CDN which has proxies and name servers across the world. Coral replicates content and allows users to publish content. It allows easy access to the content of the websites and it can get cached objects through network too. It avoids hot spots in its infrastructure to provide high speed service. The software uses novel indexing method DSHT and creates self organizing clusters of nodes to get information from a nearby node. CoralCDN is managed by a Princeton SNS group.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="opencdn" href="http://labtel.ing.uniroma1.it/opencdn/" title="OpenCDN" &gt;OpenCDN&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="opencdn" href="http://labtel.ing.uniroma1.it/opencdn/" title="OpenCDN" &gt;&lt;img height="315px" width="400px" title="OpenCDN" src="http://1.bp.blogspot.com/-OIj0k7735rA/TgTpmZ5N4hI/AAAAAAAAAvs/cyiE7Im8vNU/s400/OpenCDN.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
OpenCDN is an application level CDN which replicates content and splits the live and recorded content. OpenCDN is coded in Perl and it uses Relay technology to split media packets. The control communication between the nodes and origins is done through XML – RPC. It is licensed through Perl Artistic License and can be downloaded from &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=121628&amp;package_id=132709"&gt;Download OpenCDN &lt;/a&gt;.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="phloem" href="http://code.google.com/p/phloem/" title="Phloem" &gt;Phloem&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="phloem" href="http://code.google.com/p/phloem/" title="Phloem" &gt;&lt;img height="315px" width="400px" title="Phloem" src="http://4.bp.blogspot.com/-DPSDRNNBEys/TgTpmhVvetI/AAAAAAAAAv8/1llahCfLzIc/s400/phloem.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
Phloem is a light weight open source CDN which has the base layer called Xylem, and the CDN is written in Perl. It is licensed under GNU GPL v3. Its code can be found at &lt;a href="http://code.google.com/p/phloem/" &gt; Download Phloem&lt;/a&gt;

&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="p-p-next" href="http://www.p2p-next.org/" title="P2P-Next" &gt;P2P-Next&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="p-p-next" href="http://www.p2p-next.org/" title="P2P-Next" &gt;&lt;img height="315px" width="400px" title="P2P-Next" src="http://2.bp.blogspot.com/-CMKhMfG0hcE/TgTpmu95KwI/AAAAAAAAAv0/PMyLp4vplkU/s400/p2pNext.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
P2P-Next is next generation Peer-to-Peer content delivery software which can be used for simultaneous transmission to millions of people and it uses multicasting to send data to millions of users at one time. The data stream is distributed through the local servers and the live events can be re-broadcasted to local viewers. Since IP routers do not support multicasting, optimized uni-cast, broadcast and multicast mechanism is adopted through P2P. The provider has partners in 12 countries and it is based on open standards open source.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="mirrorbrain" href="http://mirrorbrain.org/" title="MirrorBrain" &gt;MirrorBrain&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="mirrorbrain" href="http://mirrorbrain.org/" title="MirrorBrain" &gt;&lt;img height="315px" width="400px" title="MirrorBrain" src="http://1.bp.blogspot.com/-Lwzc1PYk5K8/TgTpaQHFE0I/AAAAAAAAAvc/sGfLPTrbsl0/s400/mirrorBrain.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
Mirrorbrain provides mirror servers to run content delivery networks. It has a download redirector which redirects the request from the browser to the local mirror server. It can be used to generate torrents in real-time. It is licensed through GPL and three Apache modules of Mirrorbrain is licensed under Apache license.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="codeen" href="http://codeen.cs.princeton.edu/" title="CoDeeN" &gt;CoDeeN&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="codeen" href="http://codeen.cs.princeton.edu/" title="CoDeeN" &gt;&lt;img height="315px" width="400px" title="CoDeeN" src="http://1.bp.blogspot.com/-uQvoVDcfDCU/TgTpZdFRWMI/AAAAAAAAAvE/R0OyxcNxGmY/s400/CoDeen.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
CoDeeN is an academic CDN which is built on the top of PlanetLab at Princetown University and it has been tested through high performance proxy servers. The server works as server surrogates and request redirectors. It provides fast and robust web content, and many projects are associated to CoDeen such as CoBlitz, CoDeploy, CoDNS, CoTop, CoMon and CoVisualize. CoBlitz is web based distribution service which provides distribution of large files.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="mediaport-net" href="http://sourceforge.net/projects/mediaport/" title="Mediaport.net" &gt;Mediaport.net&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="mediaport-net" href="http://sourceforge.net/projects/mediaport/" title="Mediaport.net" &gt;&lt;img height="315px" width="400px" title="Mediaport.net" src="http://3.bp.blogspot.com/-hkxnHDtJUOI/TgTpaAREBFI/AAAAAAAAAvU/oa-XsFe5GAY/s400/mediaport.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
Mediaport.net is a cooperative CDN which uses peer-to-peer infrastructure for web hosting and it is licensed under BSD license.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="firestarter-content-delivery-system" href="http://sourceforge.net/projects/firestartergame/" title="Firestarter Content Delivery System" &gt;Firestarter Content Delivery System&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;a name="firestarter-content-delivery-system" href="http://sourceforge.net/projects/firestartergame/" title="Firestarter Content Delivery System" &gt;&lt;img height="315px" width="400px" title="Firestarter Content Delivery System" src="http://4.bp.blogspot.com/-7nzHfcvQODo/TgTpZy7mqfI/AAAAAAAAAvM/nYfnG8VDMDA/s400/firestarter.jpg"/&gt;&lt;/a&gt; 
&lt;br/&gt;&lt;br/&gt; 
Firestarter is a cross platform content delivery system which provides distribution of games, live videos, audio, data and different types of multimedia content. It is licensed under GNU General Public License.
&lt;br/&gt;&lt;br/&gt;


&lt;/ol&gt;

CDN nodes are located in various geographical locations and these nodes work in cooperation with the requests of the client. Content delivery networks distribute the assets and use various techniques such as server load balancing, web caches, dynamic metafile generation, ‘anycasting’ and HTML rewriting to reduce client response time.
&lt;br/&gt;&lt;br/&gt;

It’s essential that the CDN is located near the targeted customer, since that would result in faster page loads and resultantly, the customers browsing experience will be enhanced. If you are planning to set up a geo targeted website, an Opensource software listed in this article would enable you to quickly start a CDN. However, you may require hardware for running these. On the other hand, if you are building a website which has a worldwide presence, you should opt for niche CDN services such as Akamai.
&lt;br/&gt;&lt;br/&gt;
There are a number of popular CDNs, besides the ones mentioned in this list. Please share with us in comments if you have used some other CDNs which you were impressed with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-1061465500844959809?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=lTdA5emSKQw:bBQreu4be_s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=lTdA5emSKQw:bBQreu4be_s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=lTdA5emSKQw:bBQreu4be_s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=lTdA5emSKQw:bBQreu4be_s:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=lTdA5emSKQw:bBQreu4be_s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=lTdA5emSKQw:bBQreu4be_s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=lTdA5emSKQw:bBQreu4be_s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=lTdA5emSKQw:bBQreu4be_s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=lTdA5emSKQw:bBQreu4be_s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=lTdA5emSKQw:bBQreu4be_s:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=lTdA5emSKQw:bBQreu4be_s:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/lTdA5emSKQw" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eHYtkEJcfg5G_sQf2gLF8b_1u6o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eHYtkEJcfg5G_sQf2gLF8b_1u6o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eHYtkEJcfg5G_sQf2gLF8b_1u6o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eHYtkEJcfg5G_sQf2gLF8b_1u6o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=MBwWJpmNpiY:bBQreu4be_s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=MBwWJpmNpiY:bBQreu4be_s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=MBwWJpmNpiY:bBQreu4be_s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=MBwWJpmNpiY:bBQreu4be_s:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/lTdA5emSKQw/create-cdn-content-delivery-network.html</link><author>noreply@blogger.com (Sachin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-zYj6pORR0tw/TgTpZd9QdPI/AAAAAAAAAu8/QWlY7Zf696g/s72-c/Cacheboy.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.fromdev.com/2011/06/create-cdn-content-delivery-network.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-8201163440440117270</guid><pubDate>Mon, 06 Jun 2011 22:51:00 +0000</pubDate><atom:updated>2011-07-05T15:45:52.036-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">CDN</category><category domain="http://www.blogger.com/atom/ns#">Tips</category><category domain="http://www.blogger.com/atom/ns#">.Upcoming</category><title>15 Excellent and Cheaper Content Delivery Network (CDN) Alternatives to Akamai</title><description>A content delivery network system is a collection of internet servers which serves about one third of the most visited websites. The system improves speed of access for download-able data, applications, queries, web objects and media streams, as it increases the access bandwidth and reduces latency. 
&lt;br/&gt;&lt;br/&gt;
It contains copies of data located at different nodes of the selected servers, providing service from servers which are located geographically close to the user, hence saving access time. Furthermore, this unique method assists in reducing load on web application and improves scalability. There are several types of Content Deliver Networks which includes third party CDN providers too.
&lt;br/&gt;&lt;br/&gt;
&lt;a name='more'&gt;&lt;/a&gt;
&lt;a href="http://www.akamai.com/html/about/facts_figures.html"&gt;Akamai&lt;/a&gt; is one of the most famous CDNs which support many of the Fortune 50 sites. Akamai delivers between 15-30% of all Web traffic. Though Akamai is the leader, if your work is restricted to the US, there is no need to spend on Akamai as you can go for other efficient but cheap alternatives, such as the ones mentioned in this list.
&lt;br/&gt;&lt;br/&gt;
Here is a list of 15 popular CDN alternatives to Akamai–
&lt;ol&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="coralcdn" href="http://www.coralcdn.org/" title="CoralCDN" &gt;CoralCDN&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-7qqDTbSAMO4/Te1RjxM-WrI/AAAAAAAAAs0/Eg7KnJigFUw/s1600/CoralCDN.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="315" width="400" src="http://1.bp.blogspot.com/-7qqDTbSAMO4/Te1RjxM-WrI/AAAAAAAAAs0/Eg7KnJigFUw/s400/CoralCDN.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
 
&lt;br/&gt;&lt;br/&gt; 
CoralCDN is a free CDN and the source code is available through GNU GPL. CoralCDN locates cached objects and helps to improve the availability of data. It is built on key indexing infrastructure which is called Coral. The drawback of Coral is that it can be blocked by a few antivirus software and web filtering packages (Websense and Open DNS.)
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="amazon-cloudfront" href="http://aws.amazon.com/cloudfront/" &gt;Amazon CloudFront&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-xWrjcqEoD00/Te1b9WhAm3I/AAAAAAAAAus/ZSCVndqkA9w/s1600/AmazonCloudFront.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="253" width="400" src="http://1.bp.blogspot.com/-xWrjcqEoD00/Te1b9WhAm3I/AAAAAAAAAus/ZSCVndqkA9w/s400/AmazonCloudFront.jpg" /&gt;&lt;/a&gt;&lt;/div&gt; 
&lt;br/&gt;&lt;br/&gt; 
Amazon CloudFront provides cloud computing, database and storage. Amazon costs $0.075 per 10,000 HTTP requests and $0.0100 per 10,000 HTTPS requests in the US. The rates vary with region. Users can also go for reserved capacity pricing, if the usage level is lower than 10 TB per month in one region.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="cachefly" href="http://www.cachefly.com/" title="CacheFly" &gt;CacheFly&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-sE7GDUrbvSs/Te1Rkc1IibI/AAAAAAAAAtE/1QumgxJpkmU/s1600/cacheFly.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="261" width="400" src="http://1.bp.blogspot.com/-sE7GDUrbvSs/Te1Rkc1IibI/AAAAAAAAAtE/1QumgxJpkmU/s400/cacheFly.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
 
&lt;br/&gt;&lt;br/&gt; 
CacheFly is a reliable CDN which ranked at #1 in a website comparison of 24 CDNs for efficiency by ‘Cloudclimate.com’. The custom plan of CacheFly costs $0.03 / GB and a risk free trial is provided for 30 days. The minimum package is available at $99 / month.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="maxcdn" href="http://www.maxcdn.com/" &gt;MaxCDN&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-z9IScfTvREU/Te1ZqSWzpGI/AAAAAAAAAuM/2sau42N8QlU/s1600/maxCDN.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="256" width="400" src="http://4.bp.blogspot.com/-z9IScfTvREU/Te1ZqSWzpGI/AAAAAAAAAuM/2sau42N8QlU/s400/maxCDN.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
 
&lt;br/&gt;&lt;br/&gt; 
Max CDN provides easy uploading, GZip compression (unlike Cloudfront), is compatible with shared hosts, provides caching of database / pages / posts / RSS and is easy to install as well. It is priced at 2.9 cents for a GB and it takes $39.95 annually for 1000GB. Its major drawback is that it does not have sufficient nodes in Asia.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="procdn" href="http://mediatemple.net/webhosting/procdn/" title="ProCDN" &gt;ProCDN&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-6Fzref1QtAk/Te1Zq5fzGAI/AAAAAAAAAuU/PuzoWxhZdwI/s1600/proCDN.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="248" width="400" src="http://2.bp.blogspot.com/-6Fzref1QtAk/Te1Zq5fzGAI/AAAAAAAAAuU/PuzoWxhZdwI/s400/proCDN.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;br/&gt;&lt;br/&gt; 
ProCDN provides Grid Service and has a dedicated server. It is provides fast access to data and is one of the most affordable providers. It is in fact the first company authorized to host iASP for Macromedia’s Flash Communication Server and Linux. ProCDN’s rate is $20 per month for 200 GB data transfer.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="bitgravity" href="http://bitgravity.com/" title="BitGravity" &gt;BitGravity&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-EnhOt1GruqU/Te1RkFOcDiI/AAAAAAAAAs8/uOb1wmfEJuw/s1600/bitGravity.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="259" width="400" src="http://4.bp.blogspot.com/-EnhOt1GruqU/Te1RkFOcDiI/AAAAAAAAAs8/uOb1wmfEJuw/s400/bitGravity.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
 
&lt;br/&gt;&lt;br/&gt; 
BitGravity was established in 2006 and has nodes across North America and Europe. It provides delivery of software, audio, video and advertisements. It is one of the first CDNs which allowed interactive broadcasting. The CMS only package is priced at $179 / month.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="limelight" href="http://www.limelightnetworks.com/" title="Limelight" &gt;Limelight&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-S3fnig9hMhc/Te1ZqBAycVI/AAAAAAAAAuE/qvPivALBeig/s1600/lifeLightCDN.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="281" width="400" src="http://2.bp.blogspot.com/-S3fnig9hMhc/Te1ZqBAycVI/AAAAAAAAAuE/qvPivALBeig/s400/lifeLightCDN.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
 
&lt;br/&gt;&lt;br/&gt; 
Limelight has 900 user accesses across the globe and it provides features such as site caching, dynamic ad insertion, streaming etc. The service is priced at minimum $0.50 per GB for 500GB - 2 TB.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="cdnetworks" href="http://www.us.cdnetworks.com/" title="CDNetworks" &gt;CDNetworks&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-7lQWFkfQcso/Te1RkjQFWPI/AAAAAAAAAtM/hIt9NT22ZzI/s1600/cdNetworks.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="252" width="400" src="http://3.bp.blogspot.com/-7lQWFkfQcso/Te1RkjQFWPI/AAAAAAAAAtM/hIt9NT22ZzI/s400/cdNetworks.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
 
&lt;br/&gt;&lt;br/&gt; 
CDNetworks is full service CDN which provides video streaming, image caching and large volume downloads. It has more than 80 POPs in 52 geographical regions and it has one of the best transfer performances. It is priced at $0.50 per GB.
&lt;br/&gt;&lt;br/&gt;


&lt;h2&gt;&lt;li&gt;&lt;a name="swiftway" href="http://www.swiftway.co.uk/links/cdn/" title="Swiftway" &gt;Swiftway&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-w7J8oP9e19s/Te1ZrbrAGgI/AAAAAAAAAuk/Xmo4bVFtHcU/s1600/swiftwayCDN.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="269" width="400" src="http://1.bp.blogspot.com/-w7J8oP9e19s/Te1ZrbrAGgI/AAAAAAAAAuk/Xmo4bVFtHcU/s400/swiftwayCDN.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

 
&lt;br/&gt;&lt;br/&gt; 
Swiftway is a UK based hosting service which offers many different packages. It has 8 nodes in North America and Europe and you have to pay 39.95 € for 2000 GB data transfer per month.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="edgecast" href="http://www.edgecast.com/" title="Edgecast" &gt;Edgecast&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-u1zrs1aPzX0/Te1ZXHHd2KI/AAAAAAAAAts/OoyDuy2ADCQ/s1600/edgeCastCDN.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="268" width="400" src="http://1.bp.blogspot.com/-u1zrs1aPzX0/Te1ZXHHd2KI/AAAAAAAAAts/OoyDuy2ADCQ/s400/edgeCastCDN.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
 
&lt;br/&gt;&lt;br/&gt; 
Edgecast is a Los Angeles based CDN and claims to provide the fastest access to the biggest sites. It is priced at $250 for 500GB per month.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="cotendo" href="http://www.cotendo.com/" title="Cotendo" &gt;Cotendo&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-gfKggDMB0Rg/Te1ZWEgcDYI/AAAAAAAAAtc/khvlDp2cpSs/s1600/contendoCDN.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="268" width="400" src="http://4.bp.blogspot.com/-gfKggDMB0Rg/Te1ZWEgcDYI/AAAAAAAAAtc/khvlDp2cpSs/s400/contendoCDN.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
 
&lt;br/&gt;&lt;br/&gt; 
Cotendo provides high efficiency and secured delivery options through SSL. It has CDN balancer to distribute content and it is priced at minimum $400 for one million DNS queries per month.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="softlayer" href="http://www.softlayer.com/cloudlayer/cdn/" title="SoftLayer" &gt;SoftLayer&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-_3iEDqNH6Lo/Te1ZrLaLOkI/AAAAAAAAAuc/ffZpHlwDjZE/s1600/softLayerCND.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="279" width="400" src="http://3.bp.blogspot.com/-_3iEDqNH6Lo/Te1ZrLaLOkI/AAAAAAAAAuc/ffZpHlwDjZE/s400/softLayerCND.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
 
&lt;br/&gt;&lt;br/&gt; 
SoftLayer provides software for streaming, organizing and storing website content. It provides 250GB bandwidth for $45.00 and pay as you go starts at ($0.20 per/GB). It is recommended for good service and reliability.
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="gogrid" href="http://www.gogrid.com/" title="GoGrid" &gt;GoGrid&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-0Fe55Z0FIr8/Te1ZXT1eJ7I/AAAAAAAAAt0/xrJc_hhKZAM/s1600/goGridCDN.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="249" width="400" src="http://3.bp.blogspot.com/-0Fe55Z0FIr8/Te1ZXT1eJ7I/AAAAAAAAAt0/xrJc_hhKZAM/s400/goGridCDN.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;br/&gt;&lt;br/&gt; 
GoGrid a reliable provider which is priced as pay-as-you-go, and there are no contracts on minimum usage. It has global footprint with nineteen POPs in four continents. It charges minimum $0.25/GB.
&lt;br/&gt;&lt;br/&gt;


&lt;h2&gt;&lt;li&gt;&lt;a name="cloudlayer" href="http://www.softlayer.com/cloudlayer/cdn/" title="CloudLayer" &gt;CloudLayer&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-mKo9KIcH5Jg/Te1Rk0lgu8I/AAAAAAAAAtU/v4oVtvG4aL8/s1600/cloudLayerCDN.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="268" width="400" src="http://3.bp.blogspot.com/-mKo9KIcH5Jg/Te1Rk0lgu8I/AAAAAAAAAtU/v4oVtvG4aL8/s400/cloudLayerCDN.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
 
&lt;br/&gt;&lt;br/&gt; 
CloudLayer is available on two distribution options – Origin Pull and POP Pull. It provides both monthly packages ($45 / month) and pay-as-you-go ($0.20 per GB).
&lt;br/&gt;&lt;br/&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name="level-3" href="http://www.level3.com/" title="Level 3" &gt;Level 3&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt; 
&lt;br/&gt;&lt;br/&gt; 
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-qbRp4QM29Pg/Te1ZX9Ar6XI/AAAAAAAAAt8/EgAyCNzoJ-Y/s1600/level3CDN.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="293" width="400" src="http://2.bp.blogspot.com/-qbRp4QM29Pg/Te1ZX9Ar6XI/AAAAAAAAAt8/EgAyCNzoJ-Y/s400/level3CDN.jpg" /&gt;&lt;/a&gt;&lt;/div&gt; 
&lt;br/&gt;&lt;br/&gt; 
Level 3 has comprehensive CDN service which allows caching, streaming, delivering content, secure delivery as well as storage.
&lt;br/&gt;&lt;br/&gt;

&lt;/ol&gt;

There are a number of other popular CDNs, besides the ones mentioned in above list. Do let us know in comments section if you have used some other CDNs which you were impressed with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-8201163440440117270?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=e0qslytxeKk:JDwzHtVQ_-U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=e0qslytxeKk:JDwzHtVQ_-U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=e0qslytxeKk:JDwzHtVQ_-U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=e0qslytxeKk:JDwzHtVQ_-U:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=e0qslytxeKk:JDwzHtVQ_-U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=e0qslytxeKk:JDwzHtVQ_-U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=e0qslytxeKk:JDwzHtVQ_-U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=e0qslytxeKk:JDwzHtVQ_-U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=e0qslytxeKk:JDwzHtVQ_-U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=e0qslytxeKk:JDwzHtVQ_-U:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=e0qslytxeKk:JDwzHtVQ_-U:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/e0qslytxeKk" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kTiVWCFkgL0xbDgQfBErGQeBpkQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kTiVWCFkgL0xbDgQfBErGQeBpkQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kTiVWCFkgL0xbDgQfBErGQeBpkQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kTiVWCFkgL0xbDgQfBErGQeBpkQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=L583PJxGsLs:JDwzHtVQ_-U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=L583PJxGsLs:JDwzHtVQ_-U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=L583PJxGsLs:JDwzHtVQ_-U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=L583PJxGsLs:JDwzHtVQ_-U:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/e0qslytxeKk/content-delivery-network-alternative.html</link><author>noreply@blogger.com (Sachin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-7qqDTbSAMO4/Te1RjxM-WrI/AAAAAAAAAs0/Eg7KnJigFUw/s72-c/CoralCDN.jpg" height="72" width="72" /><thr:total>7</thr:total><feedburner:origLink>http://www.fromdev.com/2011/06/content-delivery-network-alternative.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-4864646494170795028</guid><pubDate>Tue, 31 May 2011 18:09:00 +0000</pubDate><atom:updated>2011-07-05T15:41:20.141-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">OpenSource</category><category domain="http://www.blogger.com/atom/ns#">Tips</category><title>10 Best Free Open Source Ecommerce Shopping Cart Applications For Business</title><description>To design and promote a new ecommerce website, you require deploying efficacious marketing, SEO tools and most importantly, an efficient shopping cart software. Shopping cart software should integrate an easy-to-use interface, safe transaction capability, good PCI security standards and a high speed service during the shopping transaction. Here is a list of the top 10 free open source e-commerce shopping cart applications: 
&lt;a name='more'&gt;&lt;/a&gt;

&lt;ol&gt;
&lt;h2&gt;&lt;li&gt;&lt;a name="magento" href="http://www.magentocommerce.com/"&gt;Magento&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.magentocommerce.com/" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="237" width="400" src="http://4.bp.blogspot.com/-H2QYYikC27w/TeUp6wUJ3wI/AAAAAAAAAsA/mJnGdOcGJU4/s400/Magento.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class='clear'&gt;&lt;/div&gt;

Magento was developed in PHP by a Los Angeles based firm Varien, and it is used by more than thirty thousand merchants. It provides secure and robust ecommerce solution which follows the Zend Framework coding standard. It is used by big stores such as Samsung and Nespresso, and has a huge community support too. Its community edition is free and you can easily download, install and use it. What’s more, its Enterprise Edition provides features to boost sales such as coupons, shopping carts and SEO provisions. You although have to pay for the Enterprise Edition.

&lt;h2&gt;&lt;li&gt;&lt;a name="OsCommerce" href="http://www.oscommerce.com/"&gt;OsCommerce &lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.oscommerce.com/" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="175" width="400" src="http://3.bp.blogspot.com/-6VuD2wtJjdg/TeUqHYoqeuI/AAAAAAAAAsY/Mv8attVgGls/s400/osCommerce.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

OsCommerce is one of the most popular open source shopping cart tools and it is free to use under the GNU General Public License. It has a user friendly interface and it is used by more than 228,700 stores online. It can be installed easily through internet and can be enabled automatically in minutes. There are no limitations on the addition of products in various categories. The look and design of the forms can be changed by the users too. OsCommerce provides support for multiple currencies and the payment processing is integrated to multiple payment gateways which include 2Checkout.com, ChronoPay, PayNova, iPayment, Paypal, SecPay, PSIGate and TrustCommerce. About 5,800 add-ons are provided by OsCommerce, however some of the add-ons are not free.

&lt;h2&gt;&lt;li&gt;&lt;a name="apache-OFBiz" href="http://ofbiz.apache.org/"&gt;Apache OFBiz&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://ofbiz.apache.org/" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="262" width="400" src="http://4.bp.blogspot.com/-V_8J-jrn7zU/TeUqG6i5FoI/AAAAAAAAAsI/kRaXd5eTE_k/s400/Ofbiz.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

Apache Ofbiz provides open source ERP, open source E- business solution, open source CRM, SCM, MRP and other online applications. It provides highly scalable and secure ecommerce solution which can be used either as an out-of-box solution or customized as per the requirements of the users. Additionally, Ofbiz offers flexibility to access the code and its Apache Software Foundation provides community support for all the open source projects. 


&lt;h2&gt;&lt;li&gt;&lt;a name="KonaKart" href="http://www.konakart.com/"&gt;KonaKart&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.konakart.com/" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="250" width="400" src="http://1.bp.blogspot.com/-zwwTV4oZ8rs/TeUp6tNDqlI/AAAAAAAAAr4/j0UGnEnGRpY/s400/KonaKart.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

KonaKart provides free community edition shopping cart software for small businesses and you can get Enterprise Edition license for £3150 GBP per year. The customization code is provided as an open source, and it includes forms and classes providing payment and shipping modules. Some of the popular buyers of KonaKart are Tesco Mobile and Audi. KonaKart provides excellent shopping experience, promotions, SEO features, indexed searches, shipping, marketing, merchandising, analytical tools and internationalization features.

&lt;h2&gt;&lt;li&gt;&lt;a name="PrestaShop" href="http://www.prestashop.com/"&gt;PrestaShop&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-v09WlNw2UYA/TeUqHUC5wtI/AAAAAAAAAsg/qSoOrpy2eBo/s1600/PrestaShop.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="261" width="400" src="http://2.bp.blogspot.com/-v09WlNw2UYA/TeUqHUC5wtI/AAAAAAAAAsg/qSoOrpy2eBo/s400/PrestaShop.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

PrestaShop was launched in August 2007 and is written in PHP/MySQL. It offers complete online website, and has a software trial link, an integrated blog and wiki. You can download and use it for free. PrestaShop has more than 25,000 stores and provides CMS template, order status, customer evaluation forms, different payment modules and a huge community support. Moreover, the user supported forums have more than sixty thousand registered members. The monetary transactions made at the site can be directly sent to the bank account using latest security provisions.

&lt;h2&gt;&lt;li&gt;&lt;a name="Jentla" href="http://jentla.com/"&gt;Jentla&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://jentla.com/" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="257" width="400" src="http://3.bp.blogspot.com/-0qTd4MYyAlU/TeUp6fPeoCI/AAAAAAAAArw/O9lt_fwKpOU/s400/Jentla.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;


Jentla is a free open source e-commerce shopping cart application, which provides centralized system for management, and provides provisions for multisite text and image storage– a feature not found in other ecommerce applications. Additionally, Jentla has provisions for site grouping and personalization of forms. 

&lt;h2&gt;&lt;li&gt;&lt;a name="magento" href="http://www.zen-cart.com/"&gt;Zen Cart&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.zen-cart.com/" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="212" width="400" src="http://3.bp.blogspot.com/-gma6nKvgpck/TeUqHz2w0pI/AAAAAAAAAso/fUdY42_WYsU/s400/ZenCart.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

Zen Cart is designed for mid to big-sized stores, and provides open source solution with free installation. It has strong backend support and provides a HTML template system. Zen Cart is simple to use and has range of features such as email attachment, newsletter maker, options for pricing and a simple installation procedure. It provides provisions for certifications, referral tracking, and customer registrations. The payment gateway for Zen Cart includes PayPal and 2CheckOut.
&lt;h2&gt;&lt;li&gt;&lt;a name="Batavi" href="http://www.batavi.org/"&gt;Batavi&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.batavi.org/" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="245" width="400" src="http://3.bp.blogspot.com/-aho2PRUnFoM/TeUp57HkKVI/AAAAAAAAArg/RVSEt47nDi0/s400/Batavi.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

Batavi was built by a Dutch company and it provides free ecommerce solution. Its features include integrated product content, CMS and templates, and specific pricing based on customer groups. Batavi also has a huge community support.

&lt;h2&gt;&lt;li&gt;&lt;a name="DashCommerce" href="http://dashcommerce.org/"&gt;DashCommerce&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://dashcommerce.org/" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="246" width="400" src="http://3.bp.blogspot.com/-oN9ZL4WHXJM/TeUp6PvfMEI/AAAAAAAAAro/cb04J35oTE0/s400/DashCommerce.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

DashCommerce is built in ASP.Net and provides open source solutions. It has a powerful ecommerce solution which provides shopping carts, product catalogue, SSL based security, checkouts and order execution features. However, DashCommerce may not be suitable for small stores. 

&lt;h2&gt;&lt;li&gt;&lt;a name="OpenCart" href="http://www.opencart.com/"&gt;OpenCart&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.opencart.com/" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="232" width="400" src="http://4.bp.blogspot.com/-Epq56WZZ3OM/TeUqHB2k3uI/AAAAAAAAAsQ/EvkqN-Bywl0/s400/OpenCart.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;

Opencart is an open source shopping cart system which facilitates selling of multiple products simultaneously. Also, it can implement transactions in multiple currencies. You get 20 different options for payment and 8 modes of shipping as well. Besides, OpenCart is exceedingly user friendly and search engine friendly. 


&lt;/ol&gt;

There are a number of other free open source ecommerce shopping cart applications for business; however the feature sets and ease of use are not at par with the aforementioned applications.  All in all, the 10 ecommerce shopping cart applications discussed above are the most reliable, easy to use and feature rich open source free applications available for your business presently.

&lt;br/&gt;&lt;br/&gt;

Hope you find this list useful, What is the best eCommerce shopping cart application you are using? Please don't forget to share with me in comments.  


&lt;br/&gt;&lt;br/&gt;
Guest Post by: Soumik Mukherjee&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-4864646494170795028?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=BOYTHgnN4HY:fZd0IIcKUko:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=BOYTHgnN4HY:fZd0IIcKUko:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=BOYTHgnN4HY:fZd0IIcKUko:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=BOYTHgnN4HY:fZd0IIcKUko:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=BOYTHgnN4HY:fZd0IIcKUko:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=BOYTHgnN4HY:fZd0IIcKUko:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=BOYTHgnN4HY:fZd0IIcKUko:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=BOYTHgnN4HY:fZd0IIcKUko:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=BOYTHgnN4HY:fZd0IIcKUko:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=BOYTHgnN4HY:fZd0IIcKUko:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=BOYTHgnN4HY:fZd0IIcKUko:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/BOYTHgnN4HY" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ESnzLOKX8wW-QuDTNbsvGFM3UvA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ESnzLOKX8wW-QuDTNbsvGFM3UvA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ESnzLOKX8wW-QuDTNbsvGFM3UvA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ESnzLOKX8wW-QuDTNbsvGFM3UvA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=vp0eVnkpYdk:fZd0IIcKUko:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=vp0eVnkpYdk:fZd0IIcKUko:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=vp0eVnkpYdk:fZd0IIcKUko:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=vp0eVnkpYdk:fZd0IIcKUko:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/BOYTHgnN4HY/10-best-free-open-source-ecommerce.html</link><author>noreply@blogger.com (Sachin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-H2QYYikC27w/TeUp6wUJ3wI/AAAAAAAAAsA/mJnGdOcGJU4/s72-c/Magento.jpg" height="72" width="72" /><thr:total>7</thr:total><feedburner:origLink>http://www.fromdev.com/2011/05/10-best-free-open-source-ecommerce.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-1476466733910428898</guid><pubDate>Fri, 22 Apr 2011 00:35:00 +0000</pubDate><atom:updated>2011-09-01T16:34:22.481-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips</category><title>5 Best Core Java Books you must read as a developer</title><description>If you want success in JAVA, you do not need to enroll in a class. You could save a lot of money by simply reading a good book. When you refer to a good JAVA book, you are also more likely to get detailed and current information than you would from a teacher or from self-education since good JAVA books are written by authorities in the field, authorities with years of experience in JAVA coding and an educational background in the same. The fact that there are many options available is also a big plus. Below are some great options: &lt;a name='more'&gt;&lt;/a&gt; &lt;ol&gt;&lt;li&gt;&lt;h2&gt;&lt;a href='http://www.amazon.com/gp/product/0131872486/ref=as_li_tf_tl?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399353&amp;creativeASIN=0131872486'&gt;Thinking in Java&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.amazon.com/gp/product/0131872486/ref=as_li_tf_tl?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399353&amp;creativeASIN=0131872486" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="230" src="http://4.bp.blogspot.com/-yAInonN5lE4/TbDSeaPUWrI/AAAAAAAAArI/DU4Myxpm_MI/s320/ThinkingInJava.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;(By: Bruce Eckel) 
Thinking in Java is a great book. This award-winning book by Bruce Eckel is designed for those who want to migrate from other object-oriented languages such as C++ to JAVA. The book covers everything there is to know about JAVA and it brings readers up to speed with the latest features of JAVA 2. The book pays particular attention to object design and it covers different APIs in JAVA 2. Some of the notable topics that are covered include object-design basics, JAVA I/O classes, inheritance and polymorphism, deployment to JAR files, object lifetimes, exception handling, and multi-threading and persistence, among others. &lt;div class="clear"&gt;&lt;/div&gt;&lt;li&gt;&lt;h2&gt;&lt;a href='http://www.amazon.com/gp/product/032133678X/ref=as_li_tf_tl?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399353&amp;creativeASIN=032133678X'&gt;Java(TM) Puzzlers: Traps, Pitfalls, and Corner Cases&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.amazon.com/gp/product/032133678X/ref=as_li_tf_tl?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399353&amp;creativeASIN=032133678X" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" width="230"  src="http://2.bp.blogspot.com/-tBq_SiUt3s8/TbDSeKi_uAI/AAAAAAAAArA/-gVGJEA5X1E/s320/JavaPuzzlers.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;(By: Joshua Bloch , Neal Gafter) 
A well-liked option with JAVA students and teachers is Java(TM) Puzzlers: Traps, Pitfalls, and Corner Cases. The book by Joshua Bloch, a Jolt Award-winner, has many brainteasers about JAVA coding language and JAVA's core libraries. The book is intended to challenge those who have a working knowledge of the JAVA programming language. The 95 diabolical puzzlers in the book are grouped according to the features employed.  &lt;div class="clear"&gt;&lt;/div&gt;&lt;li&gt;&lt;h2&gt;&lt;a href='http://www.amazon.com/gp/product/0321356683/ref=as_li_tf_tl?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399353&amp;creativeASIN=0321356683'&gt;Effective Java (2nd Edition)&lt;/a&gt; &lt;/h2&gt;&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.amazon.com/gp/product/0321356683/ref=as_li_tf_tl?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399353&amp;creativeASIN=0321356683" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" width="230" src="http://3.bp.blogspot.com/-4yTAZfrs3xM/TbDUFZIz_iI/AAAAAAAAArQ/xhN2U7Cm1cs/s320/EffectiveJava.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;(By: Joshua Bloch) 
One of the most popular books on JAVA is Effective Java (2nd Edition). The book is written by a successful Java developer, Joshua Bloch. The strongest selling point of the book is the over 50 tips and best practices for writing a better JAVA code. The book offers advice on effective coding and it offers an insider insight into design choices that have been made in Sun's JAVA libraries over the years. The highly-readable book has 57 free-standing items in 9 chapters and it describes many idioms, patterns and anti-patterns.  &lt;div class="clear"&gt;&lt;/div&gt;&lt;li&gt;&lt;h2&gt;&lt;a href='http://www.amazon.com/gp/product/0321349601/ref=as_li_tf_tl?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399353&amp;creativeASIN=0321349601'&gt;Java Concurrency in Practice&lt;/a&gt; &lt;/h2&gt;&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.amazon.com/gp/product/0321349601/ref=as_li_tf_tl?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399353&amp;creativeASIN=0321349601" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="230"  src="http://2.bp.blogspot.com/-tTSs5jEcQtI/TbDSd5dAy4I/AAAAAAAAAq4/tFt9zHwk1Fs/s320/JavaConcurrencyInPractice.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;(By: Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea) 
If you want to master JAVA Threading concepts, you should read Java Concurrency in Practice. Java Concurrency in Practice covers basic concepts of thread safety and concurrency, applicable techniques in building and composing classes that are thread-safe, the use of concurrency building blocks in java.util.concurrent, the dos and don'ts of performance optimization, the testing of concurrent programs, and advanced topics such as non-blocking algorithms, the JAVA memory model, and atomic variables. This is a must-have book because threads are an integral part of the JAVA platform and the use of concurrency for optimized performance is becoming the norm with the use of multi-core. The 2007 book is written by Brian Goetz and Tim Peierls. &lt;div class="clear"&gt;&lt;/div&gt;&lt;li&gt;&lt;h2&gt;&lt;a href='http://www.amazon.com/gp/product/0596009208/ref=as_li_tf_tl?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399353&amp;creativeASIN=0596009208'&gt;Head First Java, 2nd Edition&lt;/a&gt; &lt;/h2&gt;&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.amazon.com/gp/product/0596009208/ref=as_li_tf_tl?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399353&amp;creativeASIN=0596009208" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="230"  src="http://2.bp.blogspot.com/-FjrfdYE_4P4/TbDSd9F82jI/AAAAAAAAAqw/YAxVcXeTM64/s320/HeadFirstJava.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;(By: Kathy Sierra, Bert Bates) 
Those looking to learn coding in JAVA, should refer to Head First Java, 2nd Edition. The book, written by Kathy Sierra and Bert Bates, is an introductory JAVA coding book designed for those with little knowledge of the programming language. However, this is not your average 'Hello, World' introductory guide.  Readers are exposed to object-oriented design, object-oriented implementation, network programming, serialization, Remote Method Invocation or RMIs and threads.  &lt;/ol&gt;&lt;div class="clear"&gt;&lt;/div&gt;Hope you found this list useful! What are the best books you have read? Please don't forget to share with us in comments.  &lt;br /&gt;
&lt;br /&gt;
Guest Post by: Eunice Nungari  &lt;div style='display:none;'&gt;core java books for experienced, beginner, fresher, professional, Best book for java programmer, best books for java developer&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-1476466733910428898?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=raF988RNGiY:_MEYK0XI25s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=raF988RNGiY:_MEYK0XI25s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=raF988RNGiY:_MEYK0XI25s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=raF988RNGiY:_MEYK0XI25s:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=raF988RNGiY:_MEYK0XI25s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=raF988RNGiY:_MEYK0XI25s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=raF988RNGiY:_MEYK0XI25s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=raF988RNGiY:_MEYK0XI25s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=raF988RNGiY:_MEYK0XI25s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=raF988RNGiY:_MEYK0XI25s:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=raF988RNGiY:_MEYK0XI25s:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/raF988RNGiY" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/z9JIWyUJsVMUnw0h-W0kltyA2bg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/z9JIWyUJsVMUnw0h-W0kltyA2bg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/z9JIWyUJsVMUnw0h-W0kltyA2bg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/z9JIWyUJsVMUnw0h-W0kltyA2bg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=aDgjOQiuGlE:_MEYK0XI25s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=aDgjOQiuGlE:_MEYK0XI25s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=aDgjOQiuGlE:_MEYK0XI25s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=aDgjOQiuGlE:_MEYK0XI25s:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/raF988RNGiY/5-best-core-java-books-you-must-read-as.html</link><author>noreply@blogger.com (Sachin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-yAInonN5lE4/TbDSeaPUWrI/AAAAAAAAArI/DU4Myxpm_MI/s72-c/ThinkingInJava.JPG" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://www.fromdev.com/2011/04/5-best-core-java-books-you-must-read-as.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-8896400824955247318</guid><pubDate>Mon, 14 Feb 2011 19:27:00 +0000</pubDate><atom:updated>2011-02-18T16:57:26.559-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tomcat</category><category domain="http://www.blogger.com/atom/ns#">How-To</category><category domain="http://www.blogger.com/atom/ns#">Liferay</category><title>How To Change Company Logo Liferay Portal 6.x</title><description>Liferay bundle (Tomcat) comes with a default company logo for liferay.com. In this post I am going to cover 2 ways to change this logo with your own company logo/picture.
&lt;a name='more'&gt;&lt;/a&gt;
&lt;ol&gt;
&lt;li&gt;&lt;h2&gt; How to change company logo - Administrator Style &lt;/h2&gt;&lt;/li&gt;

&lt;ul&gt; 
&lt;li&gt;Login to Liferay Portal with a admin user id. (The default user id is : test@liferay.com  and password is: test)&lt;/li&gt;
&lt;li&gt; On the top toolbar go to Manage - Control Panel &lt;/li&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-FPTGvcojffM/TVmAIoncZtI/AAAAAAAAAqM/7Xp-3of5lNA/s1600/LiferaControlPanelLink.JPG" imageanchor="1" style="clear:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="182" width="298" src="http://2.bp.blogspot.com/-FPTGvcojffM/TVmAIoncZtI/AAAAAAAAAqM/7Xp-3of5lNA/s320/LiferaControlPanelLink.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;li&gt; On the left navigation bar go to Settings Link in "Portal" Section. Settings page should be displayed. &lt;/li&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-YiOtmG3JcaA/TVmAoU7Zc8I/AAAAAAAAAqU/IVm0iIp9JSU/s1600/LiferaSettingsLink.JPG" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="314" width="255" src="http://2.bp.blogspot.com/-YiOtmG3JcaA/TVmAoU7Zc8I/AAAAAAAAAqU/IVm0iIp9JSU/s320/LiferaSettingsLink.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;


&lt;li&gt; On Settings page go to "Display Settings" link in Miscellaneous section on right navigation menu.&lt;/li&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-rK9rbKBwyw4/TVmBRL5rImI/AAAAAAAAAqk/hiJIzCZD_6A/s1600/LiferaDisplaySettingsLink.JPG" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="275" width="400" src="http://3.bp.blogspot.com/-rK9rbKBwyw4/TVmBRL5rImI/AAAAAAAAAqk/hiJIzCZD_6A/s400/LiferaDisplaySettingsLink.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;


&lt;li&gt; Click on the "Change" link and select your company logo.&lt;/li&gt;
&lt;li&gt; Click on the "Save" button at the right navigation menu.&lt;/li&gt;
&lt;li&gt; Now click on the "Back to Liferay" link on top navigation bar.&lt;/li&gt;
&lt;/ul&gt;

&lt;li&gt;&lt;h2&gt; How to change company logo - Developer Style &lt;/h2&gt;&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Overriding portal default configuration &lt;/b&gt;&lt;/li&gt;
Create a file with name "portal-ext.properties" with following content. If it already exists then append below line in the file. (Replace the name of image file with you company image file name.)
&lt;pre name="code" class="bash"&gt;
image.default.company.logo=company_logo.png
&lt;/pre&gt;

The property field "image.default.company.logo" is a default property which is configured in "portal.properties" file. 
By creating portal-ext.properties file we can override the existing values of portal config without touching the original configuration.

&lt;li&gt;&lt;b&gt; Copy Files in server CLASSPATH&lt;/b&gt;&lt;/li&gt;
Copy portal-ext.properties and company logo file to below location 

&lt;liferay-portal-dir&gt;\tomcat-&lt;version&gt;\webapps\ROOT\WEB-INF\classes

Both of these files needs to be in server CLASSPATH to be read by the portal.

&lt;li&gt;&lt;b&gt; Restart server&lt;/b&gt;&lt;/li&gt;
Refresh the browser window and changes should be visible on the portal home page.
&lt;/ol&gt;

&lt;h2&gt;Watch this Youtube Video to see all steps&lt;/h2&gt;

&lt;iframe title="How To Change Company Logo image in Liferay Portal V 6 &amp; below - Watch on Youtube " style="border: 3px solid #F1F1F1;" width="480" height="390" src="http://www.youtube.com/embed/QFYb6BVE_NY" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-8896400824955247318?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=IhpvztHj_M0:0yzVBP3fu7U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=IhpvztHj_M0:0yzVBP3fu7U:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=IhpvztHj_M0:0yzVBP3fu7U:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=IhpvztHj_M0:0yzVBP3fu7U:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=IhpvztHj_M0:0yzVBP3fu7U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=IhpvztHj_M0:0yzVBP3fu7U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=IhpvztHj_M0:0yzVBP3fu7U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=IhpvztHj_M0:0yzVBP3fu7U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=IhpvztHj_M0:0yzVBP3fu7U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=IhpvztHj_M0:0yzVBP3fu7U:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=IhpvztHj_M0:0yzVBP3fu7U:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/IhpvztHj_M0" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yfe_xC9PPE_IQWF0T88SnyKfg1Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yfe_xC9PPE_IQWF0T88SnyKfg1Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yfe_xC9PPE_IQWF0T88SnyKfg1Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yfe_xC9PPE_IQWF0T88SnyKfg1Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=bEKNipvTpB8:0yzVBP3fu7U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=bEKNipvTpB8:0yzVBP3fu7U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=bEKNipvTpB8:0yzVBP3fu7U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=bEKNipvTpB8:0yzVBP3fu7U:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/IhpvztHj_M0/how-to-change-company-logo-liferay.html</link><author>noreply@blogger.com (Sachin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-FPTGvcojffM/TVmAIoncZtI/AAAAAAAAAqM/7Xp-3of5lNA/s72-c/LiferaControlPanelLink.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.fromdev.com/2011/02/how-to-change-company-logo-liferay.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-4110904465237392765</guid><pubDate>Tue, 14 Dec 2010 20:05:00 +0000</pubDate><atom:updated>2012-01-16T09:18:34.168-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Interview</category><category domain="http://www.blogger.com/atom/ns#">Tips</category><category domain="http://www.blogger.com/atom/ns#">Hadoop</category><title>24 Interview Questions &amp; Answers for Hadoop MapReduce developers</title><description>&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;img border="0" height="150" width="200" src="http://4.bp.blogspot.com/_hpoWLUUuwbc/TQkipgH2_CI/AAAAAAAAApk/J_EiGT2T4zQ/s200/Hadoop-elephant.jpg" style='float:right;'/&gt;&lt;/div&gt; A good understanding of Hadoop Architecture is required to understand and leverage the power of Hadoop. Here are few important practical questions which can be asked in a Hadoop Developer interview. This list primarily includes questions related to Hadoop Architecture, MapReduce, Hadoop API and HDFS.  

&lt;a name='more'&gt;&lt;/a&gt;
&lt;div style="display: none;"&gt;Hadoop MapReduce in java interview questions,Java MapReduce Hadoop Interview Tough Question for experienced &amp; fresher programmer, Practical MapReduce API Simple,Difficult,Complex Questions and Answer, Java 1.7,1.6,1.5, 1.4 version, faqs, trick, tricky, confusing&lt;/div&gt;
&lt;div class='clear'&gt;&lt;/div&gt;

&lt;ol&gt;

&lt;h3&gt;&lt;li&gt;&lt;a name='What-is-JobTracker-Hadoop' href='#What-is-JobTracker-Hadoop'&gt; What is a JobTracker in Hadoop? How many instances of JobTracker run on a Hadoop Cluster? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;


JobTracker is the daemon service for submitting and tracking MapReduce jobs in Hadoop. 
There is only One Job Tracker process run on any hadoop cluster.
Job Tracker runs on its own JVM process.
In a typical production cluster its run on a separate machine. 
Each slave node is configured with job tracker node location.
The JobTracker is single point of failure for the Hadoop MapReduce service. If it goes down, all running jobs are halted.
&lt;br/&gt;&lt;br/&gt;
JobTracker in Hadoop performs following actions(from Hadoop Wiki:)
&lt;ul&gt;
   &lt;li&gt; Client applications submit jobs to the Job tracker.&lt;/li&gt;
   &lt;li&gt; The JobTracker talks to the NameNode to determine the location of the data&lt;/li&gt;
   &lt;li&gt; The JobTracker locates TaskTracker nodes with available slots at or near the data&lt;/li&gt;
   &lt;li&gt; The JobTracker submits the work to the chosen TaskTracker nodes.&lt;/li&gt;
   &lt;li&gt; The TaskTracker nodes are monitored. If they do not submit heartbeat signals often enough, they are deemed to have failed and the work is scheduled on a different TaskTracker.
   &lt;li&gt; A TaskTracker will notify the JobTracker when a task fails. The JobTracker decides what to do then: it may resubmit the job elsewhere, it may mark that specific record as something to avoid, and it may may even blacklist the TaskTracker as unreliable.
   &lt;li&gt; When the work is completed, the JobTracker updates its status.&lt;/li&gt;
   &lt;li&gt; Client applications can poll the JobTracker for information. &lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;&lt;li&gt;&lt;a name='How-JobTracker-Schedules-Task' href='#How-JobTracker-Schedules-Task'&gt; How JobTracker schedules a task? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

The TaskTrackers  send out heartbeat messages to the JobTracker, usually every few minutes, to reassure the JobTracker that it is still alive. 
These message also inform the JobTracker of the number of available slots, so the JobTracker can stay up to date with where in the cluster work can be delegated. 
&lt;br/&gt;&lt;br/&gt;

When the JobTracker tries to find somewhere to schedule a task within the MapReduce operations, it first looks for an empty slot on the same server that hosts the DataNode containing the data, 
and if not, it looks for an empty slot on a machine in the same rack. 


&lt;h3&gt;&lt;li&gt;&lt;a name='What-is-TastTracker' href='#What-is-TastTracker'&gt;  What is a Task Tracker in Hadoop?  How many instances of TaskTracker run on a Hadoop Cluster  &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;


A TaskTracker is a slave node daemon in the cluster that accepts tasks (Map, Reduce and Shuffle operations) from a JobTracker. There is only One Task Tracker process run on any hadoop slave node. Task Tracker runs on its own JVM process.
&lt;br/&gt;&lt;br/&gt;
Every TaskTracker is configured with a set of slots, these indicate the number of tasks that it can accept. The TaskTracker starts a separate JVM processes to do the actual work (called as Task Instance) this is to ensure that process failure does not take down the task tracker. 
&lt;br/&gt;&lt;br/&gt;
The TaskTracker monitors these task instances, capturing the output and exit codes. When the Task instances finish, successfully or not, the task tracker notifies the JobTracker.
&lt;br/&gt;&lt;br/&gt;
The TaskTrackers also send out heartbeat messages to the JobTracker, usually every few minutes, to reassure the JobTracker that it is still alive. These message also inform the JobTracker of the number of available slots, so the JobTracker can stay up to date with where in the cluster work can be delegated. 

&lt;h3&gt;&lt;li&gt;&lt;a name='What-TaskInstance-Hadoop' href='#What-TaskInstance-Hadoop'&gt; What is a Task instance in Hadoop? Where does it run? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

Task instances are the actual MapReduce jobs which are run on each slave node. The TaskTracker starts a separate JVM processes to do the actual work (called as Task Instance) this is to ensure that process failure does not take down the task tracker.&lt;br/&gt;&lt;br/&gt;
Each Task Instance runs on its own JVM process. There can be multiple processes of task instance running on a slave node. This is based on the number of slots configured on task tracker. By default a new task instance JVM process is spawned for a task.

&lt;h3&gt;&lt;li&gt;&lt;a name='How-many-Daemon-processes-Hadoop' href='#How-many-Daemon-processes-Hadoop'&gt; How many Daemon processes run on a Hadoop system? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

Hadoop is comprised of five separate daemons. Each of these daemon run in its own JVM.
&lt;br/&gt;&lt;br/&gt;
&lt;b&gt; Following 3 Daemons run on Master nodes&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;
NameNode - This daemon stores and maintains the metadata for HDFS.&lt;br/&gt;
Secondary NameNode - Performs housekeeping functions for the NameNode. &lt;br/&gt;
JobTracker - Manages MapReduce jobs, distributes individual tasks to machines running the Task Tracker.
&lt;br/&gt;&lt;br/&gt;
&lt;b&gt; Following 2 Daemons run on each Slave nodes&lt;/b&gt;&lt;br/&gt;&lt;br/&gt;
DataNode – Stores actual HDFS data blocks.&lt;br/&gt;
TaskTracker - Responsible for instantiating and monitoring individual Map and Reduce tasks.

&lt;h3&gt;&lt;li&gt;&lt;a name='configuration-slave-node-Hadoop' href='#configuration-slave-node-Hadoop'&gt; What is configuration of a typical slave node on Hadoop cluster? How many JVMs run on a slave node? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;
&lt;ul&gt; 
&lt;li&gt; Single instance of a Task Tracker is run on each Slave node. Task tracker is run as a separate JVM process. &lt;/li&gt;
&lt;li&gt; Single instance of a DataNode daemon is run on each Slave node. DataNode daemon is run as a separate JVM process.&lt;/li&gt;
&lt;li&gt; One or Multiple instances of Task Instance is run on each slave node. Each task instance is run as a separate JVM process. The number of Task instances can be  controlled by configuration. Typically a high end machine is configured to run more task instances.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;&lt;li&gt;&lt;a name='Difference-between-HDFS-and-NAS' href='#Difference-between-HDFS-and-NAS'&gt; What is the difference between HDFS and NAS ? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

The Hadoop Distributed File System (HDFS) is a distributed file system designed to run on commodity hardware. It has many similarities with existing distributed file systems. However, the differences from other distributed file systems are significant.&lt;br/&gt;
&lt;b&gt;Following are differences between HDFS and NAS&lt;/b&gt;&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt;In HDFS Data Blocks are distributed across local drives of all machines in a cluster. Whereas in NAS data is stored on dedicated hardware.&lt;/li&gt;
&lt;li&gt; HDFS is designed to work with MapReduce System, since computation are moved to data. NAS is not suitable for MapReduce since data is stored seperately from the computations.&lt;/li&gt;
&lt;li&gt; HDFS runs on a cluster of machines and provides redundancy usinga  replication protocal. 
Whereas NAS is provided by a single machine therefore does not provide data redundancy.&lt;/li&gt;
 &lt;/ul&gt;

&lt;h3&gt;&lt;li&gt;&lt;a name='How-NameNode-Handles-datanode-failures' href='#How-NameNode-Handles-datanode-failures'&gt; How  NameNode Handles data node failures? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

NameNode periodically receives a Heartbeat and a Blockreport from each of the DataNodes in the cluster. Receipt of a Heartbeat implies that the DataNode is functioning properly. A Blockreport contains a list of all blocks on a DataNode.
&lt;br/&gt;&lt;br/&gt;
When NameNode notices that it has not recieved a hearbeat message from a data node after a certain amount of time, the data node is marked as dead. 
Since blocks will be under replicated the system begins replicating the blocks that were stored on the dead datanode. 
&lt;br/&gt;&lt;br/&gt;
The NameNode Orchestrates the replication of data blocks from one datanode to another. The replication data transfer happens directly between datanodes and the data never passes through the namenode. 

&lt;h3&gt;&lt;li&gt;&lt;a name='reducer-communicate-with-reducer' href='#reducer-communicate-with-reducer'&gt; Does MapReduce programming model provide a way for reducers to communicate with each other? In a MapReduce job can a reducer communicate with another reducer?
 &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;
Nope, MapReduce programming model does not allow reducers to communicate with each other. Reducers run in isolation.

&lt;h3&gt;&lt;li&gt;&lt;a name='set-reducers-to-zero' href='#set-reducers-to-zero'&gt; Can I set the number of reducers to zero? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

Yes, Setting the number of reducers to zero is a valid configuration in Hadoop. When you set the reducers to zero no reducers will be executed, and the output of each mapper will be stored to a separate file on HDFS. &lt;br/&gt;
[This is different from the condition when reducers are set to a number greater than zero and the Mappers output (intermediate data) is written to the Local file system(NOT HDFS) of each mappter slave node.]


&lt;h3&gt;&lt;li&gt;&lt;a name='Where-Mapper-Output-Stored' href='#Where-Mapper-Output-Stored'&gt; Where is the Mapper Output (intermediate kay-value data) stored ?  &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

The mapper output (intermediate data) is stored on the Local file system (NOT HDFS) of each individual mapper nodes. This is typically a temporary directory location which can be setup in config by the hadoop administrator. The intermediate data is cleaned up after the Hadoop Job completes.

&lt;h3&gt;&lt;li&gt;&lt;a name='When-to-user-combiner-hadoop' href='#When-to-user-combiner-hadoop'&gt; What are combiners? When should I use a combiner in my MapReduce Job? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

Combiners are used to increase the efficiency of a MapReduce program. They are used to aggregate intermediate map output locally on individual mapper outputs. 
Combiners can help you reduce the amount of data that needs to be transferred across to the reducers. &lt;br/&gt;&lt;br/&gt;
You can use your reducer code as a combiner if the operation performed is commutative and associative.
&lt;br/&gt;&lt;br/&gt;
The execution of combiner is &lt;b&gt;not guaranteed&lt;/b&gt;, Hadoop may or may not execute a combiner. Also, if required it may execute it more then 1 times.
Therefore your MapReduce jobs should not depend on the combiners execution.

&lt;h3&gt;&lt;li&gt;&lt;a name='What-Writable-WritableComparable' href='#What-Writable-WritableComparable'&gt;  What is Writable &amp; WritableComparable interface?&lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; org.apache.hadoop.io.Writable is a Java interface. Any key or value type in the Hadoop Map-Reduce framework implements this interface.
Implementations typically implement a static read(DataInput) method which constructs a new instance, calls readFields(DataInput) and returns the instance.&lt;/li&gt;
&lt;li&gt; org.apache.hadoop.io.WritableComparable is a Java interface. Any type which is to be used as a key in the Hadoop Map-Reduce framework should implement this interface. WritableComparable objects can be compared to each other using Comparators.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;&lt;li&gt;&lt;a name='MapReduce-Contract-Key-Value-API' href='#MapReduce-Contract-Key-Value-API'&gt; What is the Hadoop MapReduce API contract for a key and value Class? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt; The Key must implement the org.apache.hadoop.io.WritableComparable interface. &lt;/li&gt;
&lt;li&gt; The value must implement the org.apache.hadoop.io.Writable interface.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;&lt;li&gt;&lt;a name='What-is-IdentityMapper-and-IdentityReducer' href='#What-is-IdentityMapper-and-IdentityReducer'&gt;  What is a IdentityMapper and IdentityReducer in MapReduce ? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt; org.apache.hadoop.mapred.lib.IdentityMapper Implements the identity function, mapping inputs directly to outputs. 
If MapReduce programmer do not set the Mapper Class using JobConf.setMapperClass then IdentityMapper.class is used as a default value.

&lt;li&gt; org.apache.hadoop.mapred.lib.IdentityReducer Performs no reduction, writing all input values directly to the output. 
If MapReduce programmer do not set the Reducer Class using JobConf.setReducerClass then IdentityReducer.class is used as a default value.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;&lt;li&gt;&lt;a name='what-is-speculative-execution-hadoop' href='#what-is-speculative-execution-hadoop'&gt;  What is the meaning of speculative execution in Hadoop? Why is it important? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

Speculative execution is a way of coping with individual Machine performance. In large clusters where hundreds or thousands of machines are involved there may be machines which are not performing as fast as others. &lt;br/&gt;
This may result in delays in a full job due to only one machine not performaing well. To avoid this, speculative execution in hadoop can run multiple copies of same map or reduce task on different slave nodes. The results from first node to finish are used.

&lt;h3&gt;&lt;li&gt;&lt;a name='When-reducer-started' href='#When-reducer-started'&gt;  When is the reducers are started in a MapReduce job?  &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

In a MapReduce job reducers do not start executing the reduce method until the all Map jobs have completed. Reducers start copying intermediate key-value pairs from the mappers as soon as they are available. The programmer defined reduce method is called only after all the mappers have finished.

&lt;h3&gt;&lt;li&gt;&lt;a name='reducers-not-start-before-mappers' href='#reducers-not-start-before-mappers'&gt; If reducers do not start before all mappers finish then why does the progress on MapReduce job shows something like Map(50%) Reduce(10%)? Why reducers progress percentage is displayed when mapper is not finished yet?
 &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

Reducers start copying intermediate key-value pairs from the mappers as soon as they are available. The progress calculation also takes in account the processing of data transfer which is done by reduce process, therefore the reduce progress starts showing up as soon as any intermediate key-value pair for a mapper is available to be transferred to reducer.
&lt;br/&gt;&lt;br/&gt;
Though the reducer progress is updated still the programmer defined reduce method is called only after all the mappers have finished.

&lt;h3&gt;&lt;li&gt;&lt;a name='What-is-HDFS' href='#What-is-HDFS'&gt; What is HDFS ? How it is different from traditional file systems?  &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

HDFS, the Hadoop Distributed File System, is responsible for storing huge data on the cluster. This is a distributed file system designed to run on commodity hardware. It has many similarities with existing distributed file systems.  
However, the differences from other distributed file systems are significant. 
&lt;br/&gt;&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt; HDFS is highly fault-tolerant and is designed to be deployed on low-cost hardware.&lt;/li&gt; 
&lt;li&gt; HDFS provides high throughput access to application data and is suitable for applications that have large data sets.&lt;/li&gt; 
&lt;li&gt; HDFS is designed to support very large files. Applications that are compatible with HDFS are those that deal with large data sets. These applications write their data only once but they read it one or more times and require these reads to be satisfied at streaming speeds. HDFS supports write-once-read-many semantics on files.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;li&gt;&lt;a name='What-is-HDFS-Block-size' href='#What-is-HDFS-Block-size'&gt;  What is HDFS Block size? How is it different from traditional file system block size?
 &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;
In HDFS data is split into blocks and distributed across multiple nodes in the cluster. Each block is typically 64Mb or 128Mb in size. 
&lt;br/&gt;Each block is replicated multiple times. Default is to replicate each block three times. Replicas are stored on different nodes. HDFS utilizes the local file system to store each HDFS block as a separate file. 

HDFS Block size can not be compared with the traditional file system block size.

&lt;h3&gt;&lt;li&gt;&lt;a name='What-is-NameNode' href='#What-is-NameNode'&gt; What is a NameNode? How many instances of NameNode run on a Hadoop Cluster? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

The NameNode is the centerpiece of an HDFS file system. It keeps the directory tree of all files in the file system, and tracks where across the cluster the file data is kept. It does not store the data of these files itself. &lt;br/&gt;&lt;br/&gt;
There is only One NameNode process run on any hadoop cluster. NameNode runs on its own JVM process. In a typical production cluster its run on a separate machine.
&lt;br/&gt;&lt;br/&gt;
The NameNode is a Single Point of Failure for the HDFS Cluster. When the NameNode goes down, the file system goes offline. 
&lt;br/&gt;&lt;br/&gt;
Client applications talk to the NameNode whenever they wish to locate a file, or when they want to add/copy/move/delete a file. The NameNode responds the successful requests by returning a list of relevant DataNode servers where the data lives. 

&lt;h3&gt;&lt;li&gt;&lt;a name='What-is-DataNode' href='#What-is-DataNode'&gt;  What is a DataNode? How many instances of DataNode run on a Hadoop Cluster? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

A DataNode stores data in the Hadoop File System HDFS. There is only One DataNode process run on any hadoop slave node. DataNode runs on its own JVM process.
On startup, a DataNode connects to the NameNode. DataNode instances can talk to each other, this is mostly during replicating data.

&lt;h3&gt;&lt;li&gt;&lt;a name='Client-communication-with-HDFS' href='#Client-communication-with-HDFS'&gt; How the Client communicates with HDFS? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

The Client communication to HDFS happens using Hadoop HDFS API. Client applications talk to the NameNode whenever they wish to locate a file, or when they want to add/copy/move/delete a file on HDFS. The NameNode responds the successful requests by returning a list of relevant DataNode servers where the data lives. Client applications can talk directly to a DataNode, once the NameNode has provided the location of the data.

&lt;h3&gt;&lt;li&gt;&lt;a name='How-HDFS-Blocks-replicated' href='#How-HDFS-Blocks-replicated'&gt; How the HDFS Blocks are replicated? &lt;/a&gt;&lt;/li&gt;&lt;/h3&gt;

HDFS is designed to reliably store very large files across machines in a large cluster. It stores each file as a sequence of blocks; all blocks in a file except the last block are the same size. &lt;br/&gt;&lt;br/&gt;
The blocks of a file are replicated for fault tolerance. The block size and replication factor are configurable per file.  An application can specify the number of replicas of a file.  The replication factor can be specified at file creation time and can be changed later. Files in HDFS are write-once and have strictly one writer at any time.
&lt;br/&gt;&lt;br/&gt;
The NameNode makes all decisions regarding replication of blocks. HDFS uses rack-aware replica placement policy. In default configuration there are total 3 copies of a datablock on HDFS, 2 copies are stored on datanodes on same rack and 3rd copy on a different rack.

&lt;/ol&gt;
&lt;br/&gt;

Can you think of a questions which is not part of this post? Please don't forget to share it with me in comments section &amp; I will try to include it in the list.

&lt;div style='display:none'&gt;
Hadoop developer job interview practical questions and answers list
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-4110904465237392765?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=rIbyZdU1J8s:t4b2QClKhb8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=rIbyZdU1J8s:t4b2QClKhb8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=rIbyZdU1J8s:t4b2QClKhb8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=rIbyZdU1J8s:t4b2QClKhb8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=rIbyZdU1J8s:t4b2QClKhb8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=rIbyZdU1J8s:t4b2QClKhb8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=rIbyZdU1J8s:t4b2QClKhb8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=rIbyZdU1J8s:t4b2QClKhb8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=rIbyZdU1J8s:t4b2QClKhb8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=rIbyZdU1J8s:t4b2QClKhb8:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=rIbyZdU1J8s:t4b2QClKhb8:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/rIbyZdU1J8s" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KFKlJ99DXD7JPlDVcnsDVIT844Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KFKlJ99DXD7JPlDVcnsDVIT844Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KFKlJ99DXD7JPlDVcnsDVIT844Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KFKlJ99DXD7JPlDVcnsDVIT844Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=xwcRK7YpG0U:t4b2QClKhb8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=xwcRK7YpG0U:t4b2QClKhb8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=xwcRK7YpG0U:t4b2QClKhb8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=xwcRK7YpG0U:t4b2QClKhb8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/rIbyZdU1J8s/interview-questions-hadoop-mapreduce.html</link><author>noreply@blogger.com (Sachin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_hpoWLUUuwbc/TQkipgH2_CI/AAAAAAAAApk/J_EiGT2T4zQ/s72-c/Hadoop-elephant.jpg" height="72" width="72" /><thr:total>15</thr:total><feedburner:origLink>http://www.fromdev.com/2010/12/interview-questions-hadoop-mapreduce.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-7039036544294373404</guid><pubDate>Fri, 12 Nov 2010 18:58:00 +0000</pubDate><atom:updated>2011-04-11T12:42:19.858-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips</category><category domain="http://www.blogger.com/atom/ns#">.Upcoming</category><title>7 Best Web Design &amp; Development Books you must read</title><description>Are you a web developer and designer? Take a look at the following books which I found really valuable in developing &amp; designing web based applications/sites. I would recommend these books as a must read for people who need to do mix of both Web Design and Development.

&lt;a name='more'&gt;&lt;/a&gt;

&lt;ol&gt;
&lt;h2&gt;

&lt;li&gt;&lt;a href="http://www.amazon.com/Dont-Make-Me-Think-Usability/dp/0321344758/ref=sr_1_1?s=books&amp;amp;qid=1289522389&amp;amp;tag=thanksgivingdeal-20"&gt;Don't Make Me Think: A Common Sense Approach to Web Usability, 2nd Edition&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;
&lt;div class="separator" style="clear: both; float: left; margin-right: 20px; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_hpoWLUUuwbc/TNyStBVgqFI/AAAAAAAAAo0/PrcmEN4vJSk/s1600/dontmake.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_hpoWLUUuwbc/TNyStBVgqFI/AAAAAAAAAo0/PrcmEN4vJSk/s1600/dontmake.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;
(By: Steve Krug)
&lt;br /&gt;
"Don't Make Me Think" is incredibly clear, concise, and helpful - as well as surprisingly enjoyable. This book walks it's talk. It is written and arranged exactly as a useable web site should be, clear and concise, with scannable text. &lt;br /&gt;&lt;br /&gt;The clean attractive design and graphics accurately and efficiently illustrate the text, which is easy to read and to understand.

&lt;div class="clear"&gt;
&lt;/div&gt;
&lt;h2&gt;

&lt;li&gt;&lt;a href="http://www.amazon.com/Letting-Go-Words-Interactive-Technologies/dp/0123694868/ref=sr_1_1?s=books&amp;amp;qid=1289523043&amp;amp;tag=thanksgivingdeal-20"&gt;Letting Go of the Words: Writing Web Content that Works (Interactive Technologies)&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;
&lt;div class="separator" style="clear: both; float: left; margin-right: 20px; text-align: center;"&gt;
&lt;a href="http://www.amazon.com/Letting-Go-Words-Interactive-Technologies/dp/0123694868/ref=sr_1_1?s=books&amp;amp;qid=1289523043&amp;amp;tag=thanksgivingdeal-20" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_hpoWLUUuwbc/TNyRxDw_VGI/AAAAAAAAAow/mk--FZpV9RY/s1600/lettingGo.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;
(By: Janice (Ginny) Redish)
&lt;br /&gt;
The book is beautifully laid-out, with easy to grasp, common sense advice - all backed up by solid research data and straightforward examples. Everyone who writes web content will benefit from reading this book with its clear guidelines and extensive examples. The book is well organized and its format makes it easy to find specific ideas. 
&lt;br/&gt;&lt;br/&gt; You can download the Chapter 1 of this book for Free from authors website at this link &lt;a href="http://redish.net/writingfortheweb/wp-content/uploads/2007/10/redish_chapter1.pdf"&gt;Letting Go of the Words: Chapter 1&lt;/a&gt; 
&lt;div class="clear"&gt;
&lt;/div&gt;
&lt;h2&gt;

&lt;li&gt;&lt;a href="http://www.amazon.com/Even-Faster-Web-Sites-Performance/dp/0596522304/ref=sr_1_1?s=books&amp;tag=thanksgivingdeal-20"&gt;Even Faster Web Sites: Performance Best Practices for Web Developers&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;
&lt;div class="separator" style="clear: both; text-align: center;margin-right:20px;"&gt;
&lt;a href="http://www.amazon.com/Even-Faster-Web-Sites-Performance/dp/0596522304/ref=sr_1_1?s=books&amp;tag=thanksgivingdeal-20" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_hpoWLUUuwbc/TN2I1gYIGaI/AAAAAAAAApE/tY1rYiXZZVI/s1600/evenFaster.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;

(By: Steve Souders)
&lt;br /&gt;
This book is a follow-on to Steve Souder's first book entitled "High Performance Web Sites". 
"Even Faster Web Sites" takes the latest Performance improvement techniques available to developers and organizes them into three performance areas: JavaScript, network, and browser. this book includes great information on how to parallelize Javascript, minimize images, sprite images and write your web pages so that they don't block on one element.
&lt;br/&gt; Check out this &lt;a href="http://www.stevesouders.com/blog/2009/06/03/using-iframes-sparingly" target='_blank'&gt;blog post&lt;/a&gt; based on a chapter from this book 
&lt;div class="clear"&gt;
&lt;/div&gt;
&lt;h2&gt;

&lt;li&gt;&lt;a href="http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309/ref=sr_1_1?tag=thanksgivingdeal-20"&gt;High Performance Web Sites: Essential Knowledge for Front-End Engineers&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;
&lt;div class="separator" style="clear: both; text-align: center;matgin-right:20px;"&gt;
&lt;a href="http://www.amazon.com/High-Performance-Web-Sites-Essential/dp/0596529309/ref=sr_1_1?tag=thanksgivingdeal-20" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_hpoWLUUuwbc/TN2I1zeJNoI/AAAAAAAAApI/_o0OswoNQPI/s1600/highPerfWebSites.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;

(By: Steve Souders)
&lt;br/&gt;
Not only does Steve Souders have the credentials to write this book (he's the chief performance guy for Yahoo!), he's also written a book that is an easy read and will give you everything you need to easily improve your web site performance. &lt;br/&gt;The book contains an organized checklist of ideas &amp;amp; techniques to make web sites faster. The examples in this book offer direct comparisons and means to make our own tests.
&lt;div class="clear"&gt;
&lt;/div&gt;
&lt;h2&gt;

&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/073571245X?ie=UTF8&amp;tag=thanksgivingdeal-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=073571245X"&gt;Eric Meyer on CSS: Mastering the Language of Web Design&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;
&lt;div class="separator" style="clear: both; text-align: center;matgin-right:20px;"&gt;
&lt;a href="http://www.amazon.com/gp/product/073571245X?ie=UTF8&amp;tag=thanksgivingdeal-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=073571245X" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_hpoWLUUuwbc/TN2I1PJVEyI/AAAAAAAAApA/H521QJxQ-D4/s1600/EricMeyerOnCSS.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;

(By: Eric Meyer)
&lt;br /&gt;
This book takes information about CSS and applies it to real life examples, which makes it much easier for the average CSS author to learn and see how the CSS styles shown relate to what is being done on the site it affects. &lt;br/&gt;The book is wonderfully laid-out with lots of gorgeous color drawings and figures, which aid the reader in understanding each change. The step by step instructions are easy to follow and with each CSS code change or addition shown in red, also easy to understand and follow along with.

&lt;div class="clear"&gt;
&lt;/div&gt;
&lt;h2&gt;

&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/0596101996?ie=UTF8&amp;tag=thanksgivingdeal-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596101996"&gt;JavaScript: The Definitive Guide&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;
&lt;div class="separator" style="clear: both; text-align: center;matgin-right:20px;"&gt;
&lt;a href="http://www.amazon.com/gp/product/0596101996?ie=UTF8&amp;tag=thanksgivingdeal-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596101996" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_hpoWLUUuwbc/TN2I2C1bE4I/AAAAAAAAApM/jUCzi1CC6jc/s1600/javascriptDefinitieGuide.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;
(By: David Flanagan)
&lt;br /&gt;
If you really want learn how Javascript's objects, functions, and data type handling work, then this is the book for you. The book has a very good introduction to the core of client side javascript. It is a great reference for coming back to those things that you get kind of rusty on like "regular expressions" and "creating your own objects". Flanagan goes through all the language basics, pointing out where JavaScript differs from languages like Java, C#, or C++.
&lt;br /&gt;
A Free PDF version of this book can be downloaded from this link &lt;a href="http://rottenlogic.com/books/Javascript.pdf" target='_blank'&gt;JavaScript: The Definitive Guide - PDF Download&lt;/a&gt;
&lt;div class="clear"&gt;
&lt;/div&gt;
&lt;h2&gt;

&lt;li&gt;&lt;a href="http://www.amazon.com/gp/product/1935182323?ie=UTF8&amp;tag=thanksgivingdeal-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1935182323"&gt;jQuery in Action, Second Edition&lt;/a&gt;&lt;/li&gt;
&lt;/h2&gt;
&lt;div style="float: left; margin-right: 10px;"&gt;
&lt;a href="http://www.amazon.com/gp/product/1935182323?ie=UTF8&amp;tag=thanksgivingdeal-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1935182323"&gt;&lt;img src="http://4.bp.blogspot.com/_hpoWLUUuwbc/TCo5le2-zwI/AAAAAAAAAn8/EPlVLLcsAGY/S1600-R/jQueryInActionBook.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;
jQuery is a Javascript framework that aims to let you think structurally and conceptually, rather than worrying about syntax and other details. If you have strong JavaScript skills and experience, but still not feeling  comfortable using jQuery; This book is exactly what you are looking for. 
&lt;br /&gt;&lt;br /&gt;
This is a practical book that explains how to use, and what's behind this magical framework. It teaches by example, so you are never reading 20 pages of theory. The interactive "lab" exercises (starting in Chapter 2) help explain jQuery's capabilities and features quickly and conveniently. 
&lt;br/&gt;
The Free PDF Version of Chapter 1 can be downloaded from [&lt;a href="http://www.manning.com/bibeault2/SampleCH1.pdf" target='_blank'&gt;jQuery In Action: Chapter 1&lt;/a&gt;]
&lt;div class="clear"&gt;
&lt;/div&gt;
&lt;/ol&gt;


&lt;br/&gt;
Hope you found this list useful! What are the best books you have read? Please don't forget to share with me in comments. 

&lt;div style='display:none'&gt;best books on web site design, top software usability design books, books must read, 7 Top Web Design Books you must read &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-7039036544294373404?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=9M_yrFpb2FA:Aq-ezjBRrxc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=9M_yrFpb2FA:Aq-ezjBRrxc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=9M_yrFpb2FA:Aq-ezjBRrxc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=9M_yrFpb2FA:Aq-ezjBRrxc:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=9M_yrFpb2FA:Aq-ezjBRrxc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=9M_yrFpb2FA:Aq-ezjBRrxc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=9M_yrFpb2FA:Aq-ezjBRrxc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=9M_yrFpb2FA:Aq-ezjBRrxc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=9M_yrFpb2FA:Aq-ezjBRrxc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=9M_yrFpb2FA:Aq-ezjBRrxc:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=9M_yrFpb2FA:Aq-ezjBRrxc:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/9M_yrFpb2FA" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bmVGe6HNQQsBCjz8khu3LSJkSZY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bmVGe6HNQQsBCjz8khu3LSJkSZY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bmVGe6HNQQsBCjz8khu3LSJkSZY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bmVGe6HNQQsBCjz8khu3LSJkSZY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=qMSO3-mVUMI:Aq-ezjBRrxc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=qMSO3-mVUMI:Aq-ezjBRrxc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=qMSO3-mVUMI:Aq-ezjBRrxc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=qMSO3-mVUMI:Aq-ezjBRrxc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/9M_yrFpb2FA/7-best-website-designdevelopment-books.html</link><author>noreply@blogger.com (Sachin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_hpoWLUUuwbc/TNyStBVgqFI/AAAAAAAAAo0/PrcmEN4vJSk/s72-c/dontmake.JPG" height="72" width="72" /><thr:total>11</thr:total><feedburner:origLink>http://www.fromdev.com/2010/11/7-best-website-designdevelopment-books.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-4689592210170585455</guid><pubDate>Fri, 05 Nov 2010 19:09:00 +0000</pubDate><atom:updated>2011-02-07T11:23:26.310-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Exception Handling</category><category domain="http://www.blogger.com/atom/ns#">How-To</category><title>How to Debug connection leaks in c3p0 - A PooledConnection that has already signalled a Connection error is still in use</title><description>We saw below exception stack-trace which was randomly appearing on our Glassfish application server logs. The application was randomly being sluggish and not responding to requests.
&lt;a name='more'&gt;&lt;/a&gt;
&lt;li&gt;&lt;h2&gt;&lt;a name='stacktrace' href='#stacktrace'&gt;Stacktrace&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;
&lt;pre name='code' class='bash'&gt;
[#|2010-11-05T02:21:06.076-0700|WARNING|sun-appserver9.1|javax.enterprise.system.stream.err|_ThreadID=21;_ThreadName=DefaultQuartzScheduler_Worker-5;_RequestID=00530e25-f5e7-4a12-8ee6-7c0d00d649ed;|
org.hibernate.exception.GenericJDBCException: could not insert: [com.fromdev.AlertRecordImpl]
 at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
 at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
 at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
 at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2436)
 at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2856)
 at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
 at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
 at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
 at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184)
 at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
 at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
 at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
 at com.fromdev.AlertJob.execute(ProductAlertJob.java:83)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:276)
 at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:260)
 at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
 at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
 at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
Caused by: java.sql.SQLException: Closed Connection
 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
 at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:868)
 at oracle.jdbc.driver.PhysicalConnection.prepareStatement(PhysicalConnection.java:787)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at com.mchange.v2.c3p0.stmt.GooGooStatementCache$1StmtAcquireTask.run(GooGooStatementCache.java:542)
 at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
|#]

[#|2010-11-05T02:21:06.076-0700|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=21;_ThreadName=DefaultQuartzScheduler_Worker-5;|02:21:06,076 WARN  NewPooledConnection           :486 [c3p0] A PooledConnection that has already signalled a Connection error is still in use!
|#]

[#|2010-11-05T02:21:06.091-0700|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=21;_ThreadName=DefaultQuartzScheduler_Worker-5;|02:21:06,076 WARN  NewPooledConnection           :487 [c3p0] Another error has occurred [ java.sql.SQLException: Closed Connection ] which will not be reported to listeners!
java.sql.SQLException: Closed Connection
 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
 at oracle.jdbc.driver.PhysicalConnection.setAutoCommit(PhysicalConnection.java:1057)
 at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:881)
 at org.hibernate.transaction.JDBCTransaction.toggleAutoCommit(JDBCTransaction.java:224)
 at org.hibernate.transaction.JDBCTransaction.rollbackAndResetAutoCommit(JDBCTransaction.java:216)
 at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:192)
 at org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:625)
 at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:800)
 at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:777)
 at com.fromdev.UnitOfWork.rollback(UnitOfWork.java:45)
 at com.fromdev.AlertJob.execute(ProductAlertJob.java:84)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:276)
 at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:260)
 at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
 at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
 at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
|#]

[#|2010-11-05T02:21:06.122-0700|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=21;_ThreadName=DefaultQuartzScheduler_Worker-5;|02:21:06,122 ERROR JobRunShell                   :212 Job DEFAULT.methodInvokingJobDetail threw an unhandled Exception: 
org.springframework.scheduling.quartz.JobMethodInvocationFailedException: Invocation of method 'execute' on target class [class com.fromdev.AlertJob] failed; nested exception is org.springframework.transaction.TransactionSystemException: Could not roll back Hibernate transaction; nested exception is org.hibernate.TransactionException: JDBC rollback failed
 at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:269)
 at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
 at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
 at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
Caused by: org.springframework.transaction.TransactionSystemException: Could not roll back Hibernate transaction; nested exception is org.hibernate.TransactionException: JDBC rollback failed
 at org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:628)
 at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:800)
 at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:777)
 at com.fromdev.UnitOfWork.rollback(UnitOfWork.java:45)
 at com.fromdev.AlertJob.execute(ProductAlertJob.java:84)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:276)
 at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:260)
 ... 3 more
Caused by: org.hibernate.TransactionException: JDBC rollback failed
 at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:200)
 at org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:625)
 ... 13 more
Caused by: java.sql.SQLException: Closed Connection
 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
 at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:1161)
 at com.mchange.v2.c3p0.impl.NewProxyConnection.rollback(NewProxyConnection.java:855)
 at org.hibernate.transaction.JDBCTransaction.rollbackAndResetAutoCommit(JDBCTransaction.java:213)
 at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:192)
 ... 14 more
|#]

[#|2010-11-05T02:21:06.122-0700|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=21;_ThreadName=DefaultQuartzScheduler_Worker-5;|02:21:06,122 ERROR ErrorLogger                   :2015 Job (DEFAULT.methodInvokingJobDetail threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: org.springframework.scheduling.quartz.JobMethodInvocationFailedException: Invocation of method 'execute' on target class [class com.fromdev.AlertJob] failed; nested exception is org.springframework.transaction.TransactionSystemException: Could not roll back Hibernate transaction; nested exception is org.hibernate.TransactionException: JDBC rollback failed]
 at org.quartz.core.JobRunShell.run(JobRunShell.java:214)
 at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
* Nested Exception (Underlying Cause) ---------------
org.springframework.scheduling.quartz.JobMethodInvocationFailedException: Invocation of method 'execute' on target class [class com.fromdev.AlertJob] failed; nested exception is org.springframework.transaction.TransactionSystemException: Could not roll back Hibernate transaction; nested exception is org.hibernate.TransactionException: JDBC rollback failed
 at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:269)
 at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
 at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
 at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
Caused by: org.springframework.transaction.TransactionSystemException: Could not roll back Hibernate transaction; nested exception is org.hibernate.TransactionException: JDBC rollback failed
 at org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:628)
 at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:800)
 at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:777)
 at com.fromdev.UnitOfWork.rollback(UnitOfWork.java:45)
 at com.fromdev.AlertJob.execute(ProductAlertJob.java:84)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:276)
 at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:260)
 ... 3 more
Caused by: org.hibernate.TransactionException: JDBC rollback failed
 at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:200)
 at org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:625)
 ... 13 more
Caused by: java.sql.SQLException: Closed Connection
 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
 at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.java:1161)
 at com.mchange.v2.c3p0.impl.NewProxyConnection.rollback(NewProxyConnection.java:855)
 at org.hibernate.transaction.JDBCTransaction.rollbackAndResetAutoCommit(JDBCTransaction.java:213)
 at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:192)
 ... 14 more
|#]
&lt;/pre&gt;


&lt;li&gt;&lt;h2&gt;&lt;a name='AboutApp' href='#AboutApp'&gt;About our application&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;

Our Web Application is regular JEE app using Glassfish v2/Spring/Hibernate with c3p0 connection pooling. We have used quartz scheduler for running our background jobs. 
One of our background job runs every night and does some intensive data processing which involves getting bulk data from database and processing it and then updating the database for each of the affected records. 



&lt;li&gt;&lt;h2&gt;&lt;a name='c3p0-connection-pooling' href='#c3p0-connection-pooling'&gt;How we used c3p0 Connection pooling&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;

We have used c3p0 for connecting to our Oracle database connection pooling. As a added caution to not leak any connections we used one c3p0 config parameter, which allows us to clean unreturned connection for long time. 
The c3p0 pool has a configuration parameter unreturnedConnectionTimeout. 

&lt;blockquote&gt;
unreturnedConnectionTimeout defines a limit (in seconds) to how long a Connection may remain checked out. If set to a nozero value, unreturned, checked-out Connections that exceed this limit will be summarily destroyed, and then replaced in the pool. Obviously, you must take care to set this parameter to a value large enough that all intended operations on checked out Connections have time to complete. You can use this parameter to merely workaround unreliable client apps that fail to close() Connections. 
The Default value for this parameter is 0 Seconds. If set, if an application checks out but then fails to check-in [i.e. close()] a Connection within the specified period of time, the pool will unceremoniously destroy() the Connection. This permits applications with occasional Connection leaks to survive, rather than eventually exhausting the Connection pool. And that's a shame. Zero means no timeout, applications are expected to close() their own Connections. Obviously, if a non-zero value is set, it should be to a value longer than any Connection should reasonably be checked-out. 
Otherwise, the pool will occasionally kill Connections in active use, which is bad. This is basically a bad idea, but it's a commonly requested feature. 
Fix your applications so they don't leak Connections! 
&lt;/blockquote&gt;

In our application the "unreturnedConnectionTimeout" value was set to 300 seconds (5 minutes), which is enough time for any web request to be processed.
Infact most of our background jobs also completed within this limit. The problem started coming in when we had some enhancements added to the background job and it started taking more then 5 minutes.
It was really difficult to debug this issue. Server was randomly not responding or being sluggish and  getting OutOfMemory errors. Whenver we restarted the server and problem disappeared but hit us back after few days. 


&lt;li&gt;&lt;h2&gt;&lt;a name='how-to-debug' href='#how-to-debug'&gt;How to Debug this issue&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;

To debug this we used a parameter in c3p0 config called "debugUnreturnedConnectionStackTraces"

&lt;blockquote&gt;
If you set debugUnreturnedConnectionStackTraces to true, then a stack trace will be captured each time a Connection is checked-out. Whenever an unreturned Connection times out, that stack trace will be printed, revealing where a Connection was checked out that was not checked in promptly. debugUnreturnedConnectionStackTraces is intended to be used only for debugging, as capturing a stack trace can slow down Connection check-out. 
&lt;/blockquote&gt;

After setting this parameter, we found below exception stacktrace in our logs and realized what could be the problem.

&lt;li&gt;&lt;h2&gt;&lt;a name='newstacktrace' href='#newstacktrace'&gt;New Stacktrace&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;
&lt;pre name='code' class='bash'&gt;
[#|2010-11-05T02:21:04.623-0700|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=20;_ThreadName=Timer-9;|
02:21:04,623 INFO  BasicResourcePool             :1392 A checked-out resource is overdue, and will be destroyed: com.mchange.v2.c3p0.impl.NewPooledConnection@1ee23c7
|#]

[#|2010-11-05T02:21:04.623-0700|INFO|sun-appserver9.1|javax.enterprise.system.stream.out|_ThreadID=20;_ThreadName=Timer-9;|02:21:04,623 INFO  BasicResourcePool             :1395 Logging the stack trace by which the overdue resource was checked-out.
java.lang.Exception: DEBUG ONLY: Overdue resource check-out stack trace.
 at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:506)
 at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
 at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
 at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:82)
 at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
 at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
 at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
 at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1700)
 at org.hibernate.loader.Loader.doQuery(Loader.java:801)
 at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
 at org.hibernate.loader.Loader.doList(Loader.java:2533)
 at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
 at org.hibernate.loader.Loader.list(Loader.java:2271)
 at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
 at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
 at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
 at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
 at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
 at com.fromdev.alerts.AlertJob.execute(AlertJob.java:51)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:276)
 at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:260)
 at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
 at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
 at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
|#]
&lt;/pre&gt;



&lt;li&gt;&lt;h2&gt;&lt;a name='root-cause' href='#root-cause'&gt;The root causes&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;
There were multiple issues in our application: &lt;br/&gt;&lt;br/&gt;
1. First root cause was poor performance of code. There was a code which was causing the background job to run slower. Due to this the job started taking more 300 seconds, which was greater than unreturnedConnectionTimeout value we had configured. 
&lt;br/&gt;&lt;br/&gt;
2. Second reason was not using finally block for releasing resources
The root cause for Server being sluggish and going OutOfMemory (at times) was connection leaks. The leak was happening due to the session.close() not being called in a finally block. &lt;br/&gt;

I have seen this as most common cause of resource leaks in many java application. 
Releasing a resource at the end of the method does not gaurantee that it will always be called. 
Many developers make that mistake (like one of our teammates).



&lt;li&gt;&lt;h2&gt;&lt;a name='resolution' href='#resolution'&gt;The resolution&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;
We took following steps to resolve this issue&lt;br/&gt;

1. We Moved the session.close() call to finally block.
&lt;br/&gt;
2. As a short term fix, we had to increase the value of unreturnedConnectionTimeout. We had set it to 600 seconds (10 mins).
&lt;br/&gt;
3. The long term fix, was to identify the code which is taking longer time and split our jobs into shorter tasks. We used &lt;a href='https://visualvm.dev.java.net/' target='_blank'&gt;VisualVM&lt;/a&gt; CPU profiling to identify the bad performing methods and improved them.
This also required us to make changes to the background processing logic.


&lt;li&gt;&lt;h2&gt;&lt;a name='references' href='#references'&gt;References&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;

&lt;a href='http://www.mchange.com/projects/c3p0/index.html#configuring_connection_testing' target='_blank'&gt;Configuring Connection Testing&lt;/a&gt;
&lt;br/&gt;
&lt;a href='http://community.jboss.org/wiki/HowToconfiguretheC3P0connectionpool' target='_blank'&gt;Hibernate: How To configure C3P0&lt;/a&gt;
&lt;br/&gt;&lt;br/&gt;
Hope this helps you in debugging similar issues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-4689592210170585455?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=IaO7hX7kL6I:P-gaLgWdIbo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=IaO7hX7kL6I:P-gaLgWdIbo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=IaO7hX7kL6I:P-gaLgWdIbo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=IaO7hX7kL6I:P-gaLgWdIbo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=IaO7hX7kL6I:P-gaLgWdIbo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=IaO7hX7kL6I:P-gaLgWdIbo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=IaO7hX7kL6I:P-gaLgWdIbo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=IaO7hX7kL6I:P-gaLgWdIbo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=IaO7hX7kL6I:P-gaLgWdIbo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=IaO7hX7kL6I:P-gaLgWdIbo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=IaO7hX7kL6I:P-gaLgWdIbo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/IaO7hX7kL6I" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XICgnoRzvoFutq-KHbvwfIFV5RI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XICgnoRzvoFutq-KHbvwfIFV5RI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XICgnoRzvoFutq-KHbvwfIFV5RI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XICgnoRzvoFutq-KHbvwfIFV5RI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=r5_JU3gV7lM:P-gaLgWdIbo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=r5_JU3gV7lM:P-gaLgWdIbo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=r5_JU3gV7lM:P-gaLgWdIbo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=r5_JU3gV7lM:P-gaLgWdIbo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/IaO7hX7kL6I/how-to-debug-connection-leaks-in-c3p0.html</link><author>noreply@blogger.com (Sachin)</author><thr:total>2</thr:total><feedburner:origLink>http://www.fromdev.com/2010/11/how-to-debug-connection-leaks-in-c3p0.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-6452290144304280860</guid><pubDate>Wed, 15 Sep 2010 21:19:00 +0000</pubDate><atom:updated>2010-11-29T10:06:43.291-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">How-To</category><category domain="http://www.blogger.com/atom/ns#">Liferay</category><title>How to install Liferay 6.x on Glassfish v2 Clustered Environment</title><description>We recently started experimenting with Liferay 6.0.5 in Linux machine based Glassfish v2 clustered environment. The Bundled version of Liferay comes with Glassfish V3.0.1 which does not support clustering. So we wanted to experiment and see if this works with the v2 which supports clustering. At high level if you are interested in knowing that Liferay 6.0.5 on Glassfish v2 clustered environment works or not then the answer is YES, it does with flying colors :). You can continue reading if you are interested what are the steps we followed to do this. 
&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;!--a5c8b5f9520c46dfa221acf2e78da914--&gt;
This installation of Liferay was fairly simple on our 2 node clustered setup. This post assumes that you already have a Glassfish V2 cluster setup ready and want to run the Liferay war on it. Here are simple steps to do this
&lt;br/&gt;
&lt;ol&gt;
&lt;li&gt;&lt;h2&gt;Download Liferay Glassfish Bundle&lt;/h2&gt;&lt;/li&gt;

Download Liferay 6.0.5 latest Glassfish Bundle file from &lt;a href='http://www.liferay.com/downloads/liferay-portal/overview'&gt;Liferay.com&lt;/a&gt;
We have downloaded the Glassfish v3 bundled war file just to speed up the deployment process. This way we need not search for many dependency jar files which may be required to run Liferay separately. 
&lt;br/&gt;&lt;br/&gt;
Now extract this zip file into a folder say Liferay. 


&lt;li&gt;&lt;h2&gt;Extract Liferay war and dependencies from bundle&lt;/h2&gt;&lt;/li&gt;

Copy these three jar files from &lt;br/&gt; 

&lt;p&gt;liferay\liferay-portal-6.0.5\glassfish-3.0.1\domains\domain1\lib&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;portal-service.jar &lt;/li&gt;
&lt;li&gt;portlet.jar&lt;/li&gt;
&lt;li&gt;hsql.jar &lt;/li&gt;
&lt;/ul&gt;
Place these jars into the [GlassfishV2 Home]/lib directory

&lt;li&gt;&lt;h2&gt;Deploy Liferay war to Glassfish v2&lt;/h2&gt;&lt;/li&gt;

Use the liferay-portal.war from 
&lt;p&gt;liferay\liferay-portal-6.0.5\glassfish-3.0.1\domains\domain1\autodeploy &lt;/p&gt;

directory and deploy it to Glassfish v2 cluster using following asadmin command

&lt;pre name='code' class='bash'&gt;
asadmin deploy --target [cluster_name] [war_location]\liferay-portal.war
&lt;/pre&gt;

&lt;li&gt;&lt;h2&gt;Restart the cluster&lt;/h2&gt;&lt;/li&gt;

Restart the cluster servers and hit the cluster nodes. By default the Liferay is installed on the root context, just hitting the server listening port should bring up Liferay home page. You can also go to the Glassfish Admin console &gt; Web Applications and click on the launch button to launch the portal application.

&lt;li&gt;&lt;h2&gt;Problems you may face&lt;/h2&gt;&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;&lt;h3&gt;Out Of Memory Error &lt;/h3&gt;&lt;/li&gt;
You may encounter out-of-memory errors when launching the GlassFish with Liferay portal. To avoid these errors, set larger initial and maximum memory heap sizes with the -Xms and -Xmx options on admin console. 

&lt;br/&gt;

&lt;div style='float:left;margin-right:30px;'&gt;
&lt;img src='http://3.bp.blogspot.com/_hpoWLUUuwbc/TJFBP8gwWSI/AAAAAAAAAok/86part2huhY/S489/liferayGlassfishJVMOptions.JPG' style='width:300px;'/&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt; Go to Configurations&gt; cluster1-config &gt; JVM Settings &gt; JVM Options (Tab) &lt;/li&gt;
&lt;br/&gt;
&lt;li&gt; Change the value of -Xmx option to maximum available on your system e.g. -Xmx1024m&lt;/li&gt;
&lt;br/&gt;
&lt;li&gt; Save the settings &lt;/li&gt;
&lt;br/&gt;
&lt;li&gt; Restart the cluster.&lt;/li&gt;
&lt;br/&gt;
&lt;/ul&gt;

&lt;div class="clear"&gt;&amp;nbsp;&lt;/div&gt;

&lt;li&gt;&lt;h3&gt;HSQL DB setup needs write permission on file system&lt;/h3&gt;&lt;/li&gt;

The Liferay default setup uses HSQL Database for quick installation. This creates a local database instance in the application server file system. If you do not have write permissions on application server directories then you may see some errors similar to below stack-trace in the log 

&lt;pre name='code' class='bash'&gt;
12:29:29,588 INFO  [[/liferay-portal]:646] Initializing Spring root WebApplicationContext
Loading jar:file:/usr/local/tomcat/webapps/liferay-portal/WEB-INF/lib/portal-impl.jar!/portal.properties
12:29:54,699 WARN  [ThreadPoolAsynchronousRunner:608] com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1a0283e -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!
12:29:54,708 WARN  [ThreadPoolAsynchronousRunner:624] com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@1a0283e -- APPARENT DEADLOCK!!! Complete Status:
        Managed Threads: 3
        Active Threads: 3
        Active Tasks:
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@eeabe8 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2)
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@15837e8 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0)
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@be6108 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1)
        Pending Tasks:
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@d47880
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@1335b86
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@bdec44
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@e29f36
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@429be9
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@10a0d51
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@f04dae
Pool thread stack traces:
        Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2,5,main]
                java.lang.Thread.sleep(Native Method)
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)
                com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
        Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1,5,main]
                java.lang.Thread.sleep(Native Method)
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)
                com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
        Thread[com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0,5,main]
                java.lang.Thread.sleep(Native Method)
                com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1805)
                com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)


12:30:04,272 WARN  [BasicResourcePool:1841] com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@be6108 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:
java.sql.SQLException: The database is already in use by another process: lockFile: org.hsqldb.persist.LockFile@d7a94b3d[file =/usr/local/data/hsql/lportal.lck, exists=false, locked=false, valid=false, ] method: openRAF reason: java.io.FileNotFoundException: /usr/local/data/hsql/lportal.lck (No such file or directory)
        at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
        at org.hsqldb.jdbc.jdbcConnection.&lt;init&gt;(Unknown Source)
        at org.hsqldb.jdbcDriver.getConnection(Unknown Source)
        at org.hsqldb.jdbcDriver.connect(Unknown Source)
        at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
        at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
        at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:148)
        at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
        at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
        at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
        at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
12:30:04,290 WARN  [BasicResourcePool:1841] com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@eeabe8 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception:

&lt;/pre&gt;

To avoid this problem you need to make sure the user running application server has full write access on the file system/directories where Liferay portal can create HSQL database. This may not be needed when you are using an external database. If you need to use some other database say Oracle then you need to have respective driver jars in the server CLASSPATH and JNDI configuration changes need to be done on portal-ext.properties. 

&lt;/ul&gt;
&lt;/ol&gt;

Hope you found this post useful! What are the issues you faced during this install? Please don't forget to share with me in comments I may try to provide some help/guidance if possible.

&lt;div style='display:none'&gt;installation Liferay 6.x portal on Glassfish v2 Clustered server Environment, liferay cluster&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-6452290144304280860?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=HbTSaTbSNxA:jRHnzHelqw0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=HbTSaTbSNxA:jRHnzHelqw0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=HbTSaTbSNxA:jRHnzHelqw0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=HbTSaTbSNxA:jRHnzHelqw0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=HbTSaTbSNxA:jRHnzHelqw0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=HbTSaTbSNxA:jRHnzHelqw0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=HbTSaTbSNxA:jRHnzHelqw0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=HbTSaTbSNxA:jRHnzHelqw0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=HbTSaTbSNxA:jRHnzHelqw0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=HbTSaTbSNxA:jRHnzHelqw0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=HbTSaTbSNxA:jRHnzHelqw0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/HbTSaTbSNxA" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HI7A770sqoYZTM4RUFBJnga17bE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HI7A770sqoYZTM4RUFBJnga17bE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HI7A770sqoYZTM4RUFBJnga17bE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HI7A770sqoYZTM4RUFBJnga17bE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=F5ec_crf-WY:jRHnzHelqw0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=F5ec_crf-WY:jRHnzHelqw0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=F5ec_crf-WY:jRHnzHelqw0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=F5ec_crf-WY:jRHnzHelqw0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/HbTSaTbSNxA/how-to-install-liferay-6x-on-glassfish.html</link><author>noreply@blogger.com (Sachin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_hpoWLUUuwbc/TJFBP8gwWSI/AAAAAAAAAok/86part2huhY/s72-c/liferayGlassfishJVMOptions.JPG" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://www.fromdev.com/2010/09/how-to-install-liferay-6x-on-glassfish.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-7669793272550868482</guid><pubDate>Thu, 19 Aug 2010 18:57:00 +0000</pubDate><atom:updated>2012-01-16T09:21:13.365-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Interview</category><title>12 JDBC Interview Questions &amp; Answers for Java Developers - Java Database Connectivity</title><description>Java Database Connectivity  API contains commonly asked Java interview questions. A good understanding of JDBC API is required to understand and leverage many powerful features of Java technology. Here are few important practical questions and answers which can be asked in a Core Java JDBC interview. &lt;div style="display: none;"&gt;JDBC in java interview questions,Java JDBC Framework Interview Tough Question for experienced &amp; fresher programmer, Practical JDBC API Simple,Difficult,Complex Questions and Answer, Java 1.5, 1.4 version, java.util concurrent, faqs, trick, tricky, confusing, Java JDBC API Job interview Question and Answer for JEE, j2ee developer&lt;/div&gt;
&lt;a name='more'&gt;&lt;/a&gt;
&lt;ol&gt;
&lt;li&gt;&lt;h2&gt;What are available drivers in JDBC?&lt;/h2&gt;&lt;/li&gt;
&lt;p&gt; JDBC technology drivers fit into one of four categories: &lt;/p&gt; 
&lt;ol&gt;&lt;p&gt; &lt;/p&gt;&lt;li&gt; A &lt;i&gt;JDBC-ODBC bridge&lt;/i&gt; provides JDBC API access via one or more ODBC drivers. Note that some ODBC native code and in many cases native database client  code must be loaded on each client machine that uses this type of driver. Hence, this kind of driver is generally most appropriate when automatic installation and downloading of a Java technology application is not important.  For information on the JDBC-ODBC bridge driver provided by Sun, see &lt;a href="http://java.sun.com/j2se/1.3/docs/guide/jdbc/getstart/bridge.doc.html#996747"&gt; JDBC-ODBC Bridge Driver&lt;/a&gt;.  &lt;p&gt; &lt;/p&gt;&lt;/li&gt;&lt;li&gt;A &lt;i&gt;native-API partly Java technology-enabled driver&lt;/i&gt; converts JDBC calls into calls on the client API for Oracle, Sybase, Informix, DB2, or other DBMS. Note that, like the bridge driver, this style of driver requires that some binary code be loaded on each client machine.&lt;/li&gt;&lt;p&gt; &lt;/p&gt;&lt;li&gt;A &lt;i&gt;net-protocol fully Java technology-enabled driver&lt;/i&gt; translates JDBC API calls into a DBMS-independent net protocol which is then translated to a DBMS protocol by a server. This net server middleware is able to connect all of its Java technology-based clients to many different databases. The specific protocol used depends on the vendor. In general, this is the most flexible JDBC API alternative. It is likely that all vendors of this solution will provide products suitable for Intranet use. In order for these products to also support Internet access they must handle the additional requirements for security, access through firewalls, etc., that the Web imposes. Several vendors are adding JDBC technology-based drivers to their existing database middleware products.&lt;/li&gt;&lt;p&gt; &lt;/p&gt;&lt;li&gt;A &lt;i&gt;native-protocol fully Java technology-enabled driver&lt;/i&gt; converts JDBC technology calls into the network protocol used by DBMSs directly. This allows a direct call from the client machine to the DBMS server and is a practical solution for Intranet access. Since many of these protocols are proprietary the database vendors themselves will be the primary source for this style of driver. Several database vendors have these in progress.&lt;/li&gt;&lt;/ol&gt;
&lt;br/&gt;&lt;br/&gt;

&lt;li&gt;&lt;h2&gt;What are the types of statements in JDBC?&lt;/h2&gt;&lt;/li&gt;

the JDBC API has 3 Interfaces, (1. Statement, 2. PreparedStatement, 3. CallableStatement ). The key features of these are as follows:
&lt;br/&gt;
&lt;b&gt;Statement&lt;/b&gt; 
&lt;ul&gt;&lt;li&gt;This interface is used for executing a static SQL statement and returning the results it produces. &lt;/li&gt;
&lt;li&gt;
The object of Statement class can be created using Connection.createStatement() method. &lt;/li&gt;
&lt;/ul&gt;

&lt;b&gt;PreparedStatement &lt;/b&gt;
&lt;ul&gt;&lt;li&gt;A SQL statement is pre-compiled and stored in a PreparedStatement object.&lt;/li&gt;
&lt;li&gt;This object can then be used to efficiently execute this statement multiple times.&lt;/li&gt;
&lt;li&gt; The object of PreparedStatement class can be created using Connection.prepareStatement() method. This extends Statement interface.
&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;CallableStatement &lt;/b&gt;
&lt;ul&gt;&lt;li&gt;This interface is used to execute SQL stored procedures.&lt;/li&gt;
&lt;li&gt; 
This extends PreparedStatement interface.&lt;/li&gt;
&lt;li&gt; The object of CallableStatement class can be created using Connection.prepareCall() method.&lt;/li&gt;
&lt;/ul&gt;

&lt;li&gt;&lt;h2&gt;What is a stored procedure? How to call stored procedure using JDBC API?&lt;/h2&gt;&lt;/li&gt;

Stored procedure is a group of SQL statements that forms a logical unit and performs a particular task.

Stored Procedures are used to encapsulate a set of operations or queries to execute on database. Stored procedures can be compiled and executed with different parameters and results and may have any combination of input/output parameters.

Stored procedures can be called using CallableStatement class in JDBC API. Below code snippet shows how this can be achieved.

&lt;pre name='code' class='java'&gt;
CallableStatement cs = con.prepareCall("{call MY_STORED_PROC_NAME}");
ResultSet rs = cs.executeQuery();
&lt;/pre&gt;

&lt;li&gt;&lt;h2&gt;What is Connection pooling? What are the advantages of using a connection pool?&lt;/h2&gt;&lt;/li&gt;
&lt;p&gt;
Connection Pooling is a technique used for sharing the server resources among requested clients. It was pioneered by database vendors to allow multiple clients to share a cached set of connection objects that provides access to a database.
&lt;/p&gt;
&lt;p&gt;
Getting connection and disconnecting are costly operation, which affects the application performance, so we should avoid creating multiple connection during multiple database interactions. A pool contains set of Database connections which are already connected, and any client who wants to use it can take it from pool and when done with using it can be returned back to the pool.
&lt;/p&gt;
&lt;p&gt;
Apart from performance this also saves you resources as there may be limited database connections available for your application.
&lt;/p&gt;
&lt;li&gt;&lt;h3&gt;How to do database connection using JDBC thin driver ?&lt;/h3&gt;&lt;/li&gt;

This is one of the most commonly asked questions from JDBC fundamentals, and knowing all the steps of JDBC connection is important.

&lt;pre name='code' class='java'&gt;
import java.sql.*;
class JDBCTest {
  public static void main (String args []) throws Exception
  {
        //Load driver class
        Class.forName ("oracle.jdbc.driver.OracleDriver");
         //Create connection
        Connection conn = DriverManager.getConnection
             ("jdbc:oracle:thin:@hostname:1526:testdb", "scott", "tiger");
                             // @machineName:port:SID,   userid,  password
 
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("select 'Hi' from dual");
        while (rs.next())
              System.out.println (rs.getString(1));   // Print col 1 =&gt; Hi
         stmt.close();
  }
}
&lt;/pre&gt;

&lt;li&gt;&lt;h2&gt;What does Class.forName() method do? &lt;/h2&gt;&lt;/li&gt;
&lt;/br&gt;
Method forName() is a static method of java.lang.Class. This can be used to dynamically load a class at run-time. Class.forName() loads the class if its not already loaded. It also executes the static block of loaded class. Then this method returns an instance of the loaded class. So a call to Class.forName('MyClass') is going to do following 

&lt;p&gt;- Load the class MyClass.&lt;/p&gt;
&lt;p&gt;- Execute any static block code of MyClass.&lt;/p&gt;
&lt;p&gt;- Return an instance of MyClass.&lt;/p&gt;


JDBC Driver loading using Class.forName is a good example of best use of this method. The driver loading is done like this 

&lt;pre name='code' class='java'&gt;
Class.forName("org.mysql.Driver");
&lt;/pre&gt;

All JDBC Drivers have a static block that registers itself with DriverManager and DriverManager has static initializer method registerDriver() which can be called in a static blocks of Driver class. A MySQL JDBC Driver has a static initializer which looks like this:

&lt;pre name='code' class='java'&gt;
static {
    try {
        java.sql.DriverManager.registerDriver(new Driver());
    } catch (SQLException E) {
        throw new RuntimeException("Can't register driver!");
    }
}
&lt;/pre&gt;

Class.forName() loads driver class and executes the static block and the Driver registers itself with the DriverManager.

&lt;li&gt;&lt;h2&gt;Which one will you use Statement or PreparedStatement? Or Which one to use when (Statement/PreparedStatement)? Compare PreparedStatement vs Statement.
&lt;/h2&gt;&lt;/li&gt;

By Java API definitions: &lt;br/&gt;

&lt;b&gt;Statement&lt;/b&gt; is a object used for executing a static SQL statement and returning the results it produces. 
&lt;br/&gt;
&lt;b&gt;PreparedStatement &lt;/b&gt;is a SQL statement which is precompiled and stored in a PreparedStatement object. This object can then be used to efficiently execute this statement multiple times. 
&lt;br/&gt;&lt;br/&gt;
There are few advantages of using PreparedStatements over Statements
&lt;br/&gt;
&lt;ol&gt;&lt;li&gt;Since its pre-compiled, Executing the same query multiple times in loop, binding different parameter values each time is faster. (What does pre-compiled statement means? The prepared statement(pre-compiled) concept is not specific to Java, it is a database concept. Statement precompiling means: when you execute a SQL query, database server  will prepare a execution plan before executing the actual query, this execution plan will be cached at database server for further execution.)&lt;/li&gt;
&lt;li&gt;In PreparedStatement the setDate()/setString() methods can be used to escape dates and strings properly, in a database-independent way.&lt;/li&gt;
&lt;li&gt;SQL injection attacks on a system are virtually impossible when using PreparedStatements.&lt;/li&gt;&lt;/ol&gt;

&lt;li&gt;&lt;h2&gt;What does setAutoCommit(false) do?&lt;/h2&gt;&lt;/li&gt;

A JDBC connection is created in auto-commit mode by default. This means that each individual SQL statement is treated as a transaction and will be automatically committed as soon as it is executed. If you require two or more statements to be grouped into a transaction then you need to disable auto-commit mode using below command

&lt;pre name='code' class='java'&gt;
    con.setAutoCommit(false);
&lt;/pre&gt;

Once auto-commit mode is disabled, no SQL statements will be committed until you explicitly call the commit method. A Simple transaction with use of autocommit flag is demonstrated below.

&lt;pre name='code' class='java'&gt;
    con.setAutoCommit(false);
    PreparedStatement updateStmt =
     con.prepareStatement( "UPDATE EMPLOYEE SET SALARY = ? WHERE EMP_NAME LIKE ?");
    updateStmt.setInt(1, 5000); updateSales.setString(2, "Jack");
    updateStmt.executeUpdate();
    updateStmt.setInt(1, 6000); updateSales.setString(2, "Tom");
    updateStmt.executeUpdate(); 
    con.commit();
    con.setAutoCommit(true);
&lt;/pre&gt;

&lt;li&gt;&lt;h2&gt;What are database warnings and How can I handle database warnings in JDBC?&lt;/li&gt;&lt;/h2&gt;
 
Warnings are issued by database to notify user of a problem which may not be very severe. Database warnings do not stop the execution of SQL statements. In JDBC SQLWarning is an exception that provides information on database access warnings. Warnings are silently chained to the object whose method caused it to be reported. 
&lt;br/&gt;&lt;br/&gt;  
Warnings may be retrieved from Connection, Statement, and ResultSet objects. 
&lt;br/&gt;&lt;br/&gt; 
Handling SQLWarning from connection object

&lt;pre name='code' class='java'&gt;
 //Retrieving warning from connection object
 SQLWarning warning = conn.getWarnings();
 
 //Retrieving next warning from warning object itself
 SQLWarning nextWarning = warning.getNextWarning();
 
 //Clear all warnings reported for this Connection object. 
 conn.clearWarnings();
&lt;/pre&gt; 
 
Handling SQLWarning from Statement object

&lt;pre name='code' class='java'&gt; 
 //Retrieving warning from statement object
 stmt.getWarnings();

 //Retrieving next warning from warning object itself
 SQLWarning nextWarning = warning.getNextWarning(); 
 
 //Clear all warnings reported for this Statement object. 
 stmt.clearWarnings();
&lt;/pre&gt;

Handling SQLWarning from ResultSet object

&lt;pre name='code' class='java'&gt; 
 //Retrieving warning from resultset object
 rs.getWarnings();
 
 //Retrieving next warning from warning object itself
 SQLWarning nextWarning = warning.getNextWarning();
 
 //Clear all warnings reported for this resultset object. 
 rs.clearWarnings();
&lt;/pre&gt;

The call to &lt;b&gt;getWarnings()&lt;/b&gt; method in any of above way retrieves the first warning reported by calls on this object. If there is more than one 
warning, subsequent warnings will be chained to the first one and can be retrieved by calling the method &lt;b&gt;SQLWarning.getNextWarning&lt;/b&gt; on the warning that was retrieved previously. 
&lt;br/&gt;&lt;br/&gt;
A call to &lt;b&gt;clearWarnings()&lt;/b&gt; method  clears all warnings reported for this object. After a call to this method, the method getWarnings  returns null until a new warning is reported for this object. 
&lt;br/&gt;&lt;br/&gt;
Trying to call &lt;b&gt;getWarning()&lt;/b&gt; on a connection after it has been closed will cause an SQLException to be thrown. Similarly, trying to retrieve a warning on a statement after it has been closed or on a result set after it has been closed will cause an SQLException to be thrown. Note that closing a statement also closes a result set that it might have produced. 

&lt;li&gt;&lt;h2&gt;What is Metadata and why should I use it?&lt;/h2&gt;&lt;/li&gt;

JDBC API has 2 Metadata interfaces DatabaseMetaData &amp; ResultSetMetaData. &lt;br/&gt;

The DatabaseMetaData provides Comprehensive information about the database as a whole. This interface is implemented by driver vendors to let users know the capabilities of a Database Management System (DBMS) in combination with the driver based on JDBC technology ("JDBC driver") that is used with it. Below is a sample code which demonstrates how we can use the DatabaseMetaData 

&lt;pre name='code' class='java'&gt; 
 DatabaseMetaData md = conn.getMetaData();
 System.out.println("Database Name: " + md.getDatabaseProductName());
 System.out.println("Database Version: " + md.getDatabaseProductVersion());
 System.out.println("Driver Name: " + md.getDriverName());
 System.out.println("Driver Version: " + md.getDriverVersion());
&lt;/pre&gt;   

The ResultSetMetaData is an object that can be used to get information about the types and properties of the columns in a ResultSet object. 

Use DatabaseMetaData to find information about your database, such as its capabilities and structure. Use ResultSetMetaData to find information about the results of an SQL query, such as size and types of columns. Below a sample code which demonstrates how we can use the ResultSetMetaData

&lt;pre name='code' class='java'&gt; 
     ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
     ResultSetMetaData rsmd = rs.getMetaData();
     int numberOfColumns = rsmd.getColumnCount();
     boolean b = rsmd.isSearchable(1);
&lt;/pre&gt;


&lt;li&gt;&lt;h2&gt;What is RowSet? or What is the difference between RowSet and ResultSet? or Why do we need RowSet? or What are the advantages of using RowSet over ResultSet?&lt;/h2&gt;&lt;/li&gt;

RowSet is a interface that adds support to the JDBC API for the JavaBeans component model. A rowset, which can be used as a JavaBeans component in a visual Bean development environment, can be created and configured at design time and executed at run time. The RowSet  interface provides a set of JavaBeans properties that allow a RowSet  instance to be configured to connect to a JDBC data source and read some data from the data source. A group of setter methods (setInt, setBytes, setString, and so on) provide a way to pass input parameters to a rowset's command property. This command is the SQL query the rowset uses when it gets its data from a relational database, which is generally the case. 
&lt;br/&gt;
Rowsets are easy to use since the RowSet interface extends the standard java.sql.ResultSet interface so it has all the methods of ResultSet. There are two clear advantages of using RowSet over ResultSet

&lt;ul&gt;
&lt;li&gt;RowSet makes it possible to use the ResultSet object as a JavaBeans component. As a consequence, a result set can, for example, be a component in a Swing application. &lt;/li&gt;
&lt;li&gt;RowSet be used to make a ResultSet object scrollable and updatable. All RowSet objects are by default scrollable and updatable. If the driver and database being used do not support scrolling and/or updating of result sets, an application can populate a RowSet object implementation (e.g. JdbcRowSet) with the data of a ResultSet object and then operate on the RowSet object as if it were the ResultSet  object.&lt;/li&gt;
&lt;/ul&gt;

&lt;li&gt;&lt;h2&gt;What is a connected RowSet? or What is the difference between connected RowSet and disconnected RowSet? or Connected vs Disconnected RowSet, which one should I use and when?&lt;/h2&gt;&lt;/li&gt;

&lt;h2&gt;Connected RowSet&lt;/h2&gt;
A RowSet object may make a connection with a data source and maintain that connection throughout its life cycle, in which case it is called a connected rowset. A rowset may also make a connection with a data source, get data from it, and then close the connection. Such a rowset is called a disconnected rowset. A disconnected rowset may make changes to its data while it is disconnected and then send the changes back to the original source of the data, but it must reestablish a connection to do so.
&lt;br/&gt;
&lt;b&gt;Example of Connected RowSet:&lt;/b&gt;
&lt;br/&gt;
A JdbcRowSet object is a example of connected RowSet, which means it continually maintains its connection to a database using a JDBC technology-enabled driver.

&lt;h2&gt;Disconnected RowSet&lt;/h2&gt;
A disconnected rowset may have a reader (a RowSetReader object) and a writer (a RowSetWriter object) associated with it. The reader may be implemented in many different ways to populate a rowset with data, including getting data from a non-relational data source. The writer can also be implemented in many different ways to propagate changes made to the rowset's data back to the underlying data source. 
&lt;br/&gt;
&lt;b&gt;Example of Disconnected RowSet:&lt;/b&gt;
&lt;br/&gt;
A CachedRowSet object is a example of disconnected rowset, which means that it makes use of a connection to its data source only briefly. It connects to its data source while it is reading data to populate itself with rows and again while it is propagating changes back to its underlying data source. The rest of the time, a CachedRowSet object is disconnected, including while its data is being modified. Being disconnected makes a RowSet  object much leaner and therefore much easier to pass to another component. For example, a disconnected RowSet object can be serialized and passed over the wire to a thin client such as a personal digital assistant (PDA). 
&lt;br/&gt;

&lt;li&gt;&lt;h2&gt;What is the benefit of having JdbcRowSet implementation? Why do we need a JdbcRowSet like wrapper around ResultSet?&lt;/h2&gt;&lt;/li&gt;

The JdbcRowSet implementation is a wrapper around a ResultSet object that has following advantages over ResultSet 
&lt;br/&gt;
&lt;ul&gt;&lt;li&gt; This implementation makes it possible to use the ResultSet object as a JavaBeans component. A JdbcRowSet can be used as a JavaBeans component in a visual Bean development environment, can be created and configured at design time and executed at run time. &lt;/li&gt;
&lt;br/&gt;
&lt;li&gt;It can be used to make a ResultSet object scrollable and updatable. All RowSet objects are by default scrollable and updatable. If the driver and database being used do not support scrolling and/or updating of result sets, an application can populate a JdbcRowSet object with the data of a ResultSet object and then operate on the JdbcRowSet object as if it were the ResultSet object. &lt;/li&gt;
&lt;/ul&gt;

&lt;/ol&gt;

Can you think of a questions which is not part of this post? Please don't forget to share it with me in comments section &amp; I will try to include it in the list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-7669793272550868482?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=esFwOuoBcm4:dBcEOOYPAIw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=esFwOuoBcm4:dBcEOOYPAIw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=esFwOuoBcm4:dBcEOOYPAIw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=esFwOuoBcm4:dBcEOOYPAIw:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=esFwOuoBcm4:dBcEOOYPAIw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=esFwOuoBcm4:dBcEOOYPAIw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=esFwOuoBcm4:dBcEOOYPAIw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=esFwOuoBcm4:dBcEOOYPAIw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=esFwOuoBcm4:dBcEOOYPAIw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=esFwOuoBcm4:dBcEOOYPAIw:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=esFwOuoBcm4:dBcEOOYPAIw:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/esFwOuoBcm4" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/illQW8Oz-DMa0wgNCuTwhc_VWJc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/illQW8Oz-DMa0wgNCuTwhc_VWJc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/illQW8Oz-DMa0wgNCuTwhc_VWJc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/illQW8Oz-DMa0wgNCuTwhc_VWJc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=k8fDSQguzHg:dBcEOOYPAIw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=k8fDSQguzHg:dBcEOOYPAIw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=k8fDSQguzHg:dBcEOOYPAIw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=k8fDSQguzHg:dBcEOOYPAIw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/esFwOuoBcm4/10-jdbc-questions-for-java-beginners.html</link><author>noreply@blogger.com (Sachin)</author><thr:total>10</thr:total><feedburner:origLink>http://www.fromdev.com/2010/08/10-jdbc-questions-for-java-beginners.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-3507771552396500129</guid><pubDate>Mon, 09 Aug 2010 23:17:00 +0000</pubDate><atom:updated>2010-12-27T22:54:55.406-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips</category><category domain="http://www.blogger.com/atom/ns#">.Popular</category><title>5 Best Software Architecture Books you must read</title><description>Are you looking for the best software architecture books? Take a look at the following books which I found really valuable in understanding and effectively applying software architecture principles in real life. I would recommend these books as a must read for any software architect or developer regardless of language or background.
&lt;a name='more'&gt;&lt;/a&gt;(In addition to the &lt;a href="http://www.fromdev.com/2010/06/5-best-design-pattern-books-you-must.html"&gt;5 Best Design Pattern Books&lt;/a&gt;) 

&lt;ol&gt;
&lt;li&gt;&lt;h2&gt;&lt;a href='http://www.amazon.com/gp/product/0321112296?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321112296'&gt;Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives&lt;/a&gt; &lt;/h2&gt;&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.amazon.com/gp/product/0321112296?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321112296" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_hpoWLUUuwbc/TGBxun2sZDI/AAAAAAAAAoE/vFyXbB8gTc0/s1600/SoftwareSystemArchitecture.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;
(By: Nick Rozanski,E. Woods)
&lt;br /&gt;
This book can be a good companion and reference for a beginner through intermediate level. It gives an excellent overview of what a system architect has to go through day in and day out to achieve success. The book contains a wealth of advice on what to pay and not pay attention to in any particular stage of the architectural development. The authors clearly speak from personal experience. 
&lt;br /&gt;
Even if you are not an architect it is a great book to buy so you understand what to expect out of one. More details about this book can be found at - &lt;a href="http://www.viewpoints-and-perspectives.info/" target="_blank"&gt;http://www.viewpoints-and-perspectives.info/&lt;/a&gt;
&lt;br /&gt;

&lt;li&gt;&lt;h2&gt;&lt;a href='http://www.amazon.com/gp/product/0135974445?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0135974445'&gt;Agile Software Development, Principles, Patterns, and Practices&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.amazon.com/gp/product/0135974445?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0135974445" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_hpoWLUUuwbc/TGB1VFj0s9I/AAAAAAAAAoI/TBQIslNL7qo/s1600/AgileSoftware.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;
(By: Robert C. Martin)&lt;br /&gt;

This book has dozens of practical but concise examples illustrating everything from relatively simple object-oriented design concepts such as Meyer's Open/Closed Principle to subtle and complex issues with class and package dependencies.
&lt;br /&gt; The patterns discussion in this book is down-to-earth and easily understood. Robert does a wonderful job of explaining each design pattern, demonstrating their use through code, and placing them within the context of his design principles. The examples are numerous and, with a few exceptions, well written. I would also recommend this book to an Object Oriented Design newbie/student.

&lt;li&gt;&lt;h2&gt;&lt;a href='http://www.amazon.com/gp/product/0131177052?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131177052'&gt;Working Effectively with Legacy Code &lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.amazon.com/gp/product/0131177052?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0131177052" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_hpoWLUUuwbc/TGB-ZbLYXRI/AAAAAAAAAoM/EY_z3QC7wuo/s1600/LegacyCode.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
(By: Michael Feathers)
&lt;br /&gt;
This book does an excellent job of articulating the problems and scenarios, using clear examples from C, C++, Java, and C#. Many of the code examples look a lot like real examples we come across all the time (they don't appear to be fabricated). 

&lt;br /&gt;The author defines "legacy code" as "code without tests." It doesn't matter whether the code was written last week or ten years ago. There is more emphasis on old code that nobody understands, mainly because it is messier and harder to work with. Working with legacy code isn't fun, but this book helps make it as painless as possible.

&lt;li&gt;&lt;h2&gt;&lt;a href="http://www.amazon.com/gp/product/0201775948?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201775948"&gt;Beyond Software Architecture: Creating and Sustaining Winning Solutions&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.amazon.com/gp/product/0201775948?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201775948" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/_hpoWLUUuwbc/TGCEAWtL48I/AAAAAAAAAoQ/8nDYJvYyko4/s200/beyondSA.JPG" width="148" /&gt;&lt;/a&gt;&lt;/div&gt;
(By: Luke Hohmann)&lt;br/&gt;

This book delivers on its promise to discuss the larger business realities of creating software products. If you're a software architect, or dream of being one, this is a must read book. &lt;br /&gt;The book is nicely segmented into logical chapters, making it an excellent reference. Although it covers classic architecture issues such as portability, usability, performance, layering, API design, and security, the truly valuable material is on the business and product management side of the fence, which often get ignored, or left till late in the process.

&lt;li&gt;&lt;h2&gt;&lt;a href="http://www.amazon.com/gp/product/0321200683?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321200683"&gt;Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;

&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.amazon.com/gp/product/0321200683?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321200683" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_hpoWLUUuwbc/TGCHbmNgnQI/AAAAAAAAAoU/L5srTMPw2OE/s1600/EIP.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;
(By: Gregor Hohpe, Bobby Woolf)&lt;br/&gt;

The book is organized into 65 patterns. Each pattern shows one typical problem in integrating applications, and how it is solved. Each pattern gives enough implementation details so it is clear how it would work, and an example or two so it is clear how it works in practice.&lt;br/&gt; This book also contains in-depth coverage on software architecture using asynchronous communication. It's worth reading and re-reading if you're working with systems integration projects or writing integration software yourself.
&lt;/ol&gt;

&lt;br/&gt;
Hope you found this list useful! What are the best Software Architecture books you have read? Please don't forget to share with me in comments. 

&lt;div style='display:none'&gt;best books on architecture, good software architecture books for software architect, best architecture software architects, books must read, best architecture book, 5 Best Software Architecture Books you must read, best architecture books 2010 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-3507771552396500129?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=VbuwsklzmNw:MngXUORySnM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=VbuwsklzmNw:MngXUORySnM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=VbuwsklzmNw:MngXUORySnM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=VbuwsklzmNw:MngXUORySnM:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=VbuwsklzmNw:MngXUORySnM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=VbuwsklzmNw:MngXUORySnM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=VbuwsklzmNw:MngXUORySnM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=VbuwsklzmNw:MngXUORySnM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=VbuwsklzmNw:MngXUORySnM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=VbuwsklzmNw:MngXUORySnM:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=VbuwsklzmNw:MngXUORySnM:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/VbuwsklzmNw" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/71nWod3qEqhCYeP9RlzLP3WxQeA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/71nWod3qEqhCYeP9RlzLP3WxQeA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/71nWod3qEqhCYeP9RlzLP3WxQeA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/71nWod3qEqhCYeP9RlzLP3WxQeA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=ZCibSXEYiA4:MngXUORySnM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=ZCibSXEYiA4:MngXUORySnM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=ZCibSXEYiA4:MngXUORySnM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=ZCibSXEYiA4:MngXUORySnM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/VbuwsklzmNw/best-software-architecture-books-must.html</link><author>noreply@blogger.com (Sachin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_hpoWLUUuwbc/TGBxun2sZDI/AAAAAAAAAoE/vFyXbB8gTc0/s72-c/SoftwareSystemArchitecture.JPG" height="72" width="72" /><thr:total>12</thr:total><feedburner:origLink>http://www.fromdev.com/2010/08/best-software-architecture-books-must.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-468078589617781669</guid><pubDate>Wed, 23 Jun 2010 22:57:00 +0000</pubDate><atom:updated>2010-06-29T09:56:54.027-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Linux</category><category domain="http://www.blogger.com/atom/ns#">How-To</category><title>How to solve the Kaptcha error on Glassfish v31 in Linux</title><description>I was trying to run one of my existing web application on recently released Glassfish v31 in Linux environment. This is an early access release that will eventually replace GlassFish 3.0.1 with new clustering and centralized admin features.&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;In our web application we are using &lt;a href='http://code.google.com/p/kaptcha/wiki/HowToUse' target='_blank'&gt;Kaptcha&lt;/a&gt; to avoid spamming on few pages, which is really simple to integrate with any java web application. ( A CAPTCHA helps you keep your site clean by automatically blocking spam. CAPTCHA is a contrived acronym for "&lt;b&gt;Completely Automated Public Turing test to tell Computers and Humans Apart.&lt;/b&gt;")
&lt;br/&gt;&lt;br/&gt;
This application works perfectly fine with Tomcat 6, therefore ideally the application should run without any problem on any other  JEE application server. We deployed the war file and everything started working except for the Kaptcha image.  When we hit the Kaptcha URL (which of format http://host:port/app/kaptcha) directly it throws below error on the browser
&lt;br/&gt;&lt;br/&gt;
&lt;pre name='code' class='bash'&gt;
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: PWC1243: Filter execution threw an exception

root cause

java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment

note The full stack traces of the exception and its root causes are available in the GlassFish3.1-b05 logs.
GlassFish3.1-b05
&lt;/pre&gt;


When we checked the server logs we found this exception stack-trace

&lt;pre name='code' class='bash'&gt;

[#|2010-06-22T16:55:30.908-0700|WARNING|glassfish3.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=143;_ThreadName=Thread-1;|StandardWrapperValve[Kaptcha]: PWC1406: Servlet.service() for servlet Kaptcha threw exception
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:68)
        at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1135)
        at com.google.code.kaptcha.text.impl.DefaultWordRenderer.renderWord(DefaultWordRenderer.java:41)
        at com.google.code.kaptcha.impl.DefaultKaptcha.createImage(DefaultKaptcha.java:41)
        at com.google.code.kaptcha.servlet.KaptchaServlet.doGet(KaptchaServlet.java:82)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:844)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1518)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:339)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211)
        at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:171)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:651)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:591)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:87)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:158)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:321)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:222)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:802)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:705)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:986)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:178)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:526)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:507)
        at java.lang.Thread.run(Thread.java:619)
|#]

[#|2010-06-22T16:54:38.458-0700|WARNING|glassfish3.1|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=144;_ThreadName=http-thread-pool-8080(5);|StandardWrapperValve[Kaptcha]: PWC1406: Servlet.service() for servlet Kaptcha threw exception
java.lang.InternalError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
        at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
        at sun.awt.X11GraphicsEnvironment.access$100(X11GraphicsEnvironment.java:52)
        at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:155)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.awt.X11GraphicsEnvironment.&lt;clinit&gt;(X11GraphicsEnvironment.java:131)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:68)
        at java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1135)
        at com.google.code.kaptcha.text.impl.DefaultWordRenderer.renderWord(DefaultWordRenderer.java:41)
        at com.google.code.kaptcha.impl.DefaultKaptcha.createImage(DefaultKaptcha.java:41)
        at com.google.code.kaptcha.servlet.KaptchaServlet.doGet(KaptchaServlet.java:82)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:844)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1518)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:339)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211)
        at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:211)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:171)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:651)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:591)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:87)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:158)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:321)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:222)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:802)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:705)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:986)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:178)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:526)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:507)
        at java.lang.Thread.run(Thread.java:619)

&lt;/pre&gt;

&lt;h2&gt;The Root cause &lt;/h2&gt;

If you look at the log message "Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable."
This means the JRE abstract Windows toolkit is not able to initialize the graphics in this environment. 

&lt;h2&gt;How to resolve this issue ?&lt;/h2&gt;

To avoid this error we need to set headless JVM option to true in the server startup scripts. 

&lt;pre name='code' class='bash'&gt;
-Djava.awt.headless=true
&lt;/pre&gt;

&lt;h2&gt;What is Headless mode?&lt;/h2&gt;
This is extract from Sun Developer Network page

&lt;blockquote&gt;
Headless mode is a system configuration in which the display device, keyboard, or mouse is lacking. Sounds unexpected, but actually you can perform different operations in this mode, even with graphic data.
&lt;br/&gt;&lt;br/&gt;
Many methods in the java.awt.Toolkit and java.awt.GraphicsEnvironment classes, with the exception of fonts, imaging, and printing, require the availability of a display device, keyboard, and mouse. But some classes, such as Canvas or Panel, can be executed in headless mode. Headless mode support has been available since the J2SE 1.4 platform.
&lt;/blockquote&gt;

&lt;h2&gt;How to set Headless=true in Glassfish v31 Admin console?&lt;/h2&gt;

This can be done from the Glassfish administration console.
&lt;ul&gt; 
&lt;li&gt; Login to Glassfish Admin console&lt;/li&gt;
&lt;li&gt;Go to - Configurations - Server Config - JVM Settings - JVM Options TAB - Select Add JVM Option &lt;/li&gt;
&lt;li&gt; Add "-Djava.awt.headless=true" in the text field.&lt;/li&gt;
&lt;li&gt; Hit "Save" button.&lt;/li&gt;
&lt;li&gt; Restart the server.&lt;/li&gt;
&lt;li&gt; Now the Captcha images should start working. 
&lt;/ul&gt;

&lt;h2&gt;How to set Headless=true in Glassfish v31 command line?&lt;/h2&gt;

This can be easily done using below asadmin commands 

&lt;pre name='code' class='bash'&gt;
##Set the JVM option 
asadmin create-jvm-options -Djava.awt.headless=true
## Stop the server
asadmin stop-domain [mydomain]
## Start the server
asadmin start-domain [mydomain]
&lt;/pre&gt;

In general this error can seen on any server and the same solution should be applicable. I hope this post will save you some time on this issue, Let me know if you are facing any problem.&lt;div style='display:none;'&gt;Glassfish v3, v31, v3.1,v3.0.1,Captcha not working on glassfish,Kaptcha error on glassfish &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-468078589617781669?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=569KkvhhoTc:VJB6QKpxGn8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=569KkvhhoTc:VJB6QKpxGn8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=569KkvhhoTc:VJB6QKpxGn8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=569KkvhhoTc:VJB6QKpxGn8:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=569KkvhhoTc:VJB6QKpxGn8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=569KkvhhoTc:VJB6QKpxGn8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=569KkvhhoTc:VJB6QKpxGn8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=569KkvhhoTc:VJB6QKpxGn8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=569KkvhhoTc:VJB6QKpxGn8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=569KkvhhoTc:VJB6QKpxGn8:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=569KkvhhoTc:VJB6QKpxGn8:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/569KkvhhoTc" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nS8PRQtIAZzlV7gG8q94NtbnHng/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nS8PRQtIAZzlV7gG8q94NtbnHng/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nS8PRQtIAZzlV7gG8q94NtbnHng/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nS8PRQtIAZzlV7gG8q94NtbnHng/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=AM0Iw9H-f1o:VJB6QKpxGn8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=AM0Iw9H-f1o:VJB6QKpxGn8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=AM0Iw9H-f1o:VJB6QKpxGn8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=AM0Iw9H-f1o:VJB6QKpxGn8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/569KkvhhoTc/how-to-solve-kaptcha-error-on-glassfish.html</link><author>noreply@blogger.com (Sachin)</author><thr:total>2</thr:total><feedburner:origLink>http://www.fromdev.com/2010/06/how-to-solve-kaptcha-error-on-glassfish.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-381539889641708393</guid><pubDate>Mon, 07 Jun 2010 18:07:00 +0000</pubDate><atom:updated>2010-12-04T20:26:05.001-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tips</category><category domain="http://www.blogger.com/atom/ns#">.Popular</category><title>5 Best Design Pattern Books you must read as a Software Developer</title><description>Design patterns provide a structure in which problems can be solved. When solving a real problem, you have to consider many small variations of a solution to that problem to see whether any fits a design pattern. &lt;br/&gt;&lt;br/&gt;
&lt;a name='more'&gt;&lt;/a&gt;
To understand and get used to design patterns is really difficult. It can be done by studying applications  of design patterns, not just the patterns. Reading several books with different perspective is really important. 
&lt;br/&gt;&lt;br/&gt;
Are you looking for the best design pattern books? Take a look at the following books which I found really valuable in understanding and effectively applying design patterns. I would recommend these books as must read for any software developer regardless of language or background.

&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;h2&gt;Design Patterns: Elements of Reusable Object-Oriented Software&lt;/h2&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.amazon.com/gp/product/0201633612?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201633612" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/_hpoWLUUuwbc/TA0vTgfLlfI/AAAAAAAAAmg/N1jGWD2YXOc/s200/GoFBook.JPG" width="146" /&gt;&lt;/a&gt;&lt;/div&gt;
(By:  Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides)&lt;br /&gt;
As you probably already realized, this book is one of the seminal books on patterns in software development. If you are a professional software developer, you must read this. It isolates 23 of the most common patterns and presents them in detail. 
This book is popularly known as Gang of Four book (Due to gang of 4 great authors).
&lt;br /&gt;&lt;br /&gt;
This book is &lt;b&gt;not light reading&lt;/b&gt; though. The examples are based on heavy-duty design tasks an average programmer doesn't face, like language-parsing, toolkit creation, compiler writing, and the like. It makes one wonder how applicable many of the patterns are to less complex programming tasks.
&lt;br/&gt;
The PDF version of this book can be downloaded from &lt;a href="http://www.uml.org.cn/c%2B%2B/pdf/DesignPatterns.pdf"&gt;Gang Of Four eBook&lt;/a&gt;

&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;Head First Design Patterns&lt;/h2&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.amazon.com/gp/product/0596007124?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596007124" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://3.bp.blogspot.com/_hpoWLUUuwbc/TA0wCanxz0I/AAAAAAAAAmk/x4yr2RAdlJM/s200/HeadFirstDesignPatterns.JPG" width="171" /&gt;&lt;/a&gt;&lt;/div&gt;
(By:  Elisabeth Freeman, Eric Freeman, Bert Bates, Kathy Sierra)&lt;br /&gt;
The Gang of Four book laid out the basics. The Head First book goes a lot further. 
It shows you good and bad way of applying the pattern. It gives strong reasoning behind the pattern.
&lt;br /&gt;
While reading the Gang of Four book I found it very complicated to memorize the pattern. After reading this book it will be easy to memorize, reproduce and implement the patterns effectively. 
&lt;br /&gt;&lt;br /&gt;
Head First Design Patterns book is not just about design patterns. It's also a great introduction to object-oriented programming. 
&lt;br/&gt;
The PDF version of Chapter 3 can be downloaded from &lt;a href="http://oreilly.com/catalog/hfdesignpat/chapter/ch03.pdf"&gt;Head First Design Patterns eBook Chapter 3&lt;/a&gt;

&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;Pattern Hatching: Design Patterns Applied&lt;/h2&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.amazon.com/gp/product/0201432935?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0201432935" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/_hpoWLUUuwbc/TA0xk1awCLI/AAAAAAAAAmo/EF7Vh-pPXHg/s200/patternHatching.JPG" width="151" /&gt;&lt;/a&gt;&lt;/div&gt;
(By: John M. Vlissides)&lt;br /&gt;
Author John Vlissides is a member of the Gang of Four writers. He has an excellent writing style that is very engaging for this type of material. Besides going into some additional design patterns, and some pattern strengths and pitfalls, you get a fascinating behind the scenes look at what went on in the development stages of the original Design Patterns book.
&lt;br/&gt;
Chapter 2 of this book is a must read where John develops a file system application. This book talks in great detail about which patterns suit best the needs of the application and which do not.


&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;Refactoring to Patterns &lt;/h2&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.amazon.com/gp/product/0321213351?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321213351" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/_hpoWLUUuwbc/TA0ySZ8NMoI/AAAAAAAAAmw/aYtlaB5guIs/s200/refactoringToPatterns.JPG" width="146" /&gt;&lt;/a&gt;&lt;/div&gt;
(By : Joshua Kerievsky)&lt;br /&gt;&lt;br /&gt;

This is a good book for the software maintainer. In other words, it addresses 90% or 99% of the work that real programmers do. Just about every other software text on the market assumes that the project just started - the disks are empty and the compiler shrink-wrap is on the floor. I admit, that kind of programming is the most fun. It's just not realistic, though. Most work is rework, the kind demonstrated in this book. This also helps a lot in understanding anti-patterns.
&lt;br/&gt;&lt;br/&gt;
This book does an excellent job of bringing patterns into coding, rather than relegating them just to design discussions. This includes twenty-seven pattern-directed refactorings with real-world code examples.
&lt;br/&gt;
A PDF version of same book can be downloaded from &lt;a href="http://rockfish-cs.cs.unc.edu/COMP290-agile/rtp113.pdf"&gt;Refactoring to Patterns eBook&lt;/a&gt;

&lt;/li&gt;
&lt;li&gt;&lt;h2&gt;Patterns of Enterprise Application Architecture&lt;/h2&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.amazon.com/gp/product/0321127420?ie=UTF8&amp;tag=good-read-books-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321127420" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/_hpoWLUUuwbc/TA0x0fl7gyI/AAAAAAAAAms/MeEFhJosbgc/s200/MartiFowlerBook.JPG" width="155" /&gt;&lt;/a&gt;&lt;/div&gt;
(By: Martin Fowler)&lt;br /&gt;&lt;br /&gt;
Martin Fowler clearly knows the field of Enterprise Application, he speaks with confidence of development experiences with projects that went live. This book covers the best practices of Enterprise Application Architecture. The first half of the book is a discussion of enterprise architecture in general. This book describes a set of patterns that work with a certain kind of application, business apps, but that are applicable to more than one platform.
&lt;br/&gt;&lt;br/&gt;
This book is useful for both J2EE and .NET developers. This is particularly useful when attempting to gain an understanding of how application architectures differ between .NET and J2EE. I found the discussions on concurrency and transactions very valuable. Also if you have really complex business logic, you will find how the patterns presented in this book are useful.

&lt;br/&gt;
The PDF version of this book can be downloaded from &lt;a href="http://ce.sharif.edu/~m_behrooz/patterns-fowler.pdf"&gt;Patterns of Enterprise Application Architecture eBook&lt;/a&gt;


&lt;/li&gt;
&lt;/ol&gt;

Hope you found this list useful, What are the best design patterns books you have read? Please don't forget to share with me in comments.
&lt;div style='display:none'&gt;design patterns book for software designer &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-381539889641708393?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=zAlhni9gBwI:3r3AklRto_Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=zAlhni9gBwI:3r3AklRto_Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=zAlhni9gBwI:3r3AklRto_Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=zAlhni9gBwI:3r3AklRto_Q:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=zAlhni9gBwI:3r3AklRto_Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=zAlhni9gBwI:3r3AklRto_Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=zAlhni9gBwI:3r3AklRto_Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=zAlhni9gBwI:3r3AklRto_Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=zAlhni9gBwI:3r3AklRto_Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=zAlhni9gBwI:3r3AklRto_Q:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=zAlhni9gBwI:3r3AklRto_Q:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/zAlhni9gBwI" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8EhvjNa78uJbKAQoIvh32oShcB8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8EhvjNa78uJbKAQoIvh32oShcB8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8EhvjNa78uJbKAQoIvh32oShcB8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8EhvjNa78uJbKAQoIvh32oShcB8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=e-lUaKJuRZc:3r3AklRto_Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=e-lUaKJuRZc:3r3AklRto_Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=e-lUaKJuRZc:3r3AklRto_Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=e-lUaKJuRZc:3r3AklRto_Q:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/zAlhni9gBwI/5-best-design-pattern-books-you-must.html</link><author>noreply@blogger.com (Sachin)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_hpoWLUUuwbc/TA0vTgfLlfI/AAAAAAAAAmg/N1jGWD2YXOc/s72-c/GoFBook.JPG" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://www.fromdev.com/2010/06/5-best-design-pattern-books-you-must.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-1245252241047438844</guid><pubDate>Tue, 01 Jun 2010 19:49:00 +0000</pubDate><atom:updated>2011-06-13T13:49:54.476-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Example Code</category><title>10 Simple String Utility Methods for Java Developer</title><description>String operations are common to all kind of programming. Java has many in built operations supported by String class. There are few functions which I observed commonly used and may be helpful to keep handy as StringUtil class with static methods.
&lt;a name='more'&gt;&lt;/a&gt;
&lt;ol&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name='Exception-Stacktrace-to-String' href='#Exception-Stacktrace-to-String' &gt; Getting Exception Stack Trace to String value&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;

Exceptions class provides a printStackTrace() method which directly prints the Stack Trace to the console. Sometimes you may need to take stack trace to a String variable and use it (e.g. logging using logger), or doing processing on the trace e.g. eclipse shows stack trace and links it to the file and line number.

Below is a simple piece of code which demonstrates how we can capture the stack trace inside as String variable. This example utilizes the StringWriter class to convert the stream content to a String.

&lt;br /&gt;
&lt;pre class="java" name="code"&gt;public static String toString(Exception e) {

    StringWriter s = new StringWriter();
    e.printStackTrace(new PrintWriter(s));
    return s.toString(); 
}
&lt;/pre&gt;

&lt;li&gt;&lt;h2&gt;&lt;a name='Merging-two-String-arrays' href='#Merging-two-String-arrays' &gt; Merging two String arrays&lt;/a&gt;&lt;/h2&gt;&lt;/li&gt;

This is another simple Java String utility method, which can be used to merge two arrays of String values. This takes care of eliminating the duplicates and also does null checking. If you are dealing with multiple String arrays then it could be a useful method.

&lt;pre name='code' class='java'&gt;
 
 /**
  * This String utility or util method can be used to merge 2 arrays of
  * string values. If the input arrays are like this array1 = {"a", "b" ,
  * "c"} array2 = {"c", "d", "e"} Then the output array will have {"a", "b" ,
  * "c", "d", "e"}
  * 
  * This takes care of eliminating duplicates and checks null values.
  * 
  * @param values
  * @return
  */
 public static String[] mergeStringArrays(String array1[], String array2[]) {
 
  if (array1 == null || array1.length == 0)
   return array2;
  if (array2 == null || array2.length == 0)
   return array1;
  List array1List = Arrays.asList(array1);
  List array2List = Arrays.asList(array2);
  List result = new ArrayList(array1List);  
  List tmp = new ArrayList(array1List);
  tmp.retainAll(array2List);
  result.removeAll(tmp);
  result.addAll(array2List);  
  return ((String[]) result.toArray(new String[result.size()]));
 }
&lt;/pre&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name='Trim-List-of-String' href='#Trim-List-of-String' &gt;Trim List of String&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;


This is a Collections List  equivalent of the trim method for String Array. This can be used to trim all String values in a List of Strings. It takes care of null checking. 

&lt;pre name='code' class='java'&gt;
/**
 * This String utility or util method can be used to trim all the String
 * values in list of Strings. For input [" a1 ", "b1 ", " c1"] the output
 * will be {"a1", "b1", "c1"} Method takes care of null values. This method
 * is collections equivalent of the trim method for String array.
 *
 * @param values
 * @return
 */
public static List trim(final List values) {

 List newValues = new ArrayList();
 for (int i = 0, length = values.size(); i &lt; length; i++) {
  String v = (String) values.get(i);
  if (v != null) {
   v = v.trim();
  }
  newValues.add(v);
 }
 return newValues;
}
&lt;/pre&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name='Trim-array-of-String' href='#Trim-array-of-String' &gt;Trim array of String&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;

This is another simple but useful Java String Utility/Util method, which can be used to trim all String values in an array of String. This takes care of null checking while doing trim.

java.lang.String class contains the trim method which can be used to trim a string from left and right both sides. So for example if you have a string [" This is a String "] then calling a trim() method on this string will convert it to ["This is a String"].

&lt;pre name='code' class='java'&gt;
/**
 * This String utility or util method can be used to
 * trim all the String values in the string array.
 * For input {" a1 ", "b1 ", " c1"}
 * the output will be {"a1", "b1", "c1"}
 * Method takes care of null values.
 * @param values
 * @return
 */
public static String[] trim(final String[] values) {

 for (int i = 0, length = values.length; i &lt; length; i++) {
  if (values[i] != null) {
   values[i] = values[i].trim();                                
  }
 }
 return values;

}
&lt;/pre&gt;


&lt;h2&gt;&lt;li&gt;&lt;a name='Unquoting-the-String' href='#Unquoting-the-String' &gt;Unquoting the String&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;

This method can be used to unquote a string value. This method takes care of single and double quotes both along with handling the null string. It returns the string as it is when the string is not quoted. 

&lt;pre name='code' class='java'&gt;
/**
 * This String util method removes single or double quotes
 * from a string if its quoted.
 * for input string = "mystr1" output will be = mystr1
 * for input string = 'mystr2' output will be = mystr2
 *
 * @param String value to be unquoted.
 * @return value unquoted, null if input is null.
 *
 */
public static String unquote(String s) {

 if (s != null
   &amp;&amp; ((s.startsWith("\"") &amp;&amp; s.endsWith("\""))
   || (s.startsWith("'") &amp;&amp; s.endsWith("'")))) {

  s = s.substring(1, s.length() - 1);
 }
 return s;
}
/**
 * Same method as above but using the ?: syntax which is shorter. You can use whichever you prefer.
 * This String util method removes single or double quotes from a string if
 * its quoted. for input string = "mystr1" output will be = mystr1 for input
 *  
 * string = 'mystr2' output will be = mystr2
 *
 * @param String
 *            value to be unquoted.
 * @return value unquoted, null if input is null.
 *
 */
public static String unquote2(String s) {

 return (s != null &amp;&amp; ((s.startsWith("\"") &amp;&amp; s.endsWith("\"")) || (s
   .startsWith("'") &amp;&amp; s.endsWith("'")))) ? s = s.substring(1, s
   .length() - 1) : s;

} 
&lt;/pre&gt;


&lt;h2&gt;&lt;li&gt;&lt;a name='Extracting-File-Name-from-Absolute-path' href='#Extracting-File-Name-from Absolute-path' &gt;Extracting File Name from Absolute path&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;


Exact file name extraction is required many times, when dealing with files. Below is a String utility method, which can be used to extract the exact file name from a absolute path. It uses the File.separatorChar which should take care of all platforms. 

&lt;pre name='code' class='java'&gt;
/**
* This method extracts the file name from absolute path of file
* As an example :
* &lt;blockquote&gt;
*
* &lt;pre&gt;
* For an input "c:\myDir\MyFile.java"
* The output will be : "MyFile"
* &lt;/pre&gt;
*
* &lt;/blockquote&gt;
*
* @param absoluteFileName File name with path
* @return FileName minus the path
*/

public static String extractFileName(String absoluteFileName) {

if (!isNullOrEmpty(absoluteFileName)) {

absoluteFileName = absoluteFileName.substring(absoluteFileName
.lastIndexOf(File.separatorChar) + 1, absoluteFileName.lastIndexOf("."));

}
return absoluteFileName;
}
&lt;/pre&gt;


&lt;h2&gt;&lt;li&gt;&lt;a name='Getting-Array-List-of-tokens-from-String' href='#Getting-Array-List-of-tokens-from-String' &gt;Getting Array/List of tokens from String&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;


This method can be used to convert a String separated by delimiter into an array of String.

&lt;pre name='code' class='java'&gt;
/**
* This method is used to split the given string into different tokens at
* the occurrence of specified delimiter
* An example :
* &lt;code&gt;"abcdzefghizlmnop"&lt;/code&gt; and using a delimiter &lt;code&gt;"z"&lt;/code&gt;
* would give following output
* &lt;code&gt;"abcd" "efghi" "lmnop"&lt;/code&gt;
*
* @param str The string that needs to be broken
* @param delimeter The delimiter used to break the string
* @return a string array
*/

public static String[] getTokensArray(String str, String delimeter) {

String[] data;
if(str == null){
    return null;
}

if (delimeter == null || "".equals(delimeter)
|| "".equals(str)) {
    data = new String[1];
    data[0] = str;
    return data;
} else {
    StringTokenizer st = new StringTokenizer(str, delimeter);
    int tokenCount = st.countTokens();
    data = new String[tokenCount];
    for (int i = 0; st.hasMoreTokens(); i++) {
    data[i] = st.nextToken();
}
return data;
}
}
&lt;/pre&gt;

A better and simpler/improved version of same method is suggested by one of readers and the code looks like this.


&lt;pre name='code' class='java'&gt;
/**
* This method is used to split the given string into different tokens at
* the occurrence of specified delimiter
* An example :
* &lt;code&gt;"abcdzefghizlmnop"&lt;/code&gt; and using a delimiter &lt;code&gt;"z"&lt;/code&gt;
* would give following output
* &lt;code&gt;"abcd" "efghi" "lmnop"&lt;/code&gt;
*
* @param str The string that needs to be broken
* @param delimeter The delimiter used to break the string
* @return a string array
*/
 public static String[] getTokensArray(String str, String delimeter) {
  if (str != null) {
   return str.split(delimeter);
  }
  return null;
 }
&lt;/pre&gt;

Another variation for same method is for getting a java.util.List instead of array of objects. This can be easily done using small change to above method

&lt;pre name='code' class='java'&gt;
/**
* This method is used to split the given string into different tokens at
* the occurrence of specified delimiter
* An example :
* &lt;code&gt;"abcdzefghizlmnop"&lt;/code&gt; and using a delimiter &lt;code&gt;"z"&lt;/code&gt;
* would give following output
* &lt;code&gt;"abcd" "efghi" "lmnop"&lt;/code&gt;
*
* @param str The string that needs to be broken
* @param delimeter The delimiter used to break the string
* @return a instance of java.util.List&lt;String&gt; with each token as one item in list
*/

 public static List&lt;String&gt; getTokensList(String str, String delimeter) {
  if (str != null) {
   return Arrays.asList(str.split(delimeter));
  }
  return new ArrayList&lt;String&gt;();
 }

&lt;/pre&gt;



&lt;h2&gt;&lt;li&gt;&lt;a name='Checking-Starts-Ends-with-Ignoring-the-case' href='#Checking-Starts-Ends-with-Ignoring-the-case' &gt;Checking Starts/Ends with Ignoring the case&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;

The java.lang.String class default implementation has startsWith and endsWith() methods which perform case sensitive comparison,  Below are two functions, which can be used to do the same startsWith/endsWith check ignoring the case.

&lt;pre name='code' class='java'&gt;
/**
* Check a String ends with another string ignoring the case.
*
* @param str
* @param suffix
* @return
*/
public static boolean endsWithIgnoreCase(String str, String suffix) {

    if (str == null || suffix == null) {
        return false;
    }
    if (str.endsWith(suffix)) {
        return true;
    }
    if (str.length() &lt; suffix.length()) {
        return false;
    } else {
        return str.toLowerCase().endsWith(suffix.toLowerCase());
    }
}

/**
* Check a String starts with another string ignoring the case.
*
* @param str
* @param prefix
* @return
*/

public static boolean startsWithIgnoreCase(String str, String prefix) {

    if (str == null || prefix == null) {
        return false;
    }
    if (str.startsWith(prefix)) {
        return true;
    }
    if (str.length() &lt; prefix.length()) {
        return false;
    } else {
        return str.toLowerCase().startsWith(prefix.toLowerCase());
    }
}
&lt;/pre&gt;

&lt;h2&gt;&lt;li&gt;&lt;a name='Converting-String-to-set-of-Unique-tokens' href='#Converting-String-to-set-of-Unique-tokens' &gt;Converting String to set of Unique tokens&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;

 
This method can be used to create a set of unique string values from a string which has tokens separated by some separator. This is very useful method when you get the input as comma or space separated string, which has to be converted to set of values when dealing with each value individually and avoiding duplicates. 

The code is using StringTokenizer for separating the tokens, so single or multiple separators can be used.

&lt;pre name='code' class='java'&gt;
/**
* This method creates a set of unique string tokens which are separated by
* separator
*
* @param str
* @param separator
* @return
*/
public static Set getUniqueTokens(String str, String separator) {

 StringTokenizer tokenizer = new StringTokenizer(str, separator);
 Set tokens = new HashSet();
 while (tokenizer.hasMoreTokens()) {
     tokens.add(tokenizer.nextToken());
 }
 return tokens;
}
&lt;/pre&gt;

Another way of writing the same method is (suggested by a reader in comments section) is using the String.split() method. Below is the code for same

&lt;pre name='code' class='java'&gt;
/**
* This method creates a set of unique string tokens which are separated by
* separator
*
* @param str
* @param separator
* @return
*/
public static Set getUniqueTokens(String str, String separator) {
 String [] tmpStr = str.split(separator);
 return new HashSet(Arrays.asList(tmpStr));
}
&lt;/pre&gt;


&lt;h2&gt;&lt;li&gt;&lt;a name='Masking-Null-String-value' href='#Masking-Null-String-value' &gt;Masking Null String value&lt;/a&gt;&lt;/li&gt;&lt;/h2&gt;

There are times when we don't want to deal with null String values, in such cases below utility method can be utilized. This method return a empty string value in case the string value is null. Same argument of extra method call may come up for this as well, but you may save unwanted NullPointerException in your application by using such a method.

I have found this useful at places where we are displaying a field value on user interface and want to mask the null values with empty string.

&lt;pre name='code' class='java'&gt;
/**
* Return a not null string.
*
* @param s String
* @return empty string if it is null otherwise the string passed in as
* parameter.
*/

public static String nonNull(String s) {

if (s == null) {
    return "";
}
return s;
}
&lt;/pre&gt;


&lt;/ol&gt;


Can you think of a function which is not part of this list? Please don't forget to share it with me in comments section &amp; I will try to include it in the list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-1245252241047438844?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=xhNWbb5x1gw:kJujqgtMLn4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=xhNWbb5x1gw:kJujqgtMLn4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=xhNWbb5x1gw:kJujqgtMLn4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=xhNWbb5x1gw:kJujqgtMLn4:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=xhNWbb5x1gw:kJujqgtMLn4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=xhNWbb5x1gw:kJujqgtMLn4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=xhNWbb5x1gw:kJujqgtMLn4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=xhNWbb5x1gw:kJujqgtMLn4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=xhNWbb5x1gw:kJujqgtMLn4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=xhNWbb5x1gw:kJujqgtMLn4:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=xhNWbb5x1gw:kJujqgtMLn4:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/xhNWbb5x1gw" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LGbqj_2cpYTbLf7E5RdNpyLbvmY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LGbqj_2cpYTbLf7E5RdNpyLbvmY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LGbqj_2cpYTbLf7E5RdNpyLbvmY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LGbqj_2cpYTbLf7E5RdNpyLbvmY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=ildFDG838jg:kJujqgtMLn4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=ildFDG838jg:kJujqgtMLn4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=ildFDG838jg:kJujqgtMLn4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=ildFDG838jg:kJujqgtMLn4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/xhNWbb5x1gw/10-simple-string-utility-methods-for.html</link><author>noreply@blogger.com (Sachin)</author><thr:total>12</thr:total><feedburner:origLink>http://www.fromdev.com/2010/06/10-simple-string-utility-methods-for.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-4096836397530974331</guid><pubDate>Mon, 26 Apr 2010 19:11:00 +0000</pubDate><atom:updated>2010-10-24T15:00:50.057-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">How-To</category><category domain="http://www.blogger.com/atom/ns#">Example Code</category><title>6 Simple ways to automatically update copyright year on a web page</title><description>Automatic update of copyright year would be a real smart thing to do for any website since its such a trivial thing many developer may not remember to update it manually every year. &lt;br /&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;
Recently I observed this with twitter.com when they forgot to update the Copyright year from 2009 to 2010 for few months. Automatic update will avoid any such mistakes on your site. In this tutorial I am trying to capture most common ways where people may need to update copyright year in a website.
&lt;br /&gt;
&lt;ol&gt; &lt;li&gt;&lt;h2&gt;Using JSTL (JavaServer Pages Standard Tag Library)&lt;/h2&gt;&lt;/li&gt;
JSTL provides rich tag support, we can use the core and format taglibs to format the year part of copyright message. Include below to taglibs in your JSP page.

&lt;pre class="xml" name="code"&gt;
&amp;lt;%@ taglib prefix=&amp;quot;c&amp;quot; uri=&amp;quot;http://java.sun.com/jsp/jstl/core&amp;quot;%&amp;gt;&lt;br/&gt;&amp;lt;%@ taglib prefix=&amp;quot;fmt&amp;quot; uri=&amp;quot;http://java.sun.com/jsp/jstl/fmt&amp;quot;%&amp;gt;
&lt;/pre&gt;

Now add the below code to the footer of your JSP page. 
&lt;pre class="xml" name="code"&gt;
&amp;lt;c:set var=&amp;quot;now&amp;quot; value=&amp;quot;&amp;lt;%=new java.util.Date()%&amp;gt;&amp;quot; /&amp;gt;&lt;br/&gt;Copyright &amp;amp;copy; &amp;lt;fmt:formatDate pattern=&amp;quot;yyyy&amp;quot; value=&amp;quot;${now}&amp;quot; /&amp;gt; My Company Name
&lt;/pre&gt;

&lt;li&gt;&lt;h2&gt;Ant - Update at build time&lt;/h2&gt;&lt;/li&gt;
This is a small ant target which can be used in your ant build script and can be used to update the application/company copyright year at build time.&lt;br /&gt;
&lt;br /&gt;
The below copyright.xml file extracts the (4 digit) year from system time-stamp and updates the property file that is storing copyright information (e.g. application.properties).&lt;br /&gt;
&lt;br /&gt;
&lt;a href="#copyright-Ant-XML" name="copyright-Ant-XML"&gt;&lt;b&gt;copyright.xml&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&amp;lt;project name="copyright" default="copyright"&amp;gt;

&amp;lt;target name="init"&amp;gt;
 &amp;lt;property name="application.properties.file" value="application.properties"/&amp;gt;
&amp;lt;/target&amp;gt;


&amp;lt;target name="copyright" depends="init"&amp;gt;
  &amp;lt;tstamp&amp;gt;
      &amp;lt;format property="copyright.year" pattern="yyyy"/&amp;gt;
  &amp;lt;/tstamp&amp;gt;
  &amp;lt;echo&amp;gt;Copyright is: ${copyright.year}&amp;lt;/echo&amp;gt;
  &amp;lt;propertyfile file="${application.properties.file}"&amp;gt;
 &amp;lt;entry  key="app.copyright" value="Copyright &amp;copy; ${copyright.year} My Company Name"/&amp;gt;
  &amp;lt;/propertyfile&amp;gt;
&amp;lt;/target&amp;gt;

&amp;lt;/project&amp;gt;

&lt;/pre&gt;&lt;br /&gt;
Content of application.properties before build script is run.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="#2" name="2"&gt;&lt;b&gt;application.properties&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;app.copyright=Copyright &amp;copy; 2009 My Copyright message

&lt;/pre&gt;&lt;br /&gt;
To see this sample running save the files (copyright.xml &amp;amp; application.properties) in same directory and run "ant -f copyright.xml" on command line in same directory. &lt;br /&gt;
&lt;br /&gt;
The copy right year should be updated in application.properties and the content of this file after running ant command should be something like this.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;#Mon Apr 26 11:15:54 PDT 2010
app.copyright=Copyright &amp;copy; 2010 My Company Name
&lt;/pre&gt;&lt;br /&gt;
&lt;a href="#3" name="3"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h4&gt;&lt;a href="#3" name="3"&gt;How to use this script&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;
In case your application build.xml is too big and you don't like to add new target in it then you can save the copyright.xml file as it is, and call it in your existing script as shown below &lt;br /&gt;
&lt;br /&gt;
&lt;pre class="xml" name="code"&gt;&lt;ant antfile="copyright.xml"&gt;
    &lt;property name="application.properties.file" value="application.properties"&gt;
  &lt;/property&gt;
  
&lt;/ant&gt;&lt;/pre&gt;&lt;br /&gt;
Make sure you update the application.properties file with appropriate file name and correct location.&lt;br /&gt;
&lt;br /&gt;

Ideally the update of copyright year should be done at run-time, therefore next few ways are for doing it during run-time using different web languages.

&lt;li&gt;&lt;h2&gt;PHP Application&lt;/h2&gt;&lt;/li&gt;
Updating Copyright year in a PHP based application can be really simple. Just add below code in your application footer section. 
&lt;br/&gt;&lt;br/&gt;

&lt;pre class='xml' name='code'&gt;
&amp;lt;p&amp;gt;Copyright &amp;amp;copy; 2007 - &amp;lt;?php echo date('Y'); ?&amp;gt; My Company Name. All Rights Reserved.&amp;lt;/p&amp;gt;
&lt;/pre&gt;

&lt;li&gt;&lt;h2&gt;JavaScript&lt;/h2&gt;&lt;/li&gt;
Below small JavaScript code snippet can be used to update copyright year in any web application. Just add below code in you footer section. (Thanks to Helen for suggesting this option in the comments.)

&lt;pre class='xml' name='code'&gt;
&amp;lt;p&amp;gt;Copyright &amp;amp;copy; &amp;lt;script language=&amp;quot;JavaScript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;document.write((new Date()).getFullYear());&amp;lt;/script&amp;gt; My Company Name&amp;lt;/p&amp;gt;&lt;br/&gt;
&lt;/pre&gt;

In case you don't want to use client side date object you can always initialize your JavaScript variable from a server side value.

&lt;li&gt;&lt;h2&gt;Wordpress&lt;/h2&gt;&lt;/li&gt;
There can be two ways to do this in WordPress

&lt;ul&gt;&lt;li&gt;&lt;b&gt;By PHP&lt;/b&gt;&lt;/li&gt; - Since WordPress uses PHP the same code can be used by Wordpress blog owners to keep their blogs up to date with copyright year. 

Copyright message are usually added at the footer of the themes (most of times), so to add this code in your WordPress blog simply go to WordPress Dashboard and browse to the footer of the active theme and add this code then click Update. (If you are not a geek I suggest take a backup of your theme before doing any such change.)

&lt;pre class='xml' name='code'&gt;
&amp;lt;p&amp;gt;Copyright &amp;amp;copy; 2007 - &amp;lt;?php echo date('Y'); ?&amp;gt; My Company Name. All Rights Reserved.&amp;lt;/p&amp;gt;
&lt;/pre&gt;

&lt;li&gt;&lt;b&gt;By JavaScript&lt;/b&gt;&lt;/li&gt;
Same JavaScript code can also be used in a WordPress theme to update the copyright year automatically. Just copy the below code and add in the WordPrese theme footer.

&lt;pre class='xml' name='code'&gt;
&amp;lt;p&amp;gt;Copyright &amp;amp;copy; &amp;lt;script language=&amp;quot;JavaScript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;document.write((new Date()).getFullYear());&amp;lt;/script&amp;gt; My Company Name&amp;lt;/p&amp;gt;&lt;br/&gt;
&lt;/pre&gt;

&lt;/ul&gt;

&lt;li&gt;&lt;h2&gt;Blogger&lt;/h2&gt;&lt;/li&gt;
Same JavaScript code can also be used in a Blogger templates to update the copyright year automatically. Just copy the below code and go to "Design" &amp;gt; "Edit Html", and add the code below to the blogger template footer section. (If you are using blogger templates then search for [id='footer-wrapper'])

&lt;pre class='xml' name='code'&gt;
&amp;lt;p&amp;gt;Copyright &amp;amp;copy; &amp;lt;script language=&amp;quot;JavaScript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;document.write((new Date()).getFullYear());&amp;lt;/script&amp;gt; My Company Name&amp;lt;/p&amp;gt;&lt;br/&gt;
&lt;/pre&gt;

&lt;/ol&gt;
Please share your thoughts and suggestions in case you know a better way of doing the same thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-4096836397530974331?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=-tYDpuxf9Z8:_kenhnFOoYo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=-tYDpuxf9Z8:_kenhnFOoYo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=-tYDpuxf9Z8:_kenhnFOoYo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=-tYDpuxf9Z8:_kenhnFOoYo:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=-tYDpuxf9Z8:_kenhnFOoYo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=-tYDpuxf9Z8:_kenhnFOoYo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=-tYDpuxf9Z8:_kenhnFOoYo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=-tYDpuxf9Z8:_kenhnFOoYo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=-tYDpuxf9Z8:_kenhnFOoYo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=-tYDpuxf9Z8:_kenhnFOoYo:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=-tYDpuxf9Z8:_kenhnFOoYo:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/-tYDpuxf9Z8" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8JRbz38HoGnnYM-D74zTCMsnMh8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8JRbz38HoGnnYM-D74zTCMsnMh8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8JRbz38HoGnnYM-D74zTCMsnMh8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8JRbz38HoGnnYM-D74zTCMsnMh8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=Ma_RgV2Hy_k:_kenhnFOoYo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=Ma_RgV2Hy_k:_kenhnFOoYo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=Ma_RgV2Hy_k:_kenhnFOoYo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=Ma_RgV2Hy_k:_kenhnFOoYo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/-tYDpuxf9Z8/automatic-update-of-copyright-year-at.html</link><author>noreply@blogger.com (Sachin)</author><thr:total>2</thr:total><feedburner:origLink>http://www.fromdev.com/2010/04/automatic-update-of-copyright-year-at.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-5794549166246130384</guid><pubDate>Fri, 22 Jan 2010 20:32:00 +0000</pubDate><atom:updated>2011-07-05T15:41:20.142-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">OpenSource</category><category domain="http://www.blogger.com/atom/ns#">Tomcat</category><title>Trying to run JAX-WS Sample Application in the Metro Environment</title><description>I recently downloaded the Metro 2.0 from &lt;a target="_blank" href="https://metro.dev.java.net"&gt;https://metro.dev.java.net&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;I wanted to install it on my Tomcat 6 (apache-tomcat-6.0.18) with JDK (1.6.0_10)&lt;br /&gt;&lt;br /&gt;I followed Java example in the "Getting started with Metro" guide from &lt;a target="_blank" href="https://metro.dev.java.net/getting-started/basic.html"&gt;https://metro.dev.java.net/getting-started/basic.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Below are the issues I ran into during this process so thought of posting this for others benefit.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="#1" name="1"&gt;Issue #1 : Tomcat endorsed directory location in Ant build.xml&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When you run the "server" target in build.xml it throws following error message.&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;C:\wsit-jaxws-fromjava&gt;ant -Duse.tomcat=true server&lt;br /&gt;Buildfile: build.xml&lt;br /&gt;&lt;br /&gt;BUILD FAILED&lt;br /&gt;C:\wsit-jaxws-fromjava\build.xml:129: C:\Tools\apache-tomcat-6.0.18\common\endorsed not found.&lt;br /&gt;&lt;br /&gt;Total time: 0 seconds&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This issue is due the wrong directory path for lib.endorsed in build.xml to fix this issue open the wsit-jaxws-fromjava\build.xml file and search for following &lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&lt;condition property="lib.endorsed" value="${catalina.home}/common/endorsed" else="${as.home}/lib/endorsed"&gt;&lt;br /&gt;&lt;isset property="bld.for.tomcat"/&gt;&lt;br /&gt;&lt;/condition&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Change the directory value ${catalina.home}/common/endorsed to ${catalina.home}/endorsed as shown below and save the build.xml file.&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&lt;condition property="lib.endorsed" value="${catalina.home}/endorsed" else="${as.home}/lib/endorsed"&gt;&lt;br /&gt;        &lt;isset property="bld.for.tomcat"&gt;&lt;/isset&gt;&lt;br /&gt;    &lt;/condition&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now run the "ant -Duse.tomcat=true server" command again, build should be successful.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="#2" name="2"&gt;Issue #2 : The xendorsed option is required for JDK6&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Once the you are done generating the server side for this web service you need to generate the client sources for the same sample service.&lt;br /&gt;When I run the "ant -Duse.tomcat=true client" command I get following error message and build is failed again.&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;C:\wsit-jaxws-fromjava&gt;ant -Duse.tomcat=true client&lt;br /&gt;Buildfile: build.xml&lt;br /&gt;Trying to override old definition of task apt&lt;br /&gt;&lt;br /&gt;setup:&lt;br /&gt;&lt;br /&gt;generate-client:&lt;br /&gt;&lt;br /&gt;BUILD FAILED&lt;br /&gt;C:\wsit-jaxws-fromjava\build.xml:192: You are running on JDK6 which comes with JAX-WS 2.1 API, but this tool requires JAX-WS 2.2 API. Use the endorsed standards override mechanism (http://java.sun.com/javase/6/docs/technotes/guides/standards/), or set xendorsed="true" on &lt;wsimport&gt;&lt;/wsimport&gt;.&lt;br /&gt;&lt;br /&gt;Total time: 0 seconds&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As the message says it clearly, this problem is due to the JDK6 being shipped with older version of JAX-WS API. To make the &lt;wsimport&gt; tag use a override on this you need to add one more attribute xendorsed="true" in the &lt;wsimport&gt; tag in Ant build.xml file.&lt;br /&gt;&lt;br /&gt;Open the build.xml file and look for below tag&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&lt;target name="generate-client" depends="setup"&gt;&lt;br /&gt;        &lt;wsimport&lt;br /&gt;            debug="${debug}"&lt;br /&gt;            verbose="${verbose}"&lt;br /&gt;            keep="${keep}"&lt;br /&gt;            extension="${extension}"&lt;br /&gt;            destdir="${build.classes.home}"&lt;br /&gt;            wsdl="${client.wsdl}"&gt;&lt;br /&gt;            &lt;binding dir="${basedir}/etc" includes="${client.binding}"/&gt;&lt;br /&gt;        &lt;/wsimport&gt;&lt;br /&gt;    &lt;/target&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now change this to add a new attribute as shown below.&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&lt;target name="generate-client" depends="setup"&gt;&lt;br /&gt;        &lt;wsimport&lt;br /&gt;            debug="${debug}"&lt;br /&gt;            xendorsed="true"&lt;br /&gt;            verbose="${verbose}"&lt;br /&gt;            keep="${keep}"&lt;br /&gt;            extension="${extension}"&lt;br /&gt;            destdir="${build.classes.home}"&lt;br /&gt;            wsdl="${client.wsdl}"&gt;&lt;br /&gt;            &lt;binding dir="${basedir}/etc" includes="${client.binding}"/&gt;&lt;br /&gt;        &lt;/wsimport&gt;&lt;br /&gt;    &lt;/target&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now run the "ant -Duse.tomcat=true client" command again, and this time it should generate all your client sources properly.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="#3" name="3"&gt;Issue #3 : Using the endorsed directory in JDK6&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When I run the client using command "ant -Duse.tomcat=true run", it gives me below error. &lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;C:\wsit-jaxws-fromjava&gt;ant run&lt;br /&gt;Buildfile: build.xml&lt;br /&gt;Trying to override old definition of task apt&lt;br /&gt;&lt;br /&gt;run:&lt;br /&gt;     [java] Exception in thread "main" java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName()Ljava/lang/String;&lt;br /&gt;     [java]     at com.sun.xml.ws.model.RuntimeModeler.processExceptions(RuntimeModeler.java:1162)&lt;br /&gt;     [java]     at com.sun.xml.ws.model.RuntimeModeler.processDocWrappedMethod(RuntimeModeler.java:898)&lt;br /&gt;     [java]     at com.sun.xml.ws.model.RuntimeModeler.processMethod(RuntimeModeler.java:666)&lt;br /&gt;     [java]     at com.sun.xml.ws.model.RuntimeModeler.processClass(RuntimeModeler.java:420)&lt;br /&gt;     [java]     at com.sun.xml.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:254)&lt;br /&gt;     [java]     at com.sun.xml.ws.client.WSServiceDelegate.createSEIPortInfo(WSServiceDelegate.java:661)&lt;br /&gt;     [java]     at com.sun.xml.ws.client.WSServiceDelegate.addSEI(WSServiceDelegate.java:649)&lt;br /&gt;     [java]     at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:343)&lt;br /&gt;     [java]     at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:326)&lt;br /&gt;     [java]     at com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:308)&lt;br /&gt;     [java]     at javax.xml.ws.Service.getPort(Service.java:92)&lt;br /&gt;     [java]     at fromjava.client.AddNumbersImplService.getAddNumbersImplPort(AddNumbersImplService.java:72)&lt;br /&gt;     [java]     at fromjava.client.AddNumbersClient.main(Unknown Source)&lt;br /&gt;     [java] Java Result: 1&lt;br /&gt;&lt;br /&gt;BUILD SUCCESSFUL&lt;br /&gt;Total time: 2 seconds&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;-----------&lt;br /&gt;&lt;br /&gt;The error message is due to client using older version of jaxws-ri which already bundled with the JDK6. &lt;br /&gt;The annotation javax.xml.ws.WebFault in the rt.jar that ships with JDK1.6.0_X does not contain a messageName property &lt;br /&gt;where as the javax.xml.ws.WebFault annotation that comes in the webservices-api.jar does contain this property.&lt;br /&gt;&lt;br /&gt;To avoid this error you need to copy the &lt;tomcat_home&gt;\endorsed\webservices-api.jar file to &lt;java_home&gt;/jre/lib/endorsed directory &lt;br /&gt;&lt;br /&gt;if &lt;java_home&gt;/jre/lib/endorsed directory does not exist in your system create it and copy the webservices-api.jar file here.&lt;br /&gt;&lt;br /&gt;For more details on endorsed directory read details at http://java.sun.com/javase/6/docs/technotes/guides/standards/&lt;br /&gt;&lt;br /&gt;Now run the command "ant run" you should see the successful output.&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;C:\Downloads\wsit-jaxws-fromjava\wsit-jaxws-fromjava&gt;ant run&lt;br /&gt;Buildfile: build.xml&lt;br /&gt;Trying to override old definition of task apt&lt;br /&gt;&lt;br /&gt;run:&lt;br /&gt;     [java] Invoking addNumbers(10, 20)&lt;br /&gt;     [java] The result of adding 10 and 20 is 30.&lt;br /&gt;     [java]&lt;br /&gt;     [java] Invoking addNumbers(-10, 20)&lt;br /&gt;     [java] Caught AddNumbersException_Exception: Numbers: -10, 20&lt;br /&gt;&lt;br /&gt;BUILD SUCCESSFUL&lt;br /&gt;Total time: 1 second&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Let me know if you face any other issue while following steps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-5794549166246130384?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=7RNMgGCwhrQ:CHyQzS_8ZZ0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=7RNMgGCwhrQ:CHyQzS_8ZZ0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=7RNMgGCwhrQ:CHyQzS_8ZZ0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=7RNMgGCwhrQ:CHyQzS_8ZZ0:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=7RNMgGCwhrQ:CHyQzS_8ZZ0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=7RNMgGCwhrQ:CHyQzS_8ZZ0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=7RNMgGCwhrQ:CHyQzS_8ZZ0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=7RNMgGCwhrQ:CHyQzS_8ZZ0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=7RNMgGCwhrQ:CHyQzS_8ZZ0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=7RNMgGCwhrQ:CHyQzS_8ZZ0:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=7RNMgGCwhrQ:CHyQzS_8ZZ0:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/7RNMgGCwhrQ" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OaCgWxbQiZTHRiTfHEQFtlCxHGg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OaCgWxbQiZTHRiTfHEQFtlCxHGg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OaCgWxbQiZTHRiTfHEQFtlCxHGg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OaCgWxbQiZTHRiTfHEQFtlCxHGg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=POW595CRHY0:CHyQzS_8ZZ0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=POW595CRHY0:CHyQzS_8ZZ0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=POW595CRHY0:CHyQzS_8ZZ0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=POW595CRHY0:CHyQzS_8ZZ0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/7RNMgGCwhrQ/trying-to-run-jax-ws-sample-application.html</link><author>noreply@blogger.com (Sachin)</author><thr:total>15</thr:total><feedburner:origLink>http://www.fromdev.com/2010/01/trying-to-run-jax-ws-sample-application.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-637499528247154499.post-6791661008294189733</guid><pubDate>Tue, 20 Oct 2009 00:06:00 +0000</pubDate><atom:updated>2011-07-05T15:45:32.506-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Java</category><category domain="http://www.blogger.com/atom/ns#">Tutorials</category><title>Playing with Java String Split Basics</title><description>This is a simple tutorial for java beginners who are struggling on the String split() method. I have seen many students wondering about how to split the string in java with the help of split() method.&lt;br /&gt;
In this tutorial I am trying to show some simple exercises which can be used for learning and understanding String split and few other methods. &lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="#two-flavors-of-split-method" name="two-flavors-of-split-method"&gt;Understanding the two flavors of split method&lt;/a&gt;&lt;/li&gt;
Java.lang.String class contains two flavors of split() method, which can be used to split a string.  Here are the javadoc definition of these two methods:      
&lt;blockquote&gt;&lt;b&gt;public String[] split(String regex) &lt;/b&gt;-  This method splits the string based on the given regular expression and returns array of strings.  &lt;/blockquote&gt;&lt;blockquote&gt;&lt;b&gt;public String[] split(String regex,int limit)&lt;/b&gt; -&amp;nbsp;  This method splits the string based on the given regular expression and returns array of strings.   The limit parameter controls the number of times the pattern is applied and therefore affects the length of the resulting array. If the limit n is greater than zero then the pattern will be applied at most n - 1 times, the array's length will be no greater than n, and the array's last entry will contain all input beyond the last matched delimiter. If n is non-positive then the pattern will be applied as many times as possible and the array can have any length. If n is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded.  &lt;/blockquote&gt;
&lt;blockquote&gt;So for example if you have a string ["This is a String"] then   a) calling a split(" ") method (space as delimiter) on this string will convert it to an array of four strings  [1] - This  [2] - is  [3] - a  [4] - String  a) calling a split(" ", 2) method on this string will convert it to an array of 2 strings  [1] - This  [2] - is a String &lt;/blockquote&gt;
&lt;li&gt;&lt;a href="#one-character-delimiter" name="one-character-delimiter"&gt;Simplest thing first - Using the split() method with one character delimiter&lt;/a&gt;&lt;/li&gt;
As you can see the split method supports regular expression therefore we should be able to use one or more chanracters as delimiter. To start with simple example I have chosen  comma "," as a delimiter for my sentence.   So for example if you have a string ["This,is,a,String"] then a split using comma as delimiter should result in array of four strings. See below example code.    
&lt;pre class="Java" name="code"&gt;public static void  singleCharacterDelimiterTest() {
String str = "This,is,a,String";
String delimiter = ",";
String[] splitStrings = str.split(delimiter);
for (int i = 0; i &amp;lt; splitStrings.length; i++) {
System.out.println(splitStrings[i]);
}
}
&lt;/pre&gt;
&lt;li&gt;&lt;a href="#string-as-a-delimiter" name="string-as-a-delimiter"&gt;How about using another string as a delimiter?&lt;/a&gt;&lt;/li&gt;
Yes, you can always use a string as a delimiter. Remember that delimiter is a regular expression therefore any valid regular expression can be passed as a value in this parameter.   So for example if you have a string ["ThisWORDisWORDaWORDString"] then a split using word [WORD] as delimiter is going result in array of four strings. See below example code.    
&lt;pre class="Java" name="code"&gt;public static void  singleWordDelimiterTest() {
String str = "ThisWORDisWORDaWORDString";
String delimiter = "WORD";
String[] splitStrings = str.split(delimiter);
for (int i = 0; i &amp;lt; splitStrings.length; i++) {
System.out.println(splitStrings[i]);
}
} 

&lt;/pre&gt;The output of this method will be     
&lt;pre class="Java" name="code"&gt;[0] This
[1] is
[2] a
[3] String
&lt;/pre&gt;
&lt;li&gt;&lt;a href="#multiple-characters-as-delimiter" name="multiple-characters-as-delimiter"&gt;How about using multiple characters as delimiter?&lt;/a&gt;&lt;/li&gt;
There can be some scenarios where you may want to split the string based on multiple characters.  So for example if you have a string ["This,is:a;String"] then a split using [comma or colon or semi-colon] as delimiter is required. You need not be an expert in Regular Expression to do this, just a simple use of pipe (|) operator should be sufficient to deal with this. so the regular expression for these 3 delimiter will be [",|:|;"]  See below example code.    
&lt;pre class="Java" name="code"&gt;public static void  multiCharacterDelimiterTest() {
String str = "This,is:a;String";
String delimiter = ",|:|;";
String[] splitStrings = str.split(delimiter);
for (int i = 0; i &amp;lt; splitStrings.length; i++) {
System.out.println("[" + i + "] "+ splitStrings[i]);
}
}
&lt;/pre&gt;The output of this method will be     
&lt;pre class="Java" name="code"&gt;[0] This
[1] is
[2] a
[3] String
&lt;/pre&gt;
&lt;li&gt;&lt;a href="#multiple-words-as-delimiter" name="multiple-words-as-delimiter"&gt;How about using multiple words as delimiter?&lt;/a&gt;&lt;/li&gt;
Lets assume a hypothetical scenario where you may want to split the string based on multiple words.  So for example if you have a string ["ThisWORD1isWORD2aWORD3String"] then a split using [WORD1 or WORD2 or WORD3] as delimiter is required.  Again the use of pipe (|) operator should be sufficient to deal with this. so the regular expression for these 3 delimiter will be ["WORD1|WORD2|WORD3"]  See below example code.    
&lt;pre class="Java" name="code"&gt;public static void  multiWordDelimiterTest() {
String str = "ThisWORD1isWORD2aWORD3String";
String delimiter = "WORD1|WORD2|WORD3";
String[] splitStrings = str.split(delimiter);
for (int i = 0; i &amp;lt; splitStrings.length; i++) {
System.out.println("[" + i + "] "+ splitStrings[i]);
}
}
&lt;/pre&gt;The output of this method will be     
&lt;pre class="Java" name="code"&gt;[0] This
[1] is
[2] a
[3] String
&lt;/pre&gt;
&lt;li&gt;&lt;a href="#special-characters" name="special-characters"&gt;Keeping a watch on few special characters&lt;/a&gt;&lt;/li&gt;
As we discussed in previous scenarios, the delimiter field is a regular expression and therefore there are few characters which have special meanings. If any such character needs to used as a delimiter then a escape sequence of \\ should be used in delimiter string.  Some example characters are pipe (|) , dollar sign ($) , dot (.)  carat (^)  See below example code.     
&lt;pre class="Java" name="code"&gt;public static void  specialCharaterDelimiterTest() {
String str = "This|is^a$String";
String delimiter = "\\||\\^|\\$";
String[] splitStrings = str.split(delimiter);
for (int i = 0; i &amp;lt; splitStrings.length; i++) {
System.out.println("[" + i + "] "+ splitStrings[i]);
}
}
&lt;/pre&gt;The output of this method will be     
&lt;pre class="Java" name="code"&gt;[0] This
[1] is
[2] a
[3] String
&lt;/pre&gt;You can try many other regular expression and explore the power of this method. Visit &lt;a href="http://www.regular-expressions.info/" target="_blank"&gt;http://www.regular-expressions.info/&lt;/a&gt; to get more in-depth understanding on regular expressions. 
&lt;li&gt;&lt;a href="#Using-StringTokenizer" name="Using-StringTokenizer"&gt;String Split using Java 1.1 Style - Using StringTokenizer class&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;StringTokenizer is a legacy class which is part of JDK since version 1.1. The String Tokenizer class allows an application to break a string into tokens. The set of delimiters (the characters that separate tokens) may be specified either at creation time or on a per-token basis.  StringTokenizer's nextToken() method can be used to produce exact same output,   See below example code.  &lt;br /&gt;
&lt;pre class="Java" name="code"&gt;public static void splitByTokenizer() {
StringTokenizer st = new StringTokenizer("This,is:a;String",",:;");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
&lt;/pre&gt;The output of this method will be   &lt;br /&gt;
&lt;pre class="Java" name="code"&gt;This
is
a
String
&lt;/pre&gt;The split() method has been introduced sice JDK version 1.4 and StringTokenizer use has been discouraged after that. Here is what Sun suggest in JDK 1.6 Javadocs  "StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead."  Let me know your comments/feedback on this tutorial.  &lt;br /&gt;
&lt;div style="display: none;"&gt;Playing with Java String Split method , Java String split, Java String splitting methods, Java String split functions, String split,play with String split java, splitting string in java exmaple, sample splitting in java, split in java,character split java word split java, all split java, split all spaces in java, split all spaces in string, split left spaces in string object,  split right side spaces in java string, split all side spaces in java string, split inner spaces in java string, split in between spaces in java string, split comma, split pipe, split colon, split escape sequences, java string split function, split functions, java String split functions, Playing with Java String Split Function Basics, Playing with Java String Split method Basics, Playing with Java String Split Function fundamentals, Split using Java 1.1 Style - Using StringTokenizer class, programming course, programming tutorial, learn java string split function quickly, understand java string split function in detail, java string split in depth knowledge, string class method, string class function, string class manipulation, split string, how to split a string in java&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/637499528247154499-6791661008294189733?l=www.fromdev.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=_UTRGWeGxlg:zmlhlYBL-6o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=_UTRGWeGxlg:zmlhlYBL-6o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=_UTRGWeGxlg:zmlhlYBL-6o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=_UTRGWeGxlg:zmlhlYBL-6o:TzevzKxY174"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=TzevzKxY174" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=_UTRGWeGxlg:zmlhlYBL-6o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=_UTRGWeGxlg:zmlhlYBL-6o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=_UTRGWeGxlg:zmlhlYBL-6o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=_UTRGWeGxlg:zmlhlYBL-6o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=_UTRGWeGxlg:zmlhlYBL-6o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Fromdev?a=_UTRGWeGxlg:zmlhlYBL-6o:-BTjWOF_DHI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Fromdev?i=_UTRGWeGxlg:zmlhlYBL-6o:-BTjWOF_DHI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Fromdev/~4/_UTRGWeGxlg" height="1" width="1"/&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6lL5UfBL9wF7p55NCwVE6BMrK3Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6lL5UfBL9wF7p55NCwVE6BMrK3Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6lL5UfBL9wF7p55NCwVE6BMrK3Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6lL5UfBL9wF7p55NCwVE6BMrK3Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=tHEQarQfugg:zmlhlYBL-6o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=tHEQarQfugg:zmlhlYBL-6o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=tHEQarQfugg:zmlhlYBL-6o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=tHEQarQfugg:zmlhlYBL-6o:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description><link>http://feedproxy.google.com/~r/Fromdev/~3/_UTRGWeGxlg/playing-with-java-string-split-basics.html</link><author>noreply@blogger.com (Sachin)</author><thr:total>14</thr:total><feedburner:origLink>http://www.fromdev.com/2009/10/playing-with-java-string-split-basics.html</feedburner:origLink></item></channel></rss>

