<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkEMRHczeSp7ImA9WhRRFEk.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402</id><updated>2011-11-27T19:38:05.981-05:00</updated><category term="SimpleMailMessage" /><category term="Spring" /><category term="Songs" /><category term="bean factory-method" /><title>Âscendant</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://ascendant76.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>85</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/ascendant76" /><feedburner:info uri="ascendant76" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;A0IBR3o6fip7ImA9WxBaFUk.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-2276029140825147986</id><published>2010-03-25T15:39:00.001-05:00</published><updated>2010-03-25T15:39:16.416-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-25T15:39:16.416-05:00</app:edited><title>Production Ready Tomcat</title><content type="html">&lt;h2&gt;Production Ready Tomcat - Optimizations, Security aspects&lt;/h2&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;To disable directory listing &amp;nbsp;for the entire tomcat server go to $CATALINA_HOME/conf/web.xml and set the listings parameter to false.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;blockquote class="webkit-indent-blockquote" style="border:none;margin:0 0 0 40px"&gt;&lt;div&gt;&amp;lt;servlet&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;servlet-name&amp;gt;default&amp;lt;/servlet-name&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;servlet-class&amp;gt;org.apache.catalina.servlets.DefaultServlet&amp;lt;/servlet-class&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;init-param&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;param-name&amp;gt;debug&amp;lt;/param-name&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;param-value&amp;gt;0&amp;lt;/param-value&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/init-param&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;init-param&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;param-name&amp;gt;listings&amp;lt;/param-name&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;param-value&amp;gt;false&amp;lt;/param-value&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/init-param&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/servlet&amp;gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Switch off application reloading by setting &amp;quot;reloadable&amp;quot; to &amp;quot;false&amp;quot; gives a small run-time performance increase.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;Context reloadable=&amp;quot;false&amp;quot; privileged=&amp;quot;true&amp;quot; /&amp;gt;&lt;/div&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Prevent Locking of Exploded Wars by setting antiResourceLocking=&amp;quot;true&amp;quot;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;Context antiResourceLocking=&amp;quot;true&amp;quot; privileged=&amp;quot;true&amp;quot; /&amp;gt;&lt;/div&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;By default tomcat uses the MemoryRealm for authentication. Alter the default username and password in tomcat-users.xml with more &amp;nbsp;appropriate ones.&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class="webkit-indent-blockquote" style="border:none;margin:0 0 0 40px"&gt;&lt;div&gt;&amp;lt;?xml version=&amp;#39;1.0&amp;#39; encoding=&amp;#39;utf-8&amp;#39;?&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;tomcat-users&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;lt;role rolename=&amp;quot;tomcat&amp;quot;/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;lt;role rolename=&amp;quot;manager&amp;quot;/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;lt;role rolename=&amp;quot;admin&amp;quot;/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;lt;user username=&amp;quot;tomcat&amp;quot; password=&amp;quot;tomcat&amp;quot; roles=&amp;quot;tomcat&amp;quot;/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;lt;user username=&amp;quot;admin&amp;quot; password=&amp;quot;XXXX&amp;quot; roles=&amp;quot;admin,manager&amp;quot;/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/tomcat-users&amp;gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Make the tomcat-users.xml as readonly by adding readonly=&amp;quot;true&amp;quot; to the &amp;lt;Resource&amp;gt; tag in server.xml&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;Resource name=&amp;quot;UserDatabase&amp;quot; readonly=&amp;quot;true&amp;quot; /&amp;gt;&lt;/div&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Move to http://svn.apache.org/repos/asf/tomcat/trunk/modules/jdbc-pool/ instead of any other connection pool.&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class="webkit-indent-blockquote" style="border:none;margin:0 0 0 40px"&gt;&lt;div&gt;&amp;lt;!--&lt;/div&gt;&lt;div&gt;Download the required jars from http://people.apache.org/~fhanik/jdbc-pool/v1.0.8.5/&lt;/div&gt;&lt;br&gt;&lt;div&gt;mvn install:install-file -DgroupId=org.apache.tomcat \\&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;-DartifactId=jdbc-pool -Dversion=1.0.8.5 -Dpackaging=jar -Dfile=tomcat-jdbc.jar&lt;/div&gt;&lt;div&gt;--&amp;gt;&lt;/div&gt;&lt;/blockquote&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.tomcat&amp;lt;/groupId&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;juli&amp;lt;/artifactId&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;6.0.24&amp;lt;/version&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;dependency&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;org.apache.tomcat&amp;lt;/groupId&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;jdbc-pool&amp;lt;/artifactId&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;1.0.8.5&amp;lt;/version&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Swallow System.out and System.err and direct them to a log file&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;Context swallowOutput=&amp;quot;true&amp;quot; /&amp;gt;&amp;nbsp;&lt;/div&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Rotation of logs&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;b&gt;logging.properties file:&lt;/b&gt;&lt;br&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.handlers = 1catalina.org.apache.juli.FileHandler&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1catalina.org.apache.juli.FileHandler.level = FINE&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1catalina.org.apache.juli.FileHandler.prefix = catalina.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1catalina.org.apache.juli.FileHandler.pattern = ${catalina.base}/logs/catalina.%g.log&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1catalina.org.apache.juli.FileHandler.limit = 20000000 # No more than 5x20mb files&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;1catalina.org.apache.juli.FileHandler.count = 5&lt;/div&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Tuning Sun JVM settings for Tomcat.Set JAVA_OPTS variable to catalina.sh.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Try to adopt these settings :&lt;/div&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;-server&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Better for server side applications&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;-Djava.awt.headless=true&lt;/li&gt;&lt;ul&gt;&lt;li&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.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tomcat/dumps&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Prepare thread dumps when a OutOfMemoryError occours. This way you can analyze the thread dumps to figure out the issue.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;b&gt;Memory related tuning parameters:&lt;/b&gt;&lt;br&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;-Xms&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;initial heap size is 1/64th of the machine&amp;#39;s physical memory&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;-Xmx&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;maximum heap size is 1/4th of the machine&amp;#39;s physical memory (up to 1GB max).&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;-XX:PermSize&amp;nbsp;&lt;/li&gt;&lt;li&gt;-XX:MaxPermSize&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br&gt;&lt;div&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Garbage Collection Tuning Parameters:&lt;/b&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;-XX:+UseParallelGC parallel (throughput) garbage collector, or&lt;/li&gt;&lt;li&gt;-XX:+UseConcMarkSweepGC concurrent (low pause time) garbage collector (known as CMS)&lt;/li&gt;&lt;li&gt;-XX:+UseSerialGC serial garbage collector (for smaller applications and systems)&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;See http://java.sun.com/performance/reference/whitepapers/tuning.html&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-2276029140825147986?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/WpgZ7WbWN4k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/2276029140825147986/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=2276029140825147986" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/2276029140825147986?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/2276029140825147986?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/WpgZ7WbWN4k/production-ready-tomcat.html" title="Production Ready Tomcat" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2010/03/production-ready-tomcat.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcFQXc_fip7ImA9WhRREU0.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-4417703113565074034</id><published>2010-03-25T12:17:00.001-05:00</published><updated>2011-11-23T21:33:30.946-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-23T21:33:30.946-05:00</app:edited><title>Apache Tomcat - Apache Log4j</title><content type="html">&lt;h2&gt;
Configuring Apache Tomcat Logging using Apache Log4j&lt;/h2&gt;
I will be covering how to use log4j instead of the default logging provided by tomcat based on the reference&amp;nbsp;&lt;a href="http://tomcat.apache.org/tomcat-6.0-doc/logging.html"&gt;http://tomcat.apache.org/tomcat-6.0-doc/logging.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style="font-size: small;"&gt;&lt;b&gt;Objective&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Using log4j to customize the logging in apache-tomcat&lt;/li&gt;
&lt;li&gt;Separate apache-tomcat logs from the application logs&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style="font-size: small;"&gt;&lt;b&gt;Using log4j to customize the logging in apache-tomcat&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-family: 'times new roman';"&gt;&lt;span style="font-size: small;"&gt;Create a file called log4j.properties with the following content and save it into $CATALINA_HOME/lib.&lt;/span&gt;&lt;/span&gt;&lt;div align="left"&gt;
&lt;table border="0" cellpadding="0" cellspacing="4" class="zeroBorder"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td bgcolor="#ffffff" height="1"&gt;&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;appender name="CONSOLE" &amp;nbsp;class="org.apache.log4j.ConsoleAppender"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;layout class="org.apache.log4j.PatternLayout"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="ConversionPattern" value="%d{MMM dd, yyyy HH:mm:ss a} %c %M%n%p: %m%n" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/layout&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/appender&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;appender name="ROLL" class="org.apache.log4j.RollingFileAppender"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="file" value="../logs/catalina.out" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="append" value="true" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="encoding" value="UTF-8" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;layout class="org.apache.log4j.PatternLayout"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="ConversionPattern" value="%d{MMM dd, yyyy HH:mm:ss a} %c %M%n%p: %m%n" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/layout&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/appender&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;logger name="org.apache.catalina.core.AprLifecycleListener"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;level value="INFO" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/logger&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;logger name="org.apache.coyote.http11.Http11Protocol"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;level value="INFO" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/logger&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;logger name="org.apache.catalina.core.ContainerBase"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;level value="OFF" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/logger&amp;gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;root&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;level value="INFO" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;appender-ref ref="ROLL" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-size: small;"&gt;&lt;span style="font-family: 'courier new';"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;!-- For production comment this appender--&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;appender-ref ref="CONSOLE" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/root&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;/log4j:configuration&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'times new roman';"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://logging.apache.org/log4j"&gt;Download Log4J&lt;/a&gt;&amp;nbsp;(v1.2 or later) and place the log4j jar in $CATALINA_HOME/lib.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'times new roman';"&gt;&lt;span style="font-size: small;"&gt;Build or download the additional logging components. See the&amp;nbsp;&lt;a href="http://tomcat.apache.org/tomcat-6.0-doc/extras.html"&gt;extras components&lt;/a&gt;&amp;nbsp;documentation for details.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'times new roman';"&gt;&lt;span style="font-size: small;"&gt;Replace&amp;nbsp;&lt;span style="font-family: Courier New;"&gt;$CATALINA_HOME/bin/tomcat-juli.jar&lt;/span&gt;&amp;nbsp;with&amp;nbsp;&lt;span style="font-family: Courier New;"&gt;output/extras/tomcat-juli.jar&lt;/span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'times new roman';"&gt;&lt;span style="font-size: small;"&gt;Place&amp;nbsp;&lt;span style="font-family: Courier New;"&gt;output/extras/tomcat-juli-adapters.jar&lt;/span&gt;&amp;nbsp;in $CATALINA_HOME/lib.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'times new roman';"&gt;&lt;span style="font-size: small;"&gt;Delete&amp;nbsp;&lt;span style="font-family: Courier New;"&gt;$CATALINA_BASE/conf/logging.properties&lt;/span&gt;&amp;nbsp;to prevent java.util.logging generating zero length log files.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: 'times new roman';"&gt;&lt;span style="font-size: small;"&gt;Start Tomcat&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
Separate apache-tomcat logs from the application logs&lt;/h3&gt;
&lt;span style="font-family: 'times new roman';"&gt;&lt;span style="font-size: small;"&gt;The start with following log4j.properties can be used in your web application to divert all the logs to application specific file (app_demo.out).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div align="left"&gt;
&lt;table border="0" cellpadding="0" cellspacing="4" class="zeroBorder"&gt;&lt;tbody&gt;
&lt;tr style="text-align: left;"&gt;&lt;td bgcolor="#ffffff" height="1"&gt;&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;appender name="CONSOLE" &amp;nbsp;class="org.apache.log4j.ConsoleAppender"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;layout class="org.apache.log4j.PatternLayout"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="ConversionPattern" value="%d{MMM dd, yyyy HH:mm:ss a} %c %M%n%p: %m%n" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/layout&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/appender&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;appender name="ROLL" class="org.apache.log4j.RollingFileAppender"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="file" value="../logs/app_demo.out" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="append" value="true" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="encoding" value="UTF-8" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;layout class="org.apache.log4j.PatternLayout"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="ConversionPattern" value="%d{MMM dd, yyyy HH:mm:ss a} %c %M%n%p: %m%n" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/layout&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/appender&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;logger name="com.blogger.ascendant76"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;level value="INFO" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/logger&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;root&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;level value="INFO" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;appender-ref ref="ROLL" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;!-- For production comment this appender--&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;appender-ref ref="CONSOLE" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/root&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-size: small;"&gt;&amp;lt;/log4j:configuration&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align="left"&gt;
@TODO&lt;/div&gt;
&lt;div align="left"&gt;
Changing the log levels for various loggers when the app is running&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-4417703113565074034?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/UKS5X83T0r4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/4417703113565074034/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=4417703113565074034" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/4417703113565074034?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/4417703113565074034?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/UKS5X83T0r4/apache-tomcat-apache-log4j.html" title="Apache Tomcat - Apache Log4j" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2010/03/apache-tomcat-apache-log4j.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEDRHw-eSp7ImA9WxBbFkw.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-9005311902450128755</id><published>2010-02-25T22:35:00.001-05:00</published><updated>2010-03-14T20:31:15.251-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-14T20:31:15.251-05:00</app:edited><title>Recurrsion using parallel processing</title><content type="html">&lt;h1&gt;Recurrsion using parallel processing&lt;/h1&gt; As I was google around I found the &lt;b&gt;&lt;a href="https://netfiles.uiuc.edu/dig/RefactoringInfo/tools/Concurrencer/" id="gjlc" title="https://netfiles.uiuc.edu/dig/RefactoringInfo/tools/Concurrencer/"&gt;Concurrencer&lt;/a&gt;&lt;/b&gt;: a tool for retrofitting parallelism into sequential Java code. One of the cool thing of this tool is, it can convert the recurrsive program into a parallel program. I learned about &lt;b&gt;&lt;a href="http://gee.cs.oswego.edu/dl/papers/fj.pdf" id="mm60" title="http://gee.cs.oswego.edu/dl/papers/fj.pdf"&gt;ForkJoin framework&lt;/a&gt;&lt;/b&gt; from &lt;b&gt;&lt;a href="http://cs.oswego.edu/mailman/listinfo/concurrency-interest" id="jt90" title="http://cs.oswego.edu/mailman/listinfo/concurrency-interest"&gt;concurrency-interest&lt;/a&gt;&lt;/b&gt; mailinglist. So I quickly wrote a program to see how the performance will be boosted.&lt;br&gt;&lt;br&gt; The ForkJoin framework will be part of JDK7.0. But the following instructions could help to work with ForkJoin framework on J2SE 6.0. First create a maven2 project and under the root create a lib folder. Download the ForkJoin framework jar &lt;b&gt;&amp;quot;&lt;a href="http://gee.cs.oswego.edu/dl/jsr166/dist/jsr166.jar" id="mruw" title="http://gee.cs.oswego.edu/dl/jsr166/dist/jsr166.jar"&gt;jsr166.jar&lt;/a&gt;&amp;quot;&lt;/b&gt; from &lt;b&gt;&lt;a href="http://gee.cs.oswego.edu/dl/concurrency-interest/index.html" id="ith9" title="http://gee.cs.oswego.edu/dl/concurrency-interest/index.html"&gt;Doug Lea&lt;/a&gt;&lt;/b&gt; website. Install jsr166.jar as a maven dependency using the following command:&lt;br&gt;&lt;br style="color:#cc0000"&gt;&lt;font color="#cc0000"&gt;mvn install:install-file -DgroupId=jsr166 -DartifactId=jsr166 -Dversion=166 -Dpackaging=jar -Dfile=jsr166.jar&lt;/font&gt;&lt;br&gt;&lt;br&gt; The following program shows a recurrsive program to generate the fibonacci number and the also using parallel processing. ForkJoinPool is a ExecutorPool that orchestrates the threads.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table bgcolor="#c0c0c0" cellpadding="5" cellspacing="0" class="zeroBorder" cols="1" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;center&gt;&lt;font color="#000000" face="Arial, Helvetica"&gt; Fibonacci.java&lt;/font&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;pre&gt;&lt;a id="l1" name="l1"&gt;&lt;/a&gt;&lt;span class="ln"&gt;1    &lt;/span&gt;&lt;span class="s0"&gt;package &lt;/span&gt;&lt;span class="s1"&gt;com.blogspot.ascendant.forkjoin; &lt;br /&gt;&lt;a id="l2" name="l2"&gt;&lt;/a&gt;&lt;span class="ln"&gt;2    &lt;/span&gt; &lt;br /&gt;&lt;a id="l3" name="l3"&gt;&lt;/a&gt;&lt;span class="ln"&gt;3    &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;import &lt;/span&gt;&lt;span class="s1"&gt;java.util.concurrent.ForkJoinPool; &lt;br /&gt;&lt;a id="l4" name="l4"&gt;&lt;/a&gt;&lt;span class="ln"&gt;4    &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;import &lt;/span&gt;&lt;span class="s1"&gt;java.util.concurrent.RecursiveAction; &lt;br /&gt;&lt;a id="l5" name="l5"&gt;&lt;/a&gt;&lt;span class="ln"&gt;5    &lt;/span&gt; &lt;br /&gt;&lt;a id="l6" name="l6"&gt;&lt;/a&gt;&lt;span class="ln"&gt;6    &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;public class &lt;/span&gt;&lt;span class="s1"&gt;Fibonacci { &lt;br /&gt;&lt;a id="l7" name="l7"&gt;&lt;/a&gt;&lt;span class="ln"&gt;7    &lt;/span&gt; &lt;br /&gt;&lt;a id="l8" name="l8"&gt;&lt;/a&gt;&lt;span class="ln"&gt;8    &lt;/span&gt;    &lt;/span&gt;&lt;span class="s0"&gt;public static void &lt;/span&gt;&lt;span class="s1"&gt;main(String... args) { &lt;br /&gt;&lt;a id="l9" name="l9"&gt;&lt;/a&gt;&lt;span class="ln"&gt;9    &lt;/span&gt; &lt;br /&gt;&lt;a id="l10" name="l10"&gt;&lt;/a&gt;&lt;span class="ln"&gt;10   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;final int &lt;/span&gt;&lt;span class="s1"&gt;input = &lt;/span&gt;&lt;span class="s2"&gt;40&lt;/span&gt;&lt;span class="s1"&gt;; &lt;br /&gt;&lt;a id="l11" name="l11"&gt;&lt;/a&gt;&lt;span class="ln"&gt;11   &lt;/span&gt;        System.out.printf(&lt;/span&gt;&lt;span class="s3"&gt;&amp;quot;Input: %d&lt;/span&gt;&lt;span class="s0"&gt;\n\n&lt;/span&gt;&lt;span class="s3"&gt;&amp;quot;&lt;/span&gt;&lt;span class="s1"&gt;, input); &lt;br /&gt;&lt;a id="l12" name="l12"&gt;&lt;/a&gt;&lt;span class="ln"&gt;12   &lt;/span&gt; &lt;br /&gt;&lt;a id="l13" name="l13"&gt;&lt;/a&gt;&lt;span class="ln"&gt;13   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;long &lt;/span&gt;&lt;span class="s1"&gt;nowSet1 = System.nanoTime(); &lt;br /&gt;&lt;a id="l14" name="l14"&gt;&lt;/a&gt;&lt;span class="ln"&gt;14   &lt;/span&gt; &lt;br /&gt;&lt;a id="l15" name="l15"&gt;&lt;/a&gt;&lt;span class="ln"&gt;15   &lt;/span&gt;        System.out.printf(&lt;/span&gt;&lt;span class="s3"&gt;&amp;quot;Fibonacci using recursion: %d&lt;/span&gt;&lt;span class="s0"&gt;\n&lt;/span&gt;&lt;span class="s3"&gt;&amp;quot;&lt;/span&gt;&lt;span class="s1"&gt;, fibRecurr(input)); &lt;br /&gt;&lt;a id="l16" name="l16"&gt;&lt;/a&gt;&lt;span class="ln"&gt;16   &lt;/span&gt; &lt;br /&gt;&lt;a id="l17" name="l17"&gt;&lt;/a&gt;&lt;span class="ln"&gt;17   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;long &lt;/span&gt;&lt;span class="s1"&gt;laterSet1 = System.nanoTime(); &lt;br /&gt;&lt;a id="l18" name="l18"&gt;&lt;/a&gt;&lt;span class="ln"&gt;18   &lt;/span&gt;        System.out.printf(&lt;/span&gt;&lt;span class="s3"&gt;&amp;quot;Computing time for recursion: %d nanoseconds&lt;/span&gt;&lt;span class="s0"&gt;\n\n&lt;/span&gt;&lt;span class="s3"&gt;&amp;quot;&lt;/span&gt;&lt;span class="s1"&gt;, (laterSet1 - nowSet1)); &lt;br /&gt;&lt;a id="l19" name="l19"&gt;&lt;/a&gt;&lt;span class="ln"&gt;19   &lt;/span&gt; &lt;br /&gt;&lt;a id="l20" name="l20"&gt;&lt;/a&gt;&lt;span class="ln"&gt;20   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;long &lt;/span&gt;&lt;span class="s1"&gt;nowSet2 = System.nanoTime(); &lt;br /&gt;&lt;a id="l21" name="l21"&gt;&lt;/a&gt;&lt;span class="ln"&gt;21   &lt;/span&gt; &lt;br /&gt;&lt;a id="l22" name="l22"&gt;&lt;/a&gt;&lt;span class="ln"&gt;22   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;final int &lt;/span&gt;&lt;span class="s1"&gt;numberOfProcessors = Runtime.getRuntime().availableProcessors(); &lt;br /&gt;&lt;a id="l23" name="l23"&gt;&lt;/a&gt;&lt;span class="ln"&gt;23   &lt;/span&gt;        System.out.printf(&lt;/span&gt;&lt;span class="s3"&gt;&amp;quot;Number of processors %d&lt;/span&gt;&lt;span class="s0"&gt;\n&lt;/span&gt;&lt;span class="s3"&gt;&amp;quot;&lt;/span&gt;&lt;span class="s1"&gt;, numberOfProcessors); &lt;br /&gt;&lt;a id="l24" name="l24"&gt;&lt;/a&gt;&lt;span class="ln"&gt;24   &lt;/span&gt; &lt;br /&gt;&lt;a id="l25" name="l25"&gt;&lt;/a&gt;&lt;span class="ln"&gt;25   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;final &lt;/span&gt;&lt;span class="s1"&gt;FibonacciParallel fp = &lt;/span&gt;&lt;span class="s0"&gt;new &lt;/span&gt;&lt;span class="s1"&gt;FibonacciParallel(input); &lt;br /&gt;&lt;a id="l26" name="l26"&gt;&lt;/a&gt;&lt;span class="ln"&gt;26   &lt;/span&gt; &lt;br /&gt;&lt;a id="l27" name="l27"&gt;&lt;/a&gt;&lt;span class="ln"&gt;27   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;final &lt;/span&gt;&lt;span class="s1"&gt;ForkJoinPool es = &lt;/span&gt;&lt;span class="s0"&gt;new &lt;/span&gt;&lt;span class="s1"&gt;ForkJoinPool(numberOfProcessors); &lt;br /&gt;&lt;a id="l28" name="l28"&gt;&lt;/a&gt;&lt;span class="ln"&gt;28   &lt;/span&gt;        es.invoke(fp); &lt;br /&gt;&lt;a id="l29" name="l29"&gt;&lt;/a&gt;&lt;span class="ln"&gt;29   &lt;/span&gt;        es.shutdown(); &lt;br /&gt;&lt;a id="l30" name="l30"&gt;&lt;/a&gt;&lt;span class="ln"&gt;30   &lt;/span&gt; &lt;br /&gt;&lt;a id="l31" name="l31"&gt;&lt;/a&gt;&lt;span class="ln"&gt;31   &lt;/span&gt;        System.out.printf(&lt;/span&gt;&lt;span class="s3"&gt;&amp;quot;Fibonacci using parallel processing: %d&lt;/span&gt;&lt;span class="s0"&gt;\n&lt;/span&gt;&lt;span class="s3"&gt;&amp;quot;&lt;/span&gt;&lt;span class="s1"&gt;, fp.result); &lt;br /&gt;&lt;a id="l32" name="l32"&gt;&lt;/a&gt;&lt;span class="ln"&gt;32   &lt;/span&gt; &lt;br /&gt;&lt;a id="l33" name="l33"&gt;&lt;/a&gt;&lt;span class="ln"&gt;33   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;long &lt;/span&gt;&lt;span class="s1"&gt;laterSet2 = System.nanoTime(); &lt;br /&gt;&lt;a id="l34" name="l34"&gt;&lt;/a&gt;&lt;span class="ln"&gt;34   &lt;/span&gt;        System.out.printf(&lt;/span&gt;&lt;span class="s3"&gt;&amp;quot;Computing time for parallel processing: %d nanoseconds&lt;/span&gt;&lt;span class="s0"&gt;\n&lt;/span&gt;&lt;span class="s3"&gt;&amp;quot;&lt;/span&gt;&lt;span class="s1"&gt;, (laterSet2 - nowSet2)); &lt;br /&gt;&lt;a id="l35" name="l35"&gt;&lt;/a&gt;&lt;span class="ln"&gt;35   &lt;/span&gt;    } &lt;br /&gt;&lt;a id="l36" name="l36"&gt;&lt;/a&gt;&lt;span class="ln"&gt;36   &lt;/span&gt; &lt;br /&gt;&lt;a id="l37" name="l37"&gt;&lt;/a&gt;&lt;span class="ln"&gt;37   &lt;/span&gt; &lt;br /&gt;&lt;a id="l38" name="l38"&gt;&lt;/a&gt;&lt;span class="ln"&gt;38   &lt;/span&gt;    &lt;/span&gt;&lt;span class="s4"&gt;/** &lt;br /&gt;&lt;a id="l39" name="l39"&gt;&lt;/a&gt;&lt;span class="ln"&gt;39   &lt;/span&gt;     * Recursive approach &lt;br /&gt;&lt;a id="l40" name="l40"&gt;&lt;/a&gt;&lt;span class="ln"&gt;40   &lt;/span&gt;     */&lt;/span&gt;&lt;span class="s1"&gt; &lt;br /&gt;&lt;a id="l41" name="l41"&gt;&lt;/a&gt;&lt;span class="ln"&gt;41   &lt;/span&gt;    &lt;/span&gt;&lt;span class="s0"&gt;private static long &lt;/span&gt;&lt;span class="s1"&gt;fibRecurr(&lt;/span&gt;&lt;span class="s0"&gt;final int &lt;/span&gt;&lt;span class="s1"&gt;n) { &lt;br /&gt;&lt;a id="l42" name="l42"&gt;&lt;/a&gt;&lt;span class="ln"&gt;42   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;if &lt;/span&gt;&lt;span class="s1"&gt;(n &amp;lt; &lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="s1"&gt;) { &lt;br /&gt;&lt;a id="l43" name="l43"&gt;&lt;/a&gt;&lt;span class="ln"&gt;43   &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;return &lt;/span&gt;&lt;span class="s1"&gt;n; &lt;br /&gt;&lt;a id="l44" name="l44"&gt;&lt;/a&gt;&lt;span class="ln"&gt;44   &lt;/span&gt;        } &lt;/span&gt;&lt;span class="s0"&gt;else &lt;/span&gt;&lt;span class="s1"&gt;{ &lt;br /&gt;&lt;a id="l45" name="l45"&gt;&lt;/a&gt;&lt;span class="ln"&gt;45   &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;return &lt;/span&gt;&lt;span class="s1"&gt;fibRecurr(n - &lt;/span&gt;&lt;span class="s2"&gt;1&lt;/span&gt;&lt;span class="s1"&gt;) + fibRecurr(n - &lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="s1"&gt;); &lt;br /&gt;&lt;a id="l46" name="l46"&gt;&lt;/a&gt;&lt;span class="ln"&gt;46   &lt;/span&gt;        } &lt;br /&gt;&lt;a id="l47" name="l47"&gt;&lt;/a&gt;&lt;span class="ln"&gt;47   &lt;/span&gt;    } &lt;br /&gt;&lt;a id="l48" name="l48"&gt;&lt;/a&gt;&lt;span class="ln"&gt;48   &lt;/span&gt; &lt;br /&gt;&lt;a id="l49" name="l49"&gt;&lt;/a&gt;&lt;span class="ln"&gt;49   &lt;/span&gt; &lt;br /&gt;&lt;a id="l50" name="l50"&gt;&lt;/a&gt;&lt;span class="ln"&gt;50   &lt;/span&gt;    &lt;/span&gt;&lt;span class="s4"&gt;/** &lt;br /&gt;&lt;a id="l51" name="l51"&gt;&lt;/a&gt;&lt;span class="ln"&gt;51   &lt;/span&gt;     * Recursive Task &lt;br /&gt;&lt;a id="l52" name="l52"&gt;&lt;/a&gt;&lt;span class="ln"&gt;52   &lt;/span&gt;     */&lt;/span&gt;&lt;span class="s1"&gt; &lt;br /&gt;&lt;a id="l53" name="l53"&gt;&lt;/a&gt;&lt;span class="ln"&gt;53   &lt;/span&gt;    &lt;/span&gt;&lt;span class="s0"&gt;public static class &lt;/span&gt;&lt;span class="s1"&gt;FibonacciParallel &lt;/span&gt;&lt;span class="s0"&gt;extends &lt;/span&gt;&lt;span class="s1"&gt;RecursiveAction { &lt;br /&gt;&lt;a id="l54" name="l54"&gt;&lt;/a&gt;&lt;span class="ln"&gt;54   &lt;/span&gt; &lt;br /&gt;&lt;a id="l55" name="l55"&gt;&lt;/a&gt;&lt;span class="ln"&gt;55   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;private static final long &lt;/span&gt;&lt;span class="s1"&gt;serialVersionUID = -&lt;/span&gt;&lt;span class="s2"&gt;6810496708906992778L&lt;/span&gt;&lt;span class="s1"&gt;; &lt;br /&gt;&lt;a id="l56" name="l56"&gt;&lt;/a&gt;&lt;span class="ln"&gt;56   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;final int &lt;/span&gt;&lt;span class="s1"&gt;numberToCompute; &lt;br /&gt;&lt;a id="l57" name="l57"&gt;&lt;/a&gt;&lt;span class="ln"&gt;57   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;volatile long &lt;/span&gt;&lt;span class="s1"&gt;result; &lt;br /&gt;&lt;a id="l58" name="l58"&gt;&lt;/a&gt;&lt;span class="ln"&gt;58   &lt;/span&gt; &lt;br /&gt;&lt;a id="l59" name="l59"&gt;&lt;/a&gt;&lt;span class="ln"&gt;59   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;public &lt;/span&gt;&lt;span class="s1"&gt;FibonacciParallel(&lt;/span&gt;&lt;span class="s0"&gt;int &lt;/span&gt;&lt;span class="s1"&gt;numberToCompute) { &lt;br /&gt;&lt;a id="l60" name="l60"&gt;&lt;/a&gt;&lt;span class="ln"&gt;60   &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;this&lt;/span&gt;&lt;span class="s1"&gt;.numberToCompute = numberToCompute; &lt;br /&gt;&lt;a id="l61" name="l61"&gt;&lt;/a&gt;&lt;span class="ln"&gt;61   &lt;/span&gt;        } &lt;br /&gt;&lt;a id="l62" name="l62"&gt;&lt;/a&gt;&lt;span class="ln"&gt;62   &lt;/span&gt; &lt;br /&gt;&lt;a id="l63" name="l63"&gt;&lt;/a&gt;&lt;span class="ln"&gt;63   &lt;/span&gt;        @Override &lt;br /&gt;&lt;a id="l64" name="l64"&gt;&lt;/a&gt;&lt;span class="ln"&gt;64   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;protected void &lt;/span&gt;&lt;span class="s1"&gt;compute() { &lt;br /&gt;&lt;a id="l65" name="l65"&gt;&lt;/a&gt;&lt;span class="ln"&gt;65   &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;if &lt;/span&gt;&lt;span class="s1"&gt;(numberToCompute &amp;lt; &lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="s1"&gt;) { &lt;br /&gt;&lt;a id="l66" name="l66"&gt;&lt;/a&gt;&lt;span class="ln"&gt;66   &lt;/span&gt;                result = numberToCompute; &lt;br /&gt;&lt;a id="l67" name="l67"&gt;&lt;/a&gt;&lt;span class="ln"&gt;67   &lt;/span&gt;            } &lt;/span&gt;&lt;span class="s0"&gt;else &lt;/span&gt;&lt;span class="s1"&gt;{ &lt;br /&gt;&lt;a id="l68" name="l68"&gt;&lt;/a&gt;&lt;span class="ln"&gt;68   &lt;/span&gt;                FibonacciParallel future1 = &lt;/span&gt;&lt;span class="s0"&gt;new &lt;/span&gt;&lt;span class="s1"&gt;FibonacciParallel(numberToCompute - &lt;/span&gt;&lt;span class="s2"&gt;1&lt;/span&gt;&lt;span class="s1"&gt;); &lt;br /&gt;&lt;a id="l69" name="l69"&gt;&lt;/a&gt;&lt;span class="ln"&gt;69   &lt;/span&gt;                FibonacciParallel future2 = &lt;/span&gt;&lt;span class="s0"&gt;new &lt;/span&gt;&lt;span class="s1"&gt;FibonacciParallel(numberToCompute - &lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="s1"&gt;); &lt;br /&gt;&lt;a id="l70" name="l70"&gt;&lt;/a&gt;&lt;span class="ln"&gt;70   &lt;/span&gt; &lt;br /&gt;&lt;a id="l71" name="l71"&gt;&lt;/a&gt;&lt;span class="ln"&gt;71   &lt;/span&gt;                invokeAll(future1, future2); &lt;br /&gt;&lt;a id="l72" name="l72"&gt;&lt;/a&gt;&lt;span class="ln"&gt;72   &lt;/span&gt; &lt;br /&gt;&lt;a id="l73" name="l73"&gt;&lt;/a&gt;&lt;span class="ln"&gt;73   &lt;/span&gt;                result = future1.result + future2.result; &lt;br /&gt;&lt;a id="l74" name="l74"&gt;&lt;/a&gt;&lt;span class="ln"&gt;74   &lt;/span&gt;            } &lt;br /&gt;&lt;a id="l75" name="l75"&gt;&lt;/a&gt;&lt;span class="ln"&gt;75   &lt;/span&gt;        } &lt;br /&gt;&lt;a id="l76" name="l76"&gt;&lt;/a&gt;&lt;span class="ln"&gt;76   &lt;/span&gt;    } &lt;br /&gt;&lt;a id="l77" name="l77"&gt;&lt;/a&gt;&lt;span class="ln"&gt;77   &lt;/span&gt;} &lt;br /&gt;&lt;a id="l78" name="l78"&gt;&lt;/a&gt;&lt;span class="ln"&gt;78   &lt;/span&gt; &lt;br /&gt;&lt;a id="l79" name="l79"&gt;&lt;/a&gt;&lt;span class="ln"&gt;79   &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br&gt;As we are alternat version of &lt;b&gt;java.util.concurrent &lt;/b&gt;package we need to alter the bootclasspath using -Xbootclasspath/a:/home/ramesh/Workspace/ascendant/forkjoin/lib/jsr166.jar option.&lt;br&gt;&lt;br&gt;&lt;b&gt;java -Xbootclasspath/a:/home/ramesh/Workspace/ascendant/forkjoin/lib/jsr166.jar com.blogspot.ascendant.forkjoin.Fibonacci&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;ramesh@ramesh-laptop:~$ grep &amp;quot;model name&amp;quot; /proc/cpuinfo&lt;/b&gt;&lt;br&gt;model name&amp;nbsp;&amp;nbsp; &amp;nbsp;: Genuine Intel(R) CPU&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T2500&amp;nbsp; @ 2.00GHz&lt;br&gt;model name&amp;nbsp;&amp;nbsp; &amp;nbsp;: Genuine Intel(R) CPU&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T2500&amp;nbsp; @ 2.00GHz&lt;br&gt;&lt;br&gt;&lt;b&gt;Here is the output on my laptop:&lt;/b&gt;&lt;br&gt;Input: 40&lt;br&gt;&lt;br&gt;Fibonacci using recursion: 102334155&lt;br&gt;Computing time for recursion: 1919286038 nanoseconds&lt;br&gt;&lt;br&gt;Number of processors 2&lt;br&gt;Fibonacci using parallel processing: 102334155&lt;br&gt;Computing time for parallel processing: 33836924737 nanoseconds&lt;br&gt;&lt;br&gt;Process finished with exit code 0&lt;br&gt;&lt;br&gt;As you see the results using parallel computing is not attractive. I guess this is due to the overload of the thread infrastructure. As the computation becomes more complex, this parallel processing should result better results.&lt;br&gt;&lt;br&gt;Here is the completed project:&lt;br&gt;&lt;a href="http://www.box.net/shared/egrj42i8xf" id="njlq" title="http://www.box.net/shared/egrj42i8xf"&gt;http://www.box.net/shared/egrj42i8xf&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div&gt;Update:&amp;nbsp;&lt;/div&gt;&lt;div&gt;Other people also facing the same performance issue. See&amp;nbsp;&lt;a href="http://cs.oswego.edu/pipermail/concurrency-interest/2010-March/006913.html" id="tgh5" title="http://cs.oswego.edu/pipermail/concurrency-interest/2010-March/006913.html"&gt;http://cs.oswego.edu/pipermail/concurrency-interest/2010-March/006913.html&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-9005311902450128755?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/gMmUgog8wts" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/9005311902450128755/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=9005311902450128755" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/9005311902450128755?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/9005311902450128755?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/gMmUgog8wts/recurrsion-using-parallel-processing.html" title="Recurrsion using parallel processing" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2010/02/recurrsion-using-parallel-processing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEBQXkzfyp7ImA9WxBVEEw.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-5874902143278712746</id><published>2010-02-12T18:30:00.001-05:00</published><updated>2010-02-12T18:34:10.787-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-12T18:34:10.787-05:00</app:edited><title>Upcoming JDBC-Pool -</title><content type="html">&lt;h2&gt;Upcoming Tomcat JDBC-Pool an alternate to Jakarta DBCP Component&lt;/h2&gt;&lt;br&gt;The &lt;a href="http://commons.apache.org/dbcp/" id="fpd9" title="Commons DBCP"&gt;Jakarta Commons DBCP&lt;/a&gt; internally uses &lt;a href="http://commons.apache.org/pool/" id="c4j_" title="Commons Pool"&gt;Commons Pool&lt;/a&gt; along with other dependencies. It worked me pretty well all the time. As I recently encountered Tomcat JDBC-Pool at &lt;a href="http://www.grails.org/plugin/jdbc-pool" id="v75l" title="Grails.org"&gt;Grails.org&lt;/a&gt;. I thought of exploring it to see, if it works as a standalone projects.&amp;nbsp; And certainly works with out tomcat and usage is very straight forward and also an inplace replacement to Commons DBCP with very minimum change i.e., use &lt;b&gt;org.apache.tomcat.jdbc.pool.DataSource&lt;/b&gt; instead of &lt;b&gt;org.apache.commons.dbcp.BasicDataSource&lt;/b&gt;.&lt;br&gt;&lt;br&gt;&lt;br&gt;You can download the jars from &lt;a href="http://people.apache.org/%7Efhanik/jdbc-pool/v1.0.8.5/" target="_blank"&gt;http://people.apache.org/~fhanik/jdbc-pool/v1.0.8.5/&lt;/a&gt; or build &lt;br&gt;it from the svn repository located at &lt;a href="http://svn.apache.org/repos/asf/tomcat/trunk/modules/jdbc-pool" id="xldv" title="http://svn.apache.org/repos/asf/tomcat/trunk/modules/jdbc-pool"&gt;http://svn.apache.org/repos/asf/tomcat/trunk/modules/jdbc-pool&lt;/a&gt;. As it is not available in any public standard maven2 repository I manually updated local repository using:&lt;br&gt;&lt;br&gt;mvn install:install-file -DgroupId=org.apache.tomcat -DartifactId=jdbc-pool -Dversion=1.0.8.5 -Dpackaging=jar -Dfile=tomcat-jdbc.jar&lt;br&gt;&lt;br&gt;For apache maven lovers, below are the dependenies required:&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependency&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.tomcat&amp;lt;/groupId&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;jdbc-pool&amp;lt;/artifactId&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;1.0.8.5&amp;lt;/version&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dependency&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependency&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;groupId&amp;gt;org.apache.tomcat&amp;lt;/groupId&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;artifactId&amp;gt;juli&amp;lt;/artifactId&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;version&amp;gt;6.0.20&amp;lt;/version&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dependency&amp;gt;&lt;br&gt;&lt;br&gt;JDBC properties in app.properties file looks a below:&lt;br&gt;&lt;br&gt;# Oracle configuration&lt;br&gt;jdbc.driverClassName=oracle.jdbc.driver.OracleDriver&lt;br&gt;jdbc.url=jdbc:oracle:thin:@//&lt;a href="http://webdor01.sonyment.com:1521/RCKCPSD1" target="_blank"&gt;&amp;lt;&amp;lt;Server&amp;gt;&amp;gt;:&amp;lt;&amp;lt;PORT&amp;gt;/&amp;lt;&amp;lt;Service Name&amp;gt;&amp;gt;&lt;/a&gt;&lt;br&gt;jdbc.username=&amp;lt;&amp;lt;Database User&amp;gt;&amp;gt;&lt;br&gt; jdbc.password=&amp;lt;&amp;lt;Database Password&amp;gt;&amp;gt;&lt;br&gt;&lt;br&gt;Spring applicationContext.xml&lt;br&gt;&lt;br&gt;&amp;lt;context:property-placeholder location=&amp;quot;classpath:app.properties&amp;quot; /&amp;gt;&lt;br&gt;&lt;br&gt;&amp;lt;bean id=&amp;quot;datasource&amp;quot; class=&amp;quot;org.apache.tomcat.jdbc.pool.DataSource&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; destroy-method=&amp;quot;close&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:driverClassName=&amp;quot;${jdbc.driverClassName}&amp;quot;&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:url=&amp;quot;${jdbc.url}&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:username=&amp;quot;${jdbc.username}&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:password=&amp;quot;${jdbc.password}&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:initialSize=&amp;quot;5&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:minIdle=&amp;quot;5&amp;quot;&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:maxIdle=&amp;quot;10&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:maxActive=&amp;quot;20&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:maxWait=&amp;quot;6000&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:jmxEnabled=&amp;quot;true&amp;quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:jdbcInterceptors=&amp;quot;org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReportJmx(threshold=10000)&amp;quot;&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:removeAbandoned=&amp;quot;true&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:removeAbandonedTimeout=&amp;quot;60&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:logAbandoned=&amp;quot;true&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:testOnBorrow=&amp;quot;true&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:testOnReturn=&amp;quot;false&amp;quot;&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:testWhileIdle=&amp;quot;false&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:useEquals=&amp;quot;true&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:fairQueue=&amp;quot;true&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:timeBetweenEvictionRunsMillis=&amp;quot;30000&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:minEvictableIdleTimeMillis=&amp;quot;30000&amp;quot;&lt;br&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:validationInterval=&amp;quot;1800000&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:validationQuery=&amp;quot;select 1 from dual&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p:accessToUnderlyingConnectionAllowed=&amp;quot;true&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /&amp;gt;&lt;br&gt;&lt;br&gt;I still need to see how it works when dealing with vendor specific JDBC features.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-5874902143278712746?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/T6TIkHDcnjA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/5874902143278712746/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=5874902143278712746" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/5874902143278712746?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/5874902143278712746?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/T6TIkHDcnjA/upcoming-jdbc-pool.html" title="Upcoming JDBC-Pool -" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2010/02/upcoming-jdbc-pool.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUCRXgyfSp7ImA9WxBVE0g.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-8807925842534298337</id><published>2010-02-12T16:57:00.001-05:00</published><updated>2010-02-16T14:57:44.695-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-16T14:57:44.695-05:00</app:edited><title>Concurrent URL checker using Completi...</title><content type="html">&lt;h2&gt;Concurrent URL checker using Completion Service&lt;/h2&gt; From javadocs:&lt;br&gt;&lt;br&gt; &amp;quot;A service that decouples the production of new asynchronous tasks from the consumption of the results of completed tasks. Producers submit tasks for execution. Consumers take completed tasks and process their results in the order they complete. A CompletionService can for example be used to manage asynchronous IO, in which tasks that perform reads are submitted in one part of a program or system, and then acted upon in a different part of the program when the reads complete, possibly in a different order than they were requested. &lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;Typically, a CompletionService relies on a separate &lt;font face="Courier New"&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/Executor.html" id="ehaf" title="Executor"&gt;Executor&lt;/a&gt;&lt;/font&gt; to actually execute the tasks, in which case the CompletionService only manages an internal completion queue. The &lt;font face="Courier New"&gt;&lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/ExecutorCompletionService.html" id="hh_l" title="ExecutorCompletionService"&gt;ExecutorCompletionService&lt;/a&gt;&lt;/font&gt; class provides an implementation of this approach.&amp;quot;&lt;/p&gt;&lt;br&gt;The program:&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Takes set of urls as input. This is typically done by a producer.&lt;/li&gt;&lt;li&gt;The &lt;font face="Courier New"&gt;&lt;span class="s1"&gt;CallableUrlChecker class checks one url and produces the Result.&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;br&gt;&lt;table bgcolor="#c0c0c0" cellpadding="5" cellspacing="0" class="zeroBorder" cols="1" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;center&gt;&lt;font color="#000000" face="Arial, Helvetica"&gt; UrlChecker.java&lt;/font&gt;&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;pre&gt;&lt;a id="l1" name="l1"&gt;&lt;/a&gt;&lt;span class="ln"&gt;1    &lt;/span&gt;&lt;span class="s0"&gt;package &lt;/span&gt;&lt;span class="s1"&gt;com.blogspot.ascendant.urlchecker; &lt;br&gt;&lt;a id="l2" name="l2"&gt;&lt;/a&gt;&lt;span class="ln"&gt;2    &lt;/span&gt; &lt;br&gt;&lt;a id="l3" name="l3"&gt;&lt;/a&gt;&lt;span class="ln"&gt;3    &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;import &lt;/span&gt;&lt;span class="s1"&gt;org.apache.http.HttpHost; &lt;br&gt;&lt;a id="l4" name="l4"&gt;&lt;/a&gt;&lt;span class="ln"&gt;4    &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;import &lt;/span&gt;&lt;span class="s1"&gt;org.apache.http.HttpResponse; &lt;br&gt;&lt;a id="l5" name="l5"&gt;&lt;/a&gt;&lt;span class="ln"&gt;5    &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;import &lt;/span&gt;&lt;span class="s1"&gt;org.apache.http.StatusLine; &lt;br&gt;&lt;a id="l6" name="l6"&gt;&lt;/a&gt;&lt;span class="ln"&gt;6    &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;import &lt;/span&gt;&lt;span class="s1"&gt;org.apache.http.client.HttpClient; &lt;br&gt;&lt;a id="l7" name="l7"&gt;&lt;/a&gt;&lt;span class="ln"&gt;7    &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;import &lt;/span&gt;&lt;span class="s1"&gt;org.apache.http.client.methods.HttpGet; &lt;br&gt;&lt;a id="l8" name="l8"&gt;&lt;/a&gt;&lt;span class="ln"&gt;8    &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;import &lt;/span&gt;&lt;span class="s1"&gt;org.apache.http.impl.client.DefaultHttpClient; &lt;br&gt;&lt;a id="l9" name="l9"&gt;&lt;/a&gt;&lt;span class="ln"&gt;9    &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;import &lt;/span&gt;&lt;span class="s1"&gt;org.apache.http.protocol.BasicHttpContext; &lt;br&gt;&lt;a id="l10" name="l10"&gt;&lt;/a&gt;&lt;span class="ln"&gt;10   &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;import &lt;/span&gt;&lt;span class="s1"&gt;org.apache.http.protocol.ExecutionContext; &lt;br&gt;&lt;a id="l11" name="l11"&gt;&lt;/a&gt;&lt;span class="ln"&gt;11   &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;import &lt;/span&gt;&lt;span class="s1"&gt;org.apache.http.protocol.HttpContext; &lt;br&gt;&lt;a id="l12" name="l12"&gt;&lt;/a&gt;&lt;span class="ln"&gt;12   &lt;/span&gt; &lt;br&gt;&lt;a id="l13" name="l13"&gt;&lt;/a&gt;&lt;span class="ln"&gt;13   &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;import &lt;/span&gt;&lt;span class="s1"&gt;java.util.Set; &lt;br&gt;&lt;a id="l14" name="l14"&gt;&lt;/a&gt;&lt;span class="ln"&gt;14   &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;import &lt;/span&gt;&lt;span class="s1"&gt;java.util.TreeSet; &lt;br&gt;&lt;a id="l15" name="l15"&gt;&lt;/a&gt;&lt;span class="ln"&gt;15   &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;import &lt;/span&gt;&lt;span class="s1"&gt;java.util.concurrent.*; &lt;br&gt;&lt;a id="l16" name="l16"&gt;&lt;/a&gt;&lt;span class="ln"&gt;16   &lt;/span&gt; &lt;br&gt;&lt;a id="l17" name="l17"&gt;&lt;/a&gt;&lt;span class="ln"&gt;17   &lt;/span&gt;&lt;/span&gt;&lt;span class="s0"&gt;public class &lt;/span&gt;&lt;span class="s1"&gt;UrlChecker { &lt;br&gt;&lt;a id="l18" name="l18"&gt;&lt;/a&gt;&lt;span class="ln"&gt;18   &lt;/span&gt; &lt;br&gt;&lt;a id="l19" name="l19"&gt;&lt;/a&gt;&lt;span class="ln"&gt;19   &lt;/span&gt;    &lt;/span&gt;&lt;span class="s0"&gt;public static void &lt;/span&gt;&lt;span class="s1"&gt;main(String... args) { &lt;br&gt;&lt;a id="l20" name="l20"&gt;&lt;/a&gt;&lt;span class="ln"&gt;20   &lt;/span&gt; &lt;br&gt;&lt;a id="l21" name="l21"&gt;&lt;/a&gt;&lt;span class="ln"&gt;21   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;final &lt;/span&gt;&lt;span class="s1"&gt;Set&amp;lt;String&amp;gt; urls = getUrlsToCheck(); &lt;br&gt;&lt;a id="l22" name="l22"&gt;&lt;/a&gt;&lt;span class="ln"&gt;22   &lt;/span&gt; &lt;br&gt;&lt;a id="l23" name="l23"&gt;&lt;/a&gt;&lt;span class="ln"&gt;23   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s2"&gt;// The executor that acutually executes the Url verification. &lt;/span&gt;&lt;span class="s1"&gt; &lt;br&gt;&lt;a id="l24" name="l24"&gt;&lt;/a&gt;&lt;span class="ln"&gt;24   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;final &lt;/span&gt;&lt;span class="s1"&gt;ExecutorService pool = Executors.newFixedThreadPool(&lt;/span&gt;&lt;span class="s3"&gt;10&lt;/span&gt;&lt;span class="s1"&gt;); &lt;br&gt;&lt;a id="l25" name="l25"&gt;&lt;/a&gt;&lt;span class="ln"&gt;25   &lt;/span&gt; &lt;br&gt;&lt;a id="l26" name="l26"&gt;&lt;/a&gt;&lt;span class="ln"&gt;26   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s2"&gt;// The completion service that manages completed task queue&lt;/span&gt;&lt;span class="s1"&gt; &lt;br&gt;&lt;a id="l27" name="l27"&gt;&lt;/a&gt;&lt;span class="ln"&gt;27   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;final &lt;/span&gt;&lt;span class="s1"&gt;CompletionService&amp;lt;Result&amp;gt; completionService = &lt;/span&gt;&lt;span class="s0"&gt;new &lt;/span&gt;&lt;span class="s1"&gt;ExecutorCompletionService&amp;lt;Result&amp;gt;(&lt;br&gt;&lt;a id="l28" name="l28"&gt;&lt;/a&gt;&lt;span class="ln"&gt;28   &lt;/span&gt;                pool &lt;br&gt;&lt;a id="l29" name="l29"&gt;&lt;/a&gt;&lt;span class="ln"&gt;29   &lt;/span&gt;        ); &lt;br&gt;&lt;a id="l30" name="l30"&gt;&lt;/a&gt;&lt;span class="ln"&gt;30   &lt;/span&gt; &lt;br&gt;&lt;a id="l31" name="l31"&gt;&lt;/a&gt;&lt;span class="ln"&gt;31   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s2"&gt;// Submit the url check tasks to the completion service&lt;/span&gt;&lt;span class="s1"&gt; &lt;br&gt;&lt;a id="l32" name="l32"&gt;&lt;/a&gt;&lt;span class="ln"&gt;32   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;for &lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="s0"&gt;final &lt;/span&gt;&lt;span class="s1"&gt;String url : urls) { &lt;br&gt;&lt;a id="l33" name="l33"&gt;&lt;/a&gt;&lt;span class="ln"&gt;33   &lt;/span&gt;            completionService.submit(&lt;/span&gt;&lt;span class="s0"&gt;new &lt;/span&gt;&lt;span class="s1"&gt;CallableUrlChecker(url)); &lt;br&gt;&lt;a id="l34" name="l34"&gt;&lt;/a&gt;&lt;span class="ln"&gt;34   &lt;/span&gt;        } &lt;br&gt;&lt;a id="l35" name="l35"&gt;&lt;/a&gt;&lt;span class="ln"&gt;35   &lt;/span&gt; &lt;br&gt;&lt;a id="l36" name="l36"&gt;&lt;/a&gt;&lt;span class="ln"&gt;36   &lt;/span&gt;        Future&amp;lt;Result&amp;gt; futureResult; &lt;br&gt;&lt;a id="l37" name="l37"&gt;&lt;/a&gt;&lt;span class="ln"&gt;37   &lt;/span&gt;        Result result; &lt;br&gt;&lt;a id="l38" name="l38"&gt;&lt;/a&gt;&lt;span class="ln"&gt;38   &lt;/span&gt; &lt;br&gt;&lt;a id="l39" name="l39"&gt;&lt;/a&gt;&lt;span class="ln"&gt;39   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s2"&gt;// Total urls submitted&lt;/span&gt;&lt;span class="s1"&gt; &lt;br&gt;&lt;a id="l40" name="l40"&gt;&lt;/a&gt;&lt;span class="ln"&gt;40   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;final int &lt;/span&gt;&lt;span class="s1"&gt;totalUrlsToCheck = urls.size(); &lt;br&gt;&lt;a id="l41" name="l41"&gt;&lt;/a&gt;&lt;span class="ln"&gt;41   &lt;/span&gt; &lt;br&gt;&lt;a id="l42" name="l42"&gt;&lt;/a&gt;&lt;span class="ln"&gt;42   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;int &lt;/span&gt;&lt;span class="s1"&gt;urlCounter = &lt;/span&gt;&lt;span class="s3"&gt;0&lt;/span&gt;&lt;span class="s1"&gt;; &lt;br&gt;&lt;a id="l43" name="l43"&gt;&lt;/a&gt;&lt;span class="ln"&gt;43   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;try &lt;/span&gt;&lt;span class="s1"&gt;{ &lt;br&gt;&lt;a id="l44" name="l44"&gt;&lt;/a&gt;&lt;span class="ln"&gt;44   &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;while &lt;/span&gt;&lt;span class="s1"&gt;(urlCounter != totalUrlsToCheck) { &lt;br&gt;&lt;a id="l45" name="l45"&gt;&lt;/a&gt;&lt;span class="ln"&gt;45   &lt;/span&gt;                &lt;/span&gt;&lt;span class="s0"&gt;try &lt;/span&gt;&lt;span class="s1"&gt;{ &lt;br&gt;&lt;a id="l46" name="l46"&gt;&lt;/a&gt;&lt;span class="ln"&gt;46   &lt;/span&gt;                    &lt;/span&gt;&lt;span class="s2"&gt;// Retrieves and removes the Future representing the next completed task,&lt;/span&gt;&lt;span class="s1"&gt; &lt;br&gt;&lt;a id="l47" name="l47"&gt;&lt;/a&gt;&lt;span class="ln"&gt;47   &lt;/span&gt;                    &lt;/span&gt;&lt;span class="s2"&gt;// waiting if none are yet present.&lt;/span&gt;&lt;span class="s1"&gt; &lt;br&gt;&lt;a id="l48" name="l48"&gt;&lt;/a&gt;&lt;span class="ln"&gt;48   &lt;/span&gt;                    futureResult = completionService.take(); &lt;br&gt;&lt;a id="l49" name="l49"&gt;&lt;/a&gt;&lt;span class="ln"&gt;49   &lt;/span&gt; &lt;br&gt;&lt;a id="l50" name="l50"&gt;&lt;/a&gt;&lt;span class="ln"&gt;50   &lt;/span&gt;                    &lt;/span&gt;&lt;span class="s2"&gt;// May result a null...&lt;/span&gt;&lt;span class="s1"&gt; &lt;br&gt;&lt;a id="l51" name="l51"&gt;&lt;/a&gt;&lt;span class="ln"&gt;51   &lt;/span&gt;                    &lt;/span&gt;&lt;span class="s0"&gt;if &lt;/span&gt;&lt;span class="s1"&gt;(futureResult != &lt;/span&gt;&lt;span class="s0"&gt;null&lt;/span&gt;&lt;span class="s1"&gt;) { &lt;br&gt;&lt;a id="l52" name="l52"&gt;&lt;/a&gt;&lt;span class="ln"&gt;52   &lt;/span&gt;                        &lt;/span&gt;&lt;span class="s2"&gt;// get the result with a time wait...&lt;/span&gt;&lt;span class="s1"&gt; &lt;br&gt;&lt;a id="l53" name="l53"&gt;&lt;/a&gt;&lt;span class="ln"&gt;53   &lt;/span&gt;                        result = futureResult.get(&lt;/span&gt;&lt;span class="s3"&gt;3&lt;/span&gt;&lt;span class="s1"&gt;, TimeUnit.SECONDS); &lt;br&gt;&lt;a id="l54" name="l54"&gt;&lt;/a&gt;&lt;span class="ln"&gt;54   &lt;/span&gt; &lt;br&gt;&lt;a id="l55" name="l55"&gt;&lt;/a&gt;&lt;span class="ln"&gt;55   &lt;/span&gt;                        &lt;/span&gt;&lt;span class="s2"&gt;// further process the result&lt;/span&gt;&lt;span class="s1"&gt; &lt;br&gt;&lt;a id="l56" name="l56"&gt;&lt;/a&gt;&lt;span class="ln"&gt;56   &lt;/span&gt;                        System.out.println(urlCounter + &lt;/span&gt;&lt;span class="s4"&gt;&amp;quot; : &amp;quot; &lt;/span&gt;&lt;span class="s1"&gt;+ result); &lt;br&gt;&lt;a id="l57" name="l57"&gt;&lt;/a&gt;&lt;span class="ln"&gt;57   &lt;/span&gt;                    } &lt;br&gt;&lt;a id="l58" name="l58"&gt;&lt;/a&gt;&lt;span class="ln"&gt;58   &lt;/span&gt;                } &lt;/span&gt;&lt;span class="s0"&gt;catch &lt;/span&gt;&lt;span class="s1"&gt;(ExecutionException e) { &lt;br&gt;&lt;a id="l59" name="l59"&gt;&lt;/a&gt;&lt;span class="ln"&gt;59   &lt;/span&gt;                    System.err.println(&lt;/span&gt;&lt;span class="s4"&gt;&amp;quot;Failed to check the url: &amp;quot; &lt;/span&gt;&lt;span class="s1"&gt;+ e.getMessage()); &lt;br&gt;&lt;a id="l60" name="l60"&gt;&lt;/a&gt;&lt;span class="ln"&gt;60   &lt;/span&gt;                } &lt;/span&gt;&lt;span class="s0"&gt;catch &lt;/span&gt;&lt;span class="s1"&gt;(InterruptedException e) { &lt;br&gt;&lt;a id="l61" name="l61"&gt;&lt;/a&gt;&lt;span class="ln"&gt;61   &lt;/span&gt;                    Thread.currentThread().interrupt(); &lt;br&gt;&lt;a id="l62" name="l62"&gt;&lt;/a&gt;&lt;span class="ln"&gt;62   &lt;/span&gt;                } &lt;/span&gt;&lt;span class="s0"&gt;catch &lt;/span&gt;&lt;span class="s1"&gt;(TimeoutException e) { &lt;br&gt;&lt;a id="l63" name="l63"&gt;&lt;/a&gt;&lt;span class="ln"&gt;63   &lt;/span&gt;                    System.err.println(&lt;/span&gt;&lt;span class="s4"&gt;&amp;quot;Failed to check the url: &amp;quot; &lt;/span&gt;&lt;span class="s1"&gt;+ e.getMessage()); &lt;br&gt;&lt;a id="l64" name="l64"&gt;&lt;/a&gt;&lt;span class="ln"&gt;64   &lt;/span&gt;                } &lt;br&gt;&lt;a id="l65" name="l65"&gt;&lt;/a&gt;&lt;span class="ln"&gt;65   &lt;/span&gt; &lt;br&gt;&lt;a id="l66" name="l66"&gt;&lt;/a&gt;&lt;span class="ln"&gt;66   &lt;/span&gt;                urlCounter++; &lt;br&gt;&lt;a id="l67" name="l67"&gt;&lt;/a&gt;&lt;span class="ln"&gt;67   &lt;/span&gt;            } &lt;br&gt;&lt;a id="l68" name="l68"&gt;&lt;/a&gt;&lt;span class="ln"&gt;68   &lt;/span&gt; &lt;br&gt;&lt;a id="l69" name="l69"&gt;&lt;/a&gt;&lt;span class="ln"&gt;69   &lt;/span&gt;        } &lt;/span&gt;&lt;span class="s0"&gt;finally &lt;/span&gt;&lt;span class="s1"&gt;{ &lt;br&gt;&lt;a id="l70" name="l70"&gt;&lt;/a&gt;&lt;span class="ln"&gt;70   &lt;/span&gt;            &lt;/span&gt;&lt;span class="s2"&gt;// Shutdown the executor pool if you are done&lt;/span&gt;&lt;span class="s1"&gt; &lt;br&gt;&lt;a id="l71" name="l71"&gt;&lt;/a&gt;&lt;span class="ln"&gt;71   &lt;/span&gt;            pool.shutdown(); &lt;br&gt;&lt;a id="l72" name="l72"&gt;&lt;/a&gt;&lt;span class="ln"&gt;72   &lt;/span&gt;        } &lt;br&gt;&lt;a id="l73" name="l73"&gt;&lt;/a&gt;&lt;span class="ln"&gt;73   &lt;/span&gt;    } &lt;br&gt;&lt;a id="l74" name="l74"&gt;&lt;/a&gt;&lt;span class="ln"&gt;74   &lt;/span&gt; &lt;br&gt;&lt;a id="l75" name="l75"&gt;&lt;/a&gt;&lt;span class="ln"&gt;75   &lt;/span&gt;    &lt;/span&gt;&lt;span class="s2"&gt;/** &lt;br&gt;&lt;a id="l76" name="l76"&gt;&lt;/a&gt;&lt;span class="ln"&gt;76   &lt;/span&gt;     * Set of urls to check &lt;br&gt;&lt;a id="l77" name="l77"&gt;&lt;/a&gt;&lt;span class="ln"&gt;77   &lt;/span&gt;     * &lt;br&gt;&lt;a id="l78" name="l78"&gt;&lt;/a&gt;&lt;span class="ln"&gt;78   &lt;/span&gt;     * &lt;/span&gt;&lt;span class="s5"&gt;@return &lt;/span&gt;&lt;span class="s2"&gt;non-null set &lt;br&gt;&lt;a id="l79" name="l79"&gt;&lt;/a&gt;&lt;span class="ln"&gt;79   &lt;/span&gt;     */&lt;/span&gt;&lt;span class="s1"&gt; &lt;br&gt;&lt;a id="l80" name="l80"&gt;&lt;/a&gt;&lt;span class="ln"&gt;80   &lt;/span&gt;    &lt;/span&gt;&lt;span class="s0"&gt;private static &lt;/span&gt;&lt;span class="s1"&gt;Set&amp;lt;String&amp;gt; getUrlsToCheck() { &lt;br&gt;&lt;a id="l81" name="l81"&gt;&lt;/a&gt;&lt;span class="ln"&gt;81   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;final &lt;/span&gt;&lt;span class="s1"&gt;Set&amp;lt;String&amp;gt; urls = &lt;/span&gt;&lt;span class="s0"&gt;new &lt;/span&gt;&lt;span class="s1"&gt;TreeSet&amp;lt;String&amp;gt;(); &lt;br&gt;&lt;a id="l82" name="l82"&gt;&lt;/a&gt;&lt;span class="ln"&gt;82   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;for &lt;/span&gt;&lt;span class="s1"&gt;(&lt;/span&gt;&lt;span class="s0"&gt;int &lt;/span&gt;&lt;span class="s1"&gt;i = &lt;/span&gt;&lt;span class="s3"&gt;0&lt;/span&gt;&lt;span class="s1"&gt;; i &amp;lt;= &lt;/span&gt;&lt;span class="s3"&gt;5&lt;/span&gt;&lt;span class="s1"&gt;; i++) { &lt;br&gt;&lt;a id="l83" name="l83"&gt;&lt;/a&gt;&lt;span class="ln"&gt;83   &lt;/span&gt;            urls.add(String.format(&lt;/span&gt;&lt;span class="s4"&gt;&amp;quot;http://test%d.com&amp;quot;&lt;/span&gt;&lt;span class="s1"&gt;, i)); &lt;br&gt;&lt;a id="l84" name="l84"&gt;&lt;/a&gt;&lt;span class="ln"&gt;84   &lt;/span&gt;        } &lt;br&gt;&lt;a id="l85" name="l85"&gt;&lt;/a&gt;&lt;span class="ln"&gt;85   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;return &lt;/span&gt;&lt;span class="s1"&gt;urls; &lt;br&gt;&lt;a id="l86" name="l86"&gt;&lt;/a&gt;&lt;span class="ln"&gt;86   &lt;/span&gt;    } &lt;br&gt;&lt;a id="l87" name="l87"&gt;&lt;/a&gt;&lt;span class="ln"&gt;87   &lt;/span&gt; &lt;br&gt;&lt;a id="l88" name="l88"&gt;&lt;/a&gt;&lt;span class="ln"&gt;88   &lt;/span&gt;    &lt;/span&gt;&lt;span class="s2"&gt;/** &lt;br&gt;&lt;a id="l89" name="l89"&gt;&lt;/a&gt;&lt;span class="ln"&gt;89   &lt;/span&gt;     * The callable task that actually verifies the URL and prepares the result... &lt;br&gt;&lt;a id="l90" name="l90"&gt;&lt;/a&gt;&lt;span class="ln"&gt;90   &lt;/span&gt;     */&lt;/span&gt;&lt;span class="s1"&gt; &lt;br&gt;&lt;a id="l91" name="l91"&gt;&lt;/a&gt;&lt;span class="ln"&gt;91   &lt;/span&gt;    &lt;/span&gt;&lt;span class="s0"&gt;public static class &lt;/span&gt;&lt;span class="s1"&gt;CallableUrlChecker &lt;/span&gt;&lt;span class="s0"&gt;implements &lt;/span&gt;&lt;span class="s1"&gt;Callable&amp;lt;Result&amp;gt; { &lt;br&gt;&lt;a id="l92" name="l92"&gt;&lt;/a&gt;&lt;span class="ln"&gt;92   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;private final &lt;/span&gt;&lt;span class="s1"&gt;String urlToCheck; &lt;br&gt;&lt;a id="l93" name="l93"&gt;&lt;/a&gt;&lt;span class="ln"&gt;93   &lt;/span&gt; &lt;br&gt;&lt;a id="l94" name="l94"&gt;&lt;/a&gt;&lt;span class="ln"&gt;94   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;public &lt;/span&gt;&lt;span class="s1"&gt;CallableUrlChecker(String urlToCheck) { &lt;br&gt;&lt;a id="l95" name="l95"&gt;&lt;/a&gt;&lt;span class="ln"&gt;95   &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;this&lt;/span&gt;&lt;span class="s1"&gt;.urlToCheck = urlToCheck; &lt;br&gt;&lt;a id="l96" name="l96"&gt;&lt;/a&gt;&lt;span class="ln"&gt;96   &lt;/span&gt;        } &lt;br&gt;&lt;a id="l97" name="l97"&gt;&lt;/a&gt;&lt;span class="ln"&gt;97   &lt;/span&gt; &lt;br&gt;&lt;a id="l98" name="l98"&gt;&lt;/a&gt;&lt;span class="ln"&gt;98   &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;public &lt;/span&gt;&lt;span class="s1"&gt;Result call() &lt;/span&gt;&lt;span class="s0"&gt;throws &lt;/span&gt;&lt;span class="s1"&gt;Exception { &lt;br&gt;&lt;a id="l99" name="l99"&gt;&lt;/a&gt;&lt;span class="ln"&gt;99   &lt;/span&gt;            HttpClient httpclient = &lt;/span&gt;&lt;span class="s0"&gt;new &lt;/span&gt;&lt;span class="s1"&gt;DefaultHttpClient(); &lt;br&gt;&lt;a id="l100" name="l100"&gt;&lt;/a&gt;&lt;span class="ln"&gt;100  &lt;/span&gt;            HttpGet httpget = &lt;/span&gt;&lt;span class="s0"&gt;new &lt;/span&gt;&lt;span class="s1"&gt;HttpGet(urlToCheck);&lt;br&gt;&lt;a id="l101" name="l101"&gt;&lt;/a&gt;&lt;span class="ln"&gt;101  &lt;/span&gt;            HttpContext hc = &lt;/span&gt;&lt;span class="s0"&gt;new &lt;/span&gt;&lt;span class="s1"&gt;BasicHttpContext(); &lt;br&gt;&lt;a id="l102" name="l102"&gt;&lt;/a&gt;&lt;span class="ln"&gt;102  &lt;/span&gt; &lt;br&gt;&lt;a id="l103" name="l103"&gt;&lt;/a&gt;&lt;span class="ln"&gt;103  &lt;/span&gt;            Result result = &lt;/span&gt;&lt;span class="s0"&gt;new &lt;/span&gt;&lt;span class="s1"&gt;Result(); &lt;br&gt;&lt;a id="l104" name="l104"&gt;&lt;/a&gt;&lt;span class="ln"&gt;104  &lt;/span&gt;            result.setUrl(urlToCheck); &lt;br&gt;&lt;span class="ln"&gt;105  &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;try &lt;/span&gt;&lt;span class="s1"&gt;{ &lt;br&gt;&lt;a id="l106" name="l106"&gt;&lt;/a&gt;&lt;span class="ln"&gt;106  &lt;/span&gt;                HttpResponse response = httpclient.execute(httpget, hc); &lt;br&gt;&lt;a id="l107" name="l107"&gt;&lt;/a&gt;&lt;span class="ln"&gt;107  &lt;/span&gt;                HttpHost target = (HttpHost) hc.getAttribute( &lt;br&gt;&lt;a id="l108" name="l108"&gt;&lt;/a&gt;&lt;span class="ln"&gt;108  &lt;/span&gt;                        ExecutionContext.HTTP_TARGET_HOST &lt;br&gt;&lt;a id="l109" name="l109"&gt;&lt;/a&gt;&lt;span class="ln"&gt;109  &lt;/span&gt;                ); &lt;br&gt;&lt;a id="l110" name="l110"&gt;&lt;/a&gt;&lt;span class="ln"&gt;110  &lt;/span&gt; &lt;br&gt;&lt;a id="l111" name="l111"&gt;&lt;/a&gt;&lt;span class="ln"&gt;111  &lt;/span&gt;                StatusLine status = response.getStatusLine(); &lt;br&gt;&lt;a id="l112" name="l112"&gt;&lt;/a&gt;&lt;span class="ln"&gt;112  &lt;/span&gt; &lt;br&gt;&lt;a id="l113" name="l113"&gt;&lt;/a&gt;&lt;span class="ln"&gt;113  &lt;/span&gt;                result.setStatusCode(status.getStatusCode()); &lt;br&gt;&lt;a id="l114" name="l114"&gt;&lt;/a&gt;&lt;span class="ln"&gt;114  &lt;/span&gt;                result.setStatusPhrase(status.getReasonPhrase()); &lt;br&gt;&lt;a id="l115" name="l115"&gt;&lt;/a&gt;&lt;span class="ln"&gt;115  &lt;/span&gt;                result.setRedirectUrl(target.toURI()); &lt;br&gt;&lt;a id="l116" name="l116"&gt;&lt;/a&gt;&lt;span class="ln"&gt;116  &lt;/span&gt; &lt;br&gt;&lt;a id="l117" name="l117"&gt;&lt;/a&gt;&lt;span class="ln"&gt;117  &lt;/span&gt;            } &lt;/span&gt;&lt;span class="s0"&gt;catch &lt;/span&gt;&lt;span class="s1"&gt;(Exception e) { &lt;br&gt;&lt;a id="l118" name="l118"&gt;&lt;/a&gt;&lt;span class="ln"&gt;118  &lt;/span&gt;                result.setStatusPhrase(e.getMessage()); &lt;br&gt;&lt;a id="l119" name="l119"&gt;&lt;/a&gt;&lt;span class="ln"&gt;119  &lt;/span&gt;            } &lt;/span&gt;&lt;span class="s0"&gt;finally &lt;/span&gt;&lt;span class="s1"&gt;{ &lt;br&gt;&lt;a id="l120" name="l120"&gt;&lt;/a&gt;&lt;span class="ln"&gt;120  &lt;/span&gt;                httpclient.getConnectionManager().shutdown(); &lt;br&gt;&lt;a id="l121" name="l121"&gt;&lt;/a&gt;&lt;span class="ln"&gt;121  &lt;/span&gt;            } &lt;br&gt;&lt;a id="l122" name="l122"&gt;&lt;/a&gt;&lt;span class="ln"&gt;122  &lt;/span&gt; &lt;br&gt;&lt;a id="l123" name="l123"&gt;&lt;/a&gt;&lt;span class="ln"&gt;123  &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;return &lt;/span&gt;&lt;span class="s1"&gt;result; &lt;br&gt;&lt;a id="l124" name="l124"&gt;&lt;/a&gt;&lt;span class="ln"&gt;124  &lt;/span&gt;        } &lt;br&gt;&lt;a id="l125" name="l125"&gt;&lt;/a&gt;&lt;span class="ln"&gt;125  &lt;/span&gt;    } &lt;br&gt;&lt;a id="l126" name="l126"&gt;&lt;/a&gt;&lt;span class="ln"&gt;126  &lt;/span&gt; &lt;br&gt;&lt;a id="l127" name="l127"&gt;&lt;/a&gt;&lt;span class="ln"&gt;127  &lt;/span&gt;    &lt;/span&gt;&lt;span class="s2"&gt;/** &lt;br&gt;&lt;a id="l128" name="l128"&gt;&lt;/a&gt;&lt;span class="ln"&gt;128  &lt;/span&gt;     * Result encapsulates the data that is returned after completion of the task &lt;br&gt;&lt;a id="l129" name="l129"&gt;&lt;/a&gt;&lt;span class="ln"&gt;129  &lt;/span&gt;     */&lt;/span&gt;&lt;span class="s1"&gt; &lt;br&gt;&lt;a id="l130" name="l130"&gt;&lt;/a&gt;&lt;span class="ln"&gt;130  &lt;/span&gt;    &lt;/span&gt;&lt;span class="s0"&gt;public static class &lt;/span&gt;&lt;span class="s1"&gt;Result { &lt;br&gt;&lt;a id="l131" name="l131"&gt;&lt;/a&gt;&lt;span class="ln"&gt;131  &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;private &lt;/span&gt;&lt;span class="s1"&gt;String url; &lt;br&gt;&lt;a id="l132" name="l132"&gt;&lt;/a&gt;&lt;span class="ln"&gt;132  &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;private &lt;/span&gt;&lt;span class="s1"&gt;String redirectUrl; &lt;br&gt;&lt;a id="l133" name="l133"&gt;&lt;/a&gt;&lt;span class="ln"&gt;133  &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;private int &lt;/span&gt;&lt;span class="s1"&gt;statusCode; &lt;br&gt;&lt;a id="l134" name="l134"&gt;&lt;/a&gt;&lt;span class="ln"&gt;134  &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;private &lt;/span&gt;&lt;span class="s1"&gt;String statusPhrase; &lt;br&gt;&lt;a id="l135" name="l135"&gt;&lt;/a&gt;&lt;span class="ln"&gt;135  &lt;/span&gt; &lt;br&gt;&lt;a id="l136" name="l136"&gt;&lt;/a&gt;&lt;span class="ln"&gt;136  &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;public &lt;/span&gt;&lt;span class="s1"&gt;String getUrl() { &lt;br&gt;&lt;a id="l137" name="l137"&gt;&lt;/a&gt;&lt;span class="ln"&gt;137  &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;return &lt;/span&gt;&lt;span class="s1"&gt;url; &lt;br&gt;&lt;a id="l138" name="l138"&gt;&lt;/a&gt;&lt;span class="ln"&gt;138  &lt;/span&gt;        } &lt;br&gt;&lt;a id="l139" name="l139"&gt;&lt;/a&gt;&lt;span class="ln"&gt;139  &lt;/span&gt; &lt;br&gt;&lt;a id="l140" name="l140"&gt;&lt;/a&gt;&lt;span class="ln"&gt;140  &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;public void &lt;/span&gt;&lt;span class="s1"&gt;setUrl(String url) { &lt;br&gt;&lt;a id="l141" name="l141"&gt;&lt;/a&gt;&lt;span class="ln"&gt;141  &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;this&lt;/span&gt;&lt;span class="s1"&gt;.url = url; &lt;br&gt;&lt;a id="l142" name="l142"&gt;&lt;/a&gt;&lt;span class="ln"&gt;142  &lt;/span&gt;        } &lt;br&gt;&lt;a id="l143" name="l143"&gt;&lt;/a&gt;&lt;span class="ln"&gt;143  &lt;/span&gt; &lt;br&gt;&lt;a id="l144" name="l144"&gt;&lt;/a&gt;&lt;span class="ln"&gt;144  &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;public &lt;/span&gt;&lt;span class="s1"&gt;String getRedirectUrl() { &lt;br&gt;&lt;a id="l145" name="l145"&gt;&lt;/a&gt;&lt;span class="ln"&gt;145  &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;return &lt;/span&gt;&lt;span class="s1"&gt;redirectUrl; &lt;br&gt;&lt;a id="l146" name="l146"&gt;&lt;/a&gt;&lt;span class="ln"&gt;146  &lt;/span&gt;        } &lt;br&gt;&lt;a id="l147" name="l147"&gt;&lt;/a&gt;&lt;span class="ln"&gt;147  &lt;/span&gt; &lt;br&gt;&lt;a id="l148" name="l148"&gt;&lt;/a&gt;&lt;span class="ln"&gt;148  &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;public void &lt;/span&gt;&lt;span class="s1"&gt;setRedirectUrl(String redirectUrl) { &lt;br&gt;&lt;a id="l149" name="l149"&gt;&lt;/a&gt;&lt;span class="ln"&gt;149  &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;this&lt;/span&gt;&lt;span class="s1"&gt;.redirectUrl = redirectUrl; &lt;br&gt;&lt;a id="l150" name="l150"&gt;&lt;/a&gt;&lt;span class="ln"&gt;150  &lt;/span&gt;        } &lt;br&gt;&lt;span class="ln"&gt;151  &lt;/span&gt; &lt;br&gt;&lt;a id="l152" name="l152"&gt;&lt;/a&gt;&lt;span class="ln"&gt;152  &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;public int &lt;/span&gt;&lt;span class="s1"&gt;getStatusCode() { &lt;br&gt;&lt;a id="l153" name="l153"&gt;&lt;/a&gt;&lt;span class="ln"&gt;153  &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;return &lt;/span&gt;&lt;span class="s1"&gt;statusCode; &lt;br&gt;&lt;a id="l154" name="l154"&gt;&lt;/a&gt;&lt;span class="ln"&gt;154  &lt;/span&gt;        } &lt;br&gt;&lt;a id="l155" name="l155"&gt;&lt;/a&gt;&lt;span class="ln"&gt;155  &lt;/span&gt; &lt;br&gt;&lt;a id="l156" name="l156"&gt;&lt;/a&gt;&lt;span class="ln"&gt;156  &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;public void &lt;/span&gt;&lt;span class="s1"&gt;setStatusCode(&lt;/span&gt;&lt;span class="s0"&gt;int &lt;/span&gt;&lt;span class="s1"&gt;statusCode) { &lt;br&gt;&lt;a id="l157" name="l157"&gt;&lt;/a&gt;&lt;span class="ln"&gt;157  &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;this&lt;/span&gt;&lt;span class="s1"&gt;.statusCode = statusCode; &lt;br&gt;&lt;a id="l158" name="l158"&gt;&lt;/a&gt;&lt;span class="ln"&gt;158  &lt;/span&gt;        } &lt;br&gt;&lt;a id="l159" name="l159"&gt;&lt;/a&gt;&lt;span class="ln"&gt;159  &lt;/span&gt; &lt;br&gt;&lt;a id="l160" name="l160"&gt;&lt;/a&gt;&lt;span class="ln"&gt;160  &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;public &lt;/span&gt;&lt;span class="s1"&gt;String getStatusPhrase() { &lt;br&gt;&lt;a id="l161" name="l161"&gt;&lt;/a&gt;&lt;span class="ln"&gt;161  &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;return &lt;/span&gt;&lt;span class="s1"&gt;statusPhrase; &lt;br&gt;&lt;a id="l162" name="l162"&gt;&lt;/a&gt;&lt;span class="ln"&gt;162  &lt;/span&gt;        } &lt;br&gt;&lt;a id="l163" name="l163"&gt;&lt;/a&gt;&lt;span class="ln"&gt;163  &lt;/span&gt; &lt;br&gt;&lt;a id="l164" name="l164"&gt;&lt;/a&gt;&lt;span class="ln"&gt;164  &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;public void &lt;/span&gt;&lt;span class="s1"&gt;setStatusPhrase(String statusPhrase) { &lt;br&gt;&lt;a id="l165" name="l165"&gt;&lt;/a&gt;&lt;span class="ln"&gt;165  &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;this&lt;/span&gt;&lt;span class="s1"&gt;.statusPhrase = statusPhrase; &lt;br&gt;&lt;a id="l166" name="l166"&gt;&lt;/a&gt;&lt;span class="ln"&gt;166  &lt;/span&gt;        } &lt;br&gt;&lt;span class="ln"&gt;167  &lt;/span&gt; &lt;br&gt;&lt;a id="l168" name="l168"&gt;&lt;/a&gt;&lt;span class="ln"&gt;168  &lt;/span&gt;        @Override &lt;br&gt;&lt;a id="l169" name="l169"&gt;&lt;/a&gt;&lt;span class="ln"&gt;169  &lt;/span&gt;        &lt;/span&gt;&lt;span class="s0"&gt;public &lt;/span&gt;&lt;span class="s1"&gt;String toString() { &lt;br&gt;&lt;a id="l170" name="l170"&gt;&lt;/a&gt;&lt;span class="ln"&gt;170  &lt;/span&gt;            &lt;/span&gt;&lt;span class="s0"&gt;return &lt;/span&gt;&lt;span class="s4"&gt;&amp;quot;Result{&amp;quot; &lt;/span&gt;&lt;span class="s1"&gt;+ &lt;br&gt;&lt;a id="l171" name="l171"&gt;&lt;/a&gt;&lt;span class="ln"&gt;171  &lt;/span&gt;                    &lt;/span&gt;&lt;span class="s4"&gt;&amp;quot;url=&amp;#39;&amp;quot; &lt;/span&gt;&lt;span class="s1"&gt;+ url + &lt;/span&gt;&lt;span class="s4"&gt;&amp;#39;&lt;/span&gt;&lt;span class="s0"&gt;\&amp;#39;&lt;/span&gt;&lt;span class="s4"&gt;&amp;#39; &lt;/span&gt;&lt;span class="s1"&gt;+ &lt;br&gt;&lt;span class="ln"&gt;172  &lt;/span&gt;                    &lt;/span&gt;&lt;span class="s4"&gt;&amp;quot;, redirectUrl=&amp;#39;&amp;quot; &lt;/span&gt;&lt;span class="s1"&gt;+ redirectUrl + &lt;/span&gt;&lt;span class="s4"&gt;&amp;#39;&lt;/span&gt;&lt;span class="s0"&gt;\&amp;#39;&lt;/span&gt;&lt;span class="s4"&gt;&amp;#39; &lt;/span&gt;&lt;span class="s1"&gt;+ &lt;br&gt;&lt;a id="l173" name="l173"&gt;&lt;/a&gt;&lt;span class="ln"&gt;173  &lt;/span&gt;                    &lt;/span&gt;&lt;span class="s4"&gt;&amp;quot;, statusCode=&amp;quot; &lt;/span&gt;&lt;span class="s1"&gt;+ statusCode + &lt;br&gt;&lt;a id="l174" name="l174"&gt;&lt;/a&gt;&lt;span class="ln"&gt;174  &lt;/span&gt;                    &lt;/span&gt;&lt;span class="s4"&gt;&amp;quot;, statusPhrase=&amp;#39;&amp;quot; &lt;/span&gt;&lt;span class="s1"&gt;+ statusPhrase + &lt;/span&gt;&lt;span class="s4"&gt;&amp;#39;&lt;/span&gt;&lt;span class="s0"&gt;\&amp;#39;&lt;/span&gt;&lt;span class="s4"&gt;&amp;#39; &lt;/span&gt;&lt;span class="s1"&gt;+ &lt;br&gt;&lt;a id="l175" name="l175"&gt;&lt;/a&gt;&lt;span class="ln"&gt;175  &lt;/span&gt;                    &lt;/span&gt;&lt;span class="s4"&gt;&amp;#39;}&amp;#39;&lt;/span&gt;&lt;span class="s1"&gt;; &lt;br&gt;&lt;a id="l176" name="l176"&gt;&lt;/a&gt;&lt;span class="ln"&gt;176  &lt;/span&gt;        } &lt;br&gt;&lt;a id="l177" name="l177"&gt;&lt;/a&gt;&lt;span class="ln"&gt;177  &lt;/span&gt;    } &lt;br&gt;&lt;a id="l178" name="l178"&gt;&lt;/a&gt;&lt;span class="ln"&gt;178  &lt;/span&gt;} &lt;br&gt;&lt;a id="l179" name="l179"&gt;&lt;/a&gt;&lt;span class="ln"&gt;179  &lt;/span&gt;   &lt;/span&gt;&lt;/pre&gt;&lt;br&gt;The above solution can be improved with the following changes.&lt;br&gt;&lt;br&gt;1) Producer and Consumer are in only class; and this can be separated. Run the producer in a separate thread and the consumer part in a separate thread.&lt;br&gt;&lt;br&gt;2) Can leverage &lt;a href="http://gee.cs.oswego.edu/dl/papers/fj.pdf" id="ywlf" title="Fork/Join Framework"&gt;Fork/Join Framework&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;h3&gt;Maven2 Dependencies&lt;/h3&gt;&lt;b&gt;&lt;a href="http://hc.apache.org/" id="e0_b" title="HttpComponents"&gt;HttpComponents&lt;/a&gt;&lt;/b&gt;.&lt;br&gt;&lt;br&gt; &amp;lt;dependency&amp;gt;&lt;br&gt;&lt;div style="margin-left:40px"&gt;&amp;lt;groupId&amp;gt;org.apache.httpcomponents&amp;lt;/groupId&amp;gt;&lt;br&gt; &amp;lt;artifactId&amp;gt;httpclient&amp;lt;/artifactId&amp;gt;&lt;br&gt; &amp;lt;version&amp;gt;4.1-alpha1&amp;lt;/version&amp;gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/dependency&amp;gt;&lt;br&gt;&lt;br&gt;&lt;a href="http://www.box.net/shared/lq9raiasn3" id="l59i" title="URLChecker - Java Concurrent Completion Service"&gt;Download code for URLChecker - Java Concurrent Completion Service&lt;/a&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-8807925842534298337?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/D-s7xaBo7f8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/8807925842534298337/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=8807925842534298337" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/8807925842534298337?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/8807925842534298337?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/D-s7xaBo7f8/concurrent-url-checker-using-completi.html" title="Concurrent URL checker using Completi..." /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2010/02/concurrent-url-checker-using-completi.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUACQns9cSp7ImA9WxNRFEw.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-6627278364500485640</id><published>2009-09-06T18:51:00.001-05:00</published><updated>2009-09-08T08:49:23.569-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-08T08:49:23.569-05:00</app:edited><title>Amazon Product Advertising API</title><content type="html">&lt;h1&gt;&lt;font size="4"&gt;&lt;span style="font-weight: normal;"&gt;Product Advertising API Signed Requests - Java SOAP using Spring Web Services&lt;/span&gt;&lt;/font&gt;&lt;br&gt;&lt;/h1&gt;Product Advertising API - https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html/178-0006257-2456255&lt;br&gt;&lt;br&gt;We are using Amazon Web Services to advertise products on one of my clients websites. We used Springframework as the dependency container and Spring Web Services as web service platform as we Spring-WS favors contract-first web services. With the recent changes in the API all the requests must be signed. And the sample code (&lt;a title="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2479&amp;amp;categoryID=14" href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2479&amp;amp;categoryID=14" id="d:ic"&gt;http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2479&amp;amp;categoryID=14&lt;/a&gt;) helped me as a reference to migrate our code base to support the signed request requirement.&lt;br&gt;&lt;br&gt;In the below sections I will walk through the steps to make signed requests using Spring Web Services. &lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;b&gt;Project Setup:&lt;br&gt;&lt;br&gt;&lt;/b&gt;&lt;/u&gt;We used maven2 as our build &amp;amp; reporting tool we followed the maven project directory structure and is as below:&lt;br&gt;&lt;br&gt;awsprocess&lt;br&gt;└───src&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ├───main&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; ├───java&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; └───com&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; └───ascendant76&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; └───awsdemo&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ├───client&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; └───service&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; ├───resources&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; │&amp;nbsp;&amp;nbsp; └───webapp&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; └───test&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ├───java&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; └───resources&lt;br&gt;&lt;br&gt;The project object model uses few plug-ins:&lt;br&gt;&lt;br&gt;&lt;b&gt;maven-compiler-plugin:&lt;/b&gt; To compile the code that is compatible with J2SE 5.0.&lt;br&gt;&lt;br&gt;&lt;b&gt;maven-surefire-plugin&lt;/b&gt;: To execute the unit test cases. I used &lt;a title="http://testng.org/doc/index.html" target="_blank" href="http://testng.org/doc/index.html" id="qbqe"&gt;TestNG&lt;/a&gt;(&lt;a title="http://testng.org/doc/index.html" target="_blank" href="http://testng.org/doc/index.html" id="i15f"&gt;http://testng.org/doc/index.html&lt;/a&gt;) for the test cases and their by the testng dependency is imported.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;dependency&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;groupId&amp;gt;org.testng&amp;lt;/groupId&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;artifactId&amp;gt;testng&amp;lt;/artifactId&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;classifier&amp;gt;jdk15&amp;lt;/classifier&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;version&amp;gt;5.9&amp;lt;/version&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/dependency&amp;gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;maven-jaxb2-plugin:&lt;/b&gt; Creates JAXB2 binding from XSD. The plug-in scans the xjb files and generates the bindings in our case it AWSECommerceService.xjb in the resources folder.&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;b&gt;AWSECommerceService.xjb:&lt;br&gt;&lt;br&gt;&lt;/b&gt;&lt;/u&gt;&amp;lt;?xml version='1.0' encoding='utf-8' ?&amp;gt;&lt;br&gt;&amp;lt;jxb:bindings version="2.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;xmlns:xs="http://www.w3.org/2001/XMLSchema"&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;jxb:bindings node="/xs:schema"&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;schemaLocation="AWSECommerceService.xsd"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;jxb:globalBindings fixedAttributeAsConstantProperty="false"&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;collectionType="java.util.ArrayList" typesafeEnumBase="xs:NCName"&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;choiceContentProperty="false" typesafeEnumMemberName="generateError"&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;enableFailFastCheck="true" generateIsSetMethod="true"&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;underscoreBinding="asCharInWord"&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;enableJavaNamingConventions="true"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/jxb:globalBindings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;jxb:schemaBindings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;jxb:package name="com.ascendant76.awsdemo.model" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/jxb:schemaBindings&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/jxb:bindings&amp;gt;&lt;br&gt;&amp;lt;/jxb:bindings&amp;gt;&lt;br&gt;&lt;br&gt;The AWSECommerceService.xsd is extracted manually from the web service contract schema from the WSDL located at http://ecs.amazonaws.com/AWSECommerceService/2009-07-01/AWSECommerceService.wsdl &lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;b&gt;Account Setup:&lt;/b&gt;&lt;/u&gt;&lt;br&gt;&lt;br&gt; Login to amazon at &lt;a title="http://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&amp;amp;action=activity-summary" target="_blank" href="http://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&amp;amp;action=activity-summary" id="q7e9"&gt;http://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&amp;amp;action=activity-summary&lt;/a&gt;.&amp;nbsp;  Goto Access Credentials section by following this URL &lt;a title="https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&amp;amp;action=access-key" target="_blank" href="https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&amp;amp;action=access-key" id="qctq"&gt;https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&amp;amp;action=access-key&lt;/a&gt;. This page allows you to create new X.509 certificates. Select the Create option to create your certificates and download them. You will have two files pk-XXXX.pem and cert-XXXX.pem&lt;br&gt;&amp;nbsp; &lt;br&gt;&lt;b&gt;Note: &lt;/b&gt;You can download the private key file (pk-XXXX.pem) at the time of certificate creation only and will not be available later. If you lose it, you have to create a new certificate. So keep it safe.&lt;br&gt;&lt;br&gt; Now we need to convert the certificate into the PCKS12 format. We need &lt;a title="http://www.openssl.org/" target="_blank" href="http://www.openssl.org/" id="egb2"&gt;openssl&lt;/a&gt; (&lt;a title="http://www.openssl.org/" target="_blank" href="http://www.openssl.org" id="d6ne"&gt;http://www.openssl.org&lt;/a&gt;) to create the certificate in pcks12 format.&lt;br&gt;&lt;br&gt;  C:\openssl pkcs12 -export  -in cert-XXXX.pem  -inkey pk-XXXX.pem  -name ramesh_cert  -out ramesh_cert.p12&lt;br&gt;&lt;br&gt; The pkcs12 file will be generated. Execute the following command to verify the generated certificate using the user name.&lt;br&gt;&amp;nbsp;&lt;br&gt; C:\jdk1.6.0_13\bin\keytool -v -list -storetype pkcs12 -keystore ramesh_cert.p12&lt;br&gt;&lt;br&gt;Enter keystore password:&amp;nbsp; ramesh&lt;br&gt;&lt;br&gt;The output appears something like below:&lt;br&gt;&lt;br&gt;Keystore type: pkcs12&lt;br&gt;Keystore provider: SunJSSE&lt;br&gt;&lt;br&gt;Your keystore contains 1 entry&lt;br&gt;&lt;br&gt;Alias name: ramesh_cert&lt;br&gt;Creation date: Aug 28, 2009&lt;br&gt;Entry type: keyEntry&lt;br&gt;Certificate chain length: 1&lt;br&gt;Certificate[1]:&lt;br&gt;Owner: CN=zzp69oziqnw6, OU=AWS-Developers, O=Amazon.com, C=US&lt;br&gt;Issuer: CN=AWS Limited-Assurance CA, OU=AWS, O=Amazon.com, C=US&lt;br&gt;Serial number: d61749a157&lt;br&gt;Valid from: Fri Aug 28 16:49:58 EDT 2009 until: Sat Aug 28 16:49:58 EDT 2010&lt;br&gt;Certificate fingerprints:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MD5:&amp;nbsp; 60:BF:22:AF:51:F8:5A:72:36:8F:E8:69:1D:35:8C:C0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SHA1: D0:D9:5A:60:38:35:98:45:C3:41:CE:1A:8F:76:DC:39:80:3A:02:1B&lt;br&gt;**************************************************************************************&lt;br&gt;&lt;br&gt;&lt;br&gt;Once you verify the certificate generated is okay with the given user&lt;br /&gt;name, copy the certificate generated above - ramesh_cert.p12 - into the&lt;br /&gt;resources directory.&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;b&gt;Codebase:&lt;br&gt;&lt;br&gt;&lt;/b&gt;&lt;/u&gt;The dependency diagram of various collaborators is given below.&lt;br&gt;&lt;br&gt;&lt;img src="http://docs.google.com/File?id=dgwfjptc_107hn6b95cn_b" height="510" width="517"&gt;&lt;br&gt;The AwsGateway is the sub-class of &lt;b&gt;&lt;span style="font-family: Courier New;"&gt;org.springframework.ws.client.core.support.WebServiceGatewaySupport&lt;/span&gt;&lt;/b&gt;&amp;nbsp; is responsible for marshaling the java objects in to SOAP messages and sends to location mentioned in the service binding of the WSDL and in this case https://ecs.amazonaws.com/onca/soap?Service=AWSECommerceService. The WebServiceGatewaySupport delegates the&amp;nbsp; responsibility to the Marshaller to marshal java request objects to SOAP messages and UnMarshaller to marshal the SOAP response&amp;nbsp; back to Java object.&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Working with the request and response xml's using Jaxb2 --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;bean id="marshaller" class="&lt;b&gt;&lt;span style="font-family: Courier New;"&gt;org.springframework.oxm.jaxb.Jaxb2Marshaller&lt;/span&gt;&lt;/b&gt;"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="schema" value="classpath:AWSECommerceService.xsd" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="contextPath" value="com.ascendant76.awsdemo.model" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br&gt;&lt;br&gt;Spring-WS supports two types of messages factories to deal with SOAP messages &lt;b&gt;&lt;font face="Courier New"&gt;org.springframework.ws.soap.axiom.AxiomSoapMessageFactory&lt;/font&gt;&lt;/b&gt; and &lt;font face="Courier New"&gt;&lt;b&gt;org.springframework.ws.soap.saaj.SaajSoapMessageFactory. &lt;/b&gt;&lt;/font&gt;And I choose to use SAAJ (&lt;a title="https://saaj.dev.java.net/nonav/spec-1.3/api/" target="_blank" href="https://saaj.dev.java.net/nonav/spec-1.3/api/" id="ta00"&gt;https://saaj.dev.java.net/nonav/spec-1.3/api/&lt;/a&gt;). &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;!-- SOAP with Attachments API for Java --&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;bean id="messageFactory" class="&lt;b&gt;&lt;span style="font-family: Courier New;"&gt;org.springframework.ws.soap.saaj.SaajSoapMessageFactory&lt;/span&gt;&lt;/b&gt;" /&amp;gt;&lt;br&gt;&lt;br&gt;Now the web service gateway definition looks as below:&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bean id="awsGateway" class="com.ascendant76.awsdemo.service.AwsGateway"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;constructor-arg value="${aws.accessKey}" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="defaultUri"  value="https://ecs.amazonaws.com/onca/soap?Service=AWSECommerceService" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="marshaller" ref="marshaller" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="unmarshaller" ref="marshaller" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="messageFactory" ref="messageFactory" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="interceptors"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;list&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;ref bean="signatureSecurityInterceptor" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/list&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/property&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;As security is an orthogonal concept, spring-ws handles it using interceptors. We use WSS4J for the authentication to produce signed requests. Amazon API rely on Timestamp and Signature.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bean id="signatureSecurityInterceptor"  class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="securementActions" value="&lt;b&gt;Timestamp Signature&lt;/b&gt;" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="timestampPrecisionInMilliseconds" value="true" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="securementSignatureKeyIdentifier" value="DirectReference" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="securementUsername" value="${aws.keystoreUser}" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="securementPassword" value="${aws.keystorePassword}" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="securementSignatureCrypto" ref="cryptoFactoryBean" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="securementCallbackHandler" ref="passwordCallback" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;bean id="cryptoFactoryBean"  class="org.springframework.ws.soap.security.wss4j.support.CryptoFactoryBean"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="cryptoProvider"  value="org.apache.ws.security.components.crypto.Merlin" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="keyStoreLocation" value="classpath:${aws.keystoreUser}.p12" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="keyStorePassword" value="${aws.keystorePassword}" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="keyStoreType" value="pkcs12" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;property name="keyStoreProvider" value="SunJSSE" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;bean id="passwordCallback" class="com.ascendant76.awsdemo.service.PasswordCallback"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;constructor-arg index="0" value="${aws.keystorePassword}" /&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;/bean&amp;gt;&lt;br&gt;&lt;br&gt;To keep all the properties in one place we can use property place holder. The keystore password is being served from properties file:&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;context:property-placeholder location="classpath:app.properties" /&amp;gt;&lt;br&gt;&lt;br&gt;Change the properties files to reflect your credentials&lt;br&gt;&lt;br&gt;# Amazon Associate Access Key&lt;br&gt;aws.accessKey=&amp;lt;&amp;lt;AWS ACCESSKEY comes here&amp;gt;&amp;gt;&lt;br&gt;aws.keystoreUser=&amp;lt;&amp;lt;KEY STORE comes here&amp;gt;&amp;gt;&lt;br&gt;aws.keystorePassword=&amp;lt;&amp;lt;KEY STORE password&amp;gt;&amp;gt;&lt;br&gt;&lt;br&gt;Now at this stage we are ready to invoke the web service. Execute mvn clean test to execute the test cases.&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;b&gt;Download the code&lt;/b&gt;&lt;/u&gt;&lt;br&gt;You can download the code from here: &lt;a title="http://www.box.net/shared/m2vd4oizkm" target="_blank" href="http://www.box.net/shared/m2vd4oizkm" id="bt8t"&gt;Download the Code&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;b&gt;References:&lt;/b&gt;&lt;/u&gt;&lt;br&gt;http://www.openssl.org/docs/apps/pkcs12.html&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-6627278364500485640?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/1ViR2NvAxgI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/6627278364500485640/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=6627278364500485640" title="24 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/6627278364500485640?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/6627278364500485640?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/1ViR2NvAxgI/amazon-product-advertising-api.html" title="Amazon Product Advertising API" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>24</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2009/09/amazon-product-advertising-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEFRn86cCp7ImA9WxNSEk0.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-2698628085807316443</id><published>2009-08-25T07:33:00.000-05:00</published><updated>2009-08-25T07:33:37.118-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-25T07:33:37.118-05:00</app:edited><title>Nandan Nilekani's ideas for India's future</title><content type="html">Interesting video by Nandan Nilekani and his ideas for India's future. The problem domain is mapped to the following categories. &lt;br /&gt;
&lt;br /&gt;
* Ideas that have arrived&lt;br /&gt;
* Ideas in progress&lt;br /&gt;
* Ideas in conflict&lt;br /&gt;
* Ideas in anticipation &lt;br /&gt;
&lt;br /&gt;
What I like in this presentation is the approach based on the above four fundamentals.&lt;br /&gt;
&lt;br /&gt;
&lt;object height="326" width="446"&gt;&lt;param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;param name="bgColor" value="#ffffff"&gt;&lt;/param&gt;&lt;param name="flashvars" value="vu=http://video.ted.com/talks/embed/NandanNilekani_2009-embed_high.flv&amp;amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/NandanNilekani-2009.embed_thumbnail.jpg&amp;amp;vw=432&amp;amp;vh=240&amp;amp;ap=0&amp;amp;ti=545" /&gt;&lt;embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="446" height="326" allowFullScreen="true" flashvars="vu=http://video.ted.com/talks/embed/NandanNilekani_2009-embed_high.flv&amp;amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/NandanNilekani-2009.embed_thumbnail.jpg&amp;amp;vw=432&amp;amp;vh=240&amp;amp;ap=0&amp;amp;ti=545"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-2698628085807316443?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/Njovjllv6h0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/2698628085807316443/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=2698628085807316443" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/2698628085807316443?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/2698628085807316443?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/Njovjllv6h0/nandan-nilekanis-ideas-for-indias.html" title="Nandan Nilekani's ideas for India's future" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2009/08/nandan-nilekanis-ideas-for-indias.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkENQHc7eip7ImA9WxJaFUU.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-5198018443828000022</id><published>2009-08-06T12:44:00.000-05:00</published><updated>2009-08-06T12:44:51.902-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-06T12:44:51.902-05:00</app:edited><title>Don't mess with Java naming convensions - Java Generics</title><content type="html">&lt;div&gt;&lt;span class="430342517-06082009"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;Today I found the following program over the internet. First time when I saw it I thought it won't compile. &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="430342517-06082009"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="430342517-06082009"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt; &lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="430342517-06082009"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;import  java.util.ArrayList;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="430342517-06082009"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;public class ListProvider {&lt;br /&gt;
&amp;nbsp; public static  &lt;arraylist&gt; ArrayList sayHello(ArrayList ar) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return ar;&lt;br /&gt;
&amp;nbsp;  }&lt;br /&gt;
&amp;nbsp; public static void main(String[] args) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  System.out.println(sayHello("I am a list"));&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
}&lt;/arraylist&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="430342517-06082009"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;Now I rewrote the program following java naming conventions.&amp;nbsp; &lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="430342517-06082009"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;span class="430342517-06082009"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;public class  ListProvider {&lt;br /&gt;
&amp;nbsp; public static &lt;t&gt; T sayHello(T ar) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return  ar;&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; public static void main(String[] args) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  System.out.println(sayHello("I am a list"));&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
}&lt;/t&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="430342517-06082009"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="430342517-06082009"&gt;&lt;span style="font-family: Arial; font-size: x-small;"&gt;&lt;arraylist&gt; is a  Generic Type. It is hiding java.util.ArrayList in the first program. Second  program it is bit clean using T as type. &lt;/arraylist&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-5198018443828000022?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/t-cTv7tEqlk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/5198018443828000022/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=5198018443828000022" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/5198018443828000022?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/5198018443828000022?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/t-cTv7tEqlk/dont-mess-with-java-naming-convensions.html" title="Don't mess with Java naming convensions - Java Generics" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2009/08/dont-mess-with-java-naming-convensions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAAQn8_fCp7ImA9WxJVEk8.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-296685078768356662</id><published>2009-06-28T17:22:00.000-05:00</published><updated>2009-06-28T17:22:23.144-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-28T17:22:23.144-05:00</app:edited><title>Interesting Quote</title><content type="html">Re-use before Buy&lt;br /&gt;
Buy before build,&lt;br /&gt;
Build for Re-use&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;
- John Zachman&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-296685078768356662?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/3vJVBIjA_3o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/296685078768356662/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=296685078768356662" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/296685078768356662?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/296685078768356662?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/3vJVBIjA_3o/interesting-quote.html" title="Interesting Quote" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2009/06/interesting-quote.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUECSHY6cCp7ImA9WxJRF0k.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-5725826100863200270</id><published>2009-05-19T09:34:00.002-05:00</published><updated>2009-05-19T09:34:29.818-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-19T09:34:29.818-05:00</app:edited><title>Checking the file association in Windows from Command line</title><content type="html">Checking the file association in Windows:&lt;br /&gt;
&lt;br /&gt;
The "assoc" will let you know the file type associated with the extension&lt;br /&gt;
C:\&amp;gt;assoc .txt&lt;br /&gt;
.txt=txtfile&lt;br /&gt;
&lt;br /&gt;
Now the "ftype" displays or modifies file types used in file extension associations&lt;br /&gt;
C:\&amp;gt;ftype txtfile&lt;br /&gt;
txtfile=%SystemRoot%\system32\NOTEPAD.EXE %1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-5725826100863200270?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/Jjyz1ob4CqU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/5725826100863200270/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=5725826100863200270" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/5725826100863200270?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/5725826100863200270?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/Jjyz1ob4CqU/checking-file-association-in-windows.html" title="Checking the file association in Windows from Command line" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2009/05/checking-file-association-in-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4MR389fSp7ImA9WxFXE0w.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-423569175602724929</id><published>2008-12-22T09:22:00.000-05:00</published><updated>2010-05-19T20:29:46.165-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-19T20:29:46.165-05:00</app:edited><title>12 days of christmas - Indian Version</title><content type="html">I was stumbled to see this video from my boss. A very unusual e-mail I can say. Check this one.&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/owK5tHjL0aE&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/owK5tHjL0aE&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-423569175602724929?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/pp5vMejExBk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/423569175602724929/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=423569175602724929" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/423569175602724929?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/423569175602724929?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/pp5vMejExBk/12-days-of-christmas-indian-version.html" title="12 days of christmas - Indian Version" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/12/12-days-of-christmas-indian-version.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MDRnk7cSp7ImA9WxRXFEg.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-8877645172659481978</id><published>2008-10-19T17:24:00.001-05:00</published><updated>2008-10-19T17:31:17.709-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-19T17:31:17.709-05:00</app:edited><title>When two in Tango ...</title><content type="html">&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/sEle_nV7bxs&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/sEle_nV7bxs&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;
&lt;br /&gt;
When you look in to my eyes...&lt;br /&gt;
.. eye lids stop flittering&lt;br /&gt;
.. heart beats fast&lt;br /&gt;
.. minds freezes the frame of yours in my eye lids&lt;br /&gt;
&lt;br /&gt;
Let us tango together..&lt;br /&gt;
.. the way no one did&lt;br /&gt;
.. the way no one will&lt;br /&gt;
.. let the eyes be in to my eyes&lt;br /&gt;
&lt;br /&gt;
Let us not stop this...&lt;br /&gt;
.. as long as the clock ticks&lt;br /&gt;
.. as long as the earth rotates&lt;br /&gt;
.. as long as we can with stand standing&lt;br /&gt;
&lt;br /&gt;
If you feel it is the last step we make ..&lt;br /&gt;
.. let our eyes lock together&lt;br /&gt;
.. let the warm hug seize the air separting us&lt;br /&gt;
.. let the God feel jealous of us&lt;br /&gt;
&lt;br /&gt;
Let the tago continue ...&lt;br /&gt;
Let the eyes lock one another...&lt;br /&gt;
Let the time ends ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-8877645172659481978?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/-yFOtR6OG0s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/8877645172659481978/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=8877645172659481978" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/8877645172659481978?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/8877645172659481978?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/-yFOtR6OG0s/when-two-in-tango.html" title="When two in Tango ..." /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/10/when-two-in-tango.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIMR34zcSp7ImA9WxRXFEg.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-7138616533572690918</id><published>2008-10-19T16:33:00.002-05:00</published><updated>2008-10-19T16:43:06.089-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-19T16:43:06.089-05:00</app:edited><title>Appropriate English Usage 1</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_0ZpPv1JY5x8/SPuou-i_UcI/AAAAAAAAB5E/vFX3XRzil68/s1600-h/Jim+says,+Thank+you+%21.PNG" imageanchor="1" linkindex="13" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_0ZpPv1JY5x8/SPuou-i_UcI/AAAAAAAAB5E/-cPDs5twdx0/s400-R/Jim+says,+Thank+you+%21.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;When some one acknowledges me by saying "Thank you!",&amp;nbsp; my immediate reply used to be "No problem!". Today I learned that it is &lt;span class="body"&gt;not traditional and sounds less polite.&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-7138616533572690918?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/j3Qq4Kfj5yU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/7138616533572690918/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=7138616533572690918" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/7138616533572690918?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/7138616533572690918?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/j3Qq4Kfj5yU/appropriate-english-usage-1.html" title="Appropriate English Usage 1" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_0ZpPv1JY5x8/SPuou-i_UcI/AAAAAAAAB5E/-cPDs5twdx0/s72-Rc/Jim+says,+Thank+you+%21.PNG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/10/appropriate-english-usage-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4MR388fyp7ImA9WxFXE0w.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-3201978354393119961</id><published>2008-10-14T08:38:00.001-05:00</published><updated>2010-05-19T20:29:46.177-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-19T20:29:46.177-05:00</app:edited><title>Yahoo Query Language (YQL)</title><content type="html">You may be interested of this Yahoo Query Language (&lt;a href="http://developer.yahoo.com/yql/"&gt;YQL&lt;/a&gt;)&amp;nbsp; . This is really intereting as they are not exposing their database tables but enabling their domain model ( structured data) using SQL. Behind the scenes they can map to their tables or what ever it could be.&lt;br /&gt;&lt;br /&gt;Yahoo! makes a lot of structured data available to developers, primarily through its web services. These services require developers to locate the right URLs and documentation to access and query them which can result in a very fragmented experience. The YQL platform provides a single endpoint service that enables developers to query, filter and combine data across Yahoo! and beyond. YQL exposes a SQL-like SELECT syntax that that is both familiar to developers and expressive enough for getting the right data. Through the SHOW and DESC commands we enable developers to discover the available data sources and structure without opening another web browser.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-3201978354393119961?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/fS3HjViLEzs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/3201978354393119961/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=3201978354393119961" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/3201978354393119961?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/3201978354393119961?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/fS3HjViLEzs/yahoo-query-language-yql_14.html" title="Yahoo Query Language (YQL)" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/10/yahoo-query-language-yql_14.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0INRHY9fCp7ImA9WxRQGUQ.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-3729379760295792521</id><published>2008-10-14T08:38:00.000-05:00</published><updated>2008-10-14T08:39:55.864-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-14T08:39:55.864-05:00</app:edited><title>Yahoo Query Language (YQL)</title><content type="html">You may be interested of this Yahoo Query Language (&lt;a href="http://developer.yahoo.com/yql/"&gt;YQL&lt;/a&gt;)&amp;nbsp; . This is really intereting as they are not exposing their database tables but enabling their domain model ( structured data) using SQL. Behind the scenes they can map to their tables or what ever it could be.&lt;br /&gt;
&lt;br /&gt;
Yahoo! makes a lot of structured data available to developers, primarily through its web services. These services require developers to locate the right URLs and documentation to access and query them which can result in a very fragmented experience. The YQL platform provides a single endpoint service that enables developers to query, filter and combine data across Yahoo! and beyond. YQL exposes a SQL-like SELECT syntax that that is both familiar to developers and expressive enough for getting the right data. Through the SHOW and DESC commands we enable developers to discover the available data sources and structure without opening another web browser.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-3729379760295792521?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/m-w6Kxdkzhg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/3729379760295792521/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=3729379760295792521" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/3729379760295792521?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/3729379760295792521?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/m-w6Kxdkzhg/yahoo-query-language-yql.html" title="Yahoo Query Language (YQL)" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/10/yahoo-query-language-yql.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4MR38yeip7ImA9WxFXE0w.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-5263426879229260408</id><published>2008-10-08T05:20:00.001-05:00</published><updated>2010-05-19T20:29:46.192-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-19T20:29:46.192-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Songs" /><title>No One Needs to Know by Shania Twain</title><content type="html">&lt;object width="428" height="380" &gt; &lt;param name="allowScriptAccess" value="always" /&gt; &lt;param name="movie" value="http://player.clevver.com/flash/clvembed.swf?vid=107945" /&gt; &lt;embed src="http://player.clevver.com/flash/clvembed.swf?vid=107945" width="428" height="380" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" &gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-5263426879229260408?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/1U-GwwtxKxk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/5263426879229260408/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=5263426879229260408" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/5263426879229260408?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/5263426879229260408?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/1U-GwwtxKxk/no-one-needs-to-know-by-shania-twain_08.html" title="No One Needs to Know by Shania Twain" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/10/no-one-needs-to-know-by-shania-twain_08.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMDRHk6fyp7ImA9WxRXE0U.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-8907944794914638138</id><published>2008-10-08T05:20:00.000-05:00</published><updated>2008-10-18T22:54:35.717-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-18T22:54:35.717-05:00</app:edited><title>No One Needs to Know by Shania Twain</title><content type="html">&lt;object width="428" height="380" &gt; &lt;param name="allowScriptAccess" value="always" /&gt; &lt;param name="movie" value="http://player.clevver.com/flash/clvembed.swf?vid=107945" /&gt; &lt;embed src="http://player.clevver.com/flash/clvembed.swf?vid=107945" width="428" height="380" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" &gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-8907944794914638138?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/4uvuireHTsY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/8907944794914638138/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=8907944794914638138" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/8907944794914638138?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/8907944794914638138?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/4uvuireHTsY/no-one-needs-to-know-by-shania-twain.html" title="No One Needs to Know by Shania Twain" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/10/no-one-needs-to-know-by-shania-twain.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4MR3w7eip7ImA9WxFXE0w.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-2254090169964366335</id><published>2008-10-07T05:50:00.001-05:00</published><updated>2010-05-19T20:29:46.202-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-19T20:29:46.202-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Songs" /><title>OMG - I Will Kill Her</title><content type="html">&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/25AsfkriHQc&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/25AsfkriHQc&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;Is that Agony or Jealousy?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-2254090169964366335?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/MxdrPGUY1V8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/2254090169964366335/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=2254090169964366335" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/2254090169964366335?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/2254090169964366335?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/MxdrPGUY1V8/omg-i-will-kill-her_07.html" title="OMG - I Will Kill Her" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/10/omg-i-will-kill-her_07.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMDRHk4fyp7ImA9WxRXE0U.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-2400012722473637941</id><published>2008-10-07T05:50:00.000-05:00</published><updated>2008-10-18T22:54:35.737-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-18T22:54:35.737-05:00</app:edited><title>OMG - I Will Kill Her</title><content type="html">&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/25AsfkriHQc&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/25AsfkriHQc&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;Is that Agony or Jealousy?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-2400012722473637941?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/UnHao3-bpjo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/2400012722473637941/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=2400012722473637941" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/2400012722473637941?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/2400012722473637941?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/UnHao3-bpjo/omg-i-will-kill-her.html" title="OMG - I Will Kill Her" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/10/omg-i-will-kill-her.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4MR3w4eip7ImA9WxFXE0w.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-5349473312987285316</id><published>2008-10-07T05:45:00.001-05:00</published><updated>2010-05-19T20:29:46.232-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-19T20:29:46.232-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Songs" /><title>Nice Song</title><content type="html">Bit Girl y though!&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8mOKuHvnpVc&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/8mOKuHvnpVc&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-5349473312987285316?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/lsAH54TDjgw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/5349473312987285316/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=5349473312987285316" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/5349473312987285316?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/5349473312987285316?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/lsAH54TDjgw/nice-song_07.html" title="Nice Song" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/10/nice-song_07.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMDRHk-fSp7ImA9WxRXE0U.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-3986096326635625343</id><published>2008-10-07T05:45:00.000-05:00</published><updated>2008-10-18T22:54:35.755-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-18T22:54:35.755-05:00</app:edited><title>Nice Song</title><content type="html">Bit Girl y though!&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8mOKuHvnpVc&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/8mOKuHvnpVc&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-3986096326635625343?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/tA1y6nAvRtA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/3986096326635625343/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=3986096326635625343" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/3986096326635625343?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/3986096326635625343?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/tA1y6nAvRtA/nice-song.html" title="Nice Song" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/10/nice-song.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4MR3w-eSp7ImA9WxFXE0w.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-5366889296126811861</id><published>2008-09-27T11:20:00.001-05:00</published><updated>2010-05-19T20:29:46.251-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-19T20:29:46.251-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Songs" /><title>LOBO - I'D LOVE YOU TO WANT ME</title><content type="html">&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CQp7JTgEdrs&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/CQp7JTgEdrs&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-5366889296126811861?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/xXyCZIenWCw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/5366889296126811861/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=5366889296126811861" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/5366889296126811861?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/5366889296126811861?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/xXyCZIenWCw/lobo-i-love-you-to-want-me_27.html" title="LOBO - I&amp;#39;D LOVE YOU TO WANT ME" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/09/lobo-i-love-you-to-want-me_27.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMDRHk8eCp7ImA9WxRXE0U.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-2360281670886728388</id><published>2008-09-27T11:20:00.000-05:00</published><updated>2008-10-18T22:54:35.770-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-18T22:54:35.770-05:00</app:edited><title>LOBO - I'D LOVE YOU TO WANT ME</title><content type="html">&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CQp7JTgEdrs&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/CQp7JTgEdrs&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-2360281670886728388?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/Ckr_gWIiXkc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/2360281670886728388/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=2360281670886728388" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/2360281670886728388?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/2360281670886728388?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/Ckr_gWIiXkc/lobo-i-love-you-to-want-me.html" title="LOBO - I&amp;#39;D LOVE YOU TO WANT ME" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/09/lobo-i-love-you-to-want-me.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4MR3w9fCp7ImA9WxFXE0w.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-3632517067773975653</id><published>2008-09-25T14:20:00.001-05:00</published><updated>2010-05-19T20:29:46.264-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-19T20:29:46.264-05:00</app:edited><title>Testing Dog shit - Bull shit</title><content type="html">Officials in an Israeli city are using DNA analysis to track dog owners who allow their pets to foul the streets. &lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_0ZpPv1JY5x8/SNvmUh9RA-I/AAAAAAAABvY/BGVlDFbgtWI/s1600-h/images.jpg" imageanchor="1" style="clear: left; display: inline !important; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_0ZpPv1JY5x8/SNvmUh9RA-I/AAAAAAAABvY/p5d3Ytiw_hI/s400-R/images.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://news.bbc.co.uk/1/hi/world/middle_east/7620575.stm"&gt;Read more here!&lt;/a&gt;&lt;a href="http://news.bbc.co.uk/1/hi/world/middle_east/7620575.stm"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On the other side people are suffering with no food and some got abundant money test the shit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-3632517067773975653?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/kRdfumXNIkI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/3632517067773975653/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=3632517067773975653" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/3632517067773975653?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/3632517067773975653?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/kRdfumXNIkI/testing-dog-shit-bull-shit_25.html" title="Testing Dog shit - Bull shit" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_0ZpPv1JY5x8/SNvmUh9RA-I/AAAAAAAABvY/p5d3Ytiw_hI/s72-Rc/images.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/09/testing-dog-shit-bull-shit_25.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMDRHkzfyp7ImA9WxRXE0U.&quot;"><id>tag:blogger.com,1999:blog-6999217373541258402.post-8031975687827836332</id><published>2008-09-25T14:20:00.000-05:00</published><updated>2008-10-18T22:54:35.787-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-18T22:54:35.787-05:00</app:edited><title>Testing Dog shit - Bull shit</title><content type="html">Officials in an Israeli city are using DNA analysis to track dog owners who allow their pets to foul the streets. &lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_0ZpPv1JY5x8/SNvmUh9RA-I/AAAAAAAABvY/BGVlDFbgtWI/s1600-h/images.jpg" imageanchor="1" style="clear: left; display: inline !important; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_0ZpPv1JY5x8/SNvmUh9RA-I/AAAAAAAABvY/p5d3Ytiw_hI/s400-R/images.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://news.bbc.co.uk/1/hi/world/middle_east/7620575.stm"&gt;Read more here!&lt;/a&gt;&lt;a href="http://news.bbc.co.uk/1/hi/world/middle_east/7620575.stm"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On the other side people are suffering with no food and some got abundant money test the shit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6999217373541258402-8031975687827836332?l=ascendant76.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ascendant76/~4/HajzPRJKLLI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://ascendant76.blogspot.com/feeds/8031975687827836332/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=6999217373541258402&amp;postID=8031975687827836332" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/8031975687827836332?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6999217373541258402/posts/default/8031975687827836332?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ascendant76/~3/HajzPRJKLLI/testing-dog-shit-bull-shit.html" title="Testing Dog shit - Bull shit" /><author><name>Ramesh Mandaleeka</name><uri>http://www.blogger.com/profile/07716715053929751798</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_0ZpPv1JY5x8/SNvmUh9RA-I/AAAAAAAABvY/p5d3Ytiw_hI/s72-Rc/images.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://ascendant76.blogspot.com/2008/09/testing-dog-shit-bull-shit.html</feedburner:origLink></entry></feed>

