<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-811026757586872756</id><updated>2012-02-16T08:05:56.575-08:00</updated><title type='text'>Welcome to blog of Ramesh Baral</title><subtitle type='html'>-----------Blog of Ramesh Raj Baral--------</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>34</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-4980131475802966818</id><published>2012-01-17T01:32:00.000-08:00</published><updated>2012-01-17T01:32:00.280-08:00</updated><title type='text'>JavaScript Stock Charts and other Charts</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;h1 style="margin: 0 0 5px 0; padding: 0 0 0 0;"&gt;&lt;/h1&gt;It's  a set of JavaScript/HTML5 charts for most of your needs. Our package  includes serial (column, bar, line, area, step line, smoothed line,  candlestick and ohlc graphs), pie/donut, radar/polar and  xy/scatter/bubble charts.&lt;br /&gt;&lt;br /&gt;For details,please have a look at: &lt;a href="http://www.amcharts.com/"&gt;http://www.amcharts.com/&lt;/a&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-4980131475802966818?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/4980131475802966818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2012/01/javascript-stock-charts-and-other.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/4980131475802966818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/4980131475802966818'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2012/01/javascript-stock-charts-and-other.html' title='JavaScript Stock Charts and other Charts'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-2299972734426398337</id><published>2012-01-16T01:29:00.000-08:00</published><updated>2012-01-16T01:30:17.832-08:00</updated><title type='text'>Oracle Coherence: Providing Extreme Performance, Predictable Scalability, and Continuous Availability for Mission-Critical Java Applications</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Garamond&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;Organizations can gain significant advantage by managing and exploiting their&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;  &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Garamond&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;information systems more effectively than their competitors. But with today’s tight&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;  &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Garamond&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;budget constraints and technology limitations, many miss the opportunity—&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;  &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Garamond&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;sometimes with disastrous results. This white paper addresses how you can gain a&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;  &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;b&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-family: &amp;quot;Garamond&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;measurable competitive edge without compromise—today.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;For further details have a look at the valuable doc:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.docstoc.com/Docs/DownloadFile.ashx?docId=110978612"&gt;http://www.docstoc.com/Docs/DownloadFile.ashx?docId=110978612&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-2299972734426398337?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/2299972734426398337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2012/01/oracle-coherence-providing-extreme.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/2299972734426398337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/2299972734426398337'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2012/01/oracle-coherence-providing-extreme.html' title='Oracle Coherence: Providing Extreme Performance, Predictable Scalability, and Continuous Availability for Mission-Critical Java Applications'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-8272054368218919322</id><published>2012-01-16T00:49:00.000-08:00</published><updated>2012-01-16T00:49:39.898-08:00</updated><title type='text'>Using Struts2.0 and Spring 3.0 together</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:WordDocument&gt;   &lt;w:View&gt;Normal&lt;/w:View&gt;   &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:TrackMoves/&gt;   &lt;w:TrackFormatting/&gt;   &lt;w:PunctuationKerning/&gt;   &lt;w:ValidateAgainstSchemas/&gt;   &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:DoNotPromoteQF/&gt;   &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:LidThemeComplexScript&gt;NE&lt;/w:LidThemeComplexScript&gt;   &lt;w:Compatibility&gt;    &lt;w:BreakWrappedTables/&gt;    &lt;w:SnapToGridInCell/&gt;    &lt;w:WrapTextWithPunct/&gt;    &lt;w:UseAsianBreakRules/&gt;    &lt;w:DontGrowAutofit/&gt;    &lt;w:SplitPgBreakAndParaMark/&gt;    &lt;w:DontVertAlignCellWithSp/&gt;    &lt;w:DontBreakConstrainedForcedTables/&gt;    &lt;w:DontVertAlignInTxbx/&gt;    &lt;w:Word11KerningPairs/&gt;    &lt;w:CachedColBalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathPr&gt;    &lt;m:mathFont m:val="Cambria Math"/&gt;    &lt;m:brkBin m:val="before"/&gt;    &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;    &lt;m:smallFrac m:val="off"/&gt;    &lt;m:dispDef/&gt;    &lt;m:lMargin m:val="0"/&gt;    &lt;m:rMargin m:val="0"/&gt;    &lt;m:defJc m:val="centerGroup"/&gt;    &lt;m:wrapIndent m:val="1440"/&gt;    &lt;m:intLim m:val="subSup"/&gt;    &lt;m:naryLim m:val="undOvr"/&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"  DefSemiHidden="true" DefQFormat="false" DefPriority="99"  LatentStyleCount="267"&gt;   &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;   &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;   &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;   &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;   &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;   &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;   &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;   &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;   &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;   &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"   UnhideWhenUsed="false" Name="Table Grid"/&gt;   &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;   &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;   &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;   &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;   &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;   &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;   &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;   &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;   &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;   &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;   &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;   &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt; /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:11.0pt; mso-bidi-font-size:10.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Mangal; mso-bidi-theme-font:minor-bidi;}&lt;/style&gt; &lt;![endif]--&gt;  &lt;div class="MsoNormal"&gt;This article illustrates how can we use the combination of Struts2.0 and Spring3.0. The combination might be required when you need the strength of Spring like dependency injection and jdbc support to be used with in the Struts 2.0 application.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Now lets start with the core files required:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;The core file is the deployment descriptor which should be something like this:&lt;/div&gt;&lt;br /&gt;******************************************************web.xml*******************************&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;display-name&amp;gt;Struts Blank&amp;lt;/display-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;filter&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;filter-name&amp;gt;struts2&amp;lt;/filter-name&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;filter-class&amp;gt;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- &amp;lt;filter-class&amp;gt;org.apache.struts2.dispatcher.FilterDispatcher&amp;lt;/filter-class&amp;gt; --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/filter&amp;gt;&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;lt;filter-mapping&amp;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; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;filter-name&amp;gt;struts2&amp;lt;/filter-name&amp;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;&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;lt;url-pattern&amp;gt;/*&amp;lt;/url-pattern&amp;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;&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;lt;/filter-mapping&amp;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;&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;listener&amp;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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;listener-class&amp;gt;org.springframework.web.context.ContextLoaderListener&amp;lt;/listener-class&amp;gt; &lt;br /&gt;&amp;lt;/listener&amp;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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;!-- Context Configuration locations for Spring XML files --&amp;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; &lt;br /&gt;&amp;lt;context-param&amp;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;&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;&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;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param-value&amp;gt;/WEB-INF/applicationContext*.xml,classpath*:applicationContext-*.xml&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/context-param&amp;gt;&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;lt;welcome-file-list&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;welcome-file&amp;gt;index.jsp&amp;lt;/welcome-file&amp;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; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;welcome-file&amp;gt;index.html&amp;lt;/welcome-file&amp;gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/welcome-file-list&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;lt;/web-app&amp;gt; &lt;br /&gt;******************************************************&lt;br /&gt;For dependency injection,applicationcontext.xml is defined as mentioned below:&lt;br /&gt;***************************************************applicationcontext.xml******************************&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"&amp;gt;&lt;br /&gt;&amp;lt;beans&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bean id="showDashBoard" class="com.d2.oam.report.impl.util.ShowDashBoard"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bean id="reportDAO" class="com.d2.oam.report.impl.dao.ReportDAO"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="dataSource" ref="dataSource" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bean id="reportController" class="com.d2.oam.report.impl.controller.ReportController"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="reportDAO" ref="reportDAO"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bean id="reportService" class="com.d2.oam.report.impl.service.ReportService"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="reportController" ref="reportController"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;bean id="generateReports" class="com.d2.oam.report.impl.service.ReportService"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="reportController" ref="reportController"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean name="reportCreator" class="org.springframework.scheduling.quartz.JobDetailBean"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="jobClass" value="com.d2.oam.report.impl.util.SchedularJob" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="jobDataAsMap"&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;map&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;nbsp; &amp;lt;entry key="reportService"&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;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ref bean="reportService" /&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;/entry&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;/map&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!--to define the datasource to be used, the properties of database details is defined in another file jdbc.properties--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; destroy-method="close" autowire="default"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="driverClassName" value="${jdbc.driverClassName}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="url" value="${jdbc.url}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="username" value="${jdbc.username}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="password" value="${jdbc.password}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="initialSize" value="${jdbc.initialSize}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="maxActive" value="${jdbc.maxActive}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="maxIdle" value="${jdbc.maxIdle}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="minIdle" value="${jdbc.minIdle}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="maxWait" value="${jdbc.maxWait}" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;lt;bean id="propertyConfigurer"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="locations"&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;value&amp;gt;classpath:/com/d2/oam/report/resource/jdbc.properties&amp;lt;/value&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;value&amp;gt;classpath:/com/d2/oam/report/resource/cronjob.properties&amp;lt;/value&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;&amp;nbsp;&amp;lt;!-- cron trigger to schedule desired operations --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;bean id="cronTrigger" class="com.d2.oam.report.impl.util.CronTriggerUtil"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;property name="jobDetail" ref="reportCreator"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;property name="cronSec" value="${cron.sec}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;property name="cronMin" value="${cron.min}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;property name="cronHour" value="${cron.hour}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;property name="cronDayOfMonth" value="${cron.dayofmonth}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;property name="cronMonth" value="${cron.month}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;property name="cronDayOfWeek" value="${cron.dayofweek}"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;property name="cronExpression" value="${cron.expression}"/&amp;gt; &lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;lt;bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;property name="triggers"&amp;gt;&lt;br /&gt;&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;lt;ref bean="cronTrigger"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/list&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&amp;lt;/beans&amp;gt;&lt;br /&gt;*******************************************************************&lt;br /&gt;jdbc.properties--to provide configuration related to database connectivity&lt;br /&gt;***************************jdbc.properties***************************************&lt;br /&gt;jdbc.driverClassName=oracle.jdbc.driver.OracleDriver&lt;br /&gt;jdbc.url=jdbc\:oracle\:thin\:@(DESCRIPTION\=(ADDRESS_LIST\=(LOAD_BALANCE\=ON)(ADDRESS\=(PROTOCOL\=TCP)(HOST\=$hostName)(PORT\=1521)))(CONNECT_DATA\=(SERVICE_NAME\=orcl)))&lt;br /&gt;jdbc.username=dbusername&lt;br /&gt;jdbc.password=dbuserpassword&lt;br /&gt;jdbc.initialSize=10&lt;br /&gt;jdbc.maxActive=60&lt;br /&gt;jdbc.maxIdle=10&lt;br /&gt;jdbc.minIdle=2&lt;br /&gt;jdbc.timeBetweenEvictionRunsMillis=300000&lt;br /&gt;jdbc.minEvictableIdleTimeMillis=600000&lt;br /&gt;jdbc.maxWait=300000&lt;br /&gt;&amp;lt;!--wait indefinitely--&amp;gt;&lt;br /&gt;**********************************************************************************&lt;br /&gt;cronjob.properties--to provide configuration for scheduling events&lt;br /&gt;******************************cronjob.properties****************************************************&lt;br /&gt;cron.sec= 0&lt;br /&gt;cron.min= 0&lt;br /&gt;cron.hour= 0&lt;br /&gt;cron.dayofmonth= *&lt;br /&gt;cron.month= *&lt;br /&gt;cron.dayofweek= ?&lt;br /&gt;cron.year= *&lt;br /&gt;cron.expression=10,30,50 * * * * ? &lt;br /&gt;*****************************************************************************************************&lt;br /&gt;The following file is for message bundle&lt;br /&gt;*******************************************package.properties*****************************************************&lt;br /&gt;message.welcome=Welcome to ...Application&lt;br /&gt;message.appstatus= Application is up and running ...&lt;br /&gt;requiredstring = ${getText(fieldName)} is required.&lt;br /&gt;password = Password&lt;br /&gt;username = User Name&lt;br /&gt;message.Missing=&amp;nbsp; This feature is under construction. Please try again in the next interation.&lt;br /&gt;*****************************************************************************************************&lt;br /&gt;The following file is one of the core file of struts2 framework.It defines the details of the actions.&lt;br /&gt;********************************struts.xml**********************************&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE struts PUBLIC&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "http://struts.apache.org/dtds/struts-2.0.dtd"&amp;gt;&lt;br /&gt;&amp;lt;struts&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- &amp;lt;constant name="struts.enable.DynamicMethodInvocation" value="false" /&amp;gt; --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;constant name="struts.custom.i18n.resources" value="com/d2/oam/report/resource/package" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;constant name="struts.action.extension" value="action"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;package name="default" extends="struts-default"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;default-action-ref name="pmdashboard" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;global-results&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;result name="error"&amp;gt;/error.jsp&amp;lt;/result&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/global-results&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;global-exception-mappings&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;exception-mapping exception="java.lang.Exception" result="error"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/global-exception-mappings&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;action name="pmdashboard"&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;result&amp;gt;/pages/DashBoard.jsp&amp;lt;/result&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/action&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/package&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;include file="actions.xml"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;!-- Add packages here --&amp;gt;&lt;br /&gt;&amp;lt;/struts&amp;gt;&lt;br /&gt;**********************************************************************************&lt;br /&gt;**********************************struts.properties****************************&lt;br /&gt;struts.objectFactory = spring&lt;br /&gt;struts.devMode = true&lt;br /&gt;struts.enable.DynamicMethodInvocation = false&lt;br /&gt;*****************************************************************************&lt;br /&gt;***************************************&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; index.jsp- a file that is loaded in first and redirects to desirrd action&lt;br /&gt;*********************index.jsp******************&lt;br /&gt;&amp;lt;% response.sendRedirect("pmdashboard.action"); %&amp;gt;&lt;br /&gt;************************************************&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The pmdashboard.action entry in this is looked for in the struts.xml(and any such xmls specified in struts.xml file itself).Here, it resembles something like this from struts.xml:&lt;br /&gt;&amp;lt;package name="default" extends="struts-default"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;default-action-ref name="pmdashboard" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;global-results&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;result name="error"&amp;gt;/error.jsp&amp;lt;/result&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/global-results&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;global-exception-mappings&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;exception-mapping exception="java.lang.Exception" result="error"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/global-exception-mappings&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;action name="pmdashboard"&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;result&amp;gt;/pages/DashBoard.jsp&amp;lt;/result&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/action&amp;gt;&lt;br /&gt;&amp;lt;/package&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So the redirection is made into Dashboard.jsp page.&lt;br /&gt;This page can be any simple jsp page,from where you can provide link to particular actions. The link can be something like this:&lt;br /&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;s:url id="url" action="generateReports"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;s:a href="%{url}"&amp;gt;Generate All Report&amp;lt;/s:a&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; where&amp;lt;s&amp;gt;&amp;lt;/s&amp;gt; is the struts core tag.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Now see the generateReports action in struts.xml(and actions.xml) file.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; We see in actions.xml the entry&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;action name="generateReports" class="reportService" method="generateAllReports"&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;lt;result name="success" type="redirect"&amp;gt;/pages/Graphs.jsp&amp;lt;/result&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/action&amp;gt;&lt;br /&gt;&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; Digging out gradually we get the control goes to the reportService bean, which is ReportService.java(as specified in applicationContext.xml).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; The method generateallReports(..) of ReportServices.java is invoked, which simply has the following:&lt;br /&gt;&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; public String generateAllReports(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return reportController.generateAllReports();&lt;br /&gt;&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; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; The retrun typ string indicates that we are returning control from here and determine the result page accordingly.(If success is returned then the redirection is made to the page /pages/Graphs.jsp).&lt;br /&gt;&lt;br /&gt;The ReportController.java is simply a java class that extends ActionSupport(from Struts 2.0). By extending this class, we get access to the method with signature as shown below:&lt;br /&gt;&lt;br /&gt;public String execute() throws Exception{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return "";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; This is the default method to be called, but the method to be invoked can be changed on our own need basis. I have invoked the method generateAllReports(but via ReportService.java). The generateAllReports method in ReportController.java has following format:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String generateAllReports(){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //your logic&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return SUCCESS;//or any other string&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;The jars required for Struts can be found in http://struts.apache.org/&lt;br /&gt;and the jar named struts2-spring-plugin-2.2.3.1.jar is required for the combination to work.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;So the above example shows how to use Struts2.0 and Spring3.0 uniting their strengths to make a robust system.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-8272054368218919322?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/8272054368218919322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2012/01/using-struts20-and-spring-30-together.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/8272054368218919322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/8272054368218919322'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2012/01/using-struts20-and-spring-30-together.html' title='Using Struts2.0 and Spring 3.0 together'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-1793586028825275878</id><published>2011-12-29T03:42:00.001-08:00</published><updated>2012-01-06T03:56:23.765-08:00</updated><title type='text'>Reading the spreadsheet in Google Docs</title><content type='html'>import java.io.IOException;&lt;br /&gt;import java.net.MalformedURLException;&lt;br /&gt;import java.net.URL;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import com.google.gdata.client.docs.DocsService;&lt;br /&gt;import com.google.gdata.client.spreadsheet.SpreadsheetService;&lt;br /&gt;import com.google.gdata.data.Link;&lt;br /&gt;import com.google.gdata.data.docs.DocumentListEntry;&lt;br /&gt;import com.google.gdata.data.docs.DocumentListFeed;&lt;br /&gt;import com.google.gdata.data.spreadsheet.CellEntry;&lt;br /&gt;import com.google.gdata.data.spreadsheet.CellFeed;&lt;br /&gt;import com.google.gdata.data.spreadsheet.SpreadsheetEntry;&lt;br /&gt;import com.google.gdata.data.spreadsheet.SpreadsheetFeed;&lt;br /&gt;import com.google.gdata.data.spreadsheet.WorksheetEntry;&lt;br /&gt;import com.google.gdata.util.AuthenticationException;&lt;br /&gt;import com.google.gdata.util.ServiceException;&lt;br /&gt;&lt;br /&gt;public class ReadSpreadSheet {&lt;br /&gt;&lt;br /&gt;public static void main(String args[]){&lt;br /&gt;SpreadsheetService client=new SpreadsheetService("yourCo-yourAppName-v1");&lt;br /&gt;String username="...@gmail.com";&lt;br /&gt;String password="***";&lt;br /&gt;client.setAuthSubToken("token");&lt;br /&gt;try {&lt;br /&gt;client.setUserCredentials(username, password);&lt;br /&gt;} catch (AuthenticationException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;System.out.println("***authenticated");&lt;br /&gt;SpreadsheetFeed spreadSheetFeed=null;&lt;br /&gt;try {&lt;br /&gt;URL docsURI = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full");//("https://docs.google.com/feeds/default/private/full");&lt;br /&gt;spreadSheetFeed=client.getFeed(docsURI, SpreadsheetFeed.class);&lt;br /&gt;System.out.println("***no of spreadsheets:"+spreadSheetFeed.getEntries().size());&lt;br /&gt;for(SpreadsheetEntry spreadSheetEntry:spreadSheetFeed.getEntries()){&lt;br /&gt;if(spreadSheetEntry.getTitle().getPlainText().equalsIgnoreCase("testspreadsheet")){&lt;br /&gt;System.out.println("***spreadsheetname:"+spreadSheetEntry.getTitle().getPlainText());&lt;br /&gt;List&lt;worksheetentry&gt; worksheets = spreadSheetEntry.getWorksheets();&lt;br /&gt;for(WorksheetEntry workSheetEntry:worksheets){//for each sheet&lt;br /&gt;System.out.println(workSheetEntry.getRowCount());&lt;br /&gt;/*********cell based query**********/&lt;br /&gt;URL cellFeedUrl = workSheetEntry.getCellFeedUrl();&lt;br /&gt;CellFeed feed = client.getFeed(cellFeedUrl, CellFeed.class);&lt;br /&gt;for (CellEntry cell : feed.getEntries()) {&lt;br /&gt;//System.out.println(workSheetEntry.getTitle().getPlainText());&lt;br /&gt;String shortId = cell.getId().substring(cell.getId().lastIndexOf('/') + 1);&lt;br /&gt;System.out.println("shortid-value pair:"+shortId + "/ row:"+cell.getCell().getRow()+",col:"+cell.getCell().getCol()+"..value:" + cell.getCell().getValue());&lt;br /&gt;}&lt;br /&gt;/*********cell based query**********/&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}catch (MalformedURLException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}catch (IOException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}catch (ServiceException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;System.out.println("***completed");&lt;br /&gt;}&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-1793586028825275878?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/1793586028825275878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2011/12/reading-spreadsheet-in-google-docs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/1793586028825275878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/1793586028825275878'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2011/12/reading-spreadsheet-in-google-docs.html' title='Reading the spreadsheet in Google Docs'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-3515667695122376476</id><published>2011-12-06T21:27:00.000-08:00</published><updated>2011-12-06T21:27:38.728-08:00</updated><title type='text'>Java Read/Write CSV File</title><content type='html'>This time a simple script to read CSV file and print its output.&lt;br /&gt;&lt;br /&gt;The csv file has following fields and values:&lt;br /&gt;___________________________&lt;br /&gt;id name address&lt;br /&gt;___________________________&lt;br /&gt;1 ram kamalpokhari&lt;br /&gt;2 hari kalanki&lt;br /&gt;3 mahesh sundhara&lt;br /&gt;4 gopal koteshwor&lt;br /&gt;&lt;br /&gt;The java file is :&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.FileNotFoundException;&lt;br /&gt;import java.io.FileReader;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.util.StringTokenizer;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class ReadCSV {&lt;br /&gt;&lt;br /&gt; public static void main(String args[]) throws IOException{&lt;br /&gt;  File file = new File("D:\\csvsample.csv");&lt;br /&gt;  String[][] numbers=new String[5][4]; &lt;br /&gt;  BufferedReader bufRdr  = new BufferedReader(new FileReader(file));&lt;br /&gt;  String line = null;&lt;br /&gt;  int row = 0;&lt;br /&gt;  int col = 0;&lt;br /&gt;   &lt;br /&gt;  //read each line of text file&lt;br /&gt;  while((line = bufRdr.readLine()) != null)&lt;br /&gt;  {&lt;br /&gt;   StringTokenizer st = new StringTokenizer(line,",");&lt;br /&gt;   while (st.hasMoreTokens())&lt;br /&gt;   {&lt;br /&gt;    //get next token and store it in the array&lt;br /&gt;    String token=st.nextToken();&lt;br /&gt;    if(token!=null){&lt;br /&gt;     numbers[row][col] =token; &lt;br /&gt;      col++; &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;   }&lt;br /&gt;   col=0;&lt;br /&gt;   row++;&lt;br /&gt;  }&lt;br /&gt;  //close the file&lt;br /&gt;  bufRdr.close();&lt;br /&gt;  for(int i=0;i&lt;5;i++){   for(int j=0;j&lt;3;j++)    System.out.println("***element "+numbers[i][j]);  }   }    }&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The input csv file should be something like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-OKxZ09OuyyU/Tt74eiyL8bI/AAAAAAAAAK0/tLGfEUOH4lo/s1600/csvinput.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="300" width="320" src="http://2.bp.blogspot.com/-OKxZ09OuyyU/Tt74eiyL8bI/AAAAAAAAAK0/tLGfEUOH4lo/s320/csvinput.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Similarly this script writes the output to CSV file:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;public class WriteToCSV {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) throws IOException {&lt;br /&gt;        FileWriter fw = new FileWriter("D:\\WriteTest.csv");&lt;br /&gt;        PrintWriter pw = new PrintWriter(fw);&lt;br /&gt;        //Write to file for the first row&lt;br /&gt;        pw.print("First Row first Entry");&lt;br /&gt;        pw.print(",");&lt;br /&gt;        pw.print("First Row Second Entry");&lt;br /&gt;        pw.print(",");&lt;br /&gt;        pw.println("First Row Third Entry");//note the new line print statement&lt;br /&gt;       &lt;br /&gt;        //Write to file for the second row&lt;br /&gt;        pw.print("Second Row first Entry");&lt;br /&gt;        pw.print(",");&lt;br /&gt;        pw.print("Second Row second Entry");&lt;br /&gt;        pw.print(",");&lt;br /&gt;        pw.print("Second Row third Entry");&lt;br /&gt;       &lt;br /&gt;        //Flush the output to the file&lt;br /&gt;        pw.flush();&lt;br /&gt;       &lt;br /&gt;        //Close the Print Writer&lt;br /&gt;        pw.close();&lt;br /&gt;       &lt;br /&gt;        //Close the File Writer&lt;br /&gt;        fw.close();       &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;the outuput to the csv looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-EtNBMeo7rn8/Tt74QZ4nlrI/AAAAAAAAAKo/R5cKPAw--zk/s1600/csvoutput.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="219" width="320" src="http://1.bp.blogspot.com/-EtNBMeo7rn8/Tt74QZ4nlrI/AAAAAAAAAKo/R5cKPAw--zk/s320/csvoutput.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Thanks.&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-3515667695122376476?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/3515667695122376476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2011/12/java-readwrite-csv-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/3515667695122376476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/3515667695122376476'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2011/12/java-readwrite-csv-file.html' title='Java Read/Write CSV File'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-OKxZ09OuyyU/Tt74eiyL8bI/AAAAAAAAAK0/tLGfEUOH4lo/s72-c/csvinput.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-1408262443490749853</id><published>2011-05-30T23:35:00.000-07:00</published><updated>2011-05-30T23:35:31.965-07:00</updated><title type='text'>Rewriting SendRedirect to deal with SSL (or https) offloading</title><content type='html'>&lt;b&gt;Rewriting SendRedirect to deal with SSL (or https) offloading&lt;/b&gt;&lt;br /&gt;Keywords&lt;br /&gt;&lt;i&gt;CSS&lt;br /&gt;SSL offloader&lt;br /&gt;sendRedirect problem&lt;br /&gt;https becomes http&lt;br /&gt;servlet filter&lt;br /&gt;HttpServletResponseWrapper&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Problem&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;When "sendRedirect" is used, some times the relative url is being translated into an absolute url using wrong scheme (http vs https). This articles explores the problem and a possible solution using servlet filters.&lt;br /&gt;History&lt;br /&gt;&lt;br /&gt;The call "sendRedirect" on an "HttpServletRequest" has had a history of being iffy and very dependent on the servlet container. About 4 to 5 years ago I have seen an issue where an incoming https when redirected using "sendredirect" will become an "http". The possible variations on a sendredirect forced me to abstract out the sendredirect into a pluggable interface with three implementations.&lt;br /&gt;&lt;br /&gt;ClientsideRedirect&lt;br /&gt;SendRedirect&lt;br /&gt;ServersideRedirect&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ClientsideRedirect&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In this strategy the target url and the parameters are sent to the browser in a response. The response includes a javasript that will take the url and redirects the browser using document.location. It also removes the current url from the browser history so that the back button will work.&lt;br /&gt;&lt;b&gt;SendRedirect&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Some times I call this a "defaultredirect" essentially preserving the "sendredirect" functionality where the browser is told to redirect using a redirect header.&lt;br /&gt;&lt;b&gt;ServersideRedirect&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This strategy uses a "forward" of the servlet api there by including the response as part of the original url. Although this assures the fastest response time, has the draw back of repeating a "state" change on the server if a user were to refresh the page.&lt;br /&gt;Why does "https" become "http" on a sendredirect?&lt;br /&gt;&lt;br /&gt;Although a browser may be thinking that it is talking with its target server, there may be a number of servers enroute to the target servers doing such things as load balancing, encrypting, decrypting, etc. Usually this is not a problem. But there is case in which something called an "ssl offloader" is introduced into the pipeline of servers. These guys decode the "https" data and send the decoded data as "http" to the target server. At this point the target server thinks that the data is coming on an "http". Any sendredirect issued inside the server, especially relative urls, will be tagged with the protocol and the web server address. In this case the protocol will become "http".&lt;br /&gt;&lt;br /&gt;Some web servers seem to deal with well, by recognizing that there is an offloader in the pipeline. This is typically done in association with the offloader where the offloader could be introducing an http header indicating that ssl offloading took place for a certain request.&lt;br /&gt;&lt;br /&gt;Here is a symptom of this problem&lt;br /&gt;&lt;br /&gt;first url from the browser&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;https://host:port/webapp/dir/page1.jsp&lt;br /&gt;&lt;br /&gt;url by the time it reached the server&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://host:port/webapp/dir/page1.jsp&lt;br /&gt;&lt;br /&gt;servelet redirects it to using sendredirect&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/webapp/dir/page2.jsp&lt;br /&gt;&lt;br /&gt;server sends a redirect to the browser by translating this to an absolute url&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://host:port/webapp/dir/page2.jsp&lt;br /&gt;&lt;br /&gt;Notice how the "https" has become "http" in translating the relative url to an absolute url. This is because the webserver wrongly concluded that the incoming protocol is http.&lt;br /&gt;How to fix the problem using webserver&lt;br /&gt;&lt;br /&gt;if you are lucky and have enough time before production you can pursue with the vendor to see if they have fix for this in their web server.&lt;br /&gt;Writing a sendredirect filter&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Thanks to the servelet filtering architecture&lt;/b&gt;, it is surprisingly simple to fix it using a servelet filter. A servlet filter allows you to intercept all urls into a servlet container and alter the response related properties. The following code shows how easy it is to change the behavior of "sendredirect" for the whole web application while keeping its fundamental behavior intact.&lt;br /&gt;Writing a basic filter&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class AbsoluteSendRedirectFilter implements Filter &lt;br /&gt;{&lt;br /&gt;   public void init(FilterConfig filterConfig) &lt;br /&gt;   throws ServletException&lt;br /&gt;   {&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public void destroy()&lt;br /&gt;   {   &lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public void doFilter(ServletRequest request&lt;br /&gt;               , ServletResponse response&lt;br /&gt;               , FilterChain chain)&lt;br /&gt;   throws IOException, ServletException&lt;br /&gt;   {&lt;br /&gt;      //continue the request&lt;br /&gt;      chain.doFilter(request,response);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Registering a filter&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;filter&gt;&lt;br /&gt;   &lt;filter-name&gt;AbsoluteSendRedirectFilter&lt;/filter-name&gt;&lt;br /&gt;   &lt;display-name&gt;AbsoluteSendRedirectFilter&lt;/display-name&gt;&lt;br /&gt;   &lt;description&gt;filter for transferring relative to absolute urls&lt;/description&gt;&lt;br /&gt;   &lt;filter-class&gt;AbsoluteSendRedirectFilter&lt;/filter-class&gt;&lt;br /&gt;   &lt;init-param&gt;&lt;br /&gt;      &lt;param-name&gt;parm1&lt;/param-name&gt;      &lt;param-value&gt;parm1value&lt;/param-value&gt;      &lt;description&gt;description&lt;/description&gt;&lt;br /&gt;   &lt;/init-param&gt;&lt;br /&gt;&lt;/filter&gt;&lt;br /&gt;&lt;br /&gt;&lt;filter-mapping&gt;&lt;br /&gt;   &lt;filter-name&gt;AbsoluteSendRedirectFilter&lt;/filter-name&gt;&lt;br /&gt;   &lt;url-pattern&gt;/*&lt;/url-pattern&gt;&lt;br /&gt;&lt;/filter-mapping&gt;&lt;br /&gt;&lt;br /&gt;Overriding the sendredirect&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class SendRedirectOverloadedResponse extends HttpServletResponseWrapper&lt;br /&gt;{&lt;br /&gt;   private HttpServletRequest m_request;&lt;br /&gt;   private String prefix = null;&lt;br /&gt;   public SendRedirectOverloadedResponse(HttpServletRequest inRequest&lt;br /&gt;      , HttpServletResponse response)&lt;br /&gt;   {&lt;br /&gt;      super(response);&lt;br /&gt;      m_request = inRequest;&lt;br /&gt;      prefix = getPrefix(inRequest);&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;/**&lt;br /&gt;*This is the method which you&lt;br /&gt;*want to edit for customizing your&lt;br /&gt;*requirement.For instance we replaced&lt;br /&gt;*the url pattern http://..........with https://..&lt;br /&gt;*/&lt;br /&gt;   public void sendRedirect(String location) throws IOException&lt;br /&gt;   {&lt;br /&gt;      Log.trace("Going originally to:" + location);&lt;br /&gt;      String finalurl = null;&lt;br /&gt;      &lt;br /&gt;      if (isUrlAbsolute(location))&lt;br /&gt;      {&lt;br /&gt;         Log.trace("This url is absolute. No scheme changes will be attempted");&lt;br /&gt;         finalurl = location;&lt;br /&gt;      }&lt;br /&gt;      else&lt;br /&gt;      {&lt;br /&gt;         finalurl = fixForScheme(prefix + location);&lt;br /&gt;         Log.trace("Going to absolute url:" + finalurl);&lt;br /&gt;      }&lt;br /&gt;      super.sendRedirect(finalurl);&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   public boolean isUrlAbsolute(String url)&lt;br /&gt;   {&lt;br /&gt;      String lowercaseurl = url.toLowerCase();&lt;br /&gt;      if (lowercaseurl.startsWith("http") == true)&lt;br /&gt;      {&lt;br /&gt;         return true;&lt;br /&gt;      }&lt;br /&gt;      else&lt;br /&gt;      {&lt;br /&gt;         return false;&lt;br /&gt;      }&lt;br /&gt;   }&lt;br /&gt;   public String fixForScheme(String url)&lt;br /&gt;   {&lt;br /&gt;      //alter the url here if you were to change the scheme&lt;br /&gt;      return url;&lt;br /&gt;   }&lt;br /&gt;   &lt;br /&gt;   public String getPrefix(HttpServletRequest request)&lt;br /&gt;   {&lt;br /&gt;      StringBuffer str = request.getRequestURL();&lt;br /&gt;      String url = str.toString();&lt;br /&gt;      String uri = request.getRequestURI();&lt;br /&gt;      Log.trace("requesturl:" + url);&lt;br /&gt;      Log.trace("uri:" + uri);&lt;br /&gt;      int offset = url.indexOf(uri);&lt;br /&gt;      String prefix = url.substring(0,offset);&lt;br /&gt;      Log.trace("prefix:" + prefix);&lt;br /&gt;      return prefix;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Putting it all together&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class AbsoluteSendRedirectFilter implements Filter &lt;br /&gt;{&lt;br /&gt;   public void init(FilterConfig filterConfig) &lt;br /&gt;   throws ServletException&lt;br /&gt;   {&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public void destroy()&lt;br /&gt;   {   &lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   public void doFilter(ServletRequest request&lt;br /&gt;               , ServletResponse response&lt;br /&gt;               , FilterChain chain)&lt;br /&gt;   throws IOException, ServletException&lt;br /&gt;   {&lt;br /&gt;      //continue the request&lt;br /&gt;      chain.doFilter(request&lt;br /&gt;         ,new SendRedirectOverloadedResponse(request,response));&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b&gt;References&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1. Java Server Side api ver 1.6&lt;br /&gt;&lt;br /&gt;2. Look up just servlet package classes&lt;br /&gt;&lt;br /&gt;3. Java Programming NOtes&lt;br /&gt;&lt;br /&gt;4. &lt;a href="http://www.satyakomatineni.com/akc/servlet/DisplayServlet?url=DisplayNoteMPURL&amp;reportId=1711&amp;ownerUserId=satya"&gt;http://www.satyakomatineni.com/akc/servlet/DisplayServlet?url=DisplayNoteMPURL&amp;reportId=1711&amp;ownerUserId=satya&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-1408262443490749853?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/1408262443490749853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2011/05/rewriting-sendredirect-to-deal-with-ssl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/1408262443490749853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/1408262443490749853'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2011/05/rewriting-sendredirect-to-deal-with-ssl.html' title='Rewriting SendRedirect to deal with SSL (or https) offloading'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-156610853901658203</id><published>2011-03-28T03:34:00.000-07:00</published><updated>2011-03-28T03:34:29.738-07:00</updated><title type='text'>Customizing RollingAppenders of Log4j</title><content type='html'>Apache's Log4j is a versatile event logging system.I admire the flexibility of Log4j.&lt;br /&gt;Once a situation came where I need to append the datestamp to the filename and also limit the filesize to some customizable value.&lt;br /&gt;The first could be obtained by using DailyRollingFileAppender(which however is blamed as prone to lose some logs--why? see apache docs for log4j) and the second could be obtained by using RollingFileAppender.&lt;br /&gt;My requirements could be met by two ways:&lt;br /&gt;a)if I could control the filenames to be used in RollingFileAppender &lt;br /&gt;b)or rollover the files when a certain size is reached, when I use DailyRollingFileAppender&lt;br /&gt;&lt;br /&gt;I thought of trying to extend RollingFileAppender and attempted to introduce a twist in my class.&lt;br /&gt;The main methods for the RollingFileAppender that are required for me to override were subAppend(..) and rollOver(..).&lt;br /&gt;After trying a bit I got the following class working for me:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedWriter;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.Writer;&lt;br /&gt;import java.text.DateFormat;&lt;br /&gt;import java.text.SimpleDateFormat;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;import org.apache.log4j.FileAppender;&lt;br /&gt;import org.apache.log4j.Layout;&lt;br /&gt;import org.apache.log4j.RollingFileAppender;&lt;br /&gt;import org.apache.log4j.helpers.CountingQuietWriter;&lt;br /&gt;import org.apache.log4j.helpers.LogLog;&lt;br /&gt;import org.apache.log4j.helpers.OptionConverter;&lt;br /&gt;import org.apache.log4j.spi.LoggingEvent;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * &lt;br /&gt; * File:CustomRollingFileAppender.java&lt;br /&gt; * @author: Ramesh Raj Baral&lt;br /&gt; * @since: Mar 25, 2011&lt;br /&gt; * @version:1.0&lt;br /&gt; */&lt;br /&gt;public class CustomRollingFileAppender extends RollingFileAppender{&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt;    The default maximum file size is 10KB.&lt;br /&gt; */&lt;br /&gt; protected String value = "10*1024";&lt;br /&gt; protected long maximumFileSize=10*1024;&lt;br /&gt; protected long currentFileSize;&lt;br /&gt; protected String fileName="";&lt;br /&gt; /**&lt;br /&gt;    The date pattern. By default, the pattern is set to&lt;br /&gt;    "'.'yyyy-MM-dd" meaning daily rollover.&lt;br /&gt;  */&lt;br /&gt; private String datePattern = "'.'yyyy-MM-dd";&lt;br /&gt; String newFileName="";&lt;br /&gt;  &lt;br /&gt; /**&lt;br /&gt;  * The default constructor simply calls its {@link FileAppender#FileAppender&lt;br /&gt;  * parents constructor}.&lt;br /&gt;  */&lt;br /&gt; public CustomRollingFileAppender() {&lt;br /&gt;  super();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Instantiate a RollingFileAppender and open the file designated by&lt;br /&gt;  * &lt;code&gt;filename&lt;/code&gt;. The opened filename will become the ouput&lt;br /&gt;  * destination for this appender.&lt;br /&gt;  * &lt;br /&gt;  * &lt;p&gt;  * If the &lt;code&gt;append&lt;/code&gt; parameter is true, the file will be appended&lt;br /&gt;  * to. Otherwise, the file desginated by &lt;code&gt;filename&lt;/code&gt; will be&lt;br /&gt;  * truncated before being opened.&lt;br /&gt;  */&lt;br /&gt; public CustomRollingFileAppender(Layout layout, String filename, boolean append)&lt;br /&gt;   throws IOException {&lt;br /&gt;  super(layout, filename, append);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Instantiate a FileAppender and open the file designated by&lt;br /&gt;  * &lt;code&gt;filename&lt;/code&gt;. The opened filename will become the output&lt;br /&gt;  * destination for this appender.&lt;br /&gt;  * &lt;br /&gt;  * &lt;p&gt;  * The file will be appended to.&lt;br /&gt;  */&lt;br /&gt; public CustomRollingFileAppender(Layout layout, String filename)&lt;br /&gt;   throws IOException {&lt;br /&gt;  super(layout, filename);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt;  * Description:&lt;br /&gt;  * &lt;li&gt;this method sets the filename with date pattern&lt;/li&gt;&lt;br /&gt;  * &lt;li&gt;rather than LogFileName.1,LogFileName.2 and so on&lt;/li&gt;&lt;br /&gt;  * &lt;li&gt;use date pattern 'yyyy-MM-dd' to be appended&lt;/li&gt;&lt;br /&gt;  * @author Ramesh Raj Baral&lt;br /&gt;  * @since March 25 2011&lt;br /&gt;  */ &lt;br /&gt; public void rollOver() {&lt;br /&gt;  File target;&lt;br /&gt;  File file;&lt;br /&gt;  if (maxBackupIndex &gt; 0) {&lt;br /&gt;   // Delete the oldest file, to keep Windows happy.&lt;br /&gt;   file = new File(getNewFileName() + '.' + maxBackupIndex);&lt;br /&gt;   if (file.exists())&lt;br /&gt;    file.delete();&lt;br /&gt;   for (int i = maxBackupIndex - 1; i &gt;= 1; i--) {&lt;br /&gt;    file = new File(getNewFileName() + "." + i);&lt;br /&gt;    /**&lt;br /&gt;     * if file exist then increase its index after dot(.)&lt;br /&gt;     * .i.e. if log.5 exist then rename it as log.6&lt;br /&gt;     * and create log.5 as a new file and so on&lt;br /&gt;     */&lt;br /&gt;    if (file.exists()) {&lt;br /&gt;     target = new File(getNewFileName() + '.' + (i + 1));&lt;br /&gt;     LogLog.debug("Renaming file " + file + " to " + target);&lt;br /&gt;     file.renameTo(target);&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;   /**&lt;br /&gt;    * Rename fileName to fileName.1&lt;br /&gt;    * fileName.1 is the second latest file in the list&lt;br /&gt;    */&lt;br /&gt;   target = new File(getNewFileName() + "." + 1);&lt;br /&gt;   this.closeFile(); &lt;br /&gt;   file = new File(fileName);&lt;br /&gt;   file.renameTo(target);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  try {&lt;br /&gt;   // This will also close the file. This is OK since multiple&lt;br /&gt;   // close operations are safe.&lt;br /&gt;   this.setFile(getNewFileName(), false, bufferedIO, bufferSize);&lt;br /&gt;  } catch (IOException e) {&lt;br /&gt;   LogLog.error("setFile(" + fileName + ", false) call failed.", e);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;  public synchronized void setFile(String fileName, boolean append,&lt;br /&gt;   boolean bufferedIO, int bufferSize) throws IOException {&lt;br /&gt;   LogLog.debug("setFile called: "+fileName+", "+append);&lt;br /&gt;      // It does not make sense to have immediate flush and bufferedIO.&lt;br /&gt;      if(bufferedIO) {&lt;br /&gt;        setImmediateFlush(false);&lt;br /&gt;      }&lt;br /&gt;      reset();&lt;br /&gt;      Writer fw = createWriter(new FileOutputStream(fileName, append));&lt;br /&gt;      if(bufferedIO) {&lt;br /&gt;        fw = new BufferedWriter(fw, bufferSize);&lt;br /&gt;      }&lt;br /&gt;      this.setQWForFiles(fw);&lt;br /&gt;      this.fileName = fileName;&lt;br /&gt;      this.fileAppend = append;&lt;br /&gt;      this.bufferedIO = bufferedIO;&lt;br /&gt;      this.bufferSize = bufferSize;&lt;br /&gt;      writeHeader();&lt;br /&gt;      LogLog.debug("setFile ended");&lt;br /&gt;  //this.fileName=fileName;&lt;br /&gt;  if (append) {&lt;br /&gt;   File f = new File(fileName);&lt;br /&gt;   ((CountingQuietWriter) qw).setCount(f.length());&lt;br /&gt;   currentFileSize=f.length();&lt;br /&gt;   System.out.println("^^^^^^^^^^^^append true "+currentFileSize);&lt;br /&gt;  }&lt;br /&gt;  else{&lt;br /&gt;   //System.out.println("^^^^^^^^^^^^append false "+currentFileSize);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;   /**&lt;br /&gt;   * This method differentiates CustomRollingFileAppender from its super&lt;br /&gt;   * class.&lt;br /&gt;   * &lt;br /&gt;   */&lt;br /&gt; protected void subAppend(LoggingEvent event) {&lt;br /&gt;  this.qw.write(this.layout.format(event));&lt;br /&gt;     if(layout.ignoresThrowable()) {&lt;br /&gt;       String[] s = event.getThrowableStrRep();&lt;br /&gt;       if (s != null) {&lt;br /&gt;  int len = s.length;&lt;br /&gt;  for(int i = 0; i &lt; len; i++) {    this.qw.write(s[i]);    this.qw.write(Layout.LINE_SEP);  }       }     }       this.qw.flush();           if ((fileName != null) &amp;&amp; currentFileSize &gt;= this.getMaximumFileSize()){&lt;br /&gt;   System.out.println("^^^^^^^^^^^^^^^^rolling over");&lt;br /&gt;   this.rollOver();&lt;br /&gt;  }&lt;br /&gt;  else{&lt;br /&gt;   if(fileName==null)&lt;br /&gt;    System.out.println("^^^^^^^^^^^^filename null");&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public String getDatePattern() {&lt;br /&gt;   return datePattern;&lt;br /&gt; }&lt;br /&gt; public void setDatePattern(String datePattern) {&lt;br /&gt;  this.datePattern = datePattern;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public String getNewFileName(){&lt;br /&gt;  String datePatternString="";&lt;br /&gt;  DateFormat format=new SimpleDateFormat("yyyy-MM-dd");&lt;br /&gt;  Date today=new Date();&lt;br /&gt;  datePatternString=format.format(today);&lt;br /&gt;  return (fileName+datePatternString);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setMaxFileSize(String value) {&lt;br /&gt;  //System.out.println("*********setting maxFileSize as:"+value+"....and:"+OptionConverter.toFileSize(value, maxFileSize + 1));&lt;br /&gt;  super.setMaximumFileSize(OptionConverter.toFileSize(value, maxFileSize + 1));&lt;br /&gt;  this.setMaximumFileSize(OptionConverter.toFileSize(value, maxFileSize + 1));&lt;br /&gt;  super.setMaxFileSize(value);&lt;br /&gt;  this.setMaximumFileSize(OptionConverter.toFileSize(value, maxFileSize + 1));&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public long getMaximumFileSize() {&lt;br /&gt;  return maximumFileSize;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setMaximumFileSize(long maximumFileSize) {&lt;br /&gt;  this.maximumFileSize = maximumFileSize;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public long getCurrentFileSize() {&lt;br /&gt;  return currentFileSize;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setCurrentFileSize(long currentFileSize) {&lt;br /&gt;  this.currentFileSize = currentFileSize;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*********************************&lt;br /&gt;the log4j.properties file I used for this was:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Set root logger level to DEBUG and its only appender to Appender1.&lt;br /&gt;log4j.rootLogger=Appender1,Appender2&lt;br /&gt;&lt;br /&gt;# Appender1 is set to be a ConsoleAppender.&lt;br /&gt;log4j.appender.Appender1=org.apache.log4j.ConsoleAppender&lt;br /&gt;#log4j.appender.Appender2=org.apache.log4j.DailyRollingFileAppender&lt;br /&gt;log4j.appender.Appender2=${packagename}.CustomRollingFileAppender&lt;br /&gt;log4j.appender.Appender2.MaxFileSize=5KB&lt;br /&gt;log4j.appender.Appender2.MaxBackupIndex=100&lt;br /&gt;#log4j.appender.Appender2.DatePattern='.'yyyy-MM-dd&lt;br /&gt;&lt;br /&gt;log4j.appender.Appender2.File=../Log/General/GeneralLog.log&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Appender2 uses PatternLayout.&lt;br /&gt;log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout&lt;br /&gt;log4j.appender.Appender2.layout.ConversionPattern=%d{HH:mm:ss}[%-5p]%c %x[%-5p] - %m%n&lt;br /&gt;**************************************************&lt;br /&gt;&lt;br /&gt;I got it working.&lt;br /&gt;The filenames were GeneralLog.log,GeneralLog.log2011-03-28.i where i=1 to 100.&lt;br /&gt;The filesize was limited to 6KB (5KB +1)--a small value was used for testing purpose,can be customized as per requirement.&lt;br /&gt;&lt;br /&gt;Writing own working class is quite interesting:)))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Thanks&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-156610853901658203?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/156610853901658203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2011/03/customizing-rollingappenders-of-log4j.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/156610853901658203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/156610853901658203'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2011/03/customizing-rollingappenders-of-log4j.html' title='Customizing RollingAppenders of Log4j'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-3050431690973056225</id><published>2011-01-18T21:55:00.001-08:00</published><updated>2011-01-18T21:55:58.484-08:00</updated><title type='text'>Calendar</title><content type='html'>&lt;div aligh="center"&gt;&lt;iframe name="I1" src="http://www.ashesh.com.np/calendarlink/calendar.php" width="220" height="167" border="0" frameborder="0" scrolling="no" marginwidth="0" marginheight="0" allowtransparency="true"&gt;&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;a title="Nepali Calendar"href="http://www.ashesh.com.np/nepali-calendar/"&gt;&lt;font size='1'&gt;Nepali Calendar&lt;/font&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-3050431690973056225?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/3050431690973056225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2011/01/calendar.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/3050431690973056225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/3050431690973056225'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2011/01/calendar.html' title='Calendar'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-3073792617823431628</id><published>2010-12-06T04:28:00.001-08:00</published><updated>2010-12-06T04:28:10.298-08:00</updated><title type='text'>Custom Table Filters in Rich Faces</title><content type='html'>In this article I shall show an example of how to use custom(user defined) filter on rich:dataTable elements:&lt;BR&gt; &lt;BR&gt; Lets trace from the view itself:&lt;BR&gt; &lt;BR&gt; In the first row of a dataTable we can have a row entries with the text field that will take the user input string that act as the filter string expression.&lt;BR&gt; &lt;BR&gt; &lt;I&gt;&amp;lt;rich:column &amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				&amp;lt;f:facet name=&amp;quot;header&amp;quot;&amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					&amp;lt;h:inputText&lt;/I&gt;&lt;BR&gt; &lt;I&gt;						value=&amp;quot;#{reviewReportController.filter.expForAppraisee}&amp;quot;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;						id=&amp;quot;appraisee&amp;quot; onkeypress=&amp;quot;updateAppraisee(event);&amp;quot;/&amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				&amp;lt;/f:facet&amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				&amp;lt;h:outputText value=&amp;quot;#{reviewData.appraisee}&amp;quot; /&amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			&amp;lt;/rich:column&amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; Now we need to define the updateAppraisee(evt) named javascript method as shown below:&lt;BR&gt; 	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;I&gt;&amp;nbsp; function updateAppraisee(e){&lt;/I&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;nbsp;&amp;nbsp; //Unless the user presses the enter key donot process the action&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 	&amp;nbsp; if (e.keyCode != 13) {return false}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				else{&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					showProcessingPanel();&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					fireAjaxForAppraisee($('myForm:reviewReportTable:appraisee').value); &lt;/I&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;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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //fire Ajax Event on the inputtext field defined in the above part&lt;BR&gt; &lt;I&gt;					return true;&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; &lt;I&gt;				}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; Now we need to define the method fireAjaxForAppraisee within the &amp;lt;a4j:Form..&amp;gt; as shown below:&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; &lt;I&gt;&amp;lt;a4j:form&amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			&amp;lt;a4j:jsFunction name=&amp;quot;fireAjaxForAppraisee&amp;quot;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				action=&amp;quot;#{reviewReportController.filterAppraisee}&amp;quot;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				oncomplete=&amp;quot;hideProcessingPanel();&amp;quot;&amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				&amp;lt;a4j:actionparam name=&amp;quot;param1&amp;quot;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					assignTo=&amp;quot;#{reviewReportController.filter.expForAppraisee}&amp;quot; /&amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			&amp;lt;/a4j:jsFunction&amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		&amp;lt;/a4j:form&amp;gt;&lt;/I&gt;&lt;BR&gt; Here:&lt;BR&gt; action:defines which method to be called on the backing bean;&lt;BR&gt; assignTo:defines which input field to be considered for the string input&lt;BR&gt; showProcessingPanel,hideProcessingPanel-js methods used to show/hide the processing panels&lt;BR&gt; param1:the parameter to be sent --here event itself; to the js method&lt;BR&gt; &lt;BR&gt; Now lets see what is the actual logic inside the backing bean.&lt;BR&gt; The main method triggered inside the backing bean is as shown below:&lt;BR&gt; &lt;BR&gt; &lt;I&gt;public boolean filterAppraisee() {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			List reviewFilteredList=this.filterStringExp(getRateAndDateFilteredList());&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			return true;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; &lt;BR&gt; &lt;I&gt;public List filterStringExp(List iterationList) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		//filter on the basis of review&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		reviewReportListForDisplay=new ArrayList();&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		if (this.filter.getExpForReview().trim().length()&amp;gt;0) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			for(int i=0;i&amp;lt;iterationList.size();i++){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				ReviewReportDTO reviewReportDTO=(ReviewReportDTO)iterationList.get(i);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				if(!reviewReportDTO.getReview().toLowerCase().matches(&amp;quot;.*&amp;quot;+this.filter.getExpForReview().toLowerCase()+&amp;quot;.*&amp;quot;)) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					reviewReportDTO.setFilteredOut(true);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		//filter on the basis of designation&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		if (this.filter.getExpForDesignation().trim().length()&amp;gt;0) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			for(int i=0;i&amp;lt;iterationList.size();i++){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				ReviewReportDTO reviewReportDTO=(ReviewReportDTO)iterationList.get(i);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				if(!reviewReportDTO.getDesignation().toLowerCase().matches(&amp;quot;.*&amp;quot;+this.filter.getExpForDesignation().toLowerCase()+&amp;quot;.*&amp;quot;)) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					reviewReportDTO.setFilteredOut(true);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		//filter on the basis of subdepartment&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		if (this.filter.getExpForSubDepartment().trim().length()&amp;gt;0) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			for(int i=0;i&amp;lt;iterationList.size();i++){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				ReviewReportDTO reviewReportDTO=(ReviewReportDTO)iterationList.get(i);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				if(!reviewReportDTO.getSubdepartment().toLowerCase().matches(&amp;quot;.*&amp;quot;+this.filter.getExpForSubDepartment().toLowerCase()+&amp;quot;.*&amp;quot;)) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					reviewReportDTO.setFilteredOut(true);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		//filter on the basis of department&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		if (this.filter.getExpForDepartment().trim().length()&amp;gt;0) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			for(int i=0;i&amp;lt;iterationList.size();i++){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				ReviewReportDTO reviewReportDTO=(ReviewReportDTO)iterationList.get(i);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				if(!reviewReportDTO.getDepartment().toLowerCase().matches(&amp;quot;.*&amp;quot;+this.filter.getExpForDepartment().toLowerCase()+&amp;quot;.*&amp;quot;)) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					reviewReportDTO.setFilteredOut(true);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		//filter on the basis of appriasee&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		if (this.filter.getExpForAppraisee().trim().length()&amp;gt;0) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			for(int i=0;i&amp;lt;iterationList.size();i++){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				ReviewReportDTO reviewReportDTO=(ReviewReportDTO)iterationList.get(i);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				if(!reviewReportDTO.getAppraisee().toLowerCase().matches(&amp;quot;.*&amp;quot;+this.filter.getExpForAppraisee().toLowerCase()+&amp;quot;.*&amp;quot;)) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					reviewReportDTO.setFilteredOut(true);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		//filter on the basis of appriasee&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		if (this.filter.getExpForAppraiser().trim().length()&amp;gt;0) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			for(int i=0;i&amp;lt;iterationList.size();i++){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				ReviewReportDTO reviewReportDTO=(ReviewReportDTO)iterationList.get(i);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				if(!reviewReportDTO.getAppraiser().toLowerCase().matches(&amp;quot;.*&amp;quot;+this.filter.getExpForAppraiser().toLowerCase()+&amp;quot;.*&amp;quot;)) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					reviewReportDTO.setFilteredOut(true);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		for(int i=0;i&amp;lt;iterationList.size();i++){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			ReviewReportDTO reviewReportDTO=(ReviewReportDTO)iterationList.get(i);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			if(!reviewReportDTO.isFilteredOut()){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				reviewReportListForDisplay.add(reviewReportDTO);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		return reviewReportListForDisplay;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; Lets examine the reviewReportDTO bean.&lt;BR&gt; &lt;BR&gt; package ......&lt;BR&gt; &lt;BR&gt; import java.util.Date;&lt;BR&gt; &lt;BR&gt; import javax.persistence.Column;&lt;BR&gt; import javax.persistence.Entity;&lt;BR&gt; import javax.persistence.GeneratedValue;&lt;BR&gt; import javax.persistence.GenerationType;&lt;BR&gt; import javax.persistence.Id;&lt;BR&gt; import javax.persistence.SequenceGenerator;&lt;BR&gt; import javax.persistence.Table;&lt;BR&gt; import javax.persistence.Transient;&lt;BR&gt; &lt;BR&gt; import com.d2.hrm.common.api.core.DTO;&lt;BR&gt; &lt;BR&gt; /**&lt;BR&gt;  * &lt;BR&gt;  * FileName:ReviewReportDTO.java&lt;BR&gt;  * Version:1.0&lt;BR&gt;  * @author:Ramesh Raj Baral&lt;BR&gt;  * @since:Nov 3, 2010&lt;BR&gt;  *&lt;BR&gt;  */&lt;BR&gt; /**&lt;BR&gt;  * Description:&lt;BR&gt;  * &amp;lt;li&amp;gt;this class resembles the report instance for review only&amp;lt;/li&amp;gt;&lt;BR&gt;  */&lt;BR&gt; @Entity&lt;BR&gt; @Table(name=&amp;quot;...._review_report&amp;quot;)&lt;BR&gt; &lt;BR&gt; public class ReviewReportDTO implements DTO {&lt;BR&gt; &lt;BR&gt; 	private Long id;&lt;BR&gt; 	private String appraiser;&lt;BR&gt; 	private String appraisee;&lt;BR&gt; 	private String department;&lt;BR&gt; 	private String subdepartment;&lt;BR&gt; 	private double rating;&lt;BR&gt; 	private String review;&lt;BR&gt; 	private Date reviewdate;&lt;BR&gt; 	private String appraiserEmail;&lt;BR&gt; 	private String appraiseeEmail;&lt;BR&gt; 	private String designation;&lt;BR&gt; 	private boolean filteredOut=false;&lt;BR&gt; 	&lt;BR&gt; 	@Id&lt;BR&gt; 	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator=&amp;quot;reviewSeq&amp;quot;)&lt;BR&gt; 	@SequenceGenerator(name=&amp;quot;reviewSeq&amp;quot;,sequenceName=&amp;quot;sq_d2hrm_review_report&amp;quot;,allocationSize=1)&lt;BR&gt; 	@Column(name = &amp;quot;id&amp;quot;)&lt;BR&gt; 	public Long getId() {&lt;BR&gt; 		return id;&lt;BR&gt; 	}&lt;BR&gt; 	public void setId(Long id) {&lt;BR&gt; 		this.id = id;&lt;BR&gt; 	}&lt;BR&gt; 	&lt;BR&gt; 	@Column(name = &amp;quot;appraiser&amp;quot;)&lt;BR&gt; 	public String getAppraiser() {&lt;BR&gt; 		return appraiser;&lt;BR&gt; 	}&lt;BR&gt; 	public void setAppraiser(String appraiser) {&lt;BR&gt; 		this.appraiser = appraiser;&lt;BR&gt; 	}&lt;BR&gt; 	@Column(name = &amp;quot;appraisee&amp;quot;)&lt;BR&gt; 	public String getAppraisee() {&lt;BR&gt; 		return appraisee;&lt;BR&gt; 	}&lt;BR&gt; 	public void setAppraisee(String appraisee) {&lt;BR&gt; 		this.appraisee = appraisee;&lt;BR&gt; 	}&lt;BR&gt; 	@Column(name = &amp;quot;department&amp;quot;)&lt;BR&gt; 	public String getDepartment() {&lt;BR&gt; 		return department;&lt;BR&gt; 	}&lt;BR&gt; 	public void setDepartment(String department) {&lt;BR&gt; 		this.department = department;&lt;BR&gt; 	}&lt;BR&gt; 	@Column(name = &amp;quot;subdepartment&amp;quot;)&lt;BR&gt; 	public String getSubdepartment() {&lt;BR&gt; 		return subdepartment;&lt;BR&gt; 	}&lt;BR&gt; 	public void setSubdepartment(String subdepartment) {&lt;BR&gt; 		this.subdepartment = subdepartment;&lt;BR&gt; 	}&lt;BR&gt; 	&lt;BR&gt; 	@Column(name = &amp;quot;rating&amp;quot;)&lt;BR&gt; 	public double getRating() {&lt;BR&gt; 		return rating;&lt;BR&gt; 	}&lt;BR&gt; 	public void setRating(double rating) {&lt;BR&gt; 		this.rating = rating;&lt;BR&gt; 	}&lt;BR&gt; 	&lt;BR&gt; 	@Column(name = &amp;quot;reviewdate&amp;quot;)&lt;BR&gt; 	public Date getReviewdate() {&lt;BR&gt; 		return reviewdate;&lt;BR&gt; 	}&lt;BR&gt; 	public void setReviewdate(Date reviewdate) {&lt;BR&gt; 		this.reviewdate = reviewdate;&lt;BR&gt; 	}&lt;BR&gt; 	&lt;BR&gt; 	&lt;BR&gt; 	@Column(name = &amp;quot;designation&amp;quot;)&lt;BR&gt; 	public String getDesignation() {&lt;BR&gt; 		return designation;&lt;BR&gt; 	}&lt;BR&gt; 	public void setDesignation(String designation) {&lt;BR&gt; 		this.designation = designation;&lt;BR&gt; 	}&lt;BR&gt; 	@Column(name = &amp;quot;review&amp;quot;)&lt;BR&gt; 	public String getReview() {&lt;BR&gt; 		return review;&lt;BR&gt; 	}&lt;BR&gt; 	public void setReview(String review) {&lt;BR&gt; 		this.review = review;&lt;BR&gt; 	}&lt;BR&gt; 	&lt;BR&gt; 	@Column(name = &amp;quot;appraiser_email&amp;quot;)&lt;BR&gt; 	public String getAppraiserEmail() {&lt;BR&gt; 		return appraiserEmail;&lt;BR&gt; 	}&lt;BR&gt; 	public void setAppraiserEmail(String appraiserEmail) {&lt;BR&gt; 		this.appraiserEmail = appraiserEmail;&lt;BR&gt; 	}&lt;BR&gt; 	&lt;BR&gt; 	@Column(name = &amp;quot;appraisee_email&amp;quot;)&lt;BR&gt; 	public String getAppraiseeEmail() {&lt;BR&gt; 		return appraiseeEmail;&lt;BR&gt; 	}&lt;BR&gt; 	public void setAppraiseeEmail(String appraiseeEmail) {&lt;BR&gt; 		this.appraiseeEmail = appraiseeEmail;&lt;BR&gt; 	}&lt;BR&gt; 	&lt;BR&gt; 	@Override&lt;BR&gt; 	public String toString() {&lt;BR&gt; 		/**&lt;BR&gt; 		 * headerName:id&lt;BR&gt; *****************headerName:appraisee&lt;BR&gt; *****************headerName:appraiseeemail&lt;BR&gt; *****************headerName:appraiser&lt;BR&gt; *****************headerName:appraiseremail&lt;BR&gt; *****************headerName:design&lt;BR&gt; *****************headerName:dept&lt;BR&gt; *****************headerName:subdept&lt;BR&gt; *****************headerName:rating&lt;BR&gt; *****************headerName:review&lt;BR&gt; *****************headerName:reviewdate&lt;BR&gt; 		 */&lt;BR&gt; 		String a=&amp;quot;id=&amp;quot;+getId()+&amp;quot;,appraisee=&amp;quot;+getAppraisee()+&amp;quot;,appraiseeemail=&amp;quot;+getAppraiseeEmail()+&amp;quot;,appraiser=&amp;quot;+getAppraiser()+&amp;quot;,appraiseremail=&amp;quot;+getAppraiserEmail()+&amp;quot;,design=&amp;quot;+getDesignation()+&amp;quot;,dept=&amp;quot;+getDepartment()+&amp;quot;,subdept=&amp;quot;+getSubdepartment()+&amp;quot;,rating=&amp;quot;+getRating()+&amp;quot;,review=&amp;quot;+getReview()+&amp;quot;,reviewdate=&amp;quot;+getReviewdate().toString().split(&amp;quot; &amp;quot;)[0];&lt;BR&gt; 		return a;&lt;BR&gt; 				&lt;BR&gt; 	}&lt;BR&gt; 	&lt;BR&gt; 	@Transient&lt;BR&gt; 	public boolean isFilteredOut() {&lt;BR&gt; 		return filteredOut;&lt;BR&gt; 	}&lt;BR&gt; 	public void setFilteredOut(boolean filteredOut) {&lt;BR&gt; 		this.filteredOut = filteredOut;&lt;BR&gt; 	}&lt;BR&gt; 	&amp;nbsp; &lt;BR&gt; 	&lt;BR&gt; 	&lt;BR&gt; 	&lt;BR&gt; }&lt;BR&gt; &lt;BR&gt; &lt;BR&gt; The ultimate returning object of the filter method is the list that is assigned to the dataTable on our view.Based on this list the contents of the dataTable on view is dynamically changed.&lt;BR&gt; I used this approach to filter numbers (including the symbol expressions:&amp;lt;,&amp;lt;=,&amp;gt;,&amp;gt;=,=,-) and the date with the fore mentioned expressions.&lt;BR&gt; &lt;BR&gt; Now in advance lets examine the numberfiltering method:&lt;BR&gt; In Controller we have a similar method for filtering numeric expression:&lt;BR&gt; &lt;I&gt;public boolean filterRate(){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		List rateFilteredList=this.filterRateExp(reviewReportList);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		return true;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	}&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; &lt;BR&gt; &lt;I&gt;	public List filterRateExp(List iterationList) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		for(int i=0;i&amp;lt;iterationList.size();i++){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			ReviewReportDTO reviewReportDTO=(ReviewReportDTO)iterationList.get(i);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			reviewReportDTO.setFilteredOut(false);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		if (this.filter.getExpForRating().length()==0) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			this.setReviewReportListForDisplay(iterationList);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return reviewReportListForDisplay;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else{&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 	List filterElements=ServiceUtil.getFilterNumberExpression(this.filter.getExpForRating());&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 	reviewReportListForDisplay = new ArrayList();&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 	if(filterElements!=null &amp;amp;&amp;amp; filterElements.size()&amp;gt;0){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 		FilterElementDTO filterSymbol=(FilterElementDTO)filterElements.get(0);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 			FilterElementDTO filterFirstValue=(FilterElementDTO)filterElements.get(1);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 			if(filterElements.size()==2)//has &amp;lt;,&amp;lt;=,&amp;gt;,&amp;gt;=,= and a number&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 		{&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 			for(int i=0;i&amp;lt;iterationList.size();i++){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				ReviewReportDTO reviewReport=(ReviewReportDTO)iterationList.get(i);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				if(filterSymbol.getElement().equals(&amp;quot;&amp;lt;&amp;quot;)){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					if(reviewReport.getRating()&amp;lt; Float.parseFloat(filterFirstValue.getElement())){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 						//System.out.println(&amp;quot;************inside if of case 1:&amp;quot;+reviewReportListForDisplay.size()+&amp;quot;...contains:&amp;quot;+reviewReport.getReviewdate()+&amp;quot;..&amp;quot;+reviewReport.getRating()+&amp;quot;..&amp;quot;+reviewReportListForDisplay.contains(reviewReport));&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 						if(!reviewReportListForDisplay.contains(reviewReport)){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 							reviewReportListForDisplay.add(reviewReport);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 						}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;									&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					else{&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 						//System.out.println(&amp;quot;************inside else of case 1:&amp;quot;+reviewReportListForDisplay.size()+&amp;quot;.....contains:&amp;quot;+reviewReport.getReviewdate()+&amp;quot;..&amp;quot;+reviewReport.getRating()+&amp;quot;....&amp;quot;+reviewReportListForDisplay.contains(reviewReport));&lt;/I&gt;&lt;BR&gt; &lt;I&gt;								if(reviewReportListForDisplay.size()&amp;gt;0 &amp;amp;&amp;amp; reviewReportListForDisplay.contains(reviewReport)){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;									reviewReportListForDisplay.remove(reviewReport);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;								}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;									&lt;/I&gt;&lt;BR&gt; &lt;I&gt;							}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				else if(filterSymbol.getElement().equals(&amp;quot;&amp;gt;&amp;quot;)){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					if(reviewReport.getRating()&amp;gt; Float.parseFloat(filterFirstValue.getElement())){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 						if(!reviewReportListForDisplay.contains(reviewReport))&lt;/I&gt;&lt;BR&gt; &lt;I&gt;									reviewReportListForDisplay.add(reviewReport);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					else{&lt;/I&gt;&lt;BR&gt; &lt;I&gt;								if(reviewReportListForDisplay.size()&amp;gt;0)&lt;/I&gt;&lt;BR&gt; &lt;I&gt;									reviewReportListForDisplay.remove(reviewReport);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;							}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				else if(filterSymbol.getElement().equals(&amp;quot;&amp;lt;=&amp;quot;)){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					if(reviewReport.getRating()&amp;lt;= Float.parseFloat(filterFirstValue.getElement())){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 						if(!reviewReportListForDisplay.contains(reviewReport))&lt;/I&gt;&lt;BR&gt; &lt;I&gt;									reviewReportListForDisplay.add(reviewReport);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					else{&lt;/I&gt;&lt;BR&gt; &lt;I&gt;								if(reviewReportListForDisplay.size()&amp;gt;0)&lt;/I&gt;&lt;BR&gt; &lt;I&gt;									reviewReportListForDisplay.remove(reviewReport);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;							}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				else if(filterSymbol.getElement().equals(&amp;quot;&amp;gt;=&amp;quot;)){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					if(reviewReport.getRating()&amp;gt;= Float.parseFloat(filterFirstValue.getElement())){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 						if(!reviewReportListForDisplay.contains(reviewReport))&lt;/I&gt;&lt;BR&gt; &lt;I&gt;									reviewReportListForDisplay.add(reviewReport);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					else{&lt;/I&gt;&lt;BR&gt; &lt;I&gt;								if(reviewReportListForDisplay.size()&amp;gt;0)&lt;/I&gt;&lt;BR&gt; &lt;I&gt;									reviewReportListForDisplay.remove(reviewReport);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;							}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				else if(filterSymbol.getElement().equals(&amp;quot;=&amp;quot;)){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					if(reviewReport.getRating()== Float.parseFloat(filterFirstValue.getElement())){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 						if(!reviewReportListForDisplay.contains(reviewReport))&lt;/I&gt;&lt;BR&gt; &lt;I&gt;									reviewReportListForDisplay.add(reviewReport);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					else{&lt;/I&gt;&lt;BR&gt; &lt;I&gt;								if(reviewReportListForDisplay.size()&amp;gt;0)&lt;/I&gt;&lt;BR&gt; &lt;I&gt;									reviewReportListForDisplay.remove(reviewReport);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;							}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				else{&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					System.out.println(&amp;quot;********diff symbol encountered:&amp;quot;+filterSymbol.getElement()+&amp;quot;...&amp;quot;);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 			}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 		}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 		else if(filterElements.size()==3){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 			/**&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 			 * has a range of number a-b&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 			 */&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 			FilterElementDTO filterSecondValue=(FilterElementDTO)filterElements.get(2);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 			if(filterSymbol.getElement().equals(&amp;quot;-&amp;quot;)){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				for(int i=0;i&amp;lt;iterationList.size();i++){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				ReviewReportDTO reviewReport=(ReviewReportDTO)iterationList.get(i);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				//System.out.println(&amp;quot;*****range comparision:&amp;quot;+Float.parseFloat(reviewReport.getRating())+&amp;quot;..&amp;quot;+Float.parseFloat(filterFirstValue.getElement())+&amp;quot;..&amp;quot;+Float.parseFloat(filterSecondValue.getElement()));&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				if(reviewReport.getRating()&amp;gt;= Float.parseFloat(filterFirstValue.getElement()) &amp;amp;&amp;amp;(reviewReport.getRating())&amp;lt;= Float.parseFloat(filterSecondValue.getElement())){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 						reviewReportListForDisplay.add(reviewReport);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 					}else{&lt;/I&gt;&lt;BR&gt; &lt;I&gt;								if(reviewReportListForDisplay.size()&amp;gt;0)&lt;/I&gt;&lt;BR&gt; &lt;I&gt;									reviewReportListForDisplay.remove(reviewReport);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;							}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 			}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 			&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 		}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 		//System.out.println(&amp;quot;valid search returning true&amp;quot;);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 		this.setReviewReportListForDisplay(reviewReportListForDisplay);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 		}	&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 	}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 	else{&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 		/**&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 		 * search for the string pattern&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 		 */&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 		reviewReportListForDisplay=new ArrayList();&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				for(int i=0;i&amp;lt;iterationList.size();i++){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				ReviewReportDTO reviewReportDTO=(ReviewReportDTO)iterationList.get(i);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				//System.out.println(&amp;quot;*****range comparision:&amp;quot;+Float.parseFloat(reviewReport.getRating())+&amp;quot;..&amp;quot;+Float.parseFloat(filterFirstValue.getElement())+&amp;quot;..&amp;quot;+Float.parseFloat(filterSecondValue.getElement()));&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				String rating=&amp;quot;&amp;quot;+reviewReportDTO.getRating();&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 				if(rating.startsWith(this.filter.getExpForRating())){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;						reviewReportListForDisplay.add(reviewReportDTO);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					}else{&lt;/I&gt;&lt;BR&gt; &lt;I&gt;						if(reviewReportListForDisplay.size()&amp;gt;0)&lt;/I&gt;&lt;BR&gt; &lt;I&gt;							reviewReportListForDisplay.remove(reviewReportDTO);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 		//System.out.println(&amp;quot;invalid serch expression returning false&amp;quot;);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 			&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 	}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return reviewReportListForDisplay;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; Here &lt;I&gt;&lt;B&gt;ServiceUtil.getFilterNumberExpression(this.filter.getExpForRating()); &lt;/B&gt;&lt;/I&gt;&lt;I&gt;is a utility method used&amp;nbsp; to validate the input string to accept the input that satisfies the given regular expression.The method goes here:&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; 	&amp;nbsp;&lt;I&gt; /**&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp; * &lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp; * Description:&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp; * &amp;lt;li&amp;gt;given the filter string,it identifies the symbols encountered,their types,position&amp;lt;/li&amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp; * &amp;lt;li&amp;gt;and returns the list of valid FilterElementDTO&amp;lt;/li&amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp; * getFilterNumberExpression&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp; * ServiceUtil&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp; * @param exp&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp; * @returns &amp;lt;li&amp;gt;list of FilterElementDTO if satisfies the condition else returns the empty list&amp;lt;/li&amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp; * List&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp; * @author:Ramesh Raj Baral&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp; * @since:Nov 18, 2010&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp; *&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp;&amp;nbsp; */&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp; public static List getFilterNumberExpression(String exp){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		List filterElementList = new ArrayList();&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		String value = &amp;quot;&amp;quot;;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		int symbolIndex = -1;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		String[] validSymbols = { &amp;quot;&amp;lt;=&amp;quot;, &amp;quot;&amp;gt;=&amp;quot;, &amp;quot;=&amp;quot;, &amp;quot;&amp;lt;&amp;quot;, &amp;quot;&amp;gt;&amp;quot; };&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		String patternForRange = &amp;quot;(\\d{1,2})(.\\d{0,2})(-{1})(\\d{1,2})(.\\d{0,2})&amp;quot;;// for&lt;/I&gt;&lt;BR&gt; &lt;I&gt;																					// now&lt;/I&gt;&lt;BR&gt; &lt;I&gt;																					// 1.0-15.0&lt;/I&gt;&lt;BR&gt; &lt;I&gt;																					// works&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		String patternString = &amp;quot;&amp;quot;;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		Pattern p;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		Matcher m;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		Matcher m1;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		FilterElementDTO filterElement = new FilterElementDTO();&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		for (int i = 0; i &amp;lt; validSymbols.length; i++) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			/**&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			 * pattern for elements of validSymbols array&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			 */&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			patternString = &amp;quot;(&amp;quot; + validSymbols[i] + &amp;quot;)(\\d{1,2})(.\\d{0,1})&amp;quot;;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			p = Pattern.compile(patternString);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			m = p.matcher(exp);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			m1=p.matcher(exp+&amp;quot;.&amp;quot;);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			//System.out.println(&amp;quot;************comparing:&amp;quot; + exp					+ &amp;quot;..with pattern:&amp;quot; + validSymbols[i] + &amp;quot;.....matches:&amp;quot;					+ m.matches());&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			if (m.matches() ||m1.matches()) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				symbolIndex = i;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				value = exp.substring(validSymbols[i].length(), exp.length());&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				// add symbol&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement = new FilterElementDTO();&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setElement(exp.substring(0, validSymbols[i]&lt;/I&gt;&lt;BR&gt; &lt;I&gt;						.length()));&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setElementType(&amp;quot;string&amp;quot;);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setValid(true);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setPosition(0);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElementList.add(filterElement);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				// add number&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement = new FilterElementDTO();&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setElement(value);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setElementType(&amp;quot;int&amp;quot;);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setValid(true);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setPosition(0);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElementList.add(filterElement);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				break;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		// if no match found then search for range pattern&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		if (symbolIndex &amp;lt; 0) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			p = Pattern.compile(patternForRange);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			m=p.matcher(exp);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			String periodAppendedExp=exp;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			//if search expression has a range symbol(-) then append the period operator to it&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			if(exp.indexOf(&amp;quot;-&amp;quot;)&amp;gt;-1){&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				int rangeSymbol=exp.indexOf(&amp;quot;-&amp;quot;);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				String firstNumber=exp.substring(0,rangeSymbol);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				if(firstNumber.indexOf(&amp;quot;.&amp;quot;)&amp;lt;-0)&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					firstNumber+=&amp;quot;.0&amp;quot;;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				String secondNumber=exp.substring(rangeSymbol,exp.length());&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				if(secondNumber.indexOf(&amp;quot;.&amp;quot;)&amp;lt;-0)&lt;/I&gt;&lt;BR&gt; &lt;I&gt;					secondNumber+=&amp;quot;.0&amp;quot;;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				periodAppendedExp=firstNumber+secondNumber;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				//System.out.println(&amp;quot;******************comparing for range:&amp;quot;+exp+&amp;quot;..firstnumber:&amp;quot;+firstNumber+&amp;quot;...second:&amp;quot;+secondNumber);	&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			m1=p.matcher(periodAppendedExp);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			if (m.matches() ||m1.matches()) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				// matched for range pattern,should have three elements in the&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				// form n.k-m.l&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElementList = new ArrayList();&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				String[] values = exp.split(&amp;quot;-&amp;quot;);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				// add the symbol&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement = new FilterElementDTO();&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setElement(&amp;quot;-&amp;quot;);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setElementType(&amp;quot;string&amp;quot;);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setValid(true);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setPosition(0);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElementList.add(filterElement);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				// add first number&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement = new FilterElementDTO();&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setElement(values[0]);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setElementType(&amp;quot;int&amp;quot;);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setValid(true);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setPosition(0);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElementList.add(filterElement);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				// add the second number&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement = new FilterElementDTO();&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setElement(values[1]);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setElementType(&amp;quot;int&amp;quot;);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setValid(true);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElement.setPosition(0);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;				filterElementList.add(filterElement);&lt;/I&gt;&lt;BR&gt; &lt;I&gt;			}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		}&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; &lt;I&gt;		return filterElementList;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&amp;nbsp; }&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; The filterElement is simply a pojo with following structure:&lt;BR&gt; &lt;BR&gt; &lt;I&gt;package .....&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; &lt;I&gt;import java.util.ArrayList;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;import java.util.List;&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; &lt;BR&gt; &lt;I&gt;/**&lt;/I&gt;&lt;BR&gt; &lt;I&gt; * &lt;/I&gt;&lt;BR&gt; &lt;I&gt; * FileName:FilterElementDTO.java&lt;/I&gt;&lt;BR&gt; &lt;I&gt; * Version:1.0&lt;/I&gt;&lt;BR&gt; &lt;I&gt; * @author:Ramesh Raj Baral&lt;/I&gt;&lt;BR&gt; &lt;I&gt; * @since:Nov 18, 2010&lt;/I&gt;&lt;BR&gt; &lt;I&gt; * Description:&lt;/I&gt;&lt;BR&gt; &lt;I&gt; * &amp;lt;li&amp;gt;represents filter expression used in reporting module&amp;lt;/li&amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;I&gt; * &amp;lt;li&amp;gt;expression can be combination of symbols and values(number or date)&amp;lt;/li&amp;gt;&lt;/I&gt;&lt;BR&gt; &lt;I&gt; *&lt;/I&gt;&lt;BR&gt; &lt;I&gt; */&lt;/I&gt;&lt;BR&gt; &lt;I&gt;public class FilterElementDTO implements DTO {&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; &lt;I&gt;	private String element;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	private String elementType;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	private&amp;nbsp; int position;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	private boolean valid;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	public String getElement() {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		return element;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	public void setElement(String element) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		this.element = element;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	public String getElementType() {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		return elementType;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	public void setElementType(String elementType) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		this.elementType = elementType;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	public int getPosition() {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		return position;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	public void setPosition(int position) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		this.position = position;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	public boolean isValid() {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		return valid;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	}&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	public void setValid(boolean valid) {&lt;/I&gt;&lt;BR&gt; &lt;I&gt;		this.valid = valid;&lt;/I&gt;&lt;BR&gt; &lt;I&gt;	}&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; &lt;I&gt;}&lt;/I&gt;&lt;BR&gt; &lt;BR&gt; &lt;BR&gt; &lt;TABLE CELLSPACING="0" CELLPADDING="0" WIDTH="100%"&gt; &lt;TR&gt; &lt;TD&gt; Thanks,&lt;BR&gt; Ramesh. &lt;/TD&gt; &lt;/TR&gt; &lt;/TABLE&gt; &lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-3073792617823431628?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/3073792617823431628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/12/custom-table-filters-in-rich-faces.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/3073792617823431628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/3073792617823431628'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/12/custom-table-filters-in-rich-faces.html' title='Custom Table Filters in Rich Faces'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-1160576201400429317</id><published>2010-12-06T04:06:00.001-08:00</published><updated>2010-12-06T04:08:22.914-08:00</updated><title type='text'>DynamicJasper to Generate Dynamic Reports</title><content type='html'>This article will explain on how to use DynamicJasper in your project to generate the dynamic reports on demand.&lt;br /&gt;&lt;br /&gt;The Jars required are:&lt;br /&gt;DynamicJasper-3.1.5.jar( or any other latest one)&lt;br /&gt;DynamicJasper-3.1.5-tests(or any other latest one)--this is optional&lt;br /&gt;&lt;br /&gt;1)In Controller:&lt;br /&gt;public String generateReport(){&lt;br /&gt;/**&lt;br /&gt;* get the list of departments,subdepartments,designations,&lt;br /&gt;* date range to be used while populating report&lt;br /&gt;*/&lt;br /&gt;//System.out.println(&amp;quot;report from date:&amp;quot;+this.getFilter().getFromDate()+&amp;quot;..todate:&amp;quot;+this.getFilter().getToDate());&lt;br /&gt;this.setFilter((ReviewFilterDTO)this.initialize(this.getFilter()));&lt;br /&gt;this.setReviewReportList(this.service.generateReport(this.getFilter()));&lt;br /&gt;return &amp;quot;&amp;quot;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//initialize method&lt;br /&gt;@Override&lt;br /&gt;public DTO initialize(DTO dto) {&lt;br /&gt;/**&lt;br /&gt;* Description:&lt;br /&gt;* &amp;lt;li&amp;gt;this method has been overrided to initialze the review filters&amp;lt;/li&amp;gt;&lt;br /&gt;* @author rbaral&lt;br /&gt;* @since Nov 24 2010&lt;br /&gt;*/&lt;br /&gt;this.getFilter().getSelectedDepartments().clear();&lt;br /&gt;this.getFilter().getSelectedSubDepartments().clear();&lt;br /&gt;this.getFilter().getSelectedDesignations().clear();&lt;br /&gt;this.getFilter().getSelectedHeaders().clear();&lt;br /&gt;//add selected departments&lt;br /&gt;for(int i=0;i&amp;lt;allDepartment.size();i++){&lt;br /&gt;DepartmentDTO department=(DepartmentDTO)allDepartment.get(i);&lt;br /&gt;if(allDeptChecked){&lt;br /&gt;this.getFilter().getSelectedDepartments().put(department.getDepartmentID(),department);&lt;br /&gt;}&lt;br /&gt;else{&lt;br /&gt;if(department.isDeptChecked()){&lt;br /&gt;this.getFilter().getSelectedDepartments().put(department.getDepartmentID(),department);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//add selected subdepartments&lt;br /&gt;if(subDepartments!=null)&lt;br /&gt;for(int i=0;i&amp;lt;subDepartments.size();i++){&lt;br /&gt;SubDepartmentDTO subDepartment=(SubDepartmentDTO)subDepartments.get(i);&lt;br /&gt;if(allSubDeptChecked)&lt;br /&gt;this.getFilter().getSelectedSubDepartments().put(subDepartment.getSubDepartmentID(), subDepartment);&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;if(subDepartment.isSubDeptChecked())&lt;br /&gt;this.getFilter().getSelectedSubDepartments().put(subDepartment.getSubDepartmentID(), subDepartment);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//add selected designation&lt;br /&gt;if(allDesignation!=null)&lt;br /&gt;for(int i=0;i&amp;lt;allDesignation.size();i++){&lt;br /&gt;DesignationDTO designation=(DesignationDTO)allDesignation.get(i);&lt;br /&gt;if(allDesgChecked){&lt;br /&gt;this.getFilter().getSelectedDesignations().put(designation.getId(), designation);&lt;br /&gt;}&lt;br /&gt;else{&lt;br /&gt;if(designation.isDesgChecked())&lt;br /&gt;this.getFilter().getSelectedDesignations().put(designation.getId(), designation);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;//add selected headers&lt;br /&gt;if(this.checkAllHeaders){&lt;br /&gt;//System.out.println(&amp;quot;*****************all headers set&amp;quot;);&lt;br /&gt;this.getFilter().setAllHeadersSelected(true);&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;appraiser&amp;quot;);&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;appraisee&amp;quot;);&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;dept&amp;quot;);&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;subdept&amp;quot;);&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;design&amp;quot;);&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;review&amp;quot;);&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;reviewdate&amp;quot;);&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;rating&amp;quot;);&lt;br /&gt;}else{&lt;br /&gt;this.getFilter().setAllHeadersSelected(false);&lt;br /&gt;/**&lt;br /&gt;* &amp;lt;li&amp;gt;the elements to be added to the list&amp;lt;/li&amp;gt;&lt;br /&gt;* &amp;lt;li&amp;gt;are the one that are defined in the respective DTO&amp;lt;/li&amp;gt;&lt;br /&gt;*/&lt;br /&gt;if(this.checkAppraiserHeader)&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;appraiser&amp;quot;);&lt;br /&gt;if(this.checkAppraiseeHeader)&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;appraisee&amp;quot;);&lt;br /&gt;if(this.checkDeptHeader)&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;dept&amp;quot;);&lt;br /&gt;if(this.checkSubDeptHeader)&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;subdept&amp;quot;);&lt;br /&gt;if(this.checkDesiHeader)&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;design&amp;quot;);&lt;br /&gt;if(this.checkReviewHeader)&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;review&amp;quot;);&lt;br /&gt;if(this.checkReviewDateHeader)&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;reviewdate&amp;quot;);&lt;br /&gt;if(this.checkRatingHeader)&lt;br /&gt;this.getFilter().getSelectedHeaders().add(&amp;quot;rating&amp;quot;);&lt;br /&gt;}&lt;br /&gt;//System.out.println(&amp;quot;*********************after init total headers:&amp;quot;+this.getFilter().getSelectedHeaders().size());&lt;br /&gt;return this.getFilter();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Filter Class&lt;br /&gt;package com......&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.Date;&lt;br /&gt;import java.util.HashMap;&lt;br /&gt;import java.util.List;&lt;br /&gt;import java.util.Map;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* &lt;br /&gt;* FileName:ReviewFilterDTO.java&lt;br /&gt;* Version:1.0&lt;br /&gt;* @author:Ramesh Raj Baral&lt;br /&gt;* @since:Nov 17, 2010&lt;br /&gt;* Description:&lt;br /&gt;* &amp;lt;li&amp;gt;This class is used for implementing filter expressions&amp;lt;/li&amp;gt;&lt;br /&gt;* &amp;lt;li&amp;gt;for the ReviewReport page&amp;lt;/li&amp;gt;&lt;br /&gt;*/&lt;br /&gt;public class ReviewFilterDTO implements DTO {&lt;br /&gt;&lt;br /&gt;private String expForAppraisee=&amp;quot;&amp;quot;;&lt;br /&gt;private String expForAppraiser=&amp;quot;&amp;quot;;&lt;br /&gt;private String expForReview=&amp;quot;&amp;quot;;&lt;br /&gt;private String expForDepartment=&amp;quot;&amp;quot;;&lt;br /&gt;private String expForSubDepartment=&amp;quot;&amp;quot;;&lt;br /&gt;private String expForRating=&amp;quot;&amp;quot;;&lt;br /&gt;private String expForReviewDate=&amp;quot;&amp;quot;;&lt;br /&gt;private String expForDesignation=&amp;quot;&amp;quot;;&lt;br /&gt;private Date fromDate;&lt;br /&gt;private Date toDate;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* added to track the respective selected values&lt;br /&gt;*/&lt;br /&gt;Map selectedDepartments=new HashMap();&lt;br /&gt;Map selectedSubDepartments=new HashMap();&lt;br /&gt;Map selectedDesignations=new HashMap();&lt;br /&gt;/**&lt;br /&gt;* added to tracke the respective selected headers&lt;br /&gt;*/&lt;br /&gt;List selectedHeaders=new ArrayList();&lt;br /&gt;private boolean allHeadersSelected=true;&lt;br /&gt;&lt;br /&gt;public String getExpForAppraisee() {&lt;br /&gt;return expForAppraisee.trim();&lt;br /&gt;}&lt;br /&gt;public void setExpForAppraisee(String expForAppraisee) {&lt;br /&gt;this.expForAppraisee = expForAppraisee;&lt;br /&gt;}&lt;br /&gt;public String getExpForAppraiser() {&lt;br /&gt;return expForAppraiser.trim();&lt;br /&gt;}&lt;br /&gt;public void setExpForAppraiser(String expForAppraiser) {&lt;br /&gt;//System.out.println(&amp;quot;**************************setting expForappraiser:&amp;quot;+expForAppraiser);&lt;br /&gt;this.expForAppraiser = expForAppraiser;&lt;br /&gt;}&lt;br /&gt;public String getExpForReview() {&lt;br /&gt;return expForReview.trim();&lt;br /&gt;}&lt;br /&gt;public void setExpForReview(String expForReview) {&lt;br /&gt;this.expForReview = expForReview;&lt;br /&gt;}&lt;br /&gt;public String getExpForDepartment() {&lt;br /&gt;return expForDepartment.trim();&lt;br /&gt;}&lt;br /&gt;public void setExpForDepartment(String expForDepartment) {&lt;br /&gt;this.expForDepartment = expForDepartment;&lt;br /&gt;}&lt;br /&gt;public String getExpForSubDepartment() {&lt;br /&gt;return expForSubDepartment.trim();&lt;br /&gt;}&lt;br /&gt;public void setExpForSubDepartment(String expForSubDepartment) {&lt;br /&gt;this.expForSubDepartment = expForSubDepartment;&lt;br /&gt;}&lt;br /&gt;public String getExpForRating() {&lt;br /&gt;return expForRating.trim();&lt;br /&gt;}&lt;br /&gt;public void setExpForRating(String expForRating) {&lt;br /&gt;//System.out.println(&amp;quot;**************************setting expForRating:&amp;quot;+expForRating);&lt;br /&gt;this.expForRating = expForRating;&lt;br /&gt;}&lt;br /&gt;public String getExpForReviewDate() {&lt;br /&gt;return expForReviewDate.trim();&lt;br /&gt;}&lt;br /&gt;public void setExpForReviewDate(String expForReviewDate) {&lt;br /&gt;this.expForReviewDate = expForReviewDate;&lt;br /&gt;}&lt;br /&gt;public String getExpForDesignation() {&lt;br /&gt;return expForDesignation.trim();&lt;br /&gt;}&lt;br /&gt;public void setExpForDesignation(String expForDesignation) {&lt;br /&gt;this.expForDesignation = expForDesignation;&lt;br /&gt;}&lt;br /&gt;public Map getSelectedDepartments() {&lt;br /&gt;return selectedDepartments;&lt;br /&gt;}&lt;br /&gt;public Map getSelectedSubDepartments() {&lt;br /&gt;return selectedSubDepartments;&lt;br /&gt;}&lt;br /&gt;public Map getSelectedDesignations() {&lt;br /&gt;return selectedDesignations;&lt;br /&gt;}&lt;br /&gt;public Date getFromDate() {&lt;br /&gt;return fromDate;&lt;br /&gt;}&lt;br /&gt;public void setFromDate(Date fromDate) {&lt;br /&gt;this.fromDate = fromDate;&lt;br /&gt;}&lt;br /&gt;public Date getToDate() {&lt;br /&gt;return toDate;&lt;br /&gt;}&lt;br /&gt;public void setToDate(Date toDate) {&lt;br /&gt;this.toDate = toDate;&lt;br /&gt;}&lt;br /&gt;public boolean isAllHeadersSelected() {&lt;br /&gt;return allHeadersSelected;&lt;br /&gt;}&lt;br /&gt;public void setAllHeadersSelected(boolean allHeadersSelected) {&lt;br /&gt;this.allHeadersSelected = allHeadersSelected;&lt;br /&gt;}&lt;br /&gt;public List getSelectedHeaders() {&lt;br /&gt;return selectedHeaders;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//service level methods:&lt;br /&gt;2) In Service:&lt;br /&gt;@Override&lt;br /&gt;public List generateReport(DTO filterCriteria) {&lt;br /&gt;return this.dao.getModels(filterCriteria);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;3)In DAO:&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;public List&amp;lt;DTO&amp;gt; getModels(DTO searchCriteria) {&lt;br /&gt;/**&lt;br /&gt;* &amp;lt;li&amp;gt;has been overridden to get the review reports which satisfy the&amp;lt;/li&amp;gt;&lt;br /&gt;* &amp;lt;li&amp;gt;filter criteria provided as parameter&amp;lt;/li&amp;gt;&lt;br /&gt;* &amp;lt;li&amp;gt;filter criteria includes selected departments,subdepartments,designations&amp;lt;/li&amp;gt;&lt;br /&gt;* TODO &lt;br /&gt;* handle user filter expressions also&lt;br /&gt;*/&lt;br /&gt;ReviewFilterDTO filterDTO=(ReviewFilterDTO)searchCriteria;&lt;br /&gt;&lt;br /&gt;List reviewReportList=new ArrayList();&lt;br /&gt;HibernateTemplate ht = getHibernateTemplate();&lt;br /&gt;Session sess = getSession();&lt;br /&gt;Map selDeptMap=filterDTO.getSelectedDepartments();&lt;br /&gt;Map selSubDeptMap=filterDTO.getSelectedSubDepartments();&lt;br /&gt;Map selDesignationMap=filterDTO.getSelectedDesignations();&lt;br /&gt;int i=0;&lt;br /&gt;String[] deptObjects=null;&lt;br /&gt;if(selDeptMap!=null &amp;amp;&amp;amp; selDeptMap.size()&amp;gt;0){&lt;br /&gt;deptObjects=new String[selDeptMap.size()];&lt;br /&gt;Iterator iter=selDeptMap.keySet().iterator();&lt;br /&gt;while(iter.hasNext()){&lt;br /&gt;DepartmentDTO department=(DepartmentDTO)selDeptMap.get(iter.next());&lt;br /&gt;deptObjects[i]=department.getDepartmentName(); &lt;br /&gt;i++;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;//user expression for department&lt;br /&gt;String[] subDeptObjects=null;&lt;br /&gt;if(selSubDeptMap!=null &amp;amp;&amp;amp; selSubDeptMap.size()&amp;gt;0){&lt;br /&gt;i=0;&lt;br /&gt;subDeptObjects=new String[selSubDeptMap.size()];&lt;br /&gt;Iterator iter=selSubDeptMap.keySet().iterator();&lt;br /&gt;while(iter.hasNext()){&lt;br /&gt;SubDepartmentDTO subDepartment=(SubDepartmentDTO)selSubDeptMap.get(iter.next());&lt;br /&gt;subDeptObjects[i]=subDepartment.getSubDepartmentName(); &lt;br /&gt;i++;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;String[] designObjects=null;&lt;br /&gt;if(selDesignationMap!=null &amp;amp;&amp;amp; selDesignationMap.size()&amp;gt;0){&lt;br /&gt;i=0;&lt;br /&gt;designObjects=new String[selDesignationMap.size()];&lt;br /&gt;Iterator iter=selDesignationMap.keySet().iterator();&lt;br /&gt;while(iter.hasNext()){&lt;br /&gt;DesignationDTO designation=(DesignationDTO)selDesignationMap.get(iter.next());&lt;br /&gt;designObjects[i]=designation.getDesignationName(); &lt;br /&gt;i++;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Criteria crit = sess.createCriteria(ReviewReportDTO.class);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Criterion deptCriteria = Restrictions.in(&amp;quot;department&amp;quot;,deptObjects);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Criterion deptCriteriaFromExp=Restrictions.like(&amp;quot;department&amp;quot;, filterDTO.getExpForDepartment(), MatchMode.ANYWHERE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Criterion subdeptCriteria = Restrictions.in(&amp;quot;subdepartment&amp;quot;,subDeptObjects);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Criterion subdeptCriteriaFromExp=Restrictions.like(&amp;quot;department&amp;quot;, filterDTO.getExpForDepartment(), MatchMode.ANYWHERE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Criterion designCriteria = Restrictions.in(&amp;quot;designation&amp;quot;,designObjects);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Criterion designCriteriaFromExp=Restrictions.like(&amp;quot;department&amp;quot;, filterDTO.getExpForDepartment(), MatchMode.ANYWHERE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Criterion dateRangeCriteria=Restrictions.between(&amp;quot;reviewdate&amp;quot;, filterDTO.getFromDate(), filterDTO.getToDate());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Criterion fromDateCriteria=Restrictions.ge(&amp;quot;reviewdate&amp;quot;, filterDTO.getFromDate());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Criterion toDateCriteria=Restrictions.le(&amp;quot;reviewdate&amp;quot;, filterDTO.getToDate());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Conjunction conjunction = Restrictions.conjunction();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(filterDTO.getFromDate()!=null &amp;amp;&amp;amp; filterDTO.getToDate()!=null){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;  conjunction.add(dateRangeCriteria);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(filterDTO.getFromDate()!=null){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;  conjunction.add(fromDateCriteria);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(filterDTO.getToDate()!=null){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;  conjunction.add(toDateCriteria);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(deptObjects!=null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;  conjunction.add(deptCriteria);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(subDeptObjects!=null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;  conjunction.add(subdeptCriteria);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(designObjects!=null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;  conjunction.add(designCriteria);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(filterDTO.getFromDate()!=null||filterDTO.getToDate()!=null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;  crit.add(conjunction);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(deptObjects!=null || subDeptObjects!=null || designObjects!=null)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;  crit.add(conjunction);&lt;br /&gt;reviewReportList = crit.list();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return reviewReportList;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Specific Reports: PDF and xls&lt;br /&gt;A)PDF Report&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; In controller:&lt;br /&gt;public String generatePDFReport(){&lt;br /&gt;this.setFilter((ReviewFilterDTO)this.initialize(this.getFilter()));&lt;br /&gt;this.service.generatePdfReportFromView(this.getFilter().getSelectedHeaders(),reviewReportListForDisplay);&lt;br /&gt;return &amp;quot;&amp;quot;;&lt;br /&gt;}&lt;br /&gt;Corresponding method on Service:&lt;br /&gt;@Override&lt;br /&gt;public boolean generatePdfReportFromView(List headers, List reportElements) {&lt;br /&gt;JasperPrint jasperPrint=this.buildReport(headers, reportElements);&lt;br /&gt;this.reportGenerator.displayPdfReport(jasperPrint);&lt;br /&gt;return true;&lt;br /&gt;}&lt;br /&gt;//the buildReport(...,...) method has:&lt;br /&gt;@Override&lt;br /&gt;public JasperPrint buildReport(List headers, List data) {&lt;br /&gt;String title=&amp;quot;&amp;quot;;&lt;br /&gt;String subTitle=&amp;quot;&amp;quot;;&lt;br /&gt;JasperPrint jp=null;&lt;br /&gt;try {&lt;br /&gt;DynamicReportBuilder drb = new DynamicReportBuilder();&lt;br /&gt;//a default font available to windows and unix machine was used&lt;br /&gt;Font font = new Font(9, &amp;quot;SansSerif&amp;quot;, false);&lt;br /&gt;Font headerFont = new Font(10, &amp;quot;SansSerif&amp;quot;, true,false,true);&lt;br /&gt;Style titleStyle = new StyleBuilder(false).setFont(font).setVerticalAlign(VerticalAlign.JUSTIFIED).setStretchWithOverflow(true).build();&lt;br /&gt;Style headerStyle = new StyleBuilder(false).setFont(headerFont).setHorizontalAlign(HorizontalAlign.JUSTIFY)&lt;br /&gt;.setVerticalAlign(VerticalAlign.JUSTIFIED).build();&lt;br /&gt;drb&lt;br /&gt;.setTitle(title)&lt;br /&gt;.setSubtitle(subTitle)&lt;br /&gt;.setDetailHeight(15)&lt;br /&gt;.setMargins(30, 20, 15, 15)&lt;br /&gt;.setColumnsPerPage(1).setReportName(&amp;quot;Employee Review Report&amp;quot;)&lt;br /&gt;.setSubtitleStyle(titleStyle).setTitleStyle(titleStyle)&lt;br /&gt;.setDefaultStyles(titleStyle, titleStyle, headerStyle,titleStyle)&lt;br /&gt;.setHeaderHeight(15)&lt;br /&gt;.setReportName(&amp;quot;Appraisal Review Report&amp;quot;)&lt;br /&gt;.addAutoText(AutoText.AUTOTEXT_PAGE_X_OF_Y,Position.POSITION_TYPE_FIX_RELATIVE_TO_BOTTOM.getValue(),HorizontalBandAlignment.CENTER.getAlignment())&lt;br /&gt;.addAutoText(&amp;quot;Appraisal &lt;a HREF="mailto:Copyright@2010"&gt;Copyright@2010&lt;/A&gt;&amp;quot;,Position.POSITION_TYPE_FIX_RELATIVE_TO_TOP.getValue(),HorizontalBandAlignment.CENTER.getAlignment())&lt;br /&gt;.setPrintBackgroundOnOddRows(true);&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Column definitions. We use a new ColumnBuilder instance for each&lt;br /&gt;* column, the ColumnBuilder.getNew() method returns a new instance&lt;br /&gt;* of the builder. the property of &amp;lt;code&amp;gt;dto&amp;lt;/code&amp;gt; should all be&lt;br /&gt;* casted into string or their proper data type should be used&lt;br /&gt;* instead before populating report&lt;br /&gt;*/&lt;br /&gt;String headerName;&lt;br /&gt;AbstractColumn[] columns = new AbstractColumn[headers.size()];&lt;br /&gt;System.out&lt;br /&gt;.println(&amp;quot;********************total entries sent to report:&amp;quot;+ data.size());&lt;br /&gt;List data1 = new ArrayList(data.size());&lt;br /&gt;for (int j = 0; j &amp;lt; headers.size(); j++) {&lt;br /&gt;headerName = headers.get(j).toString();&lt;br /&gt;//System.out.println(&amp;quot;*****************headerName:&amp;quot; + headerName);&lt;br /&gt;columns[j] = ColumnBuilder.getNew().setColumnProperty(&lt;br /&gt;headerName, String.class.getName())&lt;br /&gt;.setColumnType(ColumnBuilder.COLUMN_TYPE_DEFAULT)&lt;br /&gt;.setTitle(headerName.toUpperCase()).setWidth(85)&lt;br /&gt;.build();&lt;br /&gt;columns[j].setStyle(titleStyle);&lt;br /&gt;drb.addColumn(columns[j]);&lt;br /&gt;}&lt;br /&gt;int fieldsIndex=0;&lt;br /&gt;String mapKey=&amp;quot;&amp;quot;;&lt;br /&gt;String mapValue=&amp;quot;&amp;quot;;&lt;br /&gt;String []userString=null;&lt;br /&gt;for(int i=0;i&amp;lt;data.size();i++){&lt;br /&gt;Map&amp;lt;String, String&amp;gt; map1 = new HashMap&amp;lt;String, String&amp;gt;();&lt;br /&gt;ReviewReportDTO reviewReportDTO=(ReviewReportDTO)data.get(i);&lt;br /&gt;//System.out.println(&amp;quot;**************reportdto string:&amp;quot;+reviewReportDTO.toString());&lt;br /&gt;userString=reviewReportDTO.toString().split(&amp;quot;,&amp;quot;);&lt;br /&gt;do{&lt;br /&gt;mapKey=userString[fieldsIndex].toString().split(&amp;quot;=&amp;quot;)[0];&lt;br /&gt;mapValue=&amp;quot;&amp;quot;;&lt;br /&gt;if(userString[fieldsIndex].split(&amp;quot;=&amp;quot;).length&amp;gt;1){&lt;br /&gt;mapValue=userString[fieldsIndex].split(&amp;quot;=&amp;quot;)[1]==null?&amp;quot;&amp;quot;:userString[fieldsIndex].split(&amp;quot;=&amp;quot;)[1];&lt;br /&gt;}&lt;br /&gt;/**&lt;br /&gt;* if the selected header element and the element in the DTO string are common then only add it to the map&lt;br /&gt;*/&lt;br /&gt;if(headers.contains(mapKey)){&lt;br /&gt;//System.out.println(&amp;quot;***************adding object:&amp;quot;+mapKey+&amp;quot;...=...&amp;quot;+ mapValue+&amp;quot;..in headerindex:&amp;quot;+headerIndex);&lt;br /&gt;map1.put(mapKey,mapValue);&lt;br /&gt;}&lt;br /&gt;fieldsIndex++;&lt;br /&gt;}while(fieldsIndex&amp;lt;userString.length);&lt;br /&gt;data1.add(map1);&lt;br /&gt;fieldsIndex = 0;&lt;br /&gt;}&lt;br /&gt;drb.setUseFullPageWidth(true);&lt;br /&gt;DynamicReport dr = drb.build();&lt;br /&gt;JRDataSource ds = new JRBeanCollectionDataSource(data1, true);&lt;br /&gt;//String jrxmlString = DynamicJasperHelper.generateJRXML(dr,new ClassicLayoutManager(), new HashMap(), &amp;quot;&amp;quot;);&lt;br /&gt;//System.out.println(&amp;quot;****************generated jrxml is:\n&amp;quot;+jrxmlString);&lt;br /&gt;jp = DynamicJasperHelper.generateJasperPrint(dr,&lt;br /&gt;new ListLayoutManager(), ds);&lt;br /&gt;} catch (JRException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;} catch (ColumnBuilderException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;} catch (Exception ex) {&lt;br /&gt;System.out.println(&amp;quot;Exception occured while building report:&amp;quot;&lt;br /&gt;+ ex.getMessage());&lt;br /&gt;ex.printStackTrace();&lt;br /&gt;}&lt;br /&gt;return jp;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//the displayPdfReport method:&lt;br /&gt;public void displayPdfReport(JasperPrint jasperPrint){&lt;br /&gt;try{&lt;br /&gt;byte[]data=JasperExportManager.exportReportToPdf(jasperPrint);&lt;br /&gt;FacesContext context = FacesContext.getCurrentInstance();&lt;br /&gt;HttpServletResponse response = (HttpServletResponse) FacesContext&lt;br /&gt;.getCurrentInstance().getExternalContext().getResponse();&lt;br /&gt;response.setHeader(&amp;quot;Content-disposition&amp;quot;,&amp;quot;attachment; filename= EmployeeList.pdf&amp;quot;);&lt;br /&gt;response.setContentLength(data.length);&lt;br /&gt;response.setContentType(&amp;quot;application/pdf&amp;quot;);&lt;br /&gt;try {&lt;br /&gt;&lt;br /&gt;response.getOutputStream().write(data);&lt;br /&gt;response.getOutputStream().flush();&lt;br /&gt;response.getOutputStream().close();&lt;br /&gt;context.responseComplete();&lt;br /&gt;}catch(Exception ex){&lt;br /&gt;System.out.println(&amp;quot;*************inner exception&amp;quot;);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;catch(JRException ex){&lt;br /&gt;System.out.println(&amp;quot;***************exception inside basereportgenerator:&amp;quot;+ex.getMessage());&lt;br /&gt;ex.printStackTrace();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Similarly for Excel Report we can use the method: displayExcelReport as shown below:&lt;br /&gt;public void displayExcelReport(JasperPrint jasperPrint){&lt;br /&gt;Font font = new Font(12, &amp;quot;SansSerif&amp;quot;, true);&lt;br /&gt;Style titleStyle = new StyleBuilder(false).setFont(font).build();&lt;br /&gt;JRXlsExporter exporter = new JRXlsExporter();&lt;br /&gt;try {&lt;br /&gt;byte[] data = JasperExportManager.exportReportToPdf(jasperPrint);&lt;br /&gt;FacesContext context = FacesContext.getCurrentInstance();&lt;br /&gt;HttpServletResponse response = (HttpServletResponse) FacesContext&lt;br /&gt;.getCurrentInstance().getExternalContext().getResponse();&lt;br /&gt;&lt;br /&gt;ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();&lt;br /&gt;response = (HttpServletResponse)context.getExternalContext().getResponse();&lt;br /&gt;&lt;br /&gt;String contentType = &amp;quot;application/vnd.ms-excel&amp;quot;;&lt;br /&gt;response.addHeader(&amp;quot;Content-disposition&amp;quot;, &amp;quot;attachment; filename=EmployeeList.xls&amp;quot;);&lt;br /&gt;response.setContentType(contentType);&lt;br /&gt;byte[] bytes = null;&lt;br /&gt;ByteArrayOutputStream xlsReport = new ByteArrayOutputStream();&lt;br /&gt;OutputStream output = response.getOutputStream();&lt;br /&gt;JRXlsExporter exporter1 = new JRXlsExporter();&lt;br /&gt;ServletOutputStream servletOutputStream =response.getOutputStream();&lt;br /&gt;exporter1.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);&lt;br /&gt;exporter1.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,Boolean.FALSE);&lt;br /&gt;exporter1.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);&lt;br /&gt;exporter1.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, xlsReport);&lt;br /&gt;exporter1.setParameter(JRXlsExporterParameter.SHEET_NAMES, new String[]{&amp;quot;Employees&amp;quot;, &amp;quot;Review&amp;quot;});&lt;br /&gt;exporter1.setParameter(JRXlsExporterParameter.IGNORE_PAGE_MARGINS,Boolean.TRUE);&lt;br /&gt;exporter1.setParameter(JRXlsExporterParameter.OFFSET_X, 0);&lt;br /&gt;exporter1.setParameter(JRXlsExporterParameter.IS_IGNORE_CELL_BORDER, Boolean.FALSE);&lt;br /&gt;exporter1.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE);&lt;br /&gt;exporter1.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, false);&lt;br /&gt;exporter1.exportReport();&lt;br /&gt;bytes = xlsReport.toByteArray();&lt;br /&gt;context.responseComplete();&lt;br /&gt;output.write(xlsReport.toByteArray());&lt;br /&gt;ServletOutputStream outputStream1 = response.getOutputStream();&lt;br /&gt;outputStream1.write(bytes);&lt;br /&gt;context.renderResponse();&lt;br /&gt;servletOutputStream.flush();&lt;br /&gt;servletOutputStream.close();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;} catch (Exception e) {&lt;br /&gt;// TODO Auto-generated catch block&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Here,&lt;br /&gt;List data parameter is of type ArrayList and has the list of the objects to be displayed on the page.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table CELLSPACING="0" CELLPADDING="0" WIDTH="100%"&gt;&lt;tr&gt; &lt;td&gt; Thanks,&lt;br /&gt;Ramesh. &lt;/TD&gt; &lt;/TR&gt;&lt;/TABLE&gt;&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-1160576201400429317?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/1160576201400429317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/12/dynamicjasper-to-generate-dynamic.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/1160576201400429317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/1160576201400429317'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/12/dynamicjasper-to-generate-dynamic.html' title='DynamicJasper to Generate Dynamic Reports'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-9111527309354876071</id><published>2010-12-06T03:30:00.000-08:00</published><updated>2010-12-06T03:33:22.568-08:00</updated><title type='text'>saveOrUpdate(Object) Hibernate: a different object with the same identifier value was already associated with the session:</title><content type='html'>this common problem in hibernate transaction can be solved by defining a new session ojbect for each transaction and commit or rollback the transaction in the DataAccess Object level.&lt;br /&gt;&lt;br /&gt;Following code snippet in DAO level was used to solve the problem:&lt;br /&gt;&lt;br /&gt;&lt;i&gt; Transaction tx=null;&lt;br /&gt;Session sess = SessionFactoryUtils.getNewSession(getSessionFactory());&lt;br /&gt;try {&lt;br /&gt;tx = sess.beginTransaction();&lt;br /&gt;sess.saveOrUpdate(updatedModel);&lt;br /&gt;tx.commit();&lt;br /&gt;}&lt;br /&gt;catch (JDBCException e) {&lt;br /&gt;return false;&lt;br /&gt;}&lt;br /&gt;catch(Exception ex){&lt;br /&gt;System.out.println("****************************exception sent"+ex.getMessage());&lt;br /&gt;}&lt;br /&gt;finally {&lt;br /&gt;sess.close();&lt;br /&gt;}&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;Ramesh.&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-9111527309354876071?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/9111527309354876071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/12/solving-hinberate-different-object-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/9111527309354876071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/9111527309354876071'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/12/solving-hinberate-different-object-with.html' title='saveOrUpdate(Object) Hibernate: a different object with the same identifier value was already associated with the session:'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-840468004694970407</id><published>2010-12-06T03:16:00.000-08:00</published><updated>2010-12-06T03:16:42.408-08:00</updated><title type='text'>Rich Faces CalendarDataModel</title><content type='html'>Often we might want to control the calendar object of our view from the server side.&lt;br /&gt;For instance I needed the user to be prevented from selecting the date before today. This was achieved using the CalendarDataModel.&lt;br /&gt;&lt;br /&gt;Simply use the following steps:&lt;br /&gt;1)In your view with &lt;rich:calendar...&gt; element add the following property:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;dataModel="#{calendarDataModel}" mode="ajax"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;--here dataModel property indicates the model to be used. The mode defines whether to operate on client mode or on ajax mode. To use datamodel we need to have ajax mode to be used.&lt;br /&gt;&lt;br /&gt;2)Now register the bean named calendarDataModel in your applicationContext.xml(for spring application) or in faces-config.xml in JSF based application or wherever appropriate(depending on the requirement)&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;bean id="calendarDataModel" class=".......CalendarDataModelImpl"/&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;3)Now Define the classes CalendarDataModelImpl and CalendarDataModelItemImpl as shown below:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Class CalendarDataModelImpl.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;package .......&lt;br /&gt;&lt;br /&gt;import java.util.Calendar;&lt;br /&gt;import java.util.Date;&lt;br /&gt;import java.util.HashMap;&lt;br /&gt;import java.util.Map;&lt;br /&gt;&lt;br /&gt;import javax.faces.event.ValueChangeEvent;&lt;br /&gt;&lt;br /&gt;import org.richfaces.model.CalendarDataModel;&lt;br /&gt;import org.richfaces.model.CalendarDataModelItem;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * &lt;br /&gt; * FileName:CalendarDataModelImpl.java&lt;br /&gt; * Version:1.0&lt;br /&gt; * @author:Ramesh Raj Baral&lt;br /&gt; * @since:Dec 6, 2010&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;public class CalendarDataModelImpl implements CalendarDataModel {&lt;br /&gt; &lt;br /&gt;    private CalendarDataModelItem[] items;&lt;br /&gt;    private String currentShortDescription;&lt;br /&gt;    private Date currentDate, beginDate, endDate;&lt;br /&gt;    private boolean currentDisabled;&lt;br /&gt;    &lt;br /&gt;       &lt;br /&gt;    public CalendarDataModelItem[] getData(Date[] dateArray) {&lt;br /&gt;       if (dateArray == null) {&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;        items = new CalendarDataModelItem[dateArray.length];&lt;br /&gt;        for (int i = 0; i &lt; dateArray.length; i++) {         items[i] = createDataModelItem(dateArray[i]);        }        return items;    }    /**     *      * Description:     * &lt;li&gt;has been used to prevent user to select the date before today&lt;/li&gt;&lt;br /&gt;     * createDataModelItem&lt;br /&gt;     * CalendarDataModelImpl&lt;br /&gt;     * @param date&lt;br /&gt;     * @return&lt;br /&gt;     * CalendarDataModelItem&lt;br /&gt;     * @author:Ramesh Raj Baral&lt;br /&gt;     * @since:Dec 6, 2010&lt;br /&gt;     *&lt;br /&gt;     */&lt;br /&gt;    protected CalendarDataModelItem createDataModelItem(Date date) {&lt;br /&gt;     CalendarDataModelItemImpl item = new CalendarDataModelItemImpl();&lt;br /&gt;        Map data = new HashMap();&lt;br /&gt;        Calendar c = Calendar.getInstance();&lt;br /&gt;        c.setTime(date);&lt;br /&gt;        item.setDay(c.get(Calendar.DAY_OF_MONTH));&lt;br /&gt;        /**&lt;br /&gt;         * if this date is before today then set it as disabled&lt;br /&gt;         */&lt;br /&gt;        Calendar today=Calendar.getInstance();&lt;br /&gt;        today.setTime(new Date());&lt;br /&gt;        int thisMonth=today.get(Calendar.MONTH);&lt;br /&gt;        int thisYear=today.get(Calendar.YEAR);&lt;br /&gt;        int thisDay=today.get(Calendar.DAY_OF_MONTH);&lt;br /&gt;        int selectedMonth=c.get(Calendar.MONTH);&lt;br /&gt;        int selectedYear=c.get(Calendar.YEAR);&lt;br /&gt;        int selectedDay=c.get(Calendar.DAY_OF_MONTH);&lt;br /&gt;        if(thisYear&gt;selectedYear){&lt;br /&gt;         item.setEnabled(false);&lt;br /&gt;         //item.setStyleClass("rich-bottom-cell rich-calendar-cell-size rich-calendar-cell rich-calendar-holly rich-right-cell rich-calendar-boundary-dates");&lt;br /&gt;        }&lt;br /&gt;        else if(thisMonth&gt;selectedMonth){&lt;br /&gt;         item.setEnabled(false);&lt;br /&gt;        }&lt;br /&gt;        else if(thisDay&gt;selectedDay){&lt;br /&gt;         item.setEnabled(false);&lt;br /&gt;        }&lt;br /&gt;        else{&lt;br /&gt;         item.setEnabled(true);&lt;br /&gt;         &lt;br /&gt;        }&lt;br /&gt;        item.setData(data); &lt;br /&gt;        return item;&lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;    public Object getToolTip(Date date) {&lt;br /&gt;     return "Date Previous to today is not allowed";&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @return items&lt;br /&gt;     */&lt;br /&gt;    public CalendarDataModelItem[] getItems() {&lt;br /&gt;     return items;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @param setter for items&lt;br /&gt;     */&lt;br /&gt;    public void setItems(CalendarDataModelItem[] items) {&lt;br /&gt;        this.items = items;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @param valueChangeEvent handling&lt;br /&gt;     */&lt;br /&gt;    public void valueChanged(ValueChangeEvent event) {&lt;br /&gt;     setCurrentDate((Date)event.getNewValue());&lt;br /&gt;        Calendar calendar = Calendar.getInstance();&lt;br /&gt;        calendar.setTime(getCurrentDate());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Storing changes action&lt;br /&gt;     */&lt;br /&gt;    public void storeDayDetails() {&lt;br /&gt;     Calendar calendar = Calendar.getInstance();&lt;br /&gt;        calendar.setTime(getCurrentDate());&lt;br /&gt;        ((HashMap)items[calendar.get(Calendar.DAY_OF_MONTH)-1].getData()).put("shortDescription", getCurrentShortDescription());&lt;br /&gt;     }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * @return currentDisabled&lt;br /&gt;     */&lt;br /&gt;    public boolean isCurrentDisabled() {&lt;br /&gt;        return currentDisabled;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @param currentDisabled&lt;br /&gt;     */&lt;br /&gt;    public void setCurrentDisabled(boolean currentDisabled) {&lt;br /&gt;        this.currentDisabled = currentDisabled;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @return currentShortDescription&lt;br /&gt;     */&lt;br /&gt;    public String getCurrentShortDescription() {&lt;br /&gt;        return currentShortDescription;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @param currentShortDescription&lt;br /&gt;     */&lt;br /&gt;    public void setCurrentShortDescription(String currentShortDescription) {&lt;br /&gt;        this.currentShortDescription = currentShortDescription;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @return currentDate&lt;br /&gt;     */&lt;br /&gt;    public Date getCurrentDate() {&lt;br /&gt;        return currentDate;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @param currentDate&lt;br /&gt;     */&lt;br /&gt;    public void setCurrentDate(Date currentDate) {&lt;br /&gt;        this.currentDate = currentDate;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt; public Date getBeginDate() {&lt;br /&gt;  Calendar calendar = Calendar.getInstance();&lt;br /&gt;  calendar.add(Calendar.DAY_OF_YEAR, -365);&lt;br /&gt;  return  calendar.getTime();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public Date getEndDate() {&lt;br /&gt;  Calendar calendar = Calendar.getInstance();&lt;br /&gt;  calendar.add(Calendar.DAY_OF_YEAR, 365);&lt;br /&gt;  return calendar.getTime();&lt;br /&gt; }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When the calendar item is loaded on the view the main method that will be triggered is:&lt;br /&gt;&lt;br /&gt;public CalendarDataModelItem[] getData(Date[] dateArray) {&lt;br /&gt;       ........&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So we can customize our bean as per our requirement.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Class CalendarDataModelItemImpl.java&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;package .........&lt;br /&gt;&lt;br /&gt;import org.richfaces.model.CalendarDataModelItem;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * &lt;br /&gt; * FileName:CalendarDataModelItemImpl.java&lt;br /&gt; * Version:1.0&lt;br /&gt; * @author:Ramesh Raj Baral&lt;br /&gt; * @since:Dec 6, 2010&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;public class CalendarDataModelItemImpl implements CalendarDataModelItem{&lt;br /&gt;&lt;br /&gt; private Object data;&lt;br /&gt; private int day;&lt;br /&gt; private String styleClass;&lt;br /&gt; private Object toolTip;&lt;br /&gt; private boolean isEnabled;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; @Override&lt;br /&gt; public Object getData() {&lt;br /&gt;  return data;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public int getDay() {&lt;br /&gt;  return day;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public String getStyleClass() {&lt;br /&gt;  // TODO Auto-generated method stub&lt;br /&gt;  return null;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public Object getToolTip() {&lt;br /&gt;  // TODO Auto-generated method stub&lt;br /&gt;  return null;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public boolean hasToolTip() {&lt;br /&gt;  return false;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public boolean isEnabled() {&lt;br /&gt;  return isEnabled;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setData(Object data) {&lt;br /&gt;  this.data = data;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setDay(int day) {&lt;br /&gt;  this.day = day;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setStyleClass(String styleClass) {&lt;br /&gt;  this.styleClass = styleClass;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setToolTip(Object toolTip) {&lt;br /&gt;  this.toolTip = toolTip;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void setEnabled(boolean isEnabled) {&lt;br /&gt;  this.isEnabled = isEnabled;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This class will access each and every element (item) of the date element. So we can change the corresponding attributes of the element if required.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Thanks a lot for the urls:&lt;br /&gt;&lt;a href="http://community.jboss.org/message/29742"&gt;http://community.jboss.org/message/29742&lt;/a&gt;&lt;br /&gt;&lt;a href="http://livedemo.exadel.com/richfaces-demo/richfaces/calendar.jsf?tab=info&amp;cid=97823"&gt;RichFaces LiveDemo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PS:This code has been successfully implemented for my requirement.&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;Ramesh.&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-840468004694970407?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/840468004694970407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/12/rich-faces-calendardatamodel.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/840468004694970407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/840468004694970407'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/12/rich-faces-calendardatamodel.html' title='Rich Faces CalendarDataModel'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-9072213586255597091</id><published>2010-11-13T22:16:00.000-08:00</published><updated>2010-11-13T22:16:21.937-08:00</updated><title type='text'>Automatic startup and shutdown of oracle on unix machines</title><content type='html'>&lt;b&gt;how to automate start and shutdown of Oracle database with the start up and shutdown of Operating system is described here:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1)&lt;b&gt; Open the oratab file as root user in any text editor:&lt;/b&gt;&lt;br /&gt;      # vi /etc/oratab&lt;br /&gt;     Database entries in the oratab file are displayed in the following format:&lt;br /&gt;&lt;br /&gt;      SID:ORACLE_HOME:{Y|N}&lt;br /&gt;&lt;br /&gt;      In this example, Y or N specifies whether you want the scripts to start up or shut down the database. For each database for which you want to automate shutdown and startup, first find the instance identifier (SID) for that database, which is identified by the SID in the first field. Then, change the last field for each to Y&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2)Then create a file dbora inside /etc/int.d with the following content&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;#! /bin/sh  -x&lt;br /&gt;#&lt;br /&gt;# Change the value of ORACLE_HOME to specify the correct Oracle home&lt;br /&gt;# directory for your installation.&lt;br /&gt;&lt;br /&gt;ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1&lt;br /&gt;#&lt;br /&gt;# Change the value of ORACLE to the login name of the&lt;br /&gt;# oracle owner at your site.&lt;br /&gt;#&lt;br /&gt;ORACLE=oracle&lt;br /&gt;&lt;br /&gt;PATH=${PATH}:$ORACLE_HOME/bin&lt;br /&gt;HOST='hostname'&lt;br /&gt;PLATFORM='Linux'&lt;br /&gt;export ORACLE_HOME PATH&lt;br /&gt;#&lt;br /&gt;if [ ! "$2" = "ORA_DB" ] ; then&lt;br /&gt;   if [ "$PLATFORM" = "HP-UX" ] ; then&lt;br /&gt;      remsh $HOST -l $ORACLE -n "$0 $1 ORA_DB"&lt;br /&gt;      exit&lt;br /&gt;   else&lt;br /&gt;      rsh $HOST -l $ORACLE  $0 $1 ORA_DB&lt;br /&gt;      exit&lt;br /&gt;   fi&lt;br /&gt;fi&lt;br /&gt;#&lt;br /&gt;case $1 in&lt;br /&gt;'start')&lt;br /&gt;        if [ "$PLATFORM" = "Linux" ] ; then&lt;br /&gt;          touch /var/lock/subsys/dbora&lt;br /&gt;        fi&lt;br /&gt;        $ORACLE_HOME/bin/dbstart $ORACLE_HOME &amp;&lt;br /&gt;        ;;&lt;br /&gt;$ORACLE_HOME/bin/lsnrctl start LISTENER;;&lt;br /&gt;&lt;br /&gt;'stop')&lt;br /&gt;        $ORACLE_HOME/bin/dbshut $ORACLE_HOME &amp;&lt;br /&gt;        ;;&lt;br /&gt;$ORACLE_HOME/bin/lsnrctl start LISTENER;;&lt;br /&gt;*)&lt;br /&gt;        echo "usage: $0 {start|stop}"&lt;br /&gt;        exit&lt;br /&gt;        ;;&lt;br /&gt;esac&lt;br /&gt;#&lt;br /&gt;exit&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;**Note:ORACLE_HOME: points to the oracle directory where it has the runnable script for oracle&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3)Change the group of the dbora file to the OSDBA group (typically dba), and set the permissions to 750:&lt;/b&gt;&lt;br /&gt;# chgrp dba dbora&lt;br /&gt;# chmod 750 dbora&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4)Create symbolic links to the dbora script in the appropriate run-level script directories as follows&lt;/b&gt;&lt;br /&gt;# ln -s /etc/init.d/dbora /etc/rc.d/rc3.d/K01dbora&lt;br /&gt;# ln -s /etc/init.d/dbora /etc/rc.d/rc3.d/S99dbora&lt;br /&gt;# ln -s /etc/init.d/dbora /etc/rc.d/rc5.d/K01dbora&lt;br /&gt;# ln -s /etc/init.d/dbora /etc/rc.d/rc5.d/S99dbora&lt;br /&gt;&lt;br /&gt;Try restarting your server and after the server has successfully restarted check the connectivity to oracle. It should work fine.&lt;br /&gt;&lt;br /&gt;Thank you.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Thanks for:&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b15658/strt_stp.htm#CFAHAHGA"&gt;http://download.oracle.com/docs/cd/B19306_01/server.102/b15658/strt_stp.htm#CFAHAHGA&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-9072213586255597091?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/9072213586255597091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/11/automatic-startup-and-shutdown-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/9072213586255597091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/9072213586255597091'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/11/automatic-startup-and-shutdown-of.html' title='Automatic startup and shutdown of oracle on unix machines'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-801247929776693409</id><published>2010-10-14T03:41:00.000-07:00</published><updated>2010-10-14T03:41:02.130-07:00</updated><title type='text'>OCA Basics-Part 1</title><content type='html'>&lt;b&gt;Remove Oracle&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;First of all we will remove the existing oracle in our machine.For this we will run the following commands listed with their purposes:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Issue following commands by oracle user:&lt;/i&gt;&lt;br /&gt;echo $ORACLE_BASE can be done to be sure for the value of $ORACLE_BASE.&lt;br /&gt;# rm -rf $ORACLE_BASE/*             #&lt;--- Removes Entire Oracle Software Directory&lt;i&gt;following commands can be removed by oracle/root user&lt;/i&gt;&lt;br /&gt;# rm -f /etc/oraInst.loc            #&lt;--- Removes Install Loc# rm -f /etc/oratab                 #&lt;--- Removes OraTab used by dbstart and dbshut scripts# rm -f /usr/local/bin/dbhome       #&lt;--- Removes Database Home Identifier Script# rm -f /usr/local/bin/oraenv       #&lt;--- Removes Env Script used by Bourne, Bash, or Korn shell# rm -f /usr/local/bin/coraenv      #&lt;--- Removes Env Script used by C shell--&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Install Oracle&lt;/b&gt;&lt;br /&gt;Now we will install the oracle application in our machine.&lt;br /&gt;--------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Steps to Install Oracle 10g Release 2 (10.2.0.1) on Red Hat Linux:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Download the 64-bit installation file 10201_database_linux_x86_64.cpio and place it in specific drive (/u01/d2dba)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Unpack the contents of the file:&lt;/i&gt;&lt;br /&gt;cpio -idmv &lt; 10201_database_linux_x86_64.cpio&lt;i&gt; Kernel parameter Setup&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Add the following lines to the /etc/sysctl.conf file:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;kernel.shmall = 4101757&lt;br /&gt;&lt;br /&gt;kernel.shmmax = 16800796672&lt;br /&gt;&lt;br /&gt;kernel.shmmni = 4096&lt;br /&gt;&lt;br /&gt;# semaphores: semmsl, semmns, semopm, semmni&lt;br /&gt;&lt;br /&gt;kernel.sem = 250 32000 100 128&lt;br /&gt;&lt;br /&gt;fs.file-max = 65536&lt;br /&gt;&lt;br /&gt;net.ipv4.ip_local_port_range = 1024 65000&lt;br /&gt;&lt;br /&gt;net.core.rmem_default=262144&lt;br /&gt;&lt;br /&gt;net.core.rmem_max=262144&lt;br /&gt;&lt;br /&gt;net.core.wmem_default=262144&lt;br /&gt;&lt;br /&gt;net.core.wmem_max=262144&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Run the following command to change the current kernel parameters:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;? /sbin/sysctl p&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Add the following lines to the /etc/security/limits.conf file:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;*        soft   nproc         2047&lt;br /&gt;&lt;br /&gt;*        hard   nproc         16384&lt;br /&gt;&lt;br /&gt;*        soft   nofile        2048&lt;br /&gt;&lt;br /&gt;*        hard   nofile        65536&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Add the following line to the /etc/pam.d/login file, if it does not already exist:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;session    required     /lib/security/pam_limits.so&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Install the following packages, if necessary:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;? # From RedHat AS3 Disk 2&lt;br /&gt;&lt;br /&gt;? cd /mnt/cdrom/RedHat/RPMS&lt;br /&gt;&lt;br /&gt;? rpm -Uvh setarch-1.3-1.i386.rpm&lt;br /&gt;&lt;br /&gt;? rpm -Uvh sysstat-4.0.7-4.EL3.3.i386.rpm&lt;br /&gt;&lt;br /&gt;? &lt;br /&gt;&lt;br /&gt;? # From RedHat AS3 Disk 3&lt;br /&gt;&lt;br /&gt;? cd /mnt/cdrom/RedHat/RPMS&lt;br /&gt;&lt;br /&gt;? rpm -Uvh openmotif21-2.1.30-8.i386.rpm&lt;br /&gt;&lt;br /&gt;? rpm -Uvh ORBit-0.5.17-10.4.i386.rpm&lt;br /&gt;&lt;br /&gt;? rpm -Uvh libpng10-1.0.13-15.i386.rpm&lt;br /&gt;&lt;br /&gt;? rpm -Uvh gnome-libs-1.4.1.2.90-34.1.i386.rpm&lt;br /&gt;&lt;br /&gt;? rpm -Uvh compat-glibc-7.x-2.2.4.32.6.i386.rpm \&lt;br /&gt;&lt;br /&gt;?          compat-gcc-7.3-2.96.128.i386.rpm \&lt;br /&gt;&lt;br /&gt;?          compat-gcc-c++-7.3-2.96.128.i386.rpm \&lt;br /&gt;&lt;br /&gt;?          compat-libstdc++-7.3-2.96.128.i386.rpm \&lt;br /&gt;&lt;br /&gt;?          compat-libstdc++-devel-7.3-2.96.128.i386.rpm&lt;br /&gt;&lt;br /&gt;&lt;b&gt;RPMs can be chzecked by :&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE} (%{ARCH})\n'&lt;br /&gt;binutils compat-db control-center gcc gcc-c++ glibc glibc-common gnome-libs libstdc++ libstdc++-devel &lt;br /&gt;make pdksh sysstat xscreensaver libaio libaio-devel&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt; Create the new groups and users:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;groupadd oinstall&lt;br /&gt;&lt;br /&gt;groupadd dba&lt;br /&gt;&lt;br /&gt;groupadd oper&lt;br /&gt;&lt;br /&gt;useradd -g oinstall -G dba -s /bin/ksh oracle&lt;br /&gt;&lt;br /&gt;passwd oracle&lt;br /&gt;&lt;br /&gt;chown oracle:oinstall /home/oracle -R&lt;br /&gt;&lt;br /&gt;yum install libXp&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Create the directories in which the Oracle software will be installed:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;mkdir -p /u01/app/oracle/product/j2ee_10_1_2&lt;br /&gt;&lt;br /&gt;chown -R oracle.oinstall /u01&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Login as root and issue the following command:&lt;br /&gt;&lt;br /&gt;xhost +&lt;machine-name&gt;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;&lt;br /&gt;[oracle@host database]$ export DISPLAY=192.168.112.36:0.0&lt;br /&gt;&lt;br /&gt;[oracle@host database]$ xhost +&lt;br /&gt;&lt;br /&gt;xhost:  unable to open display "192.168.112.36:0.0"&lt;br /&gt;&lt;br /&gt;[oracle@host database]$ export DISPLAY=192.168.112.36:2.0 (if :2)&lt;br /&gt;&lt;br /&gt;[oracle@host database]$ xhost +&lt;br /&gt;&lt;br /&gt;access control disabled, clients can connect from any host&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Edit .bash_profile as:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;# .bash_profile&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Get the aliases and functions&lt;br /&gt;&lt;br /&gt;if [ -f ~/.bashrc ]; then&lt;br /&gt;&lt;br /&gt;. ~/.bashrc&lt;br /&gt;&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# User specific environment and startup programs&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#PATH=$PATH:/usr/sbin:$PATH; export PATH&lt;br /&gt;&lt;br /&gt;#PATH=$ORACLE_HOME/bin:$PATH; export PATH&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE&lt;br /&gt;&lt;br /&gt;#ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME&lt;br /&gt;&lt;br /&gt;#PATH=$ORACLE_HOME/bin:$PATH; export PATH&lt;br /&gt;&lt;br /&gt;#LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;export ORACLE_SID=orcl&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PATH=$PATH:$HOME/bin&lt;br /&gt;&lt;br /&gt;ORACLE_BASE=/u01/app/oracle&lt;br /&gt;&lt;br /&gt;export ORACLE_BASE&lt;br /&gt;&lt;br /&gt;export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1&lt;br /&gt;&lt;br /&gt;export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch&lt;br /&gt;&lt;br /&gt;export LD_LIBRARY_PATH=$ORACLE_HOME/lib&lt;br /&gt;&lt;br /&gt;unset USERNAME&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#export PATH&lt;br /&gt;&lt;br /&gt;#unset USERNAME&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Log into the oracle user. If you are using X emulation then set the DISPLAY environmental variable:&lt;br /&gt;&lt;br /&gt;DISPLAY=&lt;machine-name&gt;:0.0; export DISPLAY&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Start the Oracle Universal Installer (OUI) by issuing the following command in the Disk1 directory:&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;./runInstaller&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Steps to upgrade Oracle 10.2.0.X to 10.2.0.4:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Download the oracle patch of 64-bit and uncompress it:&lt;br /&gt;&lt;br /&gt;unzip p6810189_10204_Linux-x86-64.zip&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Stop all the current oracle services issuing following commands:&lt;br /&gt;&lt;br /&gt;o emctl stop dbconsole&lt;br /&gt;&lt;br /&gt;o $ isqlplusctl stop&lt;br /&gt;&lt;br /&gt;o $ lsnrctl stop&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Shutdown the oracle instance:&lt;br /&gt;&lt;br /&gt;o Shutdown immediate&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now to enable X applications, run the following command on the machine that you want to use to display Oracle Universal Installer:&lt;br /&gt;&lt;br /&gt;o $ xhost + &lt;br /&gt;&lt;br /&gt;Go to the directory of Disk1 to locate runInstaller and issue following command to execute it:&lt;br /&gt;&lt;br /&gt;o ./runInstaller&lt;br /&gt;&lt;br /&gt;Follow the windows installation procedure of installation (OUI) &lt;br /&gt;&lt;br /&gt;Run $ORACLE_HOME/root.sh as root after completion&lt;br /&gt;&lt;br /&gt;? Supply the bin parameter when prompted &lt;br /&gt;&lt;br /&gt;On the End of Installation screen, click Exit, then click Yes to exit from Oracle Universal Installer&lt;br /&gt;&lt;br /&gt;Start the listener&lt;br /&gt;&lt;br /&gt;Enter the following command from the command prompt:&lt;br /&gt;&lt;br /&gt;dbua&lt;br /&gt;&lt;br /&gt;Follow the database Upgrade Assistance Windows instruction for upgrade to version 10.2.0.4.&lt;br /&gt;&lt;br /&gt;run $ORACLE_HOME/install/changePerm.sh&lt;br /&gt;&lt;br /&gt;&lt;b&gt;System Parameters to be configured &lt;/b&gt;&lt;br /&gt;alter system set filesystemio_options="asynch" scope=spfile;&lt;br /&gt;alter system set db_file_multiblock_read_count=128 scope=spfile;&lt;br /&gt;alter system set sga_max_size=19G scope=spfile;&lt;br /&gt;alter system set sga_target=19G scope=spfile;&lt;br /&gt;alter system set pga_aggregate_target=10G scope=spfile;&lt;br /&gt;alter system set "_gby_hash_aggregation_enabled"=false; &lt;br /&gt;--------------------------------------------------------&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-801247929776693409?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/801247929776693409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/10/oca-basics-part-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/801247929776693409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/801247929776693409'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/10/oca-basics-part-1.html' title='OCA Basics-Part 1'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-4246691764209090595</id><published>2010-07-15T10:19:00.000-07:00</published><updated>2010-07-15T10:19:52.666-07:00</updated><title type='text'>प्रकाश बराल द्वारा स्वरबद्द आधुनिक गीत</title><content type='html'>तिमी नडराउनु म मरेको हेर्दा ,&lt;br /&gt;आसुँ नबगाउनु मलाई कात्रोले बेर्दा &lt;br /&gt;जीवन हाम्रो खरानी हुनलाई &lt;br /&gt;बुझिदेउ तिमीले हुँदैन रुनलाई &lt;br /&gt;&lt;br /&gt;मैले भनेका यि कुरालाई ,&lt;br /&gt;उपहार ठानिदेउ पोते र चुरालाई  &lt;br /&gt;सिन्दुर तिमीलाई छु मैले दिएको  &lt;br /&gt;पर्दैन लगाउन सेतो बस्त्र कोराले सिएको &lt;br /&gt;&lt;br /&gt;साथमा सगै बस्न पाएनौ &lt;br /&gt;दैवले हामीलाई ठगेको छ &lt;br /&gt;तिमी देखी छुट्ट्याइ मलाई कतै अन्तै &lt;br /&gt;विरानो ठाउमा लगेको छ &lt;br /&gt;&lt;br /&gt;छन साना कोपिला तिम्रा साथमा &lt;br /&gt;सुम्पेको छु अब तिम्रै हातमा &lt;br /&gt;यिनकै मुहारमा मलाई हेरन &lt;br /&gt;यिनिहरुकै साथमा सुबाश फेरन &lt;br /&gt;&lt;br /&gt;तिमी नडराउनु म मरेको हेर्दा ,&lt;br /&gt;आसुँ नबगाउनु मलाई कात्रोले बेर्दा &lt;br /&gt;जीवन हाम्रो खरानी हुनलाई &lt;br /&gt;बुझिदेउ तिमीले हुँदैन रुनलाई&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-4246691764209090595?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/4246691764209090595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/07/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/4246691764209090595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/4246691764209090595'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/07/blog-post.html' title='प्रकाश बराल द्वारा स्वरबद्द आधुनिक गीत'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-7668818439112146278</id><published>2010-06-30T23:29:00.000-07:00</published><updated>2010-06-30T23:29:34.987-07:00</updated><title type='text'>Playing with Java and SVN</title><content type='html'>&lt;b&gt;Playing with Java and SVN:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;package svn;&lt;br /&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import org.tigris.subversion.javahl.ClientException;&lt;br /&gt;&lt;br /&gt;import org.tmatesoft.svn.core.SVNCommitInfo;&lt;br /&gt;&lt;br /&gt;import org.tmatesoft.svn.core.SVNDepth;&lt;br /&gt;&lt;br /&gt;import org.tmatesoft.svn.core.SVNException;&lt;br /&gt;&lt;br /&gt;import org.tmatesoft.svn.core.SVNURL;&lt;br /&gt;&lt;br /&gt;import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;&lt;br /&gt;&lt;br /&gt;import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;&lt;br /&gt;&lt;br /&gt;import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;&lt;br /&gt;&lt;br /&gt;import org.tmatesoft.svn.core.internal.wc.DefaultSVNOptions;&lt;br /&gt;&lt;br /&gt;import org.tmatesoft.svn.core.wc.SVNClientManager;&lt;br /&gt;&lt;br /&gt;import org.tmatesoft.svn.core.wc.SVNRevision;&lt;br /&gt;&lt;br /&gt;import org.tmatesoft.svn.core.wc.SVNUpdateClient;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class WorkingCopy {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;*jar files required:svnkit.jar,svnkit-cli.jar,svnkit-jhl.jar&lt;br /&gt;*tested o.k with jdk 1.5&lt;br /&gt;*&lt;br /&gt;*&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    private static SVNClientManager ourClientManager;&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;&lt;br /&gt;     * &lt;br /&gt;&lt;br /&gt;     * @param url&lt;br /&gt;&lt;br /&gt;     * @param commitMessage&lt;br /&gt;&lt;br /&gt;     * @return&lt;br /&gt;&lt;br /&gt;     * @throws SVNException&lt;br /&gt;&lt;br /&gt;     * creates a new directory immediately in a repository:&lt;br /&gt;&lt;br /&gt;     */&lt;br /&gt;&lt;br /&gt;    private static SVNCommitInfo makeDirectory( SVNURL url , String commitMessage ) throws SVNException {&lt;br /&gt;&lt;br /&gt;        return ourClientManager.getCommitClient( ).doMkDir( new SVNURL[] { url } , commitMessage );&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;    private static void setUpFactory(){&lt;br /&gt;&lt;br /&gt;     /*&lt;br /&gt;&lt;br /&gt;         * For using over http:// and https://&lt;br /&gt;&lt;br /&gt;         */&lt;br /&gt;&lt;br /&gt;        DAVRepositoryFactory.setup();&lt;br /&gt;&lt;br /&gt;        /*&lt;br /&gt;&lt;br /&gt;         * For using over svn:// and svn+xxx://&lt;br /&gt;&lt;br /&gt;         */&lt;br /&gt;&lt;br /&gt;        SVNRepositoryFactoryImpl.setup();&lt;br /&gt;&lt;br /&gt;        /*&lt;br /&gt;&lt;br /&gt;         * For using over file:///&lt;br /&gt;&lt;br /&gt;         */&lt;br /&gt;&lt;br /&gt;        //FSRepositoryFactory.setup();&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;&lt;br /&gt;     * &lt;br /&gt;&lt;br /&gt;     * @param localPath&lt;br /&gt;&lt;br /&gt;     * @param dstURL&lt;br /&gt;&lt;br /&gt;     * @param commitMessage&lt;br /&gt;&lt;br /&gt;     * @param isRecursive&lt;br /&gt;&lt;br /&gt;     * @return&lt;br /&gt;&lt;br /&gt;     * @throws SVNException&lt;br /&gt;&lt;br /&gt;     * imports a local directory to a repository: &lt;br /&gt;&lt;br /&gt;     */&lt;br /&gt;&lt;br /&gt;    private static SVNCommitInfo importDirectory( File localPath , SVNURL dstURL , String commitMessage , boolean isRecursive ) throws SVNException {&lt;br /&gt;&lt;br /&gt;        return ourClientManager.getCommitClient( ).doImport( localPath , dstURL , commitMessage , isRecursive );&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;&lt;br /&gt;     * &lt;br /&gt;&lt;br /&gt;     * @param wcPath&lt;br /&gt;&lt;br /&gt;     * @param keepLocks&lt;br /&gt;&lt;br /&gt;     * @param commitMessage&lt;br /&gt;&lt;br /&gt;     * @return&lt;br /&gt;&lt;br /&gt;     * @throws SVNException&lt;br /&gt;&lt;br /&gt;     * recursively commits Working Copy modifications to a repository&lt;br /&gt;&lt;br /&gt;     */&lt;br /&gt;&lt;br /&gt;    private static SVNCommitInfo commit( File wcPath , boolean keepLocks , String commitMessage ) throws SVNException {&lt;br /&gt;&lt;br /&gt;        return ourClientManager.getCommitClient().doCommit( new File[] { wcPath } , keepLocks , commitMessage , false , true );&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&lt;br /&gt; * &lt;br /&gt;&lt;br /&gt; * @param url&lt;br /&gt;&lt;br /&gt; * @param revision&lt;br /&gt;&lt;br /&gt; * @param destPath&lt;br /&gt;&lt;br /&gt; * @param isRecursive&lt;br /&gt;&lt;br /&gt; * @return&lt;br /&gt;&lt;br /&gt; * @throws SVNException&lt;br /&gt;&lt;br /&gt; * checks out a Working Copy given a repository url&lt;br /&gt;&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;    private static long checkout( SVNURL url , SVNRevision revision , File destPath , boolean isRecursive ) throws SVNException {&lt;br /&gt;&lt;br /&gt;        SVNUpdateClient updateClient = ourClientManager.getUpdateClient( );&lt;br /&gt;&lt;br /&gt;        /*&lt;br /&gt;&lt;br /&gt;         * sets externals not to be ignored during the checkout&lt;br /&gt;&lt;br /&gt;         */&lt;br /&gt;&lt;br /&gt;        updateClient.setIgnoreExternals( false );&lt;br /&gt;&lt;br /&gt;        /*&lt;br /&gt;&lt;br /&gt;         * returns the number of the revision at which the working copy is &lt;br /&gt;&lt;br /&gt;         */&lt;br /&gt;&lt;br /&gt;        //return updateClient.doCheckout( url , destPath , revision , revision , isRecursive );&lt;br /&gt;&lt;br /&gt;        return updateClient.doCheckout(url, destPath, revision, revision, SVNDepth.INFINITY, true);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&lt;br /&gt; * &lt;br /&gt;&lt;br /&gt; * @param wcPath&lt;br /&gt;&lt;br /&gt; * @param updateToRevision&lt;br /&gt;&lt;br /&gt; * @param isRecursive&lt;br /&gt;&lt;br /&gt; * @return&lt;br /&gt;&lt;br /&gt; * @throws SVNException&lt;br /&gt;&lt;br /&gt; * updates a Working Copy to a particular revision&lt;br /&gt;&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;    private static long update( File wcPath , SVNRevision updateToRevision , boolean isRecursive ) throws SVNException {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        SVNUpdateClient updateClient = ourClientManager.getUpdateClient( );&lt;br /&gt;&lt;br /&gt;        /*&lt;br /&gt;&lt;br /&gt;         * sets externals not to be ignored during the update&lt;br /&gt;&lt;br /&gt;         */&lt;br /&gt;&lt;br /&gt;        updateClient.setIgnoreExternals( false );&lt;br /&gt;&lt;br /&gt;        /*&lt;br /&gt;&lt;br /&gt;         * returns the number of the revision wcPath was updated to&lt;br /&gt;&lt;br /&gt;         */&lt;br /&gt;&lt;br /&gt;        return updateClient.doUpdate( wcPath , updateToRevision , isRecursive );&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&lt;br /&gt; * &lt;br /&gt;&lt;br /&gt; * @param wcPath&lt;br /&gt;&lt;br /&gt; * @param url&lt;br /&gt;&lt;br /&gt; * @param updateToRevision&lt;br /&gt;&lt;br /&gt; * @param isRecursive&lt;br /&gt;&lt;br /&gt; * @return&lt;br /&gt;&lt;br /&gt; * @throws SVNException&lt;br /&gt;&lt;br /&gt; * switches a Working Copy to another url&lt;br /&gt;&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;    private static long switchToURL( File wcPath , SVNURL url , SVNRevision updateToRevision , boolean isRecursive ) throws SVNException {&lt;br /&gt;&lt;br /&gt;        SVNUpdateClient updateClient = ourClientManager.getUpdateClient( );&lt;br /&gt;&lt;br /&gt;        /*&lt;br /&gt;&lt;br /&gt;         * sets externals not to be ignored during the switch&lt;br /&gt;&lt;br /&gt;         */&lt;br /&gt;&lt;br /&gt;        updateClient.setIgnoreExternals( false );&lt;br /&gt;&lt;br /&gt;        /*&lt;br /&gt;&lt;br /&gt;         * returns the number of the revision wcPath was updated to&lt;br /&gt;&lt;br /&gt;         */&lt;br /&gt;&lt;br /&gt;        return updateClient.doSwitch( wcPath , url , updateToRevision , isRecursive );&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;&lt;br /&gt;     * &lt;br /&gt;&lt;br /&gt;     * @param wcPath&lt;br /&gt;&lt;br /&gt;     * @throws SVNException&lt;br /&gt;&lt;br /&gt;     * recursively adds an existing local item under version control (schedules for addition)&lt;br /&gt;&lt;br /&gt;     */&lt;br /&gt;&lt;br /&gt;    private static void addEntry( File wcPath ) throws SVNException {&lt;br /&gt;&lt;br /&gt;        ourClientManager.getWCClient( ).doAdd( wcPath , false , false , false , true );&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&lt;br /&gt; * &lt;br /&gt;&lt;br /&gt; * @param wcPath&lt;br /&gt;&lt;br /&gt; * @param isStealLock&lt;br /&gt;&lt;br /&gt; * @param lockComment&lt;br /&gt;&lt;br /&gt; * @throws SVNException&lt;br /&gt;&lt;br /&gt; * locks a versioned item&lt;br /&gt;&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;    private static void lock( File wcPath , boolean isStealLock , String lockComment ) throws SVNException {&lt;br /&gt;&lt;br /&gt;        ourClientManager.getWCClient( ).doLock( new File[] { wcPath } , isStealLock , lockComment );&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&lt;br /&gt; * &lt;br /&gt;&lt;br /&gt; * @param wcPath&lt;br /&gt;&lt;br /&gt; * @param force&lt;br /&gt;&lt;br /&gt; * @throws SVNException&lt;br /&gt;&lt;br /&gt; * deletes a versioned item from version control (schedules for deletion)&lt;br /&gt;&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;    private static void delete( File wcPath , boolean force ) throws SVNException {&lt;br /&gt;&lt;br /&gt;        ourClientManager.getWCClient( ).doDelete( wcPath , force , false );&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&lt;br /&gt; * &lt;br /&gt;&lt;br /&gt; * @param srcURL&lt;br /&gt;&lt;br /&gt; * @param dstURL&lt;br /&gt;&lt;br /&gt; * @param isMove&lt;br /&gt;&lt;br /&gt; * @param commitMessage&lt;br /&gt;&lt;br /&gt; * @return&lt;br /&gt;&lt;br /&gt; * @throws SVNException&lt;br /&gt;&lt;br /&gt; * copies or moves one location to another one within the same repository&lt;br /&gt;&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;   /* private static SVNCommitInfo copy( SVNURL srcURL , SVNURL dstURL , boolean isMove , String commitMessage ) throws SVNException {&lt;br /&gt;&lt;br /&gt;        return ourClientManager.getCopyClient().doCopy( srcURL , SVNRevision.HEAD , dstURL , isMove , commitMessage );&lt;br /&gt;&lt;br /&gt;    }*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;    public static void main( String args[]){&lt;br /&gt;&lt;br /&gt;     String svnURL="https://rproject.svn.sourceforge.net/svnroot/rproject";&lt;br /&gt;&lt;br /&gt;     File filePath=new File("/home/D2HS/rbaral/Documents/rproject/firstfile1.java");&lt;br /&gt;&lt;br /&gt;     DefaultSVNOptions myOptions=new DefaultSVNOptions();&lt;br /&gt;&lt;br /&gt;     String username="username";&lt;br /&gt;&lt;br /&gt;     String pwd="password";&lt;br /&gt;&lt;br /&gt;     SVNRevision revision=SVNRevision.HEAD;&lt;br /&gt;&lt;br /&gt;     String destPath="destination";&lt;br /&gt;&lt;br /&gt;     File destFile=new File(destPath);&lt;br /&gt;&lt;br /&gt;     boolean isRecursive=true;&lt;br /&gt;&lt;br /&gt;     ourClientManager=SVNClientManager.newInstance(myOptions, username, pwd);&lt;br /&gt;&lt;br /&gt;     try {&lt;br /&gt;&lt;br /&gt;      setUpFactory();&lt;br /&gt;&lt;br /&gt;   //addEntry(filePath);&lt;br /&gt;&lt;br /&gt;   //commit(filePath, true, "test commit message");&lt;br /&gt;&lt;br /&gt;      SVNURL url=SVNURL.parseURIDecoded(svnURL);&lt;br /&gt;&lt;br /&gt;      System.out.println("files checking out ");&lt;br /&gt;&lt;br /&gt;      checkout(url, revision, destFile, isRecursive);&lt;br /&gt;&lt;br /&gt;      File updateFile=new File("filepath to be updated");&lt;br /&gt;&lt;br /&gt;      //update(updateFile, SVNRevision.HEAD, true);&lt;br /&gt;&lt;br /&gt;   System.out.println("file checked out from remote svn");&lt;br /&gt;&lt;br /&gt;  } catch (SVNException e) {&lt;br /&gt;&lt;br /&gt;   System.out.println("SVNException while checking out :"+e.getMessage());&lt;br /&gt;&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;thanks to the site:&lt;a href="http://svnkit.com/javadoc/index.html"&gt;svnkit&lt;/a&gt;&lt;br /&gt;&lt;a href="http://osdir.com"&gt;osdir.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks,&lt;br /&gt;Ramesh&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-7668818439112146278?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/7668818439112146278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/06/playing-with-java-and-svn.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/7668818439112146278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/7668818439112146278'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/06/playing-with-java-and-svn.html' title='Playing with Java and SVN'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-4136004005781873982</id><published>2010-06-08T11:49:00.000-07:00</published><updated>2010-06-08T11:49:03.284-07:00</updated><title type='text'>Java Mysql BLOB reading/writing</title><content type='html'>&lt;b&gt;The following tested code reads a file using fileinputstream stores in blob format in mysql table. It then reads the blob object and writes to some location in the form of a file. Due to limitation of blob this might not support for huge files.If you need to process with large files be on safe side to use LONGBLOB data type.&lt;/b&gt;&lt;br /&gt;/**&lt;br /&gt;*&lt;br /&gt;*&lt;i&gt;mysql table creation&lt;br /&gt;*create table stb(id integer,doc blob) engine=innodb;&lt;/i&gt;&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;package com.test;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedOutputStream;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import java.io.FileNotFoundException;&lt;br /&gt;import java.io.FileOutputStream;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.sql.Blob;&lt;br /&gt;import java.sql.Connection;&lt;br /&gt;import java.sql.DriverManager;&lt;br /&gt;import java.sql.PreparedStatement;&lt;br /&gt;import java.sql.ResultSet;&lt;br /&gt;import java.sql.SQLException;&lt;br /&gt;import java.sql.Statement;&lt;br /&gt;&lt;br /&gt;public class StreamtoBinary {&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * @param args&lt;br /&gt;  */&lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;  System.out.println("reading inputstream");&lt;br /&gt;  Statement stmt = null;&lt;br /&gt;  Connection con = null;&lt;br /&gt;  try {&lt;br /&gt;   File file = new File(&lt;br /&gt;     "srcfilepath");&lt;br /&gt;   FileInputStream iStream = new FileInputStream(file);&lt;br /&gt;&lt;br /&gt;   Class.forName("com.mysql.jdbc.Driver");&lt;br /&gt;   String url = "jdbc:mysql://localhost:3306/test";&lt;br /&gt;   con = DriverManager.getConnection(url, "root", "");&lt;br /&gt;   stmt = con.createStatement();&lt;br /&gt;   String sql = "insert into stb values(?,?)";&lt;br /&gt;   PreparedStatement pstmt = con.prepareStatement(sql);&lt;br /&gt;   pstmt.setInt(1, 1);&lt;br /&gt;   pstmt.setBinaryStream(2, iStream, (int) file.length());&lt;br /&gt;   // pstmt.executeUpdate();&lt;br /&gt;   // con.commit();&lt;br /&gt;   System.out.println("written to table:" + (int) file.length());&lt;br /&gt;   // now read the blob object and write to a file&lt;br /&gt;   sql = "SELECT id, doc FROM stb";&lt;br /&gt;   PreparedStatement stmt1 = con.prepareStatement(sql);&lt;br /&gt;   ResultSet resultSet = stmt1.executeQuery();&lt;br /&gt;   int i = 0;&lt;br /&gt;   while (resultSet.next()) {&lt;br /&gt;    String id = resultSet.getString(1);&lt;br /&gt;    File doc = new File(&lt;br /&gt;      "destfilepath");&lt;br /&gt;&lt;br /&gt;    FileOutputStream fos = new FileOutputStream(doc);&lt;br /&gt;    Blob b = resultSet.getBlob(2);&lt;br /&gt;    BufferedOutputStream os;&lt;br /&gt;&lt;br /&gt;    os = new BufferedOutputStream(new FileOutputStream(doc));&lt;br /&gt;    os.write(b.getBytes(1, (int) b.length()), 0, (int) b.length());&lt;br /&gt;    os.flush();&lt;br /&gt;    os.close();&lt;br /&gt;    System.out.println("writing record:" + id);&lt;br /&gt;    System.out.println("written to file:" + doc.length());&lt;br /&gt;    // }&lt;br /&gt;    fos.close();&lt;br /&gt;    i++;&lt;br /&gt;   }&lt;br /&gt;  } catch (ClassNotFoundException e) {&lt;br /&gt;   // TODO Auto-generated catch block&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  } catch (SQLException e) {&lt;br /&gt;   // TODO Auto-generated catch block&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  } catch (FileNotFoundException e) {&lt;br /&gt;   // TODO Auto-generated catch block&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  } catch (IOException e) {&lt;br /&gt;   // TODO Auto-generated catch block&lt;br /&gt;   e.printStackTrace();&lt;br /&gt;  } finally {&lt;br /&gt;   try {&lt;br /&gt;    stmt.close();&lt;br /&gt;    con.close();&lt;br /&gt;   } catch (SQLException e) {&lt;br /&gt;    // TODO Auto-generated catch block&lt;br /&gt;    e.printStackTrace();&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Thanks,&lt;br /&gt;Ramesh&lt;/i&gt;.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-4136004005781873982?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/4136004005781873982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/06/java-mysql-blob-readingwriting.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/4136004005781873982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/4136004005781873982'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/06/java-mysql-blob-readingwriting.html' title='Java Mysql BLOB reading/writing'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-4834203266738459771</id><published>2010-06-03T01:47:00.000-07:00</published><updated>2010-06-03T01:47:55.068-07:00</updated><title type='text'>java mail sending mail and reading mail from external server</title><content type='html'>The following code will assist in sending emails from a given host using smtp.&lt;br /&gt;It also has methods for reading emails from external mail servers.&lt;br /&gt;This is a tested code and simply copy paste of the code will run without further configuration.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;package test;&lt;br /&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.UnsupportedEncodingException;&lt;br /&gt;import java.util.Properties;&lt;br /&gt;&lt;br /&gt;import javax.mail.Folder;&lt;br /&gt;import javax.mail.Message;&lt;br /&gt;import javax.mail.MessageRemovedException;&lt;br /&gt;import javax.mail.MessagingException;&lt;br /&gt;import javax.mail.Session;&lt;br /&gt;import javax.mail.Store;&lt;br /&gt;import javax.mail.Transport;&lt;br /&gt;import javax.mail.event.FolderEvent;&lt;br /&gt;import javax.mail.event.FolderListener;&lt;br /&gt;import javax.mail.internet.InternetAddress;&lt;br /&gt;import javax.mail.internet.MimeMessage;&lt;br /&gt;&lt;br /&gt;import com.sun.mail.pop3.POP3Folder;&lt;br /&gt;&lt;br /&gt;public class TestMail {&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Description:&lt;br /&gt;  * TestMail&lt;br /&gt;  * @param args&lt;br /&gt;  * void&lt;br /&gt;  * Author:Ramesh Raj Baral&lt;br /&gt;  * @throws MessagingException &lt;br /&gt;  * @throws MessagingException &lt;br /&gt;  * @throws IOException &lt;br /&gt;  * @since Jun 2, 2010&lt;br /&gt;  */&lt;br /&gt; private static String host="hostName";&lt;br /&gt;&lt;br /&gt; public static void main(String[] args) throws MessagingException, IOException  {&lt;br /&gt; // TODO Auto-generated method stub&lt;br /&gt;        sendEmail();&lt;br /&gt; readEmail();&lt;br /&gt; //readGmail();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;this method reads the emails from the inbox folder only of any pop server&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt; public  static void readEmail() throws MessagingException, IOException{&lt;br /&gt;  Properties props = new Properties();&lt;br /&gt;        props.put("mail.smtp.host", host);&lt;br /&gt;        props.put("mail.transport.protocol", "smtp");&lt;br /&gt;        String password="password";&lt;br /&gt;        Session session = Session.getDefaultInstance(props, null);&lt;br /&gt;        Store store = session.getStore("pop3s");//pop3&lt;br /&gt;        store.connect(host,"userName", password);&lt;br /&gt;        Folder folder = store.getFolder("inbox");//only inbox is supported by pop3&lt;br /&gt; folder.open(Folder.READ_WRITE);&lt;br /&gt; System.out.println("no of msg:"+folder.getUnreadMessageCount());&lt;br /&gt;        Message[] message = folder.getMessages();&lt;br /&gt;        // Display message in the descending order of received date.&lt;br /&gt;        for (int i = message.length-1; i &gt;0; i--) {&lt;br /&gt;         try{&lt;br /&gt;            System.out.println("------------ Message " + (i + 1) + " ------------");&lt;br /&gt;            System.out.println("SentDate : " + message[i].getSentDate());&lt;br /&gt;            System.out.println("From : " + message[i].getFrom()[0]);&lt;br /&gt;            System.out.println("Subject : " + message[i].getSubject());&lt;br /&gt;            //System.out.print("Message : ");&lt;br /&gt;        //this part checks the unique id (UID)   of the message which can be useful to decide //if the message is new or old&lt;br /&gt;         if (folder instanceof POP3Folder) {&lt;br /&gt;          POP3Folder pf =&lt;br /&gt;              (POP3Folder)folder;&lt;br /&gt;          String uid = pf.getUID(message[i]);&lt;br /&gt;          if (uid != null)&lt;br /&gt;              System.out.println("UID is:"+uid);&lt;br /&gt;      }&lt;br /&gt;            InputStream stream = message[i].getInputStream();&lt;br /&gt;            System.out.println("*************************************");&lt;br /&gt;            while (stream.available() != 0) {&lt;br /&gt;               //print the content of mail &lt;br /&gt;               System.out.print((char) stream.read());&lt;br /&gt;            }&lt;br /&gt;            System.out.println("**************************************");&lt;br /&gt;         }catch(MessageRemovedException mex){&lt;br /&gt;             System.out.println("message removed exception ");&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;/**&lt;br /&gt;this method sends email&lt;br /&gt;*/&lt;br /&gt; public static void sendEmail() throws MessagingException, UnsupportedEncodingException{&lt;br /&gt;  Properties props = new Properties();&lt;br /&gt;        props.put("mail.smtp.host", host);&lt;br /&gt;        props.put("mail.transport.protocol", "smtp");&lt;br /&gt;        InternetAddress[] bccFilteredList = new InternetAddress[1];&lt;br /&gt;        bccFilteredList[0]=new InternetAddress("emailadderess@domain.com".toString(),"any name");&lt;br /&gt;        InternetAddress[] toFilteredList = new InternetAddress[1];&lt;br /&gt;        toFilteredList[0]=new InternetAddress("emailadderess@domain.com".toString(),"");&lt;br /&gt;        Session session = Session.getDefaultInstance(props, null);&lt;br /&gt;        //session.setDebug(true);//if uncommented displays all the debug info&lt;br /&gt;        Message msg = new MimeMessage(session);&lt;br /&gt;        &lt;br /&gt;        msg.setFrom(new InternetAddress("fromemail@domain.com","username"));&lt;br /&gt;        msg.setRecipients(Message.RecipientType.TO, toFilteredList);&lt;br /&gt;        msg.setRecipients(Message.RecipientType.BCC,bccFilteredList);&lt;br /&gt;        msg.setSubject("Test msg!");&lt;br /&gt;        msg.setHeader("Content-Type", "text/html");&lt;br /&gt;        String body="Another Test msg";&lt;br /&gt;        msg.setText(body);&lt;br /&gt;        Transport.send(msg);&lt;br /&gt;        System.out.println("mail sent");&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;    &lt;br /&gt;/**&lt;br /&gt;this method reads the mails from gmail server of a given account&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;    public static void readGmail() throws MessagingException, IOException{&lt;br /&gt;     String host = "pop.gmail.com";&lt;br /&gt;      String user = "emailaddress@gmail.com";&lt;br /&gt;      String password = "password";&lt;br /&gt;      // Get system properties&lt;br /&gt;     Properties properties = System.getProperties();&lt;br /&gt;      // Get the default Session object.&lt;br /&gt;      Session session = Session.getDefaultInstance(properties, null);&lt;br /&gt;      // Get a Store object that implements the specified protocol.&lt;br /&gt;      Store store = session.getStore("pop3s");&lt;br /&gt;      //Connect to the current host using the specified username and password.&lt;br /&gt;      store.connect(host, user, password);&lt;br /&gt;      //Create a Folder object corresponding to the given name.&lt;br /&gt;      Folder folder = store.getFolder("inbox");&lt;br /&gt;      // Open the Folder.&lt;br /&gt;      folder.open(Folder.READ_ONLY);&lt;br /&gt;      System.out.println("new emails:"+folder.getNewMessageCount());;&lt;br /&gt;      Message[] message = folder.getMessages();&lt;br /&gt;&lt;br /&gt;      // Display message.&lt;br /&gt;      for (int i = message.length-1; i &gt;0; i--) {&lt;br /&gt;       try{&lt;br /&gt;          System.out.println("------------ Message " + (i + 1) + " ------------");&lt;br /&gt;          System.out.println("SentDate : " + message[i].getSentDate());&lt;br /&gt;          System.out.println("From : " + message[i].getFrom()[0]);&lt;br /&gt;          System.out.println("Subject : " + message[i].getSubject());&lt;br /&gt;          //System.out.print("Message : ");&lt;br /&gt;&lt;br /&gt;          InputStream stream = message[i].getInputStream();&lt;br /&gt;         //uncomment the following loop if you want to print the mail body&lt;br /&gt;         /* while (stream.available() != 0) {&lt;br /&gt;              //System.out.print((char) stream.read());&lt;br /&gt;          }*/&lt;br /&gt;       }catch(MessageRemovedException mex){&lt;br /&gt;           System.out.println("message removed exception ");&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;     &lt;br /&gt;      folder.close(true);&lt;br /&gt;      store.close();&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;Ramesh Baral.&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-4834203266738459771?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/4834203266738459771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/06/java-mail-sending-mail-and-reading-mail.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/4834203266738459771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/4834203266738459771'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/06/java-mail-sending-mail-and-reading-mail.html' title='java mail sending mail and reading mail from external server'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-340250534313095927</id><published>2010-05-31T09:07:00.000-07:00</published><updated>2010-05-31T09:07:21.672-07:00</updated><title type='text'>Affair</title><content type='html'>&lt;b&gt;AFFAIR&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It was the November 25th 2005, Sudarshan was in the college. There was cold outside. A slight rain was acting to make the temperature below the threshold value. It was a leisure period, as the teacher was absent due to some work. &lt;br /&gt;The teacher has given a lab works to the students so that, they won’t be wasting their time in unnecessary activities. However the Bachelor level students found it difficult to concern on the teacher’s path, some of them were playing table tennis, some were busy in scoring three points in Basket Ball and some were sitting in class and singing their cool favorite song. Some sincere students were busy in their lab work. This time Sudarshan was trying to prove himself as a sincere student and was doing his lab work. He was searching the Internet for the work. By chance he was not getting the right tutorials and was scratching his head. In the mean time, he checked out his mail. There was a new mail in his inbox. It was an invitation by his school mate to join a web site. He hadn’t tried these sorts of sites till today. However he could not tolerate to neglect the request of his friend and so he filled the form. It was his bad luck that he didn’t have any of his photographs. He had formatted his USB drive just a few moments ago. So, he selected the nice photo of his best actor, though other data certainly corresponded to him. Finally, he was welcomed with a congratulations message, that he was registered to the site. He clicked the friend’s link of the friend (Sohan) who sent him the request to join the group. He added some of them to his friends group. Finally, he found the right tutorial for the lab work and prepared the lab report. It was the time for the next lecture, the bell said like that. &lt;br /&gt;The next Lecture was from Mr. Peterson, who always tried to keep a strict discipline in the class. Students were not allowed to come late than two minutes. If they come late then their attendance was not taken and certainly this will also be considered while calculating the internal grades. All of the students came in right time. The teacher took the class and left as usual in the right time. The students were eager to leave home after this last lecture for today.&lt;br /&gt;It was the tomorrow morning; Mr. Peterson gave the students lab work and left for his work. This day most of the students were busy preparing their lab report. Some of the guys started playing outdoor games and asked their friends to do the work for them too. Sudarshan took no time in completing the lab work as it was very easy. Then he browsed the site that he registered yesterday. There he found a new message for him. There were two messages, one from his classmate inviting him to join the get together tomorrow evening. The second one was from completely unknown lady. Though he had added her to his friends list just yesterday, he really did not know about her except the data mentioned in the site. She had given her email address and asked him to mail. She had also admired his profile and asked if he would like to be her good friend. He was feeling very difficult. It was the youth mind and he revisited the lady’s profile. He was very excited to get the email address of such a beautiful girl. He did not considered what other information was about.&lt;br /&gt;It did not take so much time to send mail to the girl. He added some other friends to his group and increased the friends in his group. The time passed in its rate.&lt;br /&gt;“Because I Love You….” , the hotel’s stereo was saying. Many boys were already present in the joined table. Sohan was laughing with other guys. Sudarshan was welcomed by Sohan and introduced to some new friends. It was a great meet. Sudarshan enjoyed a lot. In the mean time he asked about the lady, whether Sohan added her to his group by knowing or not. Sohan just ignored and said that he also added her from another friend’s group and really did not know her. Sudarshan told the incident happened today. Sohan laughed and yelled,” Girls are crazy to see your profile and might have given you their email id. That’s not the great thing at all. But I don’t have any email id of such girls. Bad Luck! Only boys”.&lt;br /&gt;Sudarshan thought a lot why she was giving her email id to him and not to Sohan. He was proud to be special to girls for some time. He thought whether some special friendship can be established between them. He did not expected much more than that from a girl till now. In the mean time the stereo was playing cool sentimental song, “Timro mero sambandhako artha khojna kar laagyo..”, one of the best song of Sudarshan. He compared his situation with the feeling of the music for some time. &lt;br /&gt;“Come on guys its already time to close the hotel for today, best time next day….”, Sohan said. In a short time, the group was dismissed. Sudarshan left to home alone. .Bad luck, no bus for him today. It was nearly fifteen minutes walk to his house. In the mean time he was thinking of the party and the girl. “Why she gave me the email id and what might be her expectance? Being a lady? Ha, let’s leave it. There can be various good relations between male and female other than what young guys think. Yes, she can be a good friend for me like Sohan is…..”.&lt;br /&gt;“Is this your time to return home?”, Father shouted him. Mother said calmly, “you should return home early, son. Its not good to stay outside longer in evening, right?” He looked at his father’s face. It seemed that all of his blood is in his face. He murmured,” See his eyes, oh my god an ordinary person would have fainted, how could I tolerate. Only, because he is my father.” What makes the man so different from the women? How much my mother and father differ in his habits, even more than  the land and the sky. Why the god gave him so hard heart?&lt;br /&gt;My anger instantly increased. Sudarshan was listening to music and doing the home works. His father called him for dinner. Again he murmured, ”What makes him change his habit so instantly? Just now how he was treating me, but now he is to express his love voice”. He called him to join the dinner once again.” His temper might increase in no time, so its not good to make him .” The father, mother and son took a lovely meal. The father was adding food to his son’s plate. Sudarshan was amazed. Finally, he concluded that he was not his enemy at all. They are his god and love, shout and scold whatever is just for his good. “Parents are always good to their child. It is impossible to return the love that parents give to their child”&lt;br /&gt; Tomorrow morning the inbox was filled with the reply the girls send. Her actual name was Sudha and she mentioned that she was happy to have a friend like him. Sudarshan was eager to send the reply. After sending, he felt whether he has missed the thing that he wanted to include in the mail. The bell ranged to indicate that the break was over. Mr. Sharma was completing his course today and thanked the students for their co-operation during the semester. He wished a good luck for their exam. There was no more than fifteen days for the exam. By tomorrow almost the entire subject teacher will be thanking the students. &lt;br /&gt; In this way the semester ended and the students are to prepare for their University exam. Sudarshan was busy preparing at home. Some moment he spent with his friends in discussion for the exam. The exam started on 12th December and lasted for seventeen days. Sudarshan did his best. In the gap days he would be searching in the internet and discussing with friends for the doubts. There were already ten mails from Sudha and Sudarshan up to now. Now they are frank to express their feelings and at least a mail per day was the rate.&lt;br /&gt;The exam was completed and the college will be starting only by 5th January. What to do in the mean time? Just roaming here and there in day time, visiting the internet at night, chatting with friends was the only routine of Sudarshan. He did not miss a single opportunity to help his parents in their work. It was a New Year time approaching the world. People were celebrating in their own way. Though it was not the actual festival of Nepalese, they are habituated to do so. Sudha sent a nice e card, Sudarshan too did so. &lt;br /&gt; Look at the age of the two creature. Both in their early twenties and what might be in their heart and mind? Now they have started to chat in the mobile. At least a call from each other is a normal rate. &lt;br /&gt; It was the time to go for studies once again. The new books and new teachers are actually inspiring the students to have some interest in their studies. The class was in silent mode. The mobile bell rang silently in his pocket. Nobody recognized it. He silenty looked at the number, it was Sudha’ s call. Mr. Paudel was teaching and everybody was looking to the white board in his beautiful handwriting. There was no option to cancel the call, though there was a great regret. No more than a minute had expired and the call came again. It was break and why not to talk. He responded and slowly went to the alone. A ten minute gossip was not sufficient but the friends were shouting to join for the lunch.&lt;br /&gt; It was February 10th and still cold. He was inside the blanket and chatting with Sudha. “Very memorable chat every time”, he thought so. Suddenly the light went off and the city was in a dark. All people had already dreamt and the two creatures were sharing their feelings. He was also obliged to close the conversation as the UPS produced some warnings. Tomorrow morning, again there was a new mail and no way other than to response the mail for him. Till now no body was able to have a single sign about the affair. Today the February 13th night, some people in the city were enjoying the upcoming Valentines Day. Look at the two strange creatures. Don’t they have other work? Only chatting? Very strange! ha?&lt;br /&gt; Today it was a strange conversation that took place in their life.&lt;br /&gt;Sudarshan-“How are you celebrating tomorrow’s Valentines Day? Don’t u have any Valentine? ”&lt;br /&gt;&lt;br /&gt;Sudha-“How to say? He is in my dream.”&lt;br /&gt;&lt;br /&gt;Sudarshan-“Come on bring him to your reality and take the advantage of this great day. Tell him the words you want. Don’t wonder. It’s not to wait a long. You have to finalize. Utilize your time fully.”&lt;br /&gt;&lt;br /&gt;Sudha-“Me 2, thinking so.”&lt;br /&gt;&lt;br /&gt;Disturbance again! Suddenly the light went off and his UPS was warning that he has few minutes to proper shut down the machine.&lt;br /&gt;&lt;br /&gt;Sudarshan-“ Me 2 go. Load shedding! Good night”&lt;br /&gt;&lt;br /&gt;Sudha-“I should tell it finally no?”&lt;br /&gt;&lt;br /&gt;Sudarshan-“Yes do it ok? now me 2 leave.”&lt;br /&gt;&lt;br /&gt;Sudha-“It’s to you. Will you be my Valentine? I love u Sudarshan and want to spend my life with you”&lt;br /&gt;&lt;br /&gt;Amazed! What to say. Trembling fingers are missing the typing rate…….&lt;br /&gt;Sudarshan-“ whaaatttt?”&lt;br /&gt;&lt;br /&gt;Sudha-“Yup man I really love you though I haven’t seen you, I respect ur feelings man. I will be compromising anything for you”&lt;br /&gt;&lt;br /&gt;Last,  long signal from the UPS. Finally all black.&lt;br /&gt;Unable to sleep the whole night. Thinking about the three words presented to him.&lt;br /&gt;“How she decided such a great thing? We haven’t any dates at all and even...”&lt;br /&gt; Hey Sudarshan come on its time for the tea. Don’t you have college today? Its already six and sleeping till now? The college bus wont be waiting for you today and I wont be giving you any bus charges. You lazy bone……&lt;br /&gt; “Mom….I…I ..I  will be ready in few minutes…”&lt;br /&gt;All friends were waiting for him. There was no much to study today. The sports week has started and almost everyone participating in it. Sudarshan will be having his football match tomorrow. “Guys I will be for the practice in few minutes, you guys go on...” shouting these words he was to open the inbox. There was a long mail from Sudha with a love e card. Even after three days he could not reply at all and not have a single call and chat. The cell is switched off. &lt;br /&gt; Finally, he turned the cell on and there was an immediate call and it was she. Again, the same three words. Call was ended from the receiver. Again same number and same words, but some questions for this time.&lt;br /&gt;“If my words hurt you I am sorry. But I am in deep love with you.”&lt;br /&gt;“How could you say like that, we haven’t seen each another and our parents haven’t talked to each other? I have still a lot to study and you only doing your PCL course.”&lt;br /&gt;“These all don’t matter, if we are true and there is no deceived. We can continue our study and convince our parents. I didn’t ask you to marry me just now. Its only the propose, we can direct it to long journey or…Its totally up to we two..”&lt;br /&gt;“I love my parents and can’t go against them. They love me very much. They are my god, heaven and everything for me. I can’t compromise them for you. You listen; I can’t sacrifice my parents at any cost. Please excuse me, we are a good friend and can be so for ever. You are a girl, please think of your parents what might they be thinking?”&lt;br /&gt;“I don’t have my parents. They are dead when I was ten in a plane crash………..sh sh sh..” A painful scream from the other end was heard. The call terminated suddenly.&lt;br /&gt; &lt;br /&gt; A long try from this side was unsuccessful as the cell was switched off. No training for the match and the mail server was ready to send the consolation words for Sudha. For consolation only there was an inclusion of the words”. I also love you, but as a friend….”&lt;br /&gt;“Oh! I will call her better” searches the pocket for the cell but unable. He has forgotten to bring the cell today. He was wondering the whole day,” what she might be feeling? Better I did not have answered instantly in that manner? But……..” He could not concentrate on the training and was hurried to leave for home.&lt;br /&gt; “There was a call for you on the cell. I was surprised that you have forgotten to take it today. Finally there was a message for you, a girl..Sudha has a message on your cell...” Mother explained.&lt;br /&gt;The message was already entered in the inbox, so mother had read it and nothing private. He worried a lot and was afraid what his father will be thinking of. Also his tempered face and large eyes. He could not imagine. “Its better to tell everything truly before it gets out of way.”, thinking this  he straightly went to his mother and collected great courage and finally told all the story. “I even rejected the proposal but she is not to leave me and wanted to meet me tomorrow. You tell me what I shall do. It’s all adventitious.” Regretting, he was with his face down. In the mean time it was the entry of the great person- father! Both were silent. Father looked them seriously and with his tempered face and large eyes again looked to both of them.&lt;br /&gt;“I heard everything of your conversation. I am sorry about this. It’s not your fault nor is the girl doing any fault. This is the age that made you so. So you should be very careful and convince the girl. Look, you should be very formal and don’t hurt the girl. As she had called you, go and tell her that this is not the time to do so and for now you are good friends and let the future decide the thing. Don’t hurt her at all else you will be losing a good friend”.&lt;br /&gt;He was surprised after listening this. There was no sleep for the whole night. He could not memorize what sorts of incident happened in the match and nothing at all. The only thing he was remembering is that he has a difficult date at 5 today. He was on the road side seeking the girl face of his concern. As she had already mentioned she will be in yellow kurta salwar( a Pakistani dress), he didn’t find any difficulty in identifying her. She was waiting on the other corner and polling the watch in her thin and whitish wrist. He had already mailed her that the photo he posted was not of his own, but the girl did not concerned this at all and was all the way at her.&lt;br /&gt; He was amazed that the girl who had proposed him was such a beautiful creature of the world. He kept looking her for some moment in the mean time there were phone calls, but still unaware about it. Later a truck blew strong horn and shouted at him as he was in the middle of the road. He stroked his head slightly and call returned to her to confirm that the girl was Sudha. It was not confusion and she responded, he mentioned that he is on the opposite corner in the white shirt and black pant posing towards her with a cell in a hand. It took no time to truncate the call and she was keenly looking to him from the opposite corner. It was the feelings that make them blind that both were unaware that they were crossing the road. There was no more than some meters distance between them. Suddenly a truck was there to hit Sudha. Sudarshan was frightened. Sudha was lying on the road with blood covered her face and trembling her hand towards Sudarshan. She could hardly say, ”Sudarshan the god was so rude that we could not meet in this life. No matter, the only thing that I want to hear from you is the three words. Please let me leave the world happily. Wont you? I swear we will meet in next life and for whole life.” Tears exploded the beautiful face and finally mixed to the blood. The red tears were flooding the heart of Sudarshan.&lt;br /&gt;He could hardly say and do anything. The truck finally came with back gear and was to stroke Sudha again. But the public was to protect her. Soon there was the siren of the ambulance and Sudha was to be admitted in the emergency operation theater. Sudha was asking for the same reply. Sudarshan could not tolerate at all. He cut his hand with the broken glass of the window and put the latch of blood on the forehead of Sudha. Sudha slightly laughed and again her tears made the way to become red. The doctors started the operation. Sudarshan was waiting outside in the hope that Sudha would be alright. But the chance was against them, doctors asked for an excuse like in the serials. Sudarshan went to see the corps of Sudha and was continually looking. Finally he felt down on Sudha’s dead body. The doctors admitted him on the next theater. Sudarshan’s parents also visited the hospital. Their eyes were being flooded with tears.&lt;br /&gt;The doctor came from the operation theater with no feelings in their face. He said seriously that Sudarshan is unconscious till now and the treatment is going on. Minutes, hours and days passed but no progress. The doctors were hesitating to explain that Sudarshan has lost his memory and could hardly remember any things from his past life. The parents were screaming in pain.&lt;br /&gt; See the god, how can he change the life of a person from the beautiful garden to the arid desert.&lt;br /&gt;Now its one year passed since Sudarshan has been in amnesia. Sudarshan has a new mimic life. He could not remember his parents, his friends and none of all. The doctor referred his parents to take him to another country for further treatment, and hoped that he might be able to live a new happy life. Today these three creatures are leaving for the treatment. Sudarshan’s friends, neighbors, teachers all wished him a better treatment, though he did not recognize them. &lt;br /&gt;Don’t you think we should wish him a better treatment?&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-340250534313095927?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/340250534313095927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/05/affair.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/340250534313095927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/340250534313095927'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/05/affair.html' title='Affair'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-8246176931219304627</id><published>2010-04-21T23:27:00.000-07:00</published><updated>2010-04-21T23:27:59.852-07:00</updated><title type='text'>ORACLE 10G:Get a column in a  single comma separated string</title><content type='html'>The following code I found was quite helpfule to me.This gives you a single column values in comma separated form.&lt;br /&gt;SELECT&lt;br /&gt;         LTRIM( REPLACE(&lt;br /&gt;                         REPLACE(&lt;br /&gt;                             XMLAGG(XMLELEMENT("x", clientid) ORDER BY clientid),&lt;br /&gt;                             '&lt;x&gt;',&lt;br /&gt;                             ','&lt;br /&gt;                         ),&lt;br /&gt;                         '&lt;/x&gt;'&lt;br /&gt;                     ),','&lt;br /&gt;                 ) as allclients&lt;br /&gt;&lt;br /&gt;FROM (SELECT DISTINCT clientid&lt;br /&gt;      FROM clients) &lt;br /&gt;&lt;br /&gt;In above query there is a table called clients where clientid is a field.&lt;br /&gt;When above query is executed the result will be as shown below:&lt;br /&gt;&lt;br /&gt;clients&lt;br /&gt;1,2,3,4,5,.....&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;where the client with ids 1-5 are present in the clients table.&lt;br /&gt;This worked perfectly in oracle 10g. I haven't checked in other.&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-8246176931219304627?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/8246176931219304627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/04/oracle-10gget-column-in-single-comma.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/8246176931219304627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/8246176931219304627'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/04/oracle-10gget-column-in-single-comma.html' title='ORACLE 10G:Get a column in a  single comma separated string'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-4757112936081160530</id><published>2010-03-23T21:00:00.001-07:00</published><updated>2010-03-23T21:00:37.130-07:00</updated><title type='text'>Health Environmentalists Group</title><content type='html'>&lt;table style="background-color: #fff; padding: 5px;" cellspacing=0&gt;  &lt;tr&gt;&lt;td&gt;&lt;br /&gt;  &lt;img src="http://groups.google.com/intl/en/images/logos/groups_logo_sm.gif"         height=30 width=140 alt="Google Groups"&gt;&lt;br /&gt;  &lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;&lt;td style="padding-left: 5px;font-size: 125%"&gt;&lt;br /&gt;  &lt;b&gt;Health Environmentalists&lt;/b&gt;&lt;br /&gt;  &lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;&lt;td style="padding-left: 5px"&gt;&lt;br /&gt;  &lt;a href="http://groups.google.com/group/fightcfc?hl=en"&gt;Visit this group&lt;/a&gt;&lt;br /&gt;  &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-4757112936081160530?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/4757112936081160530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/03/health-environmentalists-group.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/4757112936081160530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/4757112936081160530'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/03/health-environmentalists-group.html' title='Health Environmentalists Group'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-2082993953640197156</id><published>2010-02-25T05:30:00.000-08:00</published><updated>2010-02-25T05:30:09.996-08:00</updated><title type='text'>simply transfer contents of a text file to excel sheet.</title><content type='html'>This code reads the input text file.It scans each line at a time and separates the words by comma.Each token is placed in&amp;nbsp; a single cell in the excel file. Some times these sorts of silly codes are also useful.&lt;br /&gt;The thing to be noted is that if there is duplicate record in consecutive lines it prevents the duplicates too.&lt;br /&gt;Ex:&lt;br /&gt;test,abcd,efgh,ttt &lt;span style="color: red;"&gt;in line1&lt;/span&gt; and&lt;br /&gt;test,abcd,ijkl,sss &lt;span style="color: red;"&gt;in line2&lt;/span&gt; then&lt;br /&gt;the entry test abcd is inserted in the first row first column,efgh,ttt,sss in the next columns in the same row.&lt;br /&gt;Similarly other records are proceeded.&lt;br /&gt;I encountered such requirement during my work and thought if someone might require it and posted here.&lt;br /&gt;&lt;br /&gt;import jxl.Workbook;&lt;br /&gt;import jxl.write.Label;&lt;br /&gt;import jxl.write.WritableSheet;&lt;br /&gt;import jxl.write.WritableWorkbook;&lt;br /&gt;import jxl.write.biff.RowsExceededException;&lt;br /&gt;public class Test {&lt;br /&gt;&amp;nbsp; public Test() {&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; private static String[] months=new String[]{"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};&lt;br /&gt;&amp;nbsp; public static void main(String[] args) throws ParseException, GeneralSecurityException, FileNotFoundException, RowsExceededException, Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Test test1 = new Test();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StringBuilder contents = new StringBuilder();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String[] tempArray=new String[5];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String lastUser="";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //use buffering, reading one line at a time&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //FileReader always assumes default encoding is OK!&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BufferedReader input =&amp;nbsp; new BufferedReader(new FileReader("abcd.txt"));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String line = null; //not declared within while loop&lt;br /&gt;&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; * readLine is a bit quirky :&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * it returns the content of a line MINUS the newline.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * it returns null only for the END of the stream.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * it returns an empty String if two newlines appear in a row.&lt;br /&gt;&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; int lastIndex=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int secondLastIndex=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int rowNum=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int colNum=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WritableWorkbook w = Workbook.createWorkbook(new BufferedOutputStream(new FileOutputStream("report.xls")));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WritableSheet s = w.createSheet("Demo", 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (( line = input.readLine()) != null){&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; tempArray=line.split(",");&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; if(tempArray.length&amp;gt;1){&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; lastIndex=tempArray.length-1;&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; secondLastIndex=lastIndex-1;&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; if(i&amp;lt;1){&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; lastUser=tempArray[0]+" "+tempArray[1];&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;&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;&amp;nbsp;&amp;nbsp; if(lastUser.equalsIgnoreCase(tempArray[0]+" "+tempArray[1])){&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; if(i&amp;lt;1){//this is the first attempt&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; //System.out.println("first case");&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; contents.append(lastUser);&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; s.addCell(new Label(rowNum,colNum, lastUser));&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; //contents.append(System.getProperty("line.separator"));&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; rowNum++;&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; s.addCell(new Label(rowNum,colNum, tempArray[secondLastIndex]));&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; contents.append(","+tempArray[secondLastIndex]+",");&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; //contents.append(System.getProperty("line.separator"));&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; rowNum++;&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; s.addCell(new Label(rowNum,colNum, tempArray[lastIndex]));&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; contents.append(tempArray[lastIndex]);&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; &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; }&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; else{&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; String lastSkillEntered=s.getCell(rowNum, colNum).getContents().toString();&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; System.out.println("inside 1:"+rowNum+colNum+lastSkillEntered+","+tempArray[lastIndex]);&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; s.addCell(new Label(rowNum,colNum,lastSkillEntered+","+tempArray[lastIndex]));&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; contents.append(":"+tempArray[lastIndex]);&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;&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;&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;&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;&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;&amp;nbsp;&amp;nbsp; else{&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; colNum++;&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; rowNum=0;&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; System.out.println("new entry:"+rowNum+colNum);&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; s.addCell(new Label(rowNum,colNum, tempArray[0]+" "+tempArray[1]));&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; contents.append(System.getProperty("line.separator"));&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; contents.append(tempArray[0]+" "+tempArray[1]);&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; //contents.append(System.getProperty("line.separator"));&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; rowNum++;&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; s.addCell(new Label(rowNum,colNum,tempArray[secondLastIndex]));&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; contents.append(","+tempArray[secondLastIndex]+",");&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; //contents.append(System.getProperty("line.separator"));&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; rowNum++;&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; s.addCell(new Label(rowNum,colNum,tempArray[lastIndex]));&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; contents.append(tempArray[lastIndex]);&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;&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;&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;&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;&amp;nbsp;&amp;nbsp; lastUser=tempArray[0]+" "+tempArray[1];&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; i++;&lt;br /&gt;&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; System.out.println("contents read:\n"+contents.toString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w.write();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("done");&lt;br /&gt;&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; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch (IOException ex){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ex.printStackTrace();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; catch(Exception ex){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; System.out.println("Exception:"+ex.getMessage());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; finally {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; input.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; finally {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // input.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;All the functionality is provided by the jar file jxl.jar.So you need to download this jar file and place in the class path/build path accordingly.&lt;br /&gt;Almost all the things are clear and no more explanation is required.&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-2082993953640197156?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/2082993953640197156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/02/simply-transfer-contents-of-text-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/2082993953640197156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/2082993953640197156'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/02/simply-transfer-contents-of-text-file.html' title='simply transfer contents of a text file to excel sheet.'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-1976336172018521740</id><published>2010-02-19T04:00:00.000-08:00</published><updated>2010-02-19T04:00:40.704-08:00</updated><title type='text'>Saankhu to Nagarkot hike on Feb-7 2010</title><content type='html'>&lt;a href="http://s790.photobucket.com/albums/yy187/rameshraj/Sankhu%20hike/?start=0"&gt;http://s790.photobucket.com/albums/yy187/rameshraj/Sankhu%20hike/?start=0&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-1976336172018521740?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/1976336172018521740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/02/saankhu-hike-on-feb-7-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/1976336172018521740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/1976336172018521740'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/02/saankhu-hike-on-feb-7-2010.html' title='Saankhu to Nagarkot hike on Feb-7 2010'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-5066575432096548630</id><published>2010-02-03T05:37:00.000-08:00</published><updated>2010-02-03T05:37:35.946-08:00</updated><title type='text'>Nepali Parser</title><content type='html'>&lt;div style="text-align: justify;"&gt;I thought it wont be fair to keep the research and findings of my and mine friends limited to some sectors of hard disk. So I think of publishing objectives that we achieved during researching on Nepali Parser two years back.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;This work wont be performed and the result that we have achieved wont be at this level without affable support from &lt;a href="http://www.madanpuraskar.org/"&gt;&lt;b style="color: red;"&gt;Madan Puraskar Pustakalaya&lt;/b&gt;&lt;/a&gt;.(An organization) They provided us the requirement and the rules that needed to incorporate in the technical part of the project.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Another expertise came from Mr. G. Prasanna David- former Lecturer of &lt;a href="http://gces.edu.np/"&gt;&lt;b&gt;&lt;span style="color: red;"&gt;Gandaki College of Engineering and Science&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;. (He holds great expertise in Linux System Administration,Networking, Natural Language Processing and many more..).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Mr.Chandra Kanta Adhikari (Teacher of&lt;a href="http://gbs.edu.np/"&gt;&lt;b style="color: red;"&gt; Gandaki Boarding School&lt;/b&gt;&lt;/a&gt;, Nepali Department) provided his expertise, suggestions and guidelines for us. His expertise in Nepali Language was really appreciable. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;We did this work as the major project to fulfill requirement of our B.E final semester.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; As the project cannot be done in single, there are my friends Mr. Shakeel Shrestha, Ms.&amp;nbsp; Muna khadka in our team. We all had equal contribution from our side to reach our goal.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The term 'Parser'&amp;nbsp; itself clarifies the meaning but on the level of research and implementation, we needed to break down into two components-Chunker and Parse Tree Generator. While the Chunker part is the core essential part but the importance of Tree Generator is inevitable as it plays the vital role in user view of the result prepared by the Chunker.I will first elaborate the Chunker part. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div lang="en-US" style="line-height: 150%; margin-bottom: 0.39in; orphans: 0; text-align: justify; text-indent: 0.79in; widows: 0;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: Times New Roman,serif;"&gt;&lt;span style="font-size: small;"&gt;Chunking is the part of the Natural Language Processing in which the relationship between the words or phrases present in a sentence is determined and is grouped together.  The Chunker in this context takes some tagged input sentence and then performs chunking or so called as finding the relation between words or between phrases and represents them in parenthesized notation.  The system operates on the basis of certain rules.  The input sentence should be given in Unicode value of the word following a slash and then the tag of the word in capital English letters.  Two consecutive words can have only a single spacing between them.  It then finds the phrases from the input words according to those rules.  In simple, the generated phrases are called as chunks.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div lang="en-US" style="line-height: 150%; margin-bottom: 0.39in; orphans: 0; text-align: justify; text-indent: 0.79in; widows: 0;"&gt;The Chunker in this context is domain specific and chunks the simple sentences like those we can find in simple school books for primary level. Complex sentences are not considered as the context of this project. To have a broad domain coverage well analyzed and complete set of rules need to be provided.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Such a system is useful for many other systems like Machine Translator, Grammar Checking, information retrieval etc. Below is the block diagram of the whole system.&lt;a href="http://2.bp.blogspot.com/_Lim5SdbiqH0/S2l78OrmEnI/AAAAAAAAADU/DVehmbXre98/s1600-h/Untitled1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://2.bp.blogspot.com/_Lim5SdbiqH0/S2l78OrmEnI/AAAAAAAAADU/DVehmbXre98/s640/Untitled1.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div lang="en-US" style="line-height: 150%; margin-bottom: 0.39in; orphans: 0; text-align: justify; text-indent: 0.79in; widows: 0;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div lang="en-US" style="line-height: 150%; margin-bottom: 0.39in; orphans: 0; text-align: justify; text-indent: 0.79in; widows: 0;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div lang="en-US" style="line-height: 150%; margin-bottom: 0.39in; orphans: 0; text-align: justify; text-indent: 0.79in; widows: 0;"&gt;&lt;span style="color: black;"&gt;&lt;span style="font-family: Times New Roman,serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-5066575432096548630?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/5066575432096548630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/02/nepali-parser.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/5066575432096548630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/5066575432096548630'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/02/nepali-parser.html' title='Nepali Parser'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Lim5SdbiqH0/S2l78OrmEnI/AAAAAAAAADU/DVehmbXre98/s72-c/Untitled1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-1611691520726600989</id><published>2010-01-27T05:25:00.000-08:00</published><updated>2010-01-27T05:25:02.139-08:00</updated><title type='text'>MultiActionFormController in Spring</title><content type='html'>I last felt the requirement of a Controller that could process the form submitted as well as the view page be able to trigger multiple events triggered to the same controller.&lt;br /&gt;It was simply a burden to have both feature in&amp;nbsp; a single controller. But after searching and some re-searching(ha..ha) I came out for the solution I required.&lt;br /&gt;To have a controller that can process the form as well as has multiple methods that will be triggered as my requirement.&lt;br /&gt;&lt;br /&gt;For this I made a class called SimpleMultiActionFormController as shown below:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.lang.reflect.Method;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.HashMap;&lt;br /&gt;import java.util.List;&lt;br /&gt;import java.util.Map;&lt;br /&gt;&lt;br /&gt;import javax.servlet.ServletException;&lt;br /&gt;import javax.servlet.http.HttpServletRequest;&lt;br /&gt;import javax.servlet.http.HttpServletResponse;&lt;br /&gt;&lt;br /&gt;import org.apache.log4j.Logger;&lt;br /&gt;import org.springframework.validation.BindException;&lt;br /&gt;import org.springframework.web.bind.ServletRequestDataBinder;&lt;br /&gt;import org.springframework.web.servlet.ModelAndView;&lt;br /&gt;import org.springframework.web.servlet.mvc.SimpleFormController;&lt;br /&gt;import org.springframework.web.servlet.mvc.multiaction.MethodNameResolver;&lt;br /&gt;import org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException;&lt;br /&gt;&lt;br /&gt;import com....api.service.ProductionManager;&lt;br /&gt;import com...impl.dto.ProductionManagerDTO;&lt;br /&gt;import com......impl.dto.UserEventLogDTO;&lt;br /&gt;import com....impl.service.ProductionManagerImpl;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* &amp;lt;desc&amp;gt;This method will be responsible to act as combination of&lt;br /&gt;&amp;nbsp;* SimpleFormController and MultiActionController&amp;lt;/desc&amp;gt;&lt;br /&gt;&amp;nbsp;* @author Ramesh Raj Baral&lt;br /&gt;&amp;nbsp;* @since:Jan 21, 2010&lt;br /&gt;&amp;nbsp;* File:SimpleMultiActionFormController.java&lt;br /&gt;&amp;nbsp;* @Version:1.0&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;&lt;br /&gt;public class SimpleMultiActionFormController extends SimpleFormController {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private MethodNameResolver methodNameResolver = new SubmitParameterPropertiesMethodNameResolver();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private ProductionManager productionManager;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String fileUploadPath;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private Logger log=Logger.getLogger(this.getClass());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public final void setMethodNameResolver(MethodNameResolver methodNameResolver) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.methodNameResolver = methodNameResolver;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public final MethodNameResolver getMethodNameResolver() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return this.methodNameResolver;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected Object formBackingObject(HttpServletRequest request) throws ServletException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return productionManager;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ProductionManager getProductionManager() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return productionManager;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setProductionManager(ProductionManager productionManager) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.productionManager = productionManager;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getFileUploadPath() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return fileUploadPath;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setFileUploadPath(String fileUploadPath) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.fileUploadPath = fileUploadPath;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected ModelAndView processFormSubmission(HttpServletRequest request,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; HttpServletResponse response, Object command, BindException errors)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ProductionManagerDTO pdto=(ProductionManagerDTO)((ProductionManagerImpl)command).getModel();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; log.info("binded filename from parent:"+pdto.getFileName()+"...");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ServletRequestDataBinder binder = createBinder(request, command);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; binder.bind(request);&lt;br /&gt;&lt;br /&gt;&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; if (errors.hasErrors() || isFormChangeRequest(request)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (logger.isDebugEnabled()) {&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; logger.info("Data binding errors: " + errors.getErrorCount());&lt;br /&gt;&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; logger.info("error is:"+errors.getFieldValue(request.getAttribute("file0").toString()));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logger.info("error is:"+errors.getNestedPath());&lt;br /&gt;&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; return showForm(request, response, errors);&lt;br /&gt;&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; else {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String methodName = this.methodNameResolver.getHandlerMethodName(request);&lt;br /&gt;&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; Method m = (Method) this.getClass().getMethod(methodName,&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; new Class[] {HttpServletRequest.class,HttpServletResponse.class,&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Object.class,BindException.class});&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (m == null) {&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; throw new NoSuchRequestHandlingMethodException(methodName, getClass());&lt;br /&gt;&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; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; List params = new ArrayList(4);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; params.add(request);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; params.add(response);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; params.add(command);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; params.add(errors);&lt;br /&gt;&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; return (ModelAndView) m.invoke(this, params.toArray(new Object[params.size()]));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //return null;&lt;br /&gt;&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; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ModelAndView deleteFiles(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logger.info("inside deleteFiles method...........");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ProductionManagerDTO pdto=(ProductionManagerDTO)((ProductionManagerImpl)command).getModel();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("binded filename:"+pdto.getFileName()+"...");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String file = request.getParameter("file");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String fileName = request.getParameter("fileName");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String fileID=request.getParameter("fileID");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String tempDestPath=new File(new File(".").getCanonicalPath()).toString()+System.getProperty("file.separator")+this.fileUploadPath+System.getProperty("file.separator")+fileName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; File uFile = new File(tempDestPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("filepath is:"+tempDestPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("File exist:"+uFile.exists()+"..readable:"+uFile.isFile());&lt;br /&gt;&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; return this.showForm(request, errors, getFormView());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ModelAndView finalSubmit(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Map model = new HashMap();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; model.put("item", "");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logger.info("inside finalSubmit method");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logger.info("inside deleteFiles method...........");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ProductionManagerDTO pdto=(ProductionManagerDTO)((ProductionManagerImpl)command).getModel();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("binded filename:"+pdto.getFileName()+"...");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String file = request.getParameter("file");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String fileName = request.getParameter("fileName");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String fileID=request.getParameter("fileID");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String tempDestPath=new File(new File(".").getCanonicalPath()).toString()+System.getProperty("file.separator")+this.fileUploadPath+System.getProperty("file.separator")+fileName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; File uFile = new File(tempDestPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("filepath is:"+tempDestPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("File exist:"+uFile.exists()+"..readable:"+uFile.isFile());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return new ModelAndView(getSuccessView(), model);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; &lt;br /&gt;This has the properties as normal and their getter and setters. The point to be noted is the method processFormSubmission(...). this method will return the name of the corresponding method whose name is posted in request scope.&lt;br /&gt;The child class of this class can have multiple methods. The method names are resolved using the methodResolver.&lt;br /&gt;&lt;br /&gt;Now register your customized resolver in your dispatcher servlet as shown below in mine case:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;bean id="submitActionParamResolver" class="com....impl.web.controller.SubmitParameterPropertiesMethodNameResolver"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="mappings"&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;props&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;prop key="_finish"&amp;gt;finalSubmit&amp;lt;/prop&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;prop key="_deleteFiles"&amp;gt;deleteFiles&amp;lt;/prop&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;prop key="_addFileElement"&amp;gt;addElement&amp;lt;/prop&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;prop key="_removeFileElement"&amp;gt;removeElement&amp;lt;/prop&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/props&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;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="defaultMethodName"&amp;gt;&amp;lt;value&amp;gt;finalSubmit&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There are four methods registered namely finalSubmit,deleteFiles,addElement,removeElement. The SubmitParameterPropertiesMethodNameResolver is shown below:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import java.util.Iterator;&lt;br /&gt;import java.util.Properties;&lt;br /&gt;&lt;br /&gt;import javax.servlet.http.HttpServletRequest;&lt;br /&gt;&lt;br /&gt;import org.apache.log4j.Logger;&lt;br /&gt;import org.springframework.web.servlet.mvc.multiaction.MethodNameResolver;&lt;br /&gt;import org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException;&lt;br /&gt;import org.springframework.web.util.WebUtils;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* &amp;lt;desc&amp;gt;This class resolves the method name from the request parameter&lt;br /&gt;&amp;nbsp;* and provide its mapped value defined in dispatcher servlet&amp;lt;/desc&amp;gt;&lt;br /&gt;&amp;nbsp;* @author Ramesh Raj Baral&lt;br /&gt;&amp;nbsp;* @since:Jan 21, 2010&lt;br /&gt;&amp;nbsp;* File:SubmitParameterPropertiesMethodNameResolver.java&lt;br /&gt;&amp;nbsp;* @Version:1.0&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class SubmitParameterPropertiesMethodNameResolver implements&lt;br /&gt;MethodNameResolver {&lt;br /&gt;&lt;br /&gt;private String defaultMethodName;&lt;br /&gt;&lt;br /&gt;private Properties mappings;&lt;br /&gt;private Logger logger=Logger.getLogger(this.getClass());&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Set URL to method name mappings from a Properties object.&lt;br /&gt;* @param mappings properties with URL as key and method name as value&lt;br /&gt;*/&lt;br /&gt;public void setMappings(Properties mappings) {&lt;br /&gt;this.mappings = mappings;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @param defaultMethodName The defaultMethodName to set.&lt;br /&gt;*/&lt;br /&gt;public void setDefaultMethodName(String defaultMethodName) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //logger.info("setting defaultMethod:"+defaultMethodName);&lt;br /&gt;this.defaultMethodName = defaultMethodName;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void afterPropertiesSet() {&lt;br /&gt;if (this.mappings == null || this.mappings.isEmpty()) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new IllegalArgumentException("'mappings' property is required");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public String getHandlerMethodName(HttpServletRequest request)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; throws NoSuchRequestHandlingMethodException {&lt;br /&gt;&lt;br /&gt;for (Iterator it = this.mappings.keySet().iterator(); it.hasNext();) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; String submitParamter = (String) it.next();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //logger.info("getHandlerMethodName:"+submitParamter);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (WebUtils.hasSubmitParameter(request, submitParamter)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return (String) this.mappings.get(submitParamter);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;//logger.info("returning defaultMethodName");&lt;br /&gt;return defaultMethodName;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now your Controller will be as shown below:&lt;br /&gt;&lt;br /&gt;package com.d2.vhippm.impl.web.controller;&lt;br /&gt;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.Date;&lt;br /&gt;import java.util.HashMap;&lt;br /&gt;import java.util.Iterator;&lt;br /&gt;import java.util.List;&lt;br /&gt;import java.util.Map;&lt;br /&gt;&lt;br /&gt;import javax.servlet.ServletException;&lt;br /&gt;import javax.servlet.http.HttpServletRequest;&lt;br /&gt;import javax.servlet.http.HttpServletResponse;&lt;br /&gt;&lt;br /&gt;import org.apache.commons.logging.Log;&lt;br /&gt;import org.apache.commons.logging.LogFactory;&lt;br /&gt;import org.springframework.util.StringUtils;&lt;br /&gt;import org.springframework.validation.BindException;&lt;br /&gt;import org.springframework.web.multipart.MultipartFile;&lt;br /&gt;import org.springframework.web.multipart.MultipartHttpServletRequest;&lt;br /&gt;import org.springframework.web.servlet.ModelAndView;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* This is responsible for the actions&lt;br /&gt;&amp;nbsp;* &amp;lt;li&amp;gt;fileview&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;* &amp;lt;li&amp;gt;fieldelete&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;* &amp;lt;li&amp;gt;comment related actions&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;nbsp;* @author Ramesh Raj Baral&lt;br /&gt;&amp;nbsp;* @since:Jan 22, 2010&lt;br /&gt;&amp;nbsp;* File:CommentsController.java&lt;br /&gt;&amp;nbsp;* @Version:1.0&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class CommentsController extends SimpleMultiActionFormController {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /** Logger for this class and subclasses */&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected final Log logger = LogFactory.getLog(getClass());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private ProductionManager productionManager;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private List&amp;lt;DTO&amp;gt; prodManagerFilesList;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private ProductionManagerFilesDTO prodManagerFile;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private UserEventLogDTO userEventDTO;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private List&amp;lt;DTO&amp;gt; userEventLogsList;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String fileUploadPath;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected Object formBackingObject(HttpServletRequest request) throws ServletException {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return productionManager;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ProductionManager getProductionManager() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return productionManager;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setProductionManager(ProductionManager productionManager) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.productionManager = productionManager;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ModelAndView deleteFiles(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logger.info("inside deleteFiles method");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ProductionManagerDTO pdto=(ProductionManagerDTO)((ProductionManagerImpl)command).getModel();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ProductionManagerFilesDTO selectedFileDTO=(ProductionManagerFilesDTO)pdto.getSelectedFileDTO();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String fileLocation = selectedFileDTO.getFileLocation();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String fileName = selectedFileDTO.getFileName();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String fileID=selectedFileDTO.getFileID();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; String tempDestPath=new File(new File(".").getCanonicalPath()).toString()+System.getProperty("file.separator")+this.fileUploadPath+System.getProperty("file.separator")+fileName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; File uFile = new File(tempDestPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("filepath is:"+tempDestPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("File exist:"+uFile.exists()+"..readable:"+uFile.isFile());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if(uFile.delete()){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; userEventDTO=new UserEventLogDTO();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; userEventDTO.setLogDesc("File_Deleted:"+tempDestPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; userEventDTO.setUserID("19345");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; userEventDTO.setUserName("system");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; userEventDTO.setLogType("File_Deleted");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; userEventDTO.setClientGroupID(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; userEventDTO.setClientID("1");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.productionManager.logEvents(userEventDTO);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.productionManager.updateModel(selectedFileDTO);&lt;br /&gt;&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; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return this.showForm(request, errors, getFormView());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ModelAndView finalSubmit(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logger.info("inside finalSubmit method");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ProductionManagerDTO pdto=(ProductionManagerDTO)((ProductionManagerImpl)command).getModel();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pdto.getNewCommentsDTO().setFileUploadPath(fileUploadPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; final Map files = multiRequest.getFileMap();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(fileUploadPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (files == null) {&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; logger.info("no file was sent");&lt;br /&gt;&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; else{&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; String tempDestPath;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Iterator fileIterator=files.values().iterator();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MultipartFile file;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; prodManagerFilesList=new ArrayList&amp;lt;DTO&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; userEventLogsList=new ArrayList&amp;lt;DTO&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while(fileIterator.hasNext()) {&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; tempDestPath=new File(new File(".").getCanonicalPath()).toString()+System.getProperty("file.separator")+this.fileUploadPath+System.getProperty("file.separator");&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; System.out.println("uploading to:"+tempDestPath);&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; file =(MultipartFile)fileIterator.next();&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; tempDestPath+=file.getOriginalFilename();&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; prodManagerFile=new ProductionManagerFilesDTO();&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; prodManagerFile.setFile(file);&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; prodManagerFile.setIsDeleted('N');&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; prodManagerFile.setFileName(file.getOriginalFilename());&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; prodManagerFile.setFileSize(file.getSize());&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; prodManagerFile.setFileType(file.getContentType());&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; prodManagerFile.setUploadedBy("currentUser");&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; prodManagerFile.setUploadedOn(new Date());&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; prodManagerFile.setType(file.getContentType());&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; if(StringUtils.hasLength(file.getOriginalFilename()) &amp;amp;&amp;amp; file.getSize()&amp;gt;0){&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; prodManagerFilesList.add(prodManagerFile);&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; }&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; //file.transferTo(new File(tempDestPath));&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; //make an entry if the transfer succeeds&lt;br /&gt;&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; pdto.getNewCommentsDTO().setFileDTOList(prodManagerFilesList);&lt;br /&gt;&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; if(StringUtils.hasLength(StringUtils.trimAllWhitespace(pdto.getNewCommentsDTO().getCommentMessage())))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.productionManager.updateModel(pdto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ((ProductionManagerDTO)this.productionManager.getModel()).getNewCommentsDTO().setCommentMessage("");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; List fileDTOList=new ArrayList();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; fileDTOList.add(new ProductionManagerFilesDTO());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ((ProductionManagerDTO)this.productionManager.getModel()).getNewCommentsDTO().setFileDTOList(fileDTOList);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return this.showForm(request, errors, getSuccessView());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* (non-Javadoc)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;* @see org.springframework.web.servlet.mvc.SimpleFormController#referenceData(javax.servlet.http.HttpServletRequest)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;*/&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected Map referenceData(HttpServletRequest request) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logger.info("inside referencedata");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return super.referenceData(request);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ModelAndView addElement(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logger.info("adding new file element");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.productionManager.addElement(((ProductionManagerDTO)this.productionManager.getModel()).getNewCommentsDTO().getFileDTOList());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return this.showForm(request, errors, getFormView());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public ModelAndView removeElement(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logger.info("removing file element");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return this.showForm(request, errors, getFormView());&lt;br /&gt;&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; if(((ProductionManagerDTO)this.productionManager).getNewCommentsDTO().getFileDTOList().size()&amp;gt;1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return this.productionManager.removeElement(((ProductionManagerDTO)this.productionManager).getNewCommentsDTO().getFileDTOList(), 1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return ((ProductionManagerDTO)this.productionManager).getNewCommentsDTO().getFileDTOList();&lt;br /&gt;&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; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getFileUploadPath() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return fileUploadPath;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setFileUploadPath(String fileUploadPath) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.fileUploadPath = fileUploadPath;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;As you can see this controller has different methods. Register this controller in your dispatcher servlet as well:&lt;br /&gt;&amp;lt;bean id="commentsController" class="com.....impl.web.controller.CommentsController"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="methodNameResolver"&amp;gt;&amp;lt;ref bean="submitActionParamResolver"/&amp;gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="sessionForm"&amp;gt;&amp;lt;value&amp;gt;true&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="commandName" value="productionManager"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="formView" value="commentPost"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="successView" value="PMCycles"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="productionManager" ref="productionManager"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="fileUploadPath" value=".../Clients"/&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now your jsp page will be something like:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%@ include file="/VHIPPM/jsp/include.jsp"%&amp;gt;&lt;br /&gt;&amp;lt;%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%&amp;gt;&lt;br /&gt;&amp;lt;%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&amp;nbsp; function setFileParameters(fileLocation,fileID,fileName,buttonName){&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;document.getElementById("fileID").value=fileID;&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;document.getElementById("fileName").value=fileName;&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;document.getElementById("fileLocation").value=fileLocation;&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;document.fileViewForm.fileName.value=fileName;&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;document.fileViewForm.fileID.value=fileID;&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;document.fileViewForm.fileLocation.value=fileLocation;&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;&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;b style="color: red;"&gt;document.fileViewForm._deleteFiles.click();&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;document.fileViewForm.submit();&lt;/b&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;nbsp;&amp;nbsp; &amp;nbsp;alert("setting fileParam"+fileLocation+".."+fileID+".."+fileName+".."+ buttonName);&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;//return true;&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;&amp;lt;script&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;form:form method="post" name="fileViewForm"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; commandName="productionManager" action="addComment.htm" enctype="multipart/form-data" &amp;gt;&lt;br /&gt;&amp;lt;table border="1" width="100%"&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td rowspan="2"&amp;gt;Client Name&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td rowspan="2"&amp;gt;App Name&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td rowspan="2"&amp;gt;Start Date&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td rowspan="1" colspan="3" align="center"&amp;gt;Phase&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td rowspan="2"&amp;gt;Target Date&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td rowspan="2"&amp;gt;Revenue Month&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td rowspan="2"&amp;gt;Priority&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;Phase&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;Status&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;Next Phase&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;test&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;test&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;test&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;current phase&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;test&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;Click to upload&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;table border="1" background="green" width="100%"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&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;th&amp;gt;Comments/Message&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&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;td colspan="3"&amp;gt;&amp;lt;form:textarea path="model.newCommentsDTO.commentMessage" /&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;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&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;td&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;c:forEach var="fileDTO" items="${productionManager.model.newCommentsDTO.fileDTOList}"&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;input id="file" type="file" name="${fileDTO.file}" size="30"/&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;/c:forEach&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; &lt;b style="color: red;"&gt;&amp;lt;input type="submit" value="More" name="_addFileElement"/&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;/td&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b style="color: red;"&gt; &amp;lt;td&amp;gt;&amp;lt;input type="submit" name="_finish" value="Submit" /&amp;gt;&amp;lt;/td&amp;gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&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;td&amp;gt;S.No&amp;lt;/td&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;td&amp;gt;Comments/Message&amp;lt;/td&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;td&amp;gt;Posted By&amp;lt;/td&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;td&amp;gt;Posted On&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;c:set var="count" value="0"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;c:forEach var="prodManagerDTO" items="${productionManager.models}"&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;c:forEach var="comments" items="${prodManagerDTO.commentsDTOList}"&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; varStatus="status"&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;c:set var="count" value="${count +1}" /&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;/c:forEach&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;c:forEach var="comments" items="${prodManagerDTO.commentsDTOList}"&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; varStatus="status" begin="1"&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;tr&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;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;c:out value="${status.count}" /&amp;gt;&amp;lt;/td&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;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;&amp;lt;c:out value="${comments.commentMessage}" /&amp;gt;&amp;lt;/b&amp;gt; &amp;lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;table border="0"&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;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;c:forEach var="files" items="${comments.fileDTOList}"&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;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;tr&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;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;c:choose&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;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;lt;c:when test="${empty files.deletedDesc }"&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;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;lt;c:if test="${!empty files.fileName}"&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;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;lt;td&amp;gt;&amp;lt;a&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;&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; href="../download.htm?file=&amp;lt;c:out value='${files.fileLocation}'/&amp;gt;&amp;amp;fileName=&amp;lt;c:out value='${files.fileName}'/&amp;gt;" /&amp;gt;&amp;lt;c:out&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;&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; value="${files.fileName}" /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/td&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;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;lt;td&amp;gt;&amp;lt;a href="../deleteFiles.htm"&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;&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; onclick="setFileParameters('&amp;lt;c:out value="${files.fileLocation}"/&amp;gt;','&amp;lt;c:out value="${files.fileID}"/&amp;gt;','&amp;lt;c:out value="${files.fileName}"/&amp;gt;','deleteFile');"&amp;gt;Delete&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;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Me!&amp;lt;/a&amp;gt;&amp;lt;/td&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;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;lt;/c:if&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;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;lt;/c:when&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;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;lt;c:otherwise&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;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;lt;td&amp;gt;&amp;lt;c:out value="${files.deletedDesc}"&amp;gt;&amp;lt;/c:out&amp;gt;&amp;lt;/td&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;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;lt;/c:otherwise&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;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;/c:choose&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;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/tr&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;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/c:forEach&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;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/table&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;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/td&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;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;c:out value="${comments.postedBy}" /&amp;gt;&amp;lt;/td&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;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;td&amp;gt;&amp;lt;c:out value="${comments.postedOn}" /&amp;gt;&amp;lt;/td&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;/tr&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;/c:forEach&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/c:forEach&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/table&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form:input id="fileName" path="model.selectedFileDTO.fileName" cssStyle="display:none"/&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form:input id="fileID" path="model.selectedFileDTO.fileID" cssStyle="display:none"/&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form:input id="fileLocation" path="model.selectedFileDTO.fileLocation" cssStyle="display:none" /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div id="delFileButtonDiv" style="display: none"&amp;gt;&amp;lt;input&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; type="submit" name="_deleteFiles" value="Delete File!" /&amp;gt;&amp;lt;c:out&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; value="${files.fileName}" /&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/form:form&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As you can see the statements in the jsp page highlighted in red color are responsible fro triggering the submit action. These submit action will trigger the corresponding methods in the CommentsController.java class.&lt;br /&gt;For example if you click the submit button with name '&lt;b style="color: red;"&gt;_finish&lt;/b&gt;' then from the dispatcher servlet the method name will be resolved as '&lt;span style="color: red;"&gt;finalSubmit&lt;/span&gt;'.&lt;br /&gt;&lt;br /&gt;See the entry &lt;span style="color: red;"&gt;&amp;lt;prop key="_finish"&amp;gt;finalSubmit&amp;lt;/prop&amp;gt;&lt;/span&gt;.&lt;br /&gt;The finalSubmit method will get the control from the jsp. Now as the controller is of type SimpleFormController, you have the access of the form elements as well and as the name of buttons are mapped to different methods of controller via the methodNameResolver and the dispatcher servlet different methods will be triggered accordingly.&lt;br /&gt;&lt;br /&gt;Thanks for the posts at: &lt;a href="http://forum.springsource.org/showthread.php?t=11702"&gt;http://forum.springsource.org/showthread.php?t=11702&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Thanks.&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-1611691520726600989?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/1611691520726600989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/01/multiactionformcontroller-in-spring.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/1611691520726600989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/1611691520726600989'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/01/multiactionformcontroller-in-spring.html' title='MultiActionFormController in Spring'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-4080475216329862838</id><published>2010-01-15T03:32:00.000-08:00</published><updated>2010-01-15T03:32:39.497-08:00</updated><title type='text'>How to download the files using Spring!</title><content type='html'>Like the upload process, the download process needs some tricky way to handle the operation effectively. As I have come through the problem and wasted some time, you can have a look and save your time......&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After populating the list of files in the jsp(view) part, you can have an anchor link either on their name or any other properties.&lt;br /&gt;I have used in their names.&lt;br /&gt;Simply use this link in their names in your jsp page:&lt;br /&gt;&lt;br /&gt;&lt;i style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;lt;td&amp;gt;&amp;lt;a href="../download.htm?file=&amp;lt;c:out value='${files.fileLocation}'/&amp;gt;&amp;amp;fileName=&amp;lt;c:out value='${files.fileName}'/&amp;gt;"/&amp;gt;&amp;lt;c:out value="${files.fileName}"/&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/download.htm?file=%3Cc:out%20value=%27$%7Bfiles.fileLocation%7D%27/%3E&amp;amp;fileName=%3Cc:out%20value=%27$%7Bfiles.fileName%7D%27/%3E"&gt;&lt;c:out value="${files.fileName}"&gt;&lt;/c:out&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_Lim5SdbiqH0/S1BSNoJfYrI/AAAAAAAAADE/WnrHMBVSuG4/s1600-h/blogpostimage.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_Lim5SdbiqH0/S1BSNoJfYrI/AAAAAAAAADE/WnrHMBVSuG4/s320/blogpostimage.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Now make your entry for the download.htm in the dispatcher servlet:&lt;br /&gt;&lt;br /&gt;&lt;i style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;lt;bean id="downloadFileController" class="com.d2.vhippm.impl.web.controller.DownloadFilesController"&amp;gt;&lt;br /&gt;&amp;lt;property name="filePath" value="VHIPPMFiles/Clients"/&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;/i&gt;&lt;br /&gt;&lt;bean class="com.....controller.DownloadFilesController" id="downloadFileController"&gt; &lt;property name="filePath" value="...you can provide the path of file in the server here too..."&gt;&lt;/property&gt;&lt;br /&gt;Finally here goes the controller:&lt;br /&gt;&lt;br /&gt;//you can modify this as you desire&lt;br /&gt;//this controller allows the user to download the file whose link was clcked by the user&lt;br /&gt;&lt;br /&gt;&lt;i style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import java.io.BufferedInputStream;&lt;br /&gt;import java.io.File;&lt;br /&gt;import java.io.FileInputStream;&lt;br /&gt;import java.io.PrintWriter;&lt;br /&gt;&lt;br /&gt;import javax.servlet.ServletContext;&lt;br /&gt;import javax.servlet.http.HttpServletRequest;&lt;br /&gt;import javax.servlet.http.HttpServletResponse;&lt;br /&gt;&lt;br /&gt;import org.springframework.util.FileCopyUtils;&lt;br /&gt;import org.springframework.web.servlet.ModelAndView;&lt;br /&gt;import org.springframework.web.servlet.mvc.Controller;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* &lt;br /&gt;&amp;nbsp;* @author Ramesh Raj Baral&lt;br /&gt;&amp;nbsp;* @since:Jan 15, 2010&lt;br /&gt;&amp;nbsp;* File:DownloadFilesController.java&lt;br /&gt;&amp;nbsp;* @Version:1.0&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;&lt;br /&gt;public class DownloadFilesController implements Controller {&lt;br /&gt;private String filePath;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public ModelAndView handleRequest(HttpServletRequest request,&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;HttpServletResponse response) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ServletContext servletContext = request.getSession()&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;.getServletContext();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;String file = request.getParameter("file");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;String fileName = request.getParameter("fileName");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;String tempDestPath=new File(new File(".").getCanonicalPath()).toString()+System.getProperty("file.separator")+this.filePath+System.getProperty("file.separator")+fileName;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;File uFile = new File(tempDestPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;System.out.println("filepath:"+tempDestPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;System.out.println("File exist:"+uFile.exists()+"..readable:"+uFile.isFile());&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;try{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;uFile=new File(tempDestPath);&lt;br /&gt;&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;catch(Exception ex){&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;System.out.println("exception getting file:"+ex.getMessage());&lt;br /&gt;&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;int fSize = (int) uFile.length();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (fSize &amp;gt; 0) {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;BufferedInputStream in = new BufferedInputStream(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;new FileInputStream(uFile));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;String mimetype = servletContext.getMimeType(file);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;response.setBufferSize(fSize);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;response.setContentType(mimetype);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;response.setHeader("Content-Disposition", "attachment; filename=\""&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;+ fileName + "\"");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;response.setContentLength(fSize);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//added later&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**response.setHeader("Cache-Control", "no-cache");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;response.setHeader("Pragma", "no-cache");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;response.setDateHeader("Expires", 0);&lt;br /&gt;&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;//finish added later&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;FileCopyUtils.copy(in, response.getOutputStream());&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;in.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;response.getOutputStream().flush();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;response.getOutputStream().close();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;response.setContentType("text/html");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;PrintWriter printwriter = response.getWriter();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printwriter.println("&amp;lt;html&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printwriter.println("&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;h2&amp;gt;Could not get file name:&amp;lt;br&amp;gt;" + file + "&amp;lt;/h2&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printwriter.println("&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;center&amp;gt;&amp;lt;h3&amp;gt;&amp;lt;a href='javascript: history.go(-1)'&amp;gt;Back&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;/center&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printwriter.println("&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;amp;copy; webAccess");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printwriter.println("&amp;lt;/html&amp;gt;");&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printwriter.flush();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;printwriter.close();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return null;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public String getFilePath() {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return filePath;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public void setFilePath(String filePath) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;this.filePath = filePath;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;/bean&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Safe exception handling is customizable as you wish.&lt;br /&gt;&lt;br /&gt;Thanks a lot for the posts at:&lt;a href="p://forum.springsource.org/showthread.php?t=14128"&gt; http://forum.springsource.org/showthread.php?t=14128&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thank you.&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-4080475216329862838?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/4080475216329862838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/01/how-to-download-files-using-spring.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/4080475216329862838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/4080475216329862838'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/01/how-to-download-files-using-spring.html' title='How to download the files using Spring!'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Lim5SdbiqH0/S1BSNoJfYrI/AAAAAAAAADE/WnrHMBVSuG4/s72-c/blogpostimage.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-2497956106316575518</id><published>2010-01-11T22:43:00.000-08:00</published><updated>2010-01-15T03:43:49.038-08:00</updated><title type='text'>Multiple File Uploads in Spring MVC applications</title><content type='html'>It has been really a hassle implementing the multiple file upload feature in spring application.&lt;br /&gt;Either you need to allow a single file upload or some specified number rather than the number of file uploads as desired by the user.&lt;br /&gt;Here is a fully implemented and tested approach that allows the user to upload the number of files desired.&lt;br /&gt;&lt;br /&gt;First we need to have a fileupload.jsp page with the contents as follows:&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;Upload a file please&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script SRC="../js/prototype.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var items=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function AddItem() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var div=document.getElementById("items");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var button=document.getElementById("add");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; items++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newitem="&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;File:"+ items;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newitem+="&amp;lt;input type=\"file\" name=\"file";// + items;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newitem+="\" size=\"30\"&amp;gt;";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newnode=document.createElement("span");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newnode.innerHTML=newitem;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; div.insertBefore(newnode,button);&lt;br /&gt;&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;lt;/script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h1&amp;gt;Please upload a file&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;form method="post" enctype="multipart/form-data"&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;div ID="items"&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; File:1&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;input id="uploadFile" type="file" name="file1" size="30"/&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;input type="button" value="More" name="more" onclick="AddItem();"/&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;/div&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;input type="submit" value="Done!"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;this is javascript to add the desired number of file input elements:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var items=1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function AddItem() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var div=document.getElementById("items");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var button=document.getElementById("add");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; items++;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newitem="&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;File:"+ items;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newitem+="&amp;lt;input type=\"file\" name=\"file";// + items;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newitem+="\" size=\"30\"&amp;gt;";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newnode=document.createElement("span");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newnode.innerHTML=newitem;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; div.insertBefore(newnode,button);&lt;br /&gt;&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;lt;/script&amp;gt;     &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Further more....&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;To allow the user add and delete the required number of &amp;lt;file... elements in the page, the following javascript will work:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type="text/javascript"&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; var items=1;&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; function AddItem() {&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; var div=document.getElementById("items");&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; var button=document.getElementById("add");&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; items++;&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; newitem="&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;File:"+ items;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; newitem+="&amp;lt;p&amp;gt;&amp;lt;input type=\"file\" name=\"file\"";// + items;&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; newitem+="\"id=file"+items;&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; newitem+="\" size=\"30\"&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; newitem+="&amp;lt;p&amp;gt;&amp;lt;input type=\"button\" id=\"delButton"+items;&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; newitem+="\" value=\"Delete\" name=\"button"+items;&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; newitem+="\" onclick=deletethisRow("+items+")&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newnode=document.createElement("div");&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; newnode.setAttribute("id","child"+items);&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; newnode.innerHTML=newitem;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; div.insertBefore(newnode,button);&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;}&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;function deletethisRow(obj){&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; var fileElement=document.getElementById("file"+obj);&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; var buttonElement=document.getElementById("delButton"+obj);&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; var childDivName="child"+obj;&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; if (buttonElement) {&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; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var child = document.getElementById(childDivName);&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; var parent = document.getElementById("items");&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; parent.removeChild(child);&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; }&lt;br /&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; &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;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; In addition, this dynamically generates the &amp;lt;file element and the delete button along with it. Click on the delete button if you no more want it. Click more button if you need to have more files upload.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;in your dispatcher servlet add the following entries:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;i&gt; &lt;br /&gt;&lt;bean class="com.d2hawkeye.util.MultiCommonsMultipartResolver" id="multipartResolver"&gt;&amp;lt;!-- for multiple file uploads --&amp;gt;&lt;br /&gt;&amp;lt;bean id="multipartResolver" class="com.d2hawkeye.util.MultiCommonsMultipartResolver"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;bean id="fileUploadController" class="com.....web.controller.FileUploadFormController"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="commandName" value="fileManager"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="formView" value="fileuploadform"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="successView" value="SuccessPage"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="&lt;/bean&gt;&lt;/i&gt;&lt;i&gt;fileManager&lt;/i&gt;&lt;i&gt;&lt;bean class="com.d2hawkeye.util.MultiCommonsMultipartResolver" id="multipartResolver"&gt;" ref="&lt;/bean&gt;&lt;/i&gt;&lt;i&gt;fileManager&lt;/i&gt;&lt;i&gt;&lt;bean class="com.d2hawkeye.util.MultiCommonsMultipartResolver" id="multipartResolver"&gt;"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;property name="fileUploadPath" value="uplaodedFiles"/&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;bean class="com.d2hawkeye.util.MultiCommonsMultipartResolver" id="multipartResolver"&gt;&lt;br /&gt;&amp;nbsp;   &lt;bean class="com.d2.vhippm.impl.web.controller.FileUploadFormController" id="fileUploadController"&gt;&lt;property name="commandName" value="fileManager"&gt; &lt;property name="formView" value="fileuploadform"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="successView" value="PMCycles"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="&amp;lt;/i&amp;gt;&amp;lt;i&amp;gt;fileManager&amp;lt;/i&amp;gt;&amp;lt;i&amp;gt;" ref="&amp;lt;/i&amp;gt;&amp;lt;i&amp;gt;fileManager&amp;lt;/i&amp;gt;&amp;lt;i&amp;gt;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="fileUploadPath" value="VHIPPMFiles/Clients"&gt;&lt;br /&gt;&lt;/property&gt;&lt;br /&gt;&lt;/property&gt;&lt;/property&gt;&lt;/property&gt;&lt;/property&gt;&lt;/bean&gt;&lt;/bean&gt;&lt;/bean&gt;&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;i&gt;&lt;bean class="com.....util.MultiCommonsMultipartResolver" id="multipartResolver"&gt;&lt;br /&gt;&lt;br /&gt;&lt;bean class="com.....controller.FileUploadFormController" id="fileUploadController"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="commandName" value="fileManager"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="formView" value="fileuploadform"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="successView" value="successPage"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="fileManager" ref=" reference to your fileManager service class"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;property name="fileUploadPath" value="UploadedFiles"&gt;&lt;br /&gt;&lt;/property&gt;&lt;/property&gt;&lt;/property&gt;&lt;/property&gt;&lt;/property&gt;&lt;/bean&gt;&lt;/bean&gt;&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The successPage is simply a jsp page(successPage.jsp) with success msg.&lt;br /&gt;&amp;nbsp;The fileuploadform is the jsp page with name fileuploadform.jsp which is listed above.&lt;br /&gt;&lt;br /&gt;The fileManager is reference to the Service class that manipulates the uploaded file.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The fileupload controller is listed below: &lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;i&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;mport java.io.File;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import java.io.IOException;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import java.util.Date;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import java.util.Iterator;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import java.util.List;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import java.util.Map;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import javax.servlet.ServletException;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import javax.servlet.http.HttpServletRequest;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import javax.servlet.http.HttpServletResponse;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.apache.commons.logging.Log;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.apache.commons.logging.LogFactory;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.springframework.util.StringUtils;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.springframework.validation.BindException;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.springframework.web.bind.ServletRequestDataBinder;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.springframework.web.multipart.MultipartFile;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.springframework.web.multipart.MultipartHttpServletRequest;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.springframework.web.multipart.support.ByteArrayMultipartFileEditor;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.springframework.web.servlet.ModelAndView;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.springframework.web.servlet.mvc.SimpleFormController;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import com....api.service.FileManager;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;/**&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;* &lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;* @author Ramesh Raj Baral&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;* @since:Jan 11, 2010&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;* @Version:1.0&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;public class FileUploadFormController extends SimpleFormController {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /** Logger for this class and subclasses */&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected final Log logger = LogFactory.getLog(getClass());&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private FileManager fileManager;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private String fileUploadPath;//path on server where file is to be uploaded&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected Object formBackingObject(HttpServletRequest request) throws ServletException {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return productionManager;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public FileManager get&lt;/span&gt;&lt;/i&gt;&lt;i style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;FileManager&lt;/i&gt;&lt;i style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return fileManager;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setFileManager(FileManager &lt;/i&gt;&lt;i style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;fileManager&lt;/i&gt;&lt;i style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.&lt;/i&gt;&lt;i style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;fileManager&lt;/i&gt;&lt;i style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt; = &lt;/i&gt;&lt;i style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;fileManager&lt;/i&gt;&lt;i style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String getFileUploadPath() {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return fileUploadPath;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void setFileUploadPath(String filePath) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.fileUploadPath = filePath;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected ModelAndView onSubmit(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; HttpServletRequest request,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; HttpServletResponse response,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Object command,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; BindException errors) throws ServletException, IOException,Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println("adding uploaded files"+command.getClass());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; logger.info("Adding the uploaded files");&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; final Map files = multiRequest.getFileMap();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.info("no of files:"+files.size());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(fileUploadPath);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if (files == null) {&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; logger.info("no file was sent");&lt;br /&gt;&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; else{&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; String tempDestPath;&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; Iterator fileIterator=files.values().iterator();&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; MultipartFile file;&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; while(fileIterator.hasNext()) {&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; tempDestPath=new File(new File(".").getCanonicalPath()).toString()+System.getProperty("file.separator")+this.fileUploadPath+System.getProperty("file.separator");&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; System.out.println("uploading to:"+tempDestPath);&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; file =(MultipartFile)fileIterator.next();&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; tempDestPath+=file.getOriginalFilename();&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; logger.info("file name:"+file.getOriginalFilename());&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; &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; if(StringUtils.hasLength(file.getOriginalFilename()) &amp;amp;amp;&amp;amp;amp; file.getSize()&amp;amp;gt;0){&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; filesList.add(file);&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;&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; file.transferTo(new File(tempDestPath));&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; //make an entry if the transfer succeeds&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; }&lt;br /&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; &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; &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; &lt;br /&gt;&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; return super.onSubmit(request, response, command, errors);&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;//simply display the success page&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;This&lt;i&gt; &lt;/i&gt;is simply the controller that is responsible for handling the uploaded files.&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The class MultiCommonsMultipartResolver is listed below:&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt; i&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;mport java.io.UnsupportedEncodingException;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import java.util.HashMap;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import java.util.Iterator;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import java.util.List;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import java.util.Map;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;/**&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;* inspired from&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;* http://dhruba.name/2008/12/27/implementing-single-and-multiple-file-multipart-uploads-using-spring-25/&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;* modified by:&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;* @author Ramesh Raj Baral&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;* @since Jan 11 2010&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;*/&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import javax.servlet.ServletContext;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.apache.commons.fileupload.FileItem;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.springframework.util.StringUtils;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.springframework.web.multipart.MultipartException;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.springframework.web.multipart.commons.CommonsMultipartFile;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;import org.springframework.web.multipart.commons.CommonsMultipartResolver;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;public class MultiCommonsMultipartResolver extends CommonsMultipartResolver {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;public MultiCommonsMultipartResolver() {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; public MultiCommonsMultipartResolver(ServletContext servletContext) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; super(servletContext);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @Override&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @SuppressWarnings("unchecked")&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; protected MultipartParsingResult parseFileItems(List fileItems, String encoding) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map multipartFiles = new HashMap();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Map multipartParameters = new HashMap();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Extract multipart files and multipart parameters.&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (Iterator it = fileItems.iterator(); it.hasNext();) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; FileItem fileItem = (FileItem) it.next();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; if (fileItem.isFormField()) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; String value = null;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; if (encoding != null) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; try {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value = fileItem.getString(encoding);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; } catch (UnsupportedEncodingException ex) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (logger.isWarnEnabled()) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.warn("Could not decode multipart item '" + fileItem.getFieldName()&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&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; + "' with encoding '" + encoding + "': using platform default");&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value = fileItem.getString();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; } else {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; value = fileItem.getString();&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; String[] curParam = (String[]) multipartParameters.get(fileItem.getFieldName());&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; if (curParam == null) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; // simple form field&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; multipartParameters.put(fileItem.getFieldName(), new String[] { value });&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; } else {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; // array of simple form fields&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; String[] newParam = StringUtils.addStringToArray(curParam, value);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; multipartParameters.put(fileItem.getFieldName(), newParam);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; } else {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; // multipart file field&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; CommonsMultipartFile file = new CommonsMultipartFile(fileItem);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; logger.info("filename:"+file.getOriginalFilename());&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; /**&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; * if the filename is blank-donot add it to the map&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; * @author Ramesh Raj Baral&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; * @since Jan 11 2010,5:24 pm&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; * &lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; */&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; if(StringUtils.hasLength(file.getOriginalFilename())){&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; if (multipartFiles.put(fileItem.getName(), file) != null) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new MultipartException("Multiple files for field name [" + file.getName()&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + "] found - not supported by MultipartResolver");&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; else{&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp; logger.info("empty or invalid filename submitted:"+file.getOriginalFilename());&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; if (logger.isDebugEnabled()) {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; logger.debug("Found multipart file [" + file.getName() + "] of size " + file.getSize()&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + " bytes with original filename [" + file.getOriginalFilename() + "], stored "&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + file.getStorageDescription());&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&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; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new MultipartParsingResult(multipartFiles, multipartParameters);&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;br style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;" /&gt;&lt;span style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;The purpose of this class is to override the functionality of&amp;nbsp; conventional MultipartResolver from commons-fileupload so that you can do multiple uploads.If however the client insists on using the same form input name such as ‘files[]‘ or ‘files’ and then populating that name with multiple files then a small hack is necessary as follows. As noted above Spring 2.5 throws an exception if it detects the same form input name of type file more than once. &lt;a href="http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/web/multipart/commons/CommonsFileUploadSupport.html"&gt;&lt;code&gt;CommonsFileUploadSupport&lt;/code&gt;&lt;/a&gt; – the class which throws that exception is not final and the &lt;a href="http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/web/multipart/commons/CommonsFileUploadSupport.html#parseFileItems%28java.util.List,%20java.lang.String%29"&gt;method&lt;/a&gt; which throws that exception is &lt;code&gt;protected&lt;/code&gt; so using the wonders of inheritance and subclassing one can simply fix/modify the logic a little bit as follows. The change I’ve made is literally one word representing one method invocation which enables us to have multiple files incoming under the same form input name.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Further queries can be resolved from a helpful link here:&lt;br /&gt;&lt;a href="http://dhruba.name/2008/12/27/implementing-single-and-multiple-file-multipart-uploads-using-spring-25/"&gt;http://dhruba.name/2008/12/27/implementing-single-and-multiple-file-multipart-uploads-using-spring-25/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Thank you,&lt;br /&gt;Ramesh.&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-2497956106316575518?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/2497956106316575518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2010/01/multiple-file-uploads-in-spring-mvc.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/2497956106316575518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/2497956106316575518'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2010/01/multiple-file-uploads-in-spring-mvc.html' title='Multiple File Uploads in Spring MVC applications'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-8030080902285563471</id><published>2009-11-04T21:59:00.000-08:00</published><updated>2009-11-04T21:59:32.875-08:00</updated><title type='text'>GM foods!</title><content type='html'>Genetically Modified Foods:&lt;br /&gt;&lt;br /&gt;1)Genetically modified (GM) foods are foods derived from genetically modified organisms. Genetically modified organisms have had specific changes introduced into their DNA by genetic engineering, unlike similar food organisms which have been modified from their wild ancestors through selective breeding (plant breeding and animal breeding) or mutation breeding.&lt;br /&gt;&lt;br /&gt;2)GM foods were first put on the market in the early 1990s. Typically, genetically modified foods are transgenic plant products: soybean, corn, canola, and cotton seed oil, but animal products have been developed. For example, in 2006 a pig engineered to produce omega-3 fatty acids through the expression of a roundworm gene was controversially produced. Researchers have also developed a genetically-modified breed of pigs that are able to absorb plant phosphorus more efficiently, and as a consequence the phosphorus content of their manure is reduced by as much as 60%.&lt;br /&gt;&lt;br /&gt;3)Critics have objected to GM foods on several grounds, including perceived safety issues, ecological concerns, and economic concerns raised by the fact that these organisms are subject to intellectual property law.&lt;br /&gt;&lt;br /&gt;4)Genetic engineering begins with the identification and isolation of a gene which expresses a desirable trait, with the aid of restriction enzymes. Then a recipient plant or animal is selected, and the gene is inserted and incorporated into its genome through a vector such as agrobacterium, through a gene gun shooting an elemental particle covered in plasmid DNA, electroporation, or a virus&lt;br /&gt;&lt;br /&gt;5)Crop yields&lt;br /&gt;&lt;br /&gt;Several studies supported by organic growers have claimed that genetically modified varieties of plants do not produce higher crop yields than normal plants. However, independent scientific studies have not been able to substantiate such claims.&lt;br /&gt;&lt;br /&gt;One study by Charles Benbrook, Chief Scientist of the Organic Center, found that genetically engineered Roundup Ready soybeans do not increase yields (Bendrook, 1999). The report reviewed over 8,200 university trials in 1998 and found that Roundup Ready soybeans yielded 7-10% less than similar natural varieties. In addition, the same study found that farmers used 5-10 times more herbicide (Roundup) on Roundup Ready soybeans than on conventional ones.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Merits/Demerits&lt;br /&gt;&lt;br /&gt;Advantages:&lt;br /&gt;1. Modified to make them more resistant to unfavourable conditions&lt;br /&gt;2. Produce higher yields&lt;br /&gt;3. Use less fertilizers&lt;br /&gt;4. Use lesser water&lt;br /&gt;5. Pest resistance&lt;br /&gt;6. Herbicide tolerance&lt;br /&gt;7. Increasing food supplies in co-relation with an increasing world population.&lt;br /&gt;8. can ge yield in irrespective of the season&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Disadvantages:&lt;br /&gt;1. Harmful to environment&lt;br /&gt;2. Harmful to humans&lt;br /&gt;3. Give rise to 'super weeds'&lt;br /&gt;4. 'Super weeds' dominate the fields and affect main crops&lt;br /&gt;5. Genes from the genetically modified food could be transferred to the pests which can make them become resistant to the pesticides and the pesticides become useless. &lt;br /&gt;6.The new genes that are put in food could be resistant to certain antibiotics; if we eat them the effectiveness of antibiotics could be reduced. New allergens could be accidentally created and known allergens could be transferred to other foods. For example, if a gene from peanuts was taken and put in a tomato, people allergic to peanuts could be allergic to that tomato.&lt;br /&gt;7.Genetic pollution&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Genetically modified DNA from any part of a GM plant can enter the &lt;br /&gt;environment unobserved, for example, through pollen transfer to a &lt;br /&gt;conventional crop, through seed dispersal or plant decomposition and &lt;br /&gt;persistence in soil ecology. The toxins encoded in the DNA also kill &lt;br /&gt;wildlife and contaminate soil and water, as do herbicides such as &lt;br /&gt;glyphosate and glufosinate ammonium that are an essential component of &lt;br /&gt;the herbicide tolerant crop system.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;GM contamination lasts at least 15 years in soil&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-8030080902285563471?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/8030080902285563471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2009/11/gm-foods.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/8030080902285563471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/8030080902285563471'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2009/11/gm-foods.html' title='GM foods!'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-4247022880366967984</id><published>2009-10-15T21:26:00.001-07:00</published><updated>2009-10-15T21:26:27.384-07:00</updated><title type='text'>शुभ दिपआवली २०६६......</title><content type='html'>शुभ दिपआवली २०६६ को शुखद उपलक्षमा सबै पाठक बर्गमा हार्दिक मंगल्मये शुभकामना व्यक्त गर्दछु ।।।।।।रमेशराज बराल&lt;div class="blogger-post-footer"&gt;Java Mysql BLOB reading/writing
java mail sending mail and reading mail from external server&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/811026757586872756-4247022880366967984?l=me-ramesh.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://me-ramesh.blogspot.com/feeds/4247022880366967984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://me-ramesh.blogspot.com/2009/10/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/4247022880366967984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/811026757586872756/posts/default/4247022880366967984'/><link rel='alternate' type='text/html' href='http://me-ramesh.blogspot.com/2009/10/blog-post.html' title='शुभ दिपआवली २०६६......'/><author><name>ramesh</name><uri>http://www.blogger.com/profile/12452179964098078275</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='21' src='http://2.bp.blogspot.com/_Lim5SdbiqH0/Sq8YwJnMUzI/AAAAAAAAACc/1oUrOncP0Lk/S220/Ramesh+Raj+Baral-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-811026757586872756.post-9004916825179708687</id><published>2009-10-15T21:15:00.000-07:00</published><updated>2009-10-15T21:15:08.323-07:00</updated><title type='text'>Software Testing With Spring Framework</title><content type='html'>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Software Testing With Spring Framework&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;Posted by Srini &amp;amp; Kavitha Penchikala on Nov 12, 2007&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.infoq.com/articles/testing-in-spring"&gt;http://www.infoq.com/articles/testing-in-spring&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Testing is an integral part of enterprise software development. It is as important, if not the most important, as any other phase of the Software Development Lifecycle (SDLC). But testing an enterprise application is easier said than done. There are several constraints that make testing effort in a project a major challenge. These constraints usually fall into two categories: framework related constraints and project methodology related constraints.&lt;br /&gt;RelatedVendorContent&lt;br /&gt;&lt;br /&gt;Download the Free Adobe® Flex® Builder 3 Trial&lt;br /&gt;&lt;br /&gt;Adobe® Rich Internet Application Project Portal&lt;br /&gt;&lt;br /&gt;Advanced Java Memory Analysis&lt;br /&gt;&lt;br /&gt;Domain-Specific Languages for Functional Testing&lt;br /&gt;&lt;br /&gt;Business Benefits of Open Source SOA&lt;br /&gt;Related Sponsor&lt;br /&gt;&lt;br /&gt;Adobe Air and open source Flex, part of the Adobe Flash Platform allow you to develop rich apps across operating systems and devices. Learn how to build RIA’s at the RIA Project Portal.&lt;br /&gt;&lt;br /&gt;An example of framework related constraints is that J2EE architecture model does not take into account the aspect of unit testing as part of the software development. Since the container (application server) is the core component of J2EE run-time architecture, it is difficult to test applications built based on J2EE API, outside the container. Unit testing (outside the container) is essential to achieve high test coverage. It's also easy to reproduce many failure scenarios without the overhead of application server setup and code deployment. It is vital to ensure that tests can be run quickly which is important in development or production support phases of the project. The task of verifying code using unit testing minimizes unproductive time spent waiting for the application to be deployed every time we make a code change.&lt;br /&gt;&lt;br /&gt;Since the code in a traditional J2EE application depends heavily on the application server, its functionality can be fully tested only when deployed inside a J2EE container. But in-container testing is too slow and too much of an obstacle to developer productivity especially if the project is relatively large and number of code artifacts (java source files) is high.&lt;br /&gt;&lt;br /&gt;There are some J2EE frameworks that are built from ground-up to provide excellent support for integrating software testing into the development process. Spring is one of such java enterprise application development frameworks.&lt;br /&gt;&lt;br /&gt;Recently, I did some consulting on an enterprise java application my wife worked on for a local Tier-One automotive supplier company. The project was to create a Customer Profile Management System used to track the profiles of their customer companies. The architecture of this application included Hibernate 3.0, Spring 2.0, and JBoss 4.0 technologies. The project team followed an Agile software development approach to deliver the requirements in one-week iterations. They used the integration testing features offered by Spring framework, to test the application code in Data Access and Service layers. We really liked the testing support provided by Spring framework. It simplified testing to a great extent and made the aggressive one-week development iterations possible and manageable.&lt;br /&gt;&lt;br /&gt;This article provides an overview of the support provided by Spring framework in the areas of unit and integration testing. I will use a sample loan processing web application to help the readers in implementing an Agile Testing framework in a typical Java EE application and how to use Spring test classes to test the application functionality.&lt;br /&gt;Agile Software Testing&lt;br /&gt;&lt;br /&gt;A software development project must include good design and architecture practices as well as good testing practices. An application may have a very good architecture, design and code, but if it's not well tested, it cannot be considered a successful product. Some companies (software service vendors) live and die by the quality of their products and testing is crucial in the success of these companies.&lt;br /&gt;&lt;br /&gt;Agile software development requires a comprehensive testing strategy in order to achieve the agility and quality in the software development project. Agile testing includes unit testing as well as integration testing. This means that we should be able to execute the tests as quickly as possible (one way to achieve the agility is to run the tests outside the application server). Test Driven Development (TDD) is one of the key elements of Agile development process. Spring and other light-weight containers such as PicoContainer and HiveMind provide great support for test driven software development.&lt;br /&gt;&lt;br /&gt;Let's briefly look at the significance of unit and integration testing in a typical Java EE development project and objectives and constraints of each testing approach.&lt;br /&gt;Unit Testing&lt;br /&gt;&lt;br /&gt;Unit testing is used to test a specific unit (class) in the application. Unit tests should be written to test all the methods in the class including all exception paths in the methods. The objective of unit testing is to be able to quickly test any new code or changes to existing code without the overhead and additional time involved in tasks such as server configuration, services setup and application deployment. Developer unit testing is critical since it is easier and cheaper to find and fix bugs earlier in software development lifecycle (at coding and unit testing phases) rather than in the later stages.&lt;br /&gt;&lt;br /&gt;JUnit is the popular testing framework used for writing unit tests. In JUnit tests, we simply instantiate the objects using new operator, without having to worry about the container's JNDI resources and J2EE services such as resource pooling, JDBC connection pools and JMS queues. We can also use testing techniques like Mock Objects to test the code in isolation. With unit testing, there is no need for any infrastructure setup for an application server or even a database server.&lt;br /&gt;&lt;br /&gt;There are some limitations to unit testing. Unit tests don't address the testing of functional requirements of the application. These tests only cover testing of each module in the application. Also, we can't test scenarios like asynchronous services which require JMS message queues configured inside the application server. But we should still be able to unit test as much application functionality as possible and use the in-container tests for only those functions that cannot be tested outside the container.&lt;br /&gt;Integration Testing&lt;br /&gt;&lt;br /&gt;Unit tests are very useful to test a module or class in isolation. But it's also important to do integration testing of the application to see how various modules would work together when assembled in the integrated environment. Some functions that work fine at module level may not work correctly when integrated with other modules in the application. This scenario is very realistic in an agile development environment where different developers work on different parts of the application at the same time and they need to merge code changes on a regular (in some development teams daily) basis. The integration tests include testing round-trip calls between client and service layers of the application. Most of the integration tests usually run in the container. But to be truly agile, we will need to run atleast some integration tests without any code deployment to the container.&lt;br /&gt;&lt;br /&gt;Integration tests are useful in DAO layer where the implementations of DAO interfaces cannot be unit tested effectively. Other objectives of integration testing is to test aspects such as remote service, state (session) management, web flow and transaction management. Integration testing has some constraints as well. It takes longer time to run these tests. Since the application needs to be deployed inside Java EE container, there is also the server setup and configuration overhead involved in running these tests.&lt;br /&gt;&lt;br /&gt;It should be noted that integration testing is complimentary testing, not a substitute for unit testing. Developers should first write sufficient unit tests for each java class in the application to achieve a good code coverage. At the same time, there should be enough integration tests written to cover different use case scenarios in the application that can not be tested with unit tests.&lt;br /&gt;&lt;br /&gt;There are several other types of testing in addition to unit and integration tests. Following table lists different testing strategies and their objectives.&lt;br /&gt;&lt;br /&gt;Table 1. Java EE Testing Strategies&lt;br /&gt;Test Strategy  Objective&lt;br /&gt;Unit Testing  Test the application at class level to test all methods in each class.&lt;br /&gt;Mock Objects  Mock Objects are used in Client and Service layers of the application to test the class methods without having to really connect to back-end database or other network resources.&lt;br /&gt;ORM Testing  Verify the integrity of database table mappings defined in ORM layer. These test classes use database metadata information to check ORM mappings.&lt;br /&gt;DB Testing  Test data access classes (DAOs) in isolation. These tests put the database tables into a known state for each test run.&lt;br /&gt;XML Testing  Test XML documents, their validity, and compare two different documents to assert if they are same or not.&lt;br /&gt;Integration Testing  Test website navigation, web flow, and state (session) management and transaction management.&lt;br /&gt;Regression Testing  Test the application functionality as an end-user would use the application when it's deployed in production environment. These tests are usually run by a dedicated QA team using automated testing tools such as Mercury QuickTest Professional (QTP).&lt;br /&gt;Load Testing  Test the scalability of the application. These performance tests are usually run by a dedicated load testing team using tools such as Mercury LoadRunner, WAPT, and JMeter.&lt;br /&gt;Profiling  Test for any memory leaks, memory usage, garbage collection etc at application run-time. Developers run the application through a java profiler such as JProfiler, Quest JProbe, Eclipse Test and Performance Tools Platform (TPTP).&lt;br /&gt;&lt;br /&gt;There are a variety of open source testing frameworks to perform the various test strategies listed above. Following is a list of some of these frameworks.&lt;br /&gt;&lt;br /&gt;* JUnit&lt;br /&gt;* JMock&lt;br /&gt;* ORMUnit&lt;br /&gt;* DBUnit&lt;br /&gt;* XMLUnit&lt;br /&gt;* JUnitEE&lt;br /&gt;* MockEJB&lt;br /&gt;* Cactus&lt;br /&gt;&lt;br /&gt;Since the testing aspect determines the success or failure of a project, any Java EE framework we use for software development should provide the support for seamless integration of testing into design and development phases. Let's look at some of the characteristics that an ideal Java EE framework should have, from unit and integration testing stand-point.&lt;br /&gt;&lt;br /&gt;Agile Development:&lt;br /&gt;The framework should aid in an Iterative and Agile software development of the application. Agile methodologies are being adapted by more development teams and agile testing and early feedback is the main part of iterative development.&lt;br /&gt;&lt;br /&gt;Test Driven Development:&lt;br /&gt;It is a well proven fact that the testing concern needs to be addressed right from the early phases of application development lifecycle. It is lot cheaper and more effective to find and fix the bugs earlier in the process. And the best way to find any bugs is by testing "early and often" in design and development phases of each iteration in the project.&lt;br /&gt;&lt;br /&gt;Interface based design:&lt;br /&gt;One of the best practices that we object oriented programmers try to strive for is to write java classes to interfaces instead of concrete classes. Writing to interfaces gives us a great flexibility in running the unit and integration tests without having to modify the client code whenever the implementation of a service component is changed.&lt;br /&gt;&lt;br /&gt;Separation of Concerns:&lt;br /&gt;We achieve a "separation of concerns" (SOC) when we consciously design and write code in separate modules based on the specific application concern that we are trying to address (like domain, business logic, data access and infrastructure logic). This way different concerns like logging, exception handling and application security can be tested in isolation without any dependencies on other modules.&lt;br /&gt;&lt;br /&gt;Layered Architecture:&lt;br /&gt;A typical Java enterprise application is designed in such a way that there are client, service, domain and persistence layers. Any element of a layer should only depend on other elements in the same layer or on elements of the layer just "beneath" it (assuming that presentation is the topmost layer and persistence is the bottom most layer in the architecture layers). What this means is the client layer can only depend on service layer. Service layer can only depend on Domain layer and domain layer can only depend on persistence layer. The Java EE framework should support unit and integration testing in all these layers without any dependency on other layers.&lt;br /&gt;&lt;br /&gt;Non-Invasive:&lt;br /&gt;Frameworks like EJB and Struts force developers to extend framework specific classes (like EJBObject, ActionForm, Action etc) in the application. This creates an application dependency on the specific framework which makes unit testing a challenge and also leads to extra work when we need to switch to a different (and better) framework. These frameworks are invasive in nature and should be carefully chosen with future extensibility requirements in mind. Note that the latest version of EJB specification (version 3.0), which is part of Java EE 5, is less invasive as the Entities (formerly called Entity Beans) and Session beans are plain java classes that can be tested outside the container similar to Spring beans.&lt;br /&gt;&lt;br /&gt;Inversion Of Control (IoC):&lt;br /&gt;The framework should provide support for Inversion of Control on the objects created in the application. Inversion Of Control or IoC (also known as Dependency Injection, DI) design pattern brings several benefits to integration testing. The primary benefit is that the application designed based on IoC pattern depends far less on the container than one created using traditional J2EE application architecture.&lt;br /&gt;&lt;br /&gt;Aspect Oriented Programming (AOP):&lt;br /&gt;AOP enables behavior, that would otherwise be scattered through different classes, to be centralized in a single module. It's very useful in unit and integration testing where we can test Java EE services such as transaction management and role based security declaratively using Aspects.&lt;br /&gt;&lt;br /&gt;Service Oriented Architecture:&lt;br /&gt;Testing is a critical component in a SOA infrastructure since a Service is used in different modules and applications in the enterprise. If a specific use case of a service component is not tested completely, it could potentially cause production problems and quality issues when code changes are implemented in the production environment.&lt;br /&gt;&lt;br /&gt;Data Access Abstraction:&lt;br /&gt;A consistent architectural approach to data access is also very important in testing the data access functions of an application. The data access abstraction should be agnostic to any persistence implementation framework (such as Hibernate, JPA, JDO, iBATIS, OJB, and Spring JDBC). It should also nicely handle data access exceptions thrown in the persistence layer.&lt;br /&gt;&lt;br /&gt;Transaction management:&lt;br /&gt;The framework should provide an abstraction interface for testing transaction management. It should integrate with JDBC and JTA transactions (for both Container and Bean managed transactions) and other transaction objects such as Hibernate Transaction.&lt;br /&gt;Spring Support For Testing&lt;br /&gt;&lt;br /&gt;Spring framework was designed based on agile testing strategies to help developers follow sound design and effective unit testing best practices. It also provides a great support for running integration tests outside the application server. Spring is a non-invasive framework in the sense that when we use Spring, there is a minimal dependency of application code on the framework. We can configure application objects as plain java classes (POJOs) without having to extend any Spring specific classes (Note: When you use Spring template helper classes such as JDBCTemplate, JNDITemplate, HibernateDaoSupport etc, you are adding the dependency on the Spring framework). We can even configure any legacy classes that were written prior to the existence of Spring.&lt;br /&gt;&lt;br /&gt;Spring framework in general, and Spring Testing module in particular support the following aspects:&lt;br /&gt;&lt;br /&gt;Isolation:&lt;br /&gt;Spring gives J2EE developers the flexibility to test java classes in isolation by injecting mock implementations. For example, we can test a service class using a mock implementation of the corresponding Repository class. This way, we can test business logic in the service class without worrying about the persistence details of connecting to a database.&lt;br /&gt;&lt;br /&gt;Inversion of Control:&lt;br /&gt;The framework provides sophisticated configuration management for POJOs. Spring IoC container can manage fine or coarse grained java classes. It uses a bean factory to instantiate application objects and wire them together using constructor or setter injection mechanisms.&lt;br /&gt;&lt;br /&gt;Data Access:&lt;br /&gt;It provides a nice persistence architecture for data access and a good hierarchy of data access exceptions. It provides helper classes (such as JdbcTemplate, HibernateTemplate, TopLinkTemplate, JpaTemplate) to work with the leading persistence frameworks.&lt;br /&gt;&lt;br /&gt;Transaction Management:&lt;br /&gt;Spring provides a nice abstraction framework for managing transactions (both local and global). This abstraction provides a consistent programming model in a wide range of development environments and is the basis for Spring's declarative and programmatic transaction management.&lt;br /&gt;Integration Testing using Spring&lt;br /&gt;&lt;br /&gt;Spring configuration, dependency injection (DI), data access (CRUD), and transaction management are some of the concerns that we can test outside the server environment using Spring Testing framework. The data access tests are executed against a real database so no need to use any mock objects in these tests.&lt;br /&gt;&lt;br /&gt;Spring context load time may not be an issue in small to medium size web applications. But for a large size enterprise application, it could take significant time to instantiate the classes in the application. Also, the overhead of running every single test case in every single test fixture leads to slower overall test runs and adversely affects developer productivity. Keeping these concerns in mind, Spring development team wrote some test classes that can be used as integration tests running outside the container. Since these test classes are extensions of JUnit API, we get all the benefits of JUnit right out of the box when we use the Spring test classes. These test classes setup a transaction for each test method and automatically cleanup (rolling back the transaction at end of each method) eliminating the necessity for any database setup and teardown tasks.&lt;br /&gt;&lt;br /&gt;Following is a list of items we can verify when we run integration tests in a Spring application:&lt;br /&gt;&lt;br /&gt;* Loading of Spring contexts and management of the contexts by caching loaded contexts between execution of each test case. Also, verify correct wiring of application contexts by Spring IoC container.&lt;br /&gt;* Dependency Injection of test fixtures and Spring configuration details (To verify if a specific data access (Repository) class configuration is loaded correctly).&lt;br /&gt;* Convenience variables for data access and CRUD operations (The logic of data access class to test database select and updates).&lt;br /&gt;* Transaction management.&lt;br /&gt;* ORM mapping file configuration (Verify if everything related to a persistence object is mapped correctly and correct lazy-loading semantics are in place).&lt;br /&gt;&lt;br /&gt;We can run integration tests just like JUnit tests. They are slower to run compared to unit tests because we are testing the code at integration level rather than just at a class level. But these integration tests are lot faster to execute than the tests created using in-container testing frameworks such as JUnitEE or Cactus which rely on deployment of the application to the container before the tests can be executed.&lt;br /&gt;&lt;br /&gt;Spring integration test classes were designed to address various testing concerns so there are different test classes in org.springframework.test package. Following table shows some of the test classes provided in Spring framework for integration testing and in what scenarios they can be used.&lt;br /&gt;&lt;br /&gt;Table 2. Spring Test Classes&lt;br /&gt;Test Class Name  Description&lt;br /&gt;AbstractDependencyInjection SpringContextTests  This test class injects test dependencies so we don't need to specifically perform the Spring application context lookups. It also automatically locates the corresponding object in the set of configuration files specified in the getConfigLocations() method.&lt;br /&gt;AbstractTransactionalDataSource SpringContextTests  This test class is used to test the code that runs inside a transaction. It creates and rolls back a transaction for each test case. We write code with the assumption that there is a transaction present. It provides the fields such as a JdbcTemplate that can be used to verify database state after test operations, or verify the results of queries performed by application code. An ApplicationContext is also inherited, and can be used for explicit lookup if necessary.&lt;br /&gt;AbstractJpaTests  This test class is used for testing JPA functionality. It provides an EntityManager instance that we can use to call JPA methods.&lt;br /&gt;AbstractAspectjJpaTests  This class extends from AbstractJpaTests and it is used for load-time weaving (LTW) purposes using AspectJ. We override the method getActualAopXmlLocation() to specify the location of AspectJ's configuration xml file.&lt;br /&gt;AbstractModelAndViewTests  This is a convenient base class for testing the presentation and controller layers (using Spring MVC) in the application.&lt;br /&gt;&lt;br /&gt;Figure 1 below shows the class hierarchy diagram of Spring framework test classes extending from JUnit TestCase class. Note: These test classes are part of spring-mock.jar file (located in dist folder inside Spring framework installation directory).&lt;br /&gt;&lt;br /&gt;Figure 1. Spring test class hierarchy (Click on the screen shot to open a full-size view.)&lt;br /&gt;&lt;br /&gt;Following is a list of the factors to consider when deciding on which test class to extend from:&lt;br /&gt;&lt;br /&gt;* To use the Spring application context without having to write the code to initialize and manage it.&lt;br /&gt;* To test the data access (using data source)&lt;br /&gt;* To test a method inside a transaction (using transactionmanager)&lt;br /&gt;* JDK Version: If you are using JDK 1.4 so you can't take the advantage of Annotations introduced in JDK 1.5.&lt;br /&gt;&lt;br /&gt;The following section gives more details of these test classes.&lt;br /&gt;&lt;br /&gt;AbstractSpringContextTests:&lt;br /&gt;This is the base class for all Spring test classes. It provides convenience methods to load Spring application context. We extend this class when we need to test loading of Spring context without having to explicitly manage the dependency injection. It maintains a static cache of contexts by key which helps in significant performance benefit if the application has several Spring beans (especially beans such as LocalSessionFactoryBean for working with an ORM tool such as Hibernate) to load. Hence, in most cases, it makes sense to initialize the application context once and cache it for subsequent lookups.&lt;br /&gt;&lt;br /&gt;AbstractSingleSpringContextTests:&lt;br /&gt;This is an abstract test class that exposes a single Spring ApplicationContext. It will cache the application contexts based on a context key which is usually the config locations (String[]) describing the Spring resource descriptors. It encapsulates all the functions related to loading and managing the Spring context.&lt;br /&gt;&lt;br /&gt;AbstractDependencyInjectionSpringContextTests:&lt;br /&gt;This is a convenient super class for tests that depend on the Spring application context. It has setAutowireMode() method used to set the autowire mode for test properties set by Dependency Injection. The default is AUTOWIRE_BY_TYPE but it can also be set to AUTOWIRE_BY_NAME or AUTOWIRE_NO.&lt;br /&gt;&lt;br /&gt;AbstractTransactionalSpringContextTests:&lt;br /&gt;This class has several convenient methods to make the transaction management task easier when running the integration tests. It provides the transaction variables transactionManager, transactionDefinition, and transactionStatus for managing the transactions in the test methods. It also has a method called endTransaction() to force a commit or rollback of the transaction. And startNewTransaction() method is used to start a new transaction, which is called after calling endTransaction().&lt;br /&gt;&lt;br /&gt;AbstractTransactionalDataSourceSpringContextTests:&lt;br /&gt;This is one of the mostly used Spring test classes. It provides useful inherited protected fields, such as a JdbcTemplate that can be used to run CRUD operations on the database. It also executes each test method in its own transaction, which is automatically rolled back by default. This means that even if tests change the database state (with insert, update, or delete), there is no need for a teardown or cleanup script because the database changes are automatically rolled back. The other helper methods in this class are countRowsInTable() which is a handy method to check if a new record has been added or an existing record has been deleted, deleteFromTables is used to delete all rows from the tables, executeSqlScript is used to execute a given SQL script (These DB changes will be rolled back based on the state of the current transaction).&lt;br /&gt;&lt;br /&gt;AbstractAnnotationAwareTransactionalTests:&lt;br /&gt;This test class exposes SimpleJdbcTemplate variable. Using this class, we can control transactional behavior using @Transactional annotation. We can also use @NotTransactional to prevent any transaction being created at all (Note these two are Spring specific annotations and they create a dependency on Spring framework. You can use this feature only if you are using JDK 1.5.&lt;br /&gt;&lt;br /&gt;AbstractJpaTests:&lt;br /&gt;This is base test class to extend from when we want to test a DAO class written using JPA API. It exposes an EntityManagerFactory and a shared EntityManager for persistence methods. It requires DataSource and JpaTransactionManager to be injected.&lt;br /&gt;&lt;br /&gt;Once you decide on which test class to extend, here are the steps required to integrate Spring test classes in your integration tests:&lt;br /&gt;&lt;br /&gt;* Extend one of Spring test classes (usually AbstractTransactionalDataSourceSpringContextTests or AbstractJpaTests if you specifically want to test JPA functionality). Note that JPA is Java SE 5.0 only so if you are using pre-JDK1.5 version in your application, you can't extend this class.&lt;br /&gt;* Override getConfigLocations() method to load all the configuration files for data source, transaction manager, and other resources used in the application code. Use @Override annotation to specify that we are overriding this method defined in the super class (AbstractSingleSpringContextTests).&lt;br /&gt;* Write setter methods for all the DAO objects used in the test class (these DAO objects are injected by Spring IoC container using the specified auto-wire option).&lt;br /&gt;* Add the test methods using these DAO objects (which in turn use the data source), transaction manager, and ORM persistence helper methods.&lt;br /&gt;&lt;br /&gt;Rod Johnson's presentation on System Testing Using Spring is an excellent resource on the support Spring Test API offers in unit and integration testing.&lt;br /&gt;Sample Application&lt;br /&gt;&lt;br /&gt;The sample application used in this article is a home loan processing system. The use case is to process the funding of a mortgage in the system. When a loan application is submitted to a mortgage lending company, it first goes through the underwriting process where the underwriters approve or deny loan request based on customer's income details, credit history and several other factors. If the loan application is approved it goes through the closing and funding processes.&lt;br /&gt;&lt;br /&gt;Funding module in the loan processing application automates the process of disbursement of funds. Funding process typically starts with the lender company forwarding the loan package to a title company. The title company then reviews the loan package and schedules a date and time for closing the loan. Borrower and the seller meet with the closing agent at the title company.&lt;br /&gt;&lt;br /&gt;During closing, the buyer (borrower) and the seller read and sign the final loan documents. The borrower would pay the down payment and money for any fees associated with closing the loan. Also, closing costs and escrow fees are paid at the time of the closing process. After the closing meeting, the title company sends the signed agreement to the lender for funding. The lender transfers the funds to the title company.&lt;br /&gt;&lt;br /&gt;Application Architecture:&lt;br /&gt;&lt;br /&gt;I followed the popular layered architecture in the design of the sample application. These layers are Presentation, Application (Controller), Service, Domain and Data Access layers. I named the data access classes (DAO) as Repositories following the naming conventions recommended in Domain Driven Design principles. I wrote the service, domain, and data access layers as plain java classes. I won't cover the Presentation and Application layer classes in this article.&lt;br /&gt;&lt;br /&gt;The application architecture diagram of LoanApp web application is shown in Figure 2 below.&lt;br /&gt;&lt;br /&gt;Figure 2. LoanApp application architecture diagram (Click on the screen shot to open a full-size view.)&lt;br /&gt;&lt;br /&gt;Data Model:&lt;br /&gt;I created the loan application database (called LoanDB) for the loanapp application using HSQL database. For the demo purposes, I kept the data model simple with 3 tables called LOANDETAILS, FUNDINGDETAILS, and BORROWERDETAILS.&lt;br /&gt;&lt;br /&gt;Domain Model:&lt;br /&gt;There are three domain objects in the model, namely LoanDetails, BorrowerDetails, and FundingDetails to capture the business entities required in the funding module in the loan processing system.&lt;br /&gt;&lt;br /&gt;Note: The model used in the sample application is just for demonstration purposes. A real world application domain model would be more complex than what is described here.&lt;br /&gt;&lt;br /&gt;I wrote the data access classes for each of the domain classes. The DAO classes are LoanDetailsRepositoryJpaImpl, BorrowerDetailsRepositoryJpaImpl, and FundingDetailsRepositoryJpaImpl. And there is a service class called FundingServiceImpl that encapsulates the logic to process a funding request. It calls the DAO's in order to approve, deny, or void the funding request for a specified loan.&lt;br /&gt;&lt;br /&gt;Persistence:&lt;br /&gt;I used Java Persistence API (JPA) as the persistence model for object-relational mapping (ORM) requirements in the web application. Spring provides support for all the leading persistence frameworks such as Hibernate, JDO, iBATIS, TopLink, and JPA. Spring JPA, which is part of Spring 2.0 release, includes JPA helper classes in org.springframework.orm.jpa package. I used the EntityManager option (instead of JPA Template) for the persistence concern. This approach has no dependency on Spring and still can be managed using Spring application context. We can also take advantage of Annotations to inject EntityManager using @PersistenceContext and @PersistenceUnit tags.&lt;br /&gt;&lt;br /&gt;Following table shows the frameworks and technologies used in the sample application.&lt;br /&gt;&lt;br /&gt;Table 3. Technologies used in the sample application&lt;br /&gt;Layer  Technology  Version&lt;br /&gt;Controller  Spring MVC  2.0&lt;br /&gt;Service  Spring  2.0&lt;br /&gt;Domain  Plain Java Classes   &lt;br /&gt;Persistence  JPA   &lt;br /&gt;Database  HSQLDB server  1.8.0&lt;br /&gt;Java  Java SE  6.0&lt;br /&gt;Build  Ant  1.7&lt;br /&gt;IDE  Eclipse  3.3&lt;br /&gt;&lt;br /&gt;The other tools I used in the sample application are Metrics and FindBugs for static code analyses, EclEmma for code coverage.&lt;br /&gt;Testing&lt;br /&gt;&lt;br /&gt;Here is a quick reiteration of what our objectives are in writing and executing the tests.&lt;br /&gt;&lt;br /&gt;* We want to code and run the tests without leaving the IDE (Eclipse).&lt;br /&gt;* There should be no special deployment of the code required&lt;br /&gt;* We should be able to exploit other code analysis tools such as Metrics and FindBugs right from within the IDE so we can find any bugs right away and fix those issues.&lt;br /&gt;&lt;br /&gt;In addition to the traditional unit tests (using JUnit) for each of the Repository classes in the application (namely LoanDetailsRepositoryJpaImpl, BorrowerDetailsRepositoryJpaImpl, and FundingDetailsRepositoryJpaImpl), I also wrote integration tests to verify FundingServiceImpl class methods.&lt;br /&gt;&lt;br /&gt;Following table shows the list of the main and corresponding test classes.&lt;br /&gt;&lt;br /&gt;Table 4: List of test cases in the loan application&lt;br /&gt;Application Layer  Main Class  Test Class(es)&lt;br /&gt;Data Access  LoanDetailsRepositoryImpl  LoanDetailsRepositoryJpaImplTest,&lt;br /&gt;LoanDetailsRepositoryJpaImplSpringDITest&lt;br /&gt;Data Access  BorrowerDetailsRepository  BorrowerDetailsRepositoryJpaImplTest&lt;br /&gt;Data Access  FundingDetailsRepositoryImpl  FundingDetailsRepositoryJpaImplTest&lt;br /&gt;Service  FundingServiceImpl  FundingServiceImplIntegrationTest,&lt;br /&gt;FundingServiceImplSpringDITest,&lt;br /&gt;FundingServiceImplSpringJPATest&lt;br /&gt;&lt;br /&gt;To compare Spring's integration testing support, I first wrote the funding service integration test without using Spring test classes (FundingServiceImplTest). Then I wrote two other test classes (FundingServiceImplSpringDITest and FundingServiceImplSpringJpaTest) to test the logic in FundingServiceImpl class, but this time using Spring test classes. I used several helper variables and methods to aid in running the database queries. These are variables jdbcTemplate, simpleJdbcTemplate, sharedEntityManager, and methods countRowsInTable(), deleteFromTables(), and endTransaction().&lt;br /&gt;&lt;br /&gt;Let's take a look code examples of these unit and integration test classes to see how many boiler-plate testing tasks are automated by Spring Testing API so the developers can focus on asserting the actual business logic.&lt;br /&gt;&lt;br /&gt;First of all, let's look at the Spring configuration XML file. This file has the Spring bean definitions for repository (DAO) classes used in the sample application. Listing 1 shows the code for loanApplicationContext-jpa.xml configuration file.&lt;br /&gt;&lt;br /&gt;Listing 1. LoanApp Spring configuration details&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;beans xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemalocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-2.0.xsd     http://www.springframework.org/schema/tx     http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"&gt;&lt;br /&gt;&lt;br /&gt;&lt;bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" id="propertyConfigurer"&gt;&lt;br /&gt;&lt;property name="location" value="classpath:jdbc.properties"&gt;&lt;br /&gt;&lt;/property&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;bean class="com.ideature.agiletestingspring.loanapp.service.FundingServiceImpl" id="fundingService"&gt;&lt;br /&gt;&lt;property name="loanDetailsRepository" ref="loanDetailsRepository"&gt;&lt;br /&gt;&lt;property name="borrowerDetailsRepository" ref="borrowerDetailsRepository"&gt;&lt;br /&gt;&lt;property name="fundingDetailsRepository" ref="fundingDetailsRepository"&gt;&lt;br /&gt;&lt;/property&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;bean class="com.ideature.agiletestingspring.loanapp.repository.LoanDetailsRepositoryJpaImpl" id="loanDetailsRepository"&gt;&lt;br /&gt;&lt;bean class="com.ideature.agiletestingspring.loanapp.repository.BorrowerDetailsRepositoryJpaImpl" id="borrowerDetailsRepository"&gt;&lt;br /&gt;&lt;bean class="com.ideature.agiletestingspring.loanapp.repository.FundingDetailsRepositoryJpaImpl" id="fundingDetailsRepository"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource"&gt;&lt;br /&gt;&lt;property name="driverClassName" value="${jdbc.driverClassName}"&gt;&lt;br /&gt;&lt;property name="url" value="${jdbc.url}"&gt;&lt;br /&gt;&lt;property name="username" value="${jdbc.username}"&gt;&lt;br /&gt;&lt;property name="password" value="${jdbc.password}"&gt;&lt;br /&gt;&lt;/property&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory"&gt;&lt;br /&gt;&lt;br /&gt;&lt;property name="persistenceUnitName" value="LoanDBSpring"&gt;&lt;br /&gt;&lt;br /&gt;&lt;property name="dataSource" ref="dataSource"&gt;&lt;br /&gt;&lt;property name="loadTimeWeaver"&gt;&lt;br /&gt;&lt;br /&gt;&lt;bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"&gt;&lt;br /&gt;&lt;/bean&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;property name="jpaVendorAdapter"&gt;&lt;br /&gt;&lt;bean class="org.springframework.orm.jpa.vendor.TopLinkJpaVendorAdapter"&gt;&lt;br /&gt;&lt;property name="databasePlatform" value="oracle.toplink.essentials.platform.database.HSQLPlatform"&gt;&lt;br /&gt;&lt;property name="generateDdl" value="false"&gt;&lt;br /&gt;&lt;property name="showSql" value="true"&gt;&lt;br /&gt;&lt;/property&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/property&gt;&lt;br /&gt;&lt;/property&gt;&lt;br /&gt;&lt;br /&gt;&lt;bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager"&gt;&lt;br /&gt;&lt;property name="entityManagerFactory" ref="entityManagerFactory"&gt;&lt;br /&gt;&lt;property name="dataSource" ref="dataSource"&gt;  &lt;/property&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;tx:annotation-driven&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/bean&gt;  &lt;br /&gt;&lt;br /&gt;I wrote two base classes that all test classes in the sample application extend from. These are BaseDataSourceSpringContextIntegrationTest and BaseJpaIntegrationTest.&lt;br /&gt;&lt;br /&gt;BaseDataSourceSpringContextIntegrationTest:&lt;br /&gt;This is the base test class for testing the data access and Spring context loading functions. It extends Spring's AbstractTransactionalDataSourceSpringContextTests class. It loads the application context by calling getConfigLocations() method. The source code for this abstract test class is shown in Listing 2.&lt;br /&gt;&lt;br /&gt;Listing 2. BaseDataSourceSpringContextIntegrationTest base test class&lt;br /&gt;&lt;br /&gt;package com.ideature.agiletestingspring.loanapp;&lt;br /&gt;&lt;br /&gt;import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;&lt;br /&gt;public abstract class BaseDataSourceSpringContextIntegrationTest extends AbstractTransactionalDataSourceSpringContextTests {&lt;br /&gt;private static final String[] configFiles = new String[]{"loanapp-applicationContext-jpa.xml"};&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;protected String[] getConfigLocations() {&lt;br /&gt;return configFiles;&lt;br /&gt;}&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;BaseJpaIntegrationTest:&lt;br /&gt;This is the base class for all the integration tests created to test ORM functions using JPA. It extends Spring's AbstractJpaTests class. Listing 3 below shows the code for BaseJpaIntegrationTest class.&lt;br /&gt;&lt;br /&gt;Listing 3. BaseJpaIntegrationTest test class&lt;br /&gt;&lt;br /&gt;package com.ideature.agiletestingspring.loanapp;&lt;br /&gt;&lt;br /&gt;import org.springframework.test.jpa.AbstractJpaTests;&lt;br /&gt;&lt;br /&gt;public class BaseJpaIntegrationTest extends AbstractJpaTests {&lt;br /&gt;private static final String[] configFiles = new String[]{"loanapp-applicationContext-jpa.xml"};&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;protected String[] getConfigLocations() {&lt;br /&gt;return configFiles;&lt;br /&gt;}&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;The details of the other test classes in LoanApp application are as follows:&lt;br /&gt;&lt;br /&gt;LoanDetailsRepositoryJpaImplTest:&lt;br /&gt;This is the plain vanilla repository unit test class to test CRUD logic in LoanDetailsRepositoryJpaImpl class. It explicitly initializes the Spring application context, retrieves loanDetailsRepository from context, and then calls CRUD methods in the repository class. It also calls the delete method to remove the new record added in LOANDETAILS table. This test class also has setUp() and tearDown() methods to initialize and cleanup the resources used in the test methods.&lt;br /&gt;&lt;br /&gt;LoanDetailsRepositoryJpaImplSpringDITest:&lt;br /&gt;This test class is similar to LoanDetailsRepositoryJpaImplTest but it uses Spring test classes to make it very easy to test data access methods in LoanDetailsRepository class. It extends BaseDataSourceSpringContextIntegrationTest. It has a setter method for setLoanDetailsRepository(), so Spring's IoC container will inject the correct implementation of the repository interface at runtime. There is no boiler-plate code such as initializing the application context, or setUp() and tearDown() methods. Also, there is no need to call the delete method since all the DB changes are automatically rolled back at the end of each test method. We use AUTOWIRE_BY_TYPE (default option) to auto-wire LoanDetailsRepository using setLoanDetailsRepository() method.&lt;br /&gt;&lt;br /&gt;FundingServiceImplIntegrationTest:&lt;br /&gt;This is the test class for FundingServiceImpl class. It shows how much code we have to write if we were not taking the advantage of Spring test classes. Listing 4 shows the code of this integration test class.&lt;br /&gt;&lt;br /&gt;Listing 4. Sample code for FundingServiceImplIntegrationTest&lt;br /&gt;&lt;br /&gt;package com.ideature.agiletestingspring.loanapp.service;&lt;br /&gt;&lt;br /&gt;import static org.junit.Assert.assertEquals;&lt;br /&gt;&lt;br /&gt;import java.util.Collection;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;import org.apache.commons.logging.Log;&lt;br /&gt;import org.apache.commons.logging.LogFactory;&lt;br /&gt;import org.junit.After;&lt;br /&gt;import org.junit.Before;&lt;br /&gt;import org.junit.Test;&lt;br /&gt;import org.springframework.context.ApplicationContext;&lt;br /&gt;import org.springframework.context.support.ClassPathXmlApplicationContext;&lt;br /&gt;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.LoanAppConstants;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.LoanAppException;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.domain.BorrowerDetails;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.domain.FundingDetails;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.domain.LoanDetails;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.dto.FundingDTO;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.repository.BorrowerDetailsRepository;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.repository.FundingDetailsRepository;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.repository.LoanDetailsRepository;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.repository.RepositoryException;&lt;br /&gt;&lt;br /&gt;public class FundingServiceImplIntegrationTest {&lt;br /&gt;private static final Log log = LogFactory.getLog(FundingServiceImplIntegrationTest.class);&lt;br /&gt;&lt;br /&gt;private static final String[] configFiles = new String[] {&lt;br /&gt;"loanapp-applicationContext-jpa.xml"};&lt;br /&gt;&lt;br /&gt;private ApplicationContext ctx = null;&lt;br /&gt;&lt;br /&gt;private LoanDetailsRepository loanDetailsRepository = null;&lt;br /&gt;private BorrowerDetailsRepository borrowerDetailsRepository = null;&lt;br /&gt;private FundingDetailsRepository fundingDetailsRepository = null;&lt;br /&gt;private FundingService fundingService;&lt;br /&gt;&lt;br /&gt;@Before&lt;br /&gt;public void setUp() {&lt;br /&gt;ctx = new ClassPathXmlApplicationContext(configFiles);&lt;br /&gt;log.debug("ctx: "+ctx);&lt;br /&gt;loanDetailsRepository = (LoanDetailsRepository)ctx.getBean("loanDetailsRepository");&lt;br /&gt;borrowerDetailsRepository = (BorrowerDetailsRepository)ctx.getBean("borrowerDetailsRepository");&lt;br /&gt;fundingDetailsRepository = (FundingDetailsRepository)ctx.getBean("fundingDetailsRepository");&lt;br /&gt;log.debug("loanDetailsRepository: "+loanDetailsRepository);&lt;br /&gt;&lt;br /&gt;fundingService = (FundingService)ctx.getBean("fundingService");&lt;br /&gt;log.debug("fundingService: " + fundingService);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@After&lt;br /&gt;public void tearDown() {&lt;br /&gt;fundingService = null;&lt;br /&gt;loanDetailsRepository = null;&lt;br /&gt;borrowerDetailsRepository = null;&lt;br /&gt;fundingDetailsRepository = null;&lt;br /&gt;ctx = null;&lt;br /&gt;log.debug("ctx set null.");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Test&lt;br /&gt;public void testLoanFunding() {&lt;br /&gt;&lt;br /&gt;// -------------------------------------------&lt;br /&gt;// Set LOAN details&lt;br /&gt;// -------------------------------------------&lt;br /&gt;long loanId = 100;&lt;br /&gt;LoanDetails loanDetails = new LoanDetails();&lt;br /&gt;loanDetails.setLoanId(loanId);&lt;br /&gt;loanDetails.setLoanAmount(450000);&lt;br /&gt;loanDetails.setLoanStatus("REQUESTED");&lt;br /&gt;loanDetails.setProductGroup("FIXED");&lt;br /&gt;loanDetails.setProductId(1234);&lt;br /&gt;loanDetails.setPurchasePrice(500000);&lt;br /&gt;&lt;br /&gt;// -------------------------------------------&lt;br /&gt;// Set BORROWER details&lt;br /&gt;// -------------------------------------------&lt;br /&gt;BorrowerDetails borrowerDetails = new BorrowerDetails();&lt;br /&gt;long borrowerId = 131;&lt;br /&gt;borrowerDetails.setBorrowerId(borrowerId);&lt;br /&gt;borrowerDetails.setFirstName("BOB");&lt;br /&gt;borrowerDetails.setLastName("SMITH");&lt;br /&gt;borrowerDetails.setPhoneNumber("123-456-7890");&lt;br /&gt;borrowerDetails.setEmailAddress("test.borr@abc.com");&lt;br /&gt;borrowerDetails.setLoanId(loanId);&lt;br /&gt;&lt;br /&gt;// -------------------------------------------&lt;br /&gt;// Set FUNDING details&lt;br /&gt;// -------------------------------------------&lt;br /&gt;long fundingTxnId = 300;&lt;br /&gt;FundingDetails fundingDetails = new FundingDetails();&lt;br /&gt;fundingDetails.setFundingTxnId(fundingTxnId);&lt;br /&gt;fundingDetails.setLoanId(loanId);&lt;br /&gt;fundingDetails.setFirstPaymentDate(new Date());&lt;br /&gt;&lt;br /&gt;fundingDetails.setFundType(LoanAppConstants.FUND_TYPE_WIRE);&lt;br /&gt;fundingDetails.setLoanAmount(450000);&lt;br /&gt;fundingDetails.setMonthlyPayment(2500);&lt;br /&gt;fundingDetails.setTermInMonths(360);&lt;br /&gt;&lt;br /&gt;// Populate the DTO object&lt;br /&gt;FundingDTO fundingDTO = new FundingDTO();&lt;br /&gt;fundingDTO.setLoanDetails(loanDetails);&lt;br /&gt;fundingDTO.setBorrowerDetails(borrowerDetails);&lt;br /&gt;fundingDTO.setFundingDetails(fundingDetails);&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;Collection loans = loanDetailsRepository.getLoans();&lt;br /&gt;log.debug("loans: " + loans.size());&lt;br /&gt;// At this time, there shouldn't be any loan records&lt;br /&gt;assertEquals(0, loans.size());&lt;br /&gt;&lt;br /&gt;Collection borrowers = borrowerDetailsRepository.getBorrowers();&lt;br /&gt;log.debug("borrowers: " + borrowers.size());&lt;br /&gt;// There shouldn't be any borrower records either&lt;br /&gt;assertEquals(0, borrowers.size());&lt;br /&gt;&lt;br /&gt;Collection fundingDetailsList = fundingDetailsRepository.getFundingDetails();&lt;br /&gt;log.debug("FundingDetails: " + fundingDetailsList.size());&lt;br /&gt;// There shouldn't be any fundingDetails records&lt;br /&gt;assertEquals(0, fundingDetailsList.size());&lt;br /&gt;&lt;br /&gt;// Call service method now&lt;br /&gt;fundingService.processLoanFunding(fundingDTO);&lt;br /&gt;&lt;br /&gt;// Assert that the new record has been saved to the DB.&lt;br /&gt;loans = loanDetailsRepository.getLoans();&lt;br /&gt;log.debug("After adding a new record - loans 2: " + loans.size());&lt;br /&gt;// Now, there should be one loan record&lt;br /&gt;assertEquals(1, loans.size());&lt;br /&gt;&lt;br /&gt;borrowers = borrowerDetailsRepository.getBorrowers();&lt;br /&gt;log.debug("After adding a new record - borrowers2: " + borrowers.size());&lt;br /&gt;// Same with borrower record&lt;br /&gt;assertEquals(1, borrowers.size());&lt;br /&gt;&lt;br /&gt;fundingDetailsList = fundingDetailsRepository.getFundingDetails();&lt;br /&gt;log.debug("After adding a new record - # of records: " + fundingDetailsList.size());&lt;br /&gt;// Same with funding details record&lt;br /&gt;assertEquals(1, fundingDetailsList.size());&lt;br /&gt;&lt;br /&gt;// Now, delete the newly added records&lt;br /&gt;&lt;br /&gt;// Delete the funding details record&lt;br /&gt;fundingDetailsRepository.deleteFundingDetails(fundingTxnId);&lt;br /&gt;&lt;br /&gt;// Delete the borrower details record&lt;br /&gt;borrowerDetailsRepository.deleteBorrower(borrowerId);&lt;br /&gt;&lt;br /&gt;// Delete loan details record last&lt;br /&gt;loanDetailsRepository.deleteLoanDetails(loanId);&lt;br /&gt;&lt;br /&gt;} catch (RepositoryException re) {&lt;br /&gt;log.error("RepositoryException in testLoanFunding() method.", re);&lt;br /&gt;} catch (LoanAppException lae) {&lt;br /&gt;log.error("LoanAppException in testLoanFunding() method.", lae);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;As you can see in testLoanFunding() method, we have to explicitly call the delete methods in FundingDetailsRepository class to keep the DB state same as it was before running this test.&lt;br /&gt;&lt;br /&gt;FundingServiceImplSpringDITest:&lt;br /&gt;This class extends BaseDataSourceSpringContextIntegrationTest base class. It has the setter methods for Repository objects so these will be injected by Spring DI container when the application context is loaded. The source code for this integration test class is shown in Listing 5.&lt;br /&gt;&lt;br /&gt;Listing 5. FundingServiceImplSpringDITest test class&lt;br /&gt;&lt;br /&gt;package com.ideature.agiletestingspring.loanapp.service;&lt;br /&gt;&lt;br /&gt;import java.util.Collection;&lt;br /&gt;&lt;br /&gt;import org.apache.commons.logging.Log;&lt;br /&gt;import org.apache.commons.logging.LogFactory;&lt;br /&gt;import org.junit.After;&lt;br /&gt;import org.junit.Before;&lt;br /&gt;import org.junit.Test;&lt;br /&gt;import org.junit.internal.runners.TestClassRunner;&lt;br /&gt;import org.junit.runner.RunWith;&lt;br /&gt;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.BaseDataSourceSpringContextIntegrationTest;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.LoanAppConstants;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.domain.LoanDetails;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.repository.LoanDetailsRepository;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.repository.RepositoryException;&lt;br /&gt;&lt;br /&gt;@RunWith(TestClassRunner.class)&lt;br /&gt;public class FundingServiceImplSpringDITest extends BaseDataSourceSpringContextIntegrationTest {&lt;br /&gt;&lt;br /&gt;private static final Log log = LogFactory.getLog(FundingServiceImplSpringDITest.class);&lt;br /&gt;&lt;br /&gt;private LoanDetailsRepository loanDetailsRepository = null;&lt;br /&gt;&lt;br /&gt;public void setLoanDetailsRepository(LoanDetailsRepository loanDetailsRepository) {&lt;br /&gt;this.loanDetailsRepository = loanDetailsRepository;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Before&lt;br /&gt;public void initialize() throws Exception {&lt;br /&gt;super.setUp();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@After&lt;br /&gt;public void cleanup() throws Exception {&lt;br /&gt;super.tearDown();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Test&lt;br /&gt;public void testFindLoans() throws RepositoryException {&lt;br /&gt;// First delete all the records from LoanDetails table&lt;br /&gt;// by calling deleteFromTables() helper method.&lt;br /&gt;deleteFromTables(new String[]{"LoanDetails"});&lt;br /&gt;Collection loans = loanDetailsRepository.getLoans();&lt;br /&gt;assertEquals(0, loans.size());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Test&lt;br /&gt;public void testJdbcQueryUsingJdbcTemplate() {&lt;br /&gt;// Use jdbcTemplate to get the loan count&lt;br /&gt;int rowCount = jdbcTemplate.queryForInt("SELECT COUNT(0) from LoanDetails");&lt;br /&gt;assertEquals(rowCount,0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Test&lt;br /&gt;public void testLoadLoanDetails() throws RepositoryException {&lt;br /&gt;int rowCount = countRowsInTable("LOANDETAILS");&lt;br /&gt;log.info("rowCount: " + rowCount);&lt;br /&gt;&lt;br /&gt;long loanId = 100;&lt;br /&gt;double loanAmount = 450000.0;&lt;br /&gt;String loanStatus = LoanAppConstants.STATUS_REQUESTED;&lt;br /&gt;String productGroup = "FIXED";&lt;br /&gt;long productId = 1234;&lt;br /&gt;double purchasePrice = 500000.0;&lt;br /&gt;&lt;br /&gt;// Add a new record&lt;br /&gt;LoanDetails newLoan = new LoanDetails();&lt;br /&gt;newLoan.setLoanId(loanId);&lt;br /&gt;newLoan.setLoanAmount(loanAmount);&lt;br /&gt;newLoan.setLoanStatus(loanStatus);&lt;br /&gt;newLoan.setProductGroup(productGroup);&lt;br /&gt;newLoan.setProductId(productId);&lt;br /&gt;newLoan.setPurchasePrice(purchasePrice);&lt;br /&gt;&lt;br /&gt;// Insert a new record using jdbcTemplate helper attribute&lt;br /&gt;jdbcTemplate.update("insert into LoanDetails (LoanId,ProductGroup,ProductId,LoanAmount,PurchasePrice," +&lt;br /&gt;"PropertyAddress,LoanStatus) values (?,?,?,?,?,?,?)",&lt;br /&gt;new Object[] { new Long(newLoan.getLoanId()),newLoan.getProductGroup(),new Long(newLoan.getProductId()),&lt;br /&gt;new Double(newLoan.getLoanAmount()), new Double(newLoan.getPurchasePrice()),"123 MAIN STREET","IN REVIEW" });&lt;br /&gt;&lt;br /&gt;// Explicitly end the transaction so the new record will be&lt;br /&gt;// saved in the database table.&lt;br /&gt;endTransaction();&lt;br /&gt;&lt;br /&gt;// Start a new transaction to get a different unit of work (UOW)&lt;br /&gt;startNewTransaction();&lt;br /&gt;&lt;br /&gt;rowCount = countRowsInTable("LOANDETAILS");&lt;br /&gt;log.info("rowCount: " + rowCount);&lt;br /&gt;&lt;br /&gt;LoanDetails loanDetails1 = loanDetailsRepository.loadLoanDetails(loanId);&lt;br /&gt;// We should get a null as the return value.&lt;br /&gt;assertNull(loanDetails1);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Test&lt;br /&gt;public void testInsertLoanDetails() throws RepositoryException {&lt;br /&gt;int loanCount = 0;&lt;br /&gt;Collection loans = loanDetailsRepository.getLoans();&lt;br /&gt;&lt;br /&gt;loanCount = loans.size();&lt;br /&gt;assertTrue(loanCount==0);&lt;br /&gt;&lt;br /&gt;long loanId = 200;&lt;br /&gt;&lt;br /&gt;LoanDetails loanDetails = loanDetailsRepository.loadLoanDetails(loanId);&lt;br /&gt;assertNull(loanDetails);&lt;br /&gt;&lt;br /&gt;double loanAmount = 600000.0;&lt;br /&gt;String loanStatus = LoanAppConstants.STATUS_IN_REVIEW;&lt;br /&gt;String productGroup = "ARM";&lt;br /&gt;long productId = 2345;&lt;br /&gt;double purchasePrice = 700000.0;&lt;br /&gt;&lt;br /&gt;// Add a new record&lt;br /&gt;LoanDetails newLoan = new LoanDetails();&lt;br /&gt;newLoan.setLoanId(loanId);&lt;br /&gt;newLoan.setLoanAmount(loanAmount);&lt;br /&gt;newLoan.setLoanStatus(loanStatus);&lt;br /&gt;newLoan.setProductGroup(productGroup);&lt;br /&gt;newLoan.setProductId(productId);&lt;br /&gt;newLoan.setPurchasePrice(purchasePrice);&lt;br /&gt;&lt;br /&gt;loanDetailsRepository.insertLoanDetails(newLoan);&lt;br /&gt;&lt;br /&gt;loans = loanDetailsRepository.getLoans();&lt;br /&gt;log.info("loans.size(): " + loans.size());&lt;br /&gt;System.out.println("loans.size(): " + loans.size());&lt;br /&gt;assertEquals(loanCount + 1, loans.size());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Test&lt;br /&gt;public void testUpdateLoanDetails() throws Exception {&lt;br /&gt;// First, insert a new record&lt;br /&gt;long loanId = 100;&lt;br /&gt;double loanAmount = 450000.0;&lt;br /&gt;String oldStatus = LoanAppConstants.STATUS_FUNDING_COMPLETE;&lt;br /&gt;String productGroup = "FIXED";&lt;br /&gt;long productId = 1234;&lt;br /&gt;double purchasePrice = 500000.0;&lt;br /&gt;String propertyAddress = "123 MAIN STREET";&lt;br /&gt;&lt;br /&gt;// Add a new record&lt;br /&gt;LoanDetails newLoan = new LoanDetails();&lt;br /&gt;newLoan.setLoanId(loanId);&lt;br /&gt;newLoan.setLoanAmount(loanAmount);&lt;br /&gt;newLoan.setLoanStatus(oldStatus);&lt;br /&gt;newLoan.setProductGroup(productGroup);   newLoan.setProductId(productId);&lt;br /&gt;newLoan.setPurchasePrice(purchasePrice);&lt;br /&gt;newLoan.setPropertyAddress(propertyAddress);&lt;br /&gt;&lt;br /&gt;// Insert a new record using jdbcTemplate helper attribute&lt;br /&gt;jdbcTemplate.update("insert into LoanDetails (LoanId,ProductGroup,ProductId,LoanAmount,PurchasePrice," +&lt;br /&gt;"PropertyAddress,LoanStatus) values (?,?,?,?,?,?,?)",&lt;br /&gt;new Object[] { new Long(newLoan.getLoanId()),newLoan.getProductGroup(),new Long(newLoan.getProductId()),&lt;br /&gt;new Double(newLoan.getLoanAmount()), new Double(newLoan.getPurchasePrice()),newLoan.getPropertyAddress(),&lt;br /&gt;newLoan.getLoanStatus() });&lt;br /&gt;&lt;br /&gt;LoanDetails loanDetails1 = loanDetailsRepository.loadLoanDetails(loanId);&lt;br /&gt;String status = loanDetails1.getLoanStatus();&lt;br /&gt;assertEquals(status, oldStatus);&lt;br /&gt;&lt;br /&gt;String newStatus = LoanAppConstants.STATUS_FUNDING_DENIED;&lt;br /&gt;&lt;br /&gt;// Update status field&lt;br /&gt;loanDetails1.setLoanStatus(newStatus);&lt;br /&gt;loanDetailsRepository.updateLoanDetails(loanDetails1);&lt;br /&gt;status = loanDetails1.getLoanStatus();&lt;br /&gt;assertEquals(status, newStatus);&lt;br /&gt;}&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;The helper method deleteFromTables() is used in this class to delete the data from FUNDINGDETAILS table. This method is available from the Spring test super class. I also used jdbcTemplate variable in one case and countRowsInTable() in another instance, to get the row count from the specified table.&lt;br /&gt;&lt;br /&gt;FundingServiceImplSpringJpaTest:&lt;br /&gt;This class extends BaseJpaIntegrationTest base class to take the advantage of the convenience methods that the super class provides. It uses simpleJdbcTemplate helper variable to get the row count from FUNDINGDETAILS table. I also run a test against an invalid query using createQuery() method on sharedEntityManager attribute. Listing 6 shows the source for FundingServiceImplSpringJpaTest class.&lt;br /&gt;&lt;br /&gt;Listing 6. FundingServiceImplSpringJpaTest class&lt;br /&gt;&lt;br /&gt;package com.ideature.agiletestingspring.loanapp.service;&lt;br /&gt;&lt;br /&gt;import java.util.Collection;&lt;br /&gt;import java.util.Date;&lt;br /&gt;&lt;br /&gt;import javax.persistence.EntityManager;&lt;br /&gt;&lt;br /&gt;import org.apache.commons.logging.Log;&lt;br /&gt;import org.apache.commons.logging.LogFactory;&lt;br /&gt;import org.junit.After;&lt;br /&gt;import org.junit.Before;&lt;br /&gt;import org.junit.Test;&lt;br /&gt;import org.junit.internal.runners.TestClassRunner;&lt;br /&gt;import org.junit.runner.RunWith;&lt;br /&gt;import org.springframework.test.annotation.ExpectedException;&lt;br /&gt;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.BaseJpaIntegrationTest;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.LoanAppConstants;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.domain.BorrowerDetails;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.domain.FundingDetails;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.domain.LoanDetails;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.repository.BorrowerDetailsRepository;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.repository.FundingDetailsRepository;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.repository.LoanDetailsRepository;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.repository.RepositoryException;&lt;br /&gt;&lt;br /&gt;@RunWith(TestClassRunner.class)&lt;br /&gt;public class FundingServiceImplSpringJpaTest extends BaseJpaIntegrationTest {&lt;br /&gt;&lt;br /&gt;private static final Log log = LogFactory.getLog(FundingServiceImplSpringDITest.class);&lt;br /&gt;&lt;br /&gt;private LoanDetailsRepository loanDetailsRepository = null;&lt;br /&gt;private BorrowerDetailsRepository borrowerDetailsRepository = null;&lt;br /&gt;private FundingDetailsRepository fundingDetailsRepository = null;&lt;br /&gt;&lt;br /&gt;public void setLoanDetailsRepository(LoanDetailsRepository loanDetailsRepository) {&lt;br /&gt;this.loanDetailsRepository = loanDetailsRepository;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setBorrowerDetailsRepository(BorrowerDetailsRepository borrowerDetailsRepository) {&lt;br /&gt;this.borrowerDetailsRepository = borrowerDetailsRepository;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setFundingDetailsRepository(FundingDetailsRepository fundingDetailsRepository) {&lt;br /&gt;this.fundingDetailsRepository = fundingDetailsRepository;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Before&lt;br /&gt;public void initialize() throws Exception {&lt;br /&gt;super.setUp();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@After&lt;br /&gt;public void cleanup() throws Exception {&lt;br /&gt;super.tearDown();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Test&lt;br /&gt;@ExpectedException(IllegalArgumentException.class)&lt;br /&gt;public void testInvalidQuery() {&lt;br /&gt;sharedEntityManager.createQuery("select test FROM TestTable test").executeUpdate();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Test&lt;br /&gt;public void testApplicationManaged() {&lt;br /&gt;EntityManager entityManager = entityManagerFactory.createEntityManager();&lt;br /&gt;entityManager.joinTransaction();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Test&lt;br /&gt;public void testJdbcQueryUsingSimpleJdbcTemplate() {&lt;br /&gt;// Use simpleJdbcTemplate to get the loan count&lt;br /&gt;int rowCount = simpleJdbcTemplate.queryForInt("SELECT COUNT(*) from LoanDetails");&lt;br /&gt;assertEquals(rowCount,0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Test&lt;br /&gt;public void testInsertLoanDetails() throws RepositoryException {&lt;br /&gt;int loanCount = 0;&lt;br /&gt;Collection loans = loanDetailsRepository.getLoans();&lt;br /&gt;loanCount = loans.size();&lt;br /&gt;assertTrue(loanCount==0);&lt;br /&gt;&lt;br /&gt;long loanId = 200;&lt;br /&gt;LoanDetails loanDetails = loanDetailsRepository.loadLoanDetails(loanId);&lt;br /&gt;assertNull(loanDetails);&lt;br /&gt;&lt;br /&gt;double loanAmount = 600000.0;&lt;br /&gt;String loanStatus = LoanAppConstants.STATUS_IN_REVIEW;&lt;br /&gt;String productGroup = "ARM";&lt;br /&gt;long productId = 2345;&lt;br /&gt;double purchasePrice = 700000.0;&lt;br /&gt;&lt;br /&gt;// Add a new record&lt;br /&gt;LoanDetails newLoan = new LoanDetails();&lt;br /&gt;newLoan.setLoanId(loanId);&lt;br /&gt;newLoan.setLoanAmount(loanAmount);&lt;br /&gt;newLoan.setLoanStatus(loanStatus);&lt;br /&gt;newLoan.setProductGroup(productGroup);&lt;br /&gt;newLoan.setProductId(productId);&lt;br /&gt;newLoan.setPurchasePrice(purchasePrice);&lt;br /&gt;&lt;br /&gt;loanDetailsRepository.insertLoanDetails(newLoan);&lt;br /&gt;&lt;br /&gt;loans = loanDetailsRepository.getLoans();&lt;br /&gt;assertEquals(loanCount + 1, loans.size());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Test&lt;br /&gt;public void testLoanFunding() throws RepositoryException {&lt;br /&gt;&lt;br /&gt;long loanId = 100;&lt;br /&gt;// -------------------------------------------&lt;br /&gt;// Insert LOAN details&lt;br /&gt;// -------------------------------------------&lt;br /&gt;Collection loans = loanDetailsRepository.getLoans();&lt;br /&gt;log.debug("loans: " + loans.size());&lt;br /&gt;&lt;br /&gt;// Add a new record&lt;br /&gt;LoanDetails newLoan = new LoanDetails();&lt;br /&gt;newLoan.setLoanId(loanId);&lt;br /&gt;newLoan.setLoanAmount(450000);&lt;br /&gt;newLoan.setLoanStatus("REQUESTED");&lt;br /&gt;newLoan.setProductGroup("FIXED");&lt;br /&gt;newLoan.setProductId(1234);&lt;br /&gt;newLoan.setPurchasePrice(500000);&lt;br /&gt;&lt;br /&gt;loanDetailsRepository.insertLoanDetails(newLoan);&lt;br /&gt;&lt;br /&gt;loans = loanDetailsRepository.getLoans();&lt;br /&gt;log.debug("After adding a new record - loans 2: " + loans.size());&lt;br /&gt;&lt;br /&gt;// -------------------------------------------&lt;br /&gt;// Insert BORROWER details&lt;br /&gt;// -------------------------------------------&lt;br /&gt;long borrowerId = 131;&lt;br /&gt;Collection borrowers = borrowerDetailsRepository.getBorrowers();&lt;br /&gt;log.debug("borrowers: " + borrowers.size());&lt;br /&gt;&lt;br /&gt;// Add a new Borrower&lt;br /&gt;BorrowerDetails newBorr = new BorrowerDetails();&lt;br /&gt;newBorr.setBorrowerId(borrowerId);&lt;br /&gt;newBorr.setFirstName("BOB");&lt;br /&gt;newBorr.setLastName("SMITH");&lt;br /&gt;newBorr.setPhoneNumber("123-456-7890");&lt;br /&gt;newBorr.setEmailAddress("test.borr@abc.com");&lt;br /&gt;newBorr.setLoanId(loanId);&lt;br /&gt;&lt;br /&gt;borrowerDetailsRepository.insertBorrower(newBorr);&lt;br /&gt;&lt;br /&gt;borrowers = borrowerDetailsRepository.getBorrowers();&lt;br /&gt;log.debug("After adding a new record - borrowers2: " + borrowers.size());&lt;br /&gt;&lt;br /&gt;// -------------------------------------------&lt;br /&gt;// Insert FUNDING details&lt;br /&gt;// -------------------------------------------&lt;br /&gt;long fundingTxnId = 300;&lt;br /&gt;&lt;br /&gt;Collection fundingDetailsList = fundingDetailsRepository.getFundingDetails();&lt;br /&gt;log.debug("FundingDetails: " + fundingDetailsList.size());&lt;br /&gt;&lt;br /&gt;// Add a new record&lt;br /&gt;FundingDetails newFundingDetails = new FundingDetails();&lt;br /&gt;newFundingDetails.setFundingTxnId(fundingTxnId);&lt;br /&gt;newFundingDetails.setLoanId(loanId);&lt;br /&gt;newFundingDetails.setFirstPaymentDate(new Date());&lt;br /&gt;newFundingDetails.setFundType(LoanAppConstants.FUND_TYPE_WIRE);&lt;br /&gt;newFundingDetails.setLoanAmount(450000);&lt;br /&gt;newFundingDetails.setMonthlyPayment(2500);&lt;br /&gt;newFundingDetails.setTermInMonths(360);&lt;br /&gt;&lt;br /&gt;fundingDetailsRepository.insertFundingDetails(newFundingDetails);&lt;br /&gt;&lt;br /&gt;fundingDetailsList = fundingDetailsRepository.getFundingDetails();&lt;br /&gt;log.debug("After adding a new record - # of records: " + fundingDetailsList.size());&lt;br /&gt;&lt;br /&gt;// Delete the borrower details record&lt;br /&gt;borrowerDetailsRepository.deleteBorrower(borrowerId);&lt;br /&gt;&lt;br /&gt;// Delete the funding details record&lt;br /&gt;fundingDetailsRepository.deleteFundingDetails(fundingTxnId);&lt;br /&gt;&lt;br /&gt;// Delete loan details record last&lt;br /&gt;loanDetailsRepository.deleteLoanDetails(loanId);  }&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;The transaction is rolled back at the end of testInsertLoanDetails() method. This is why even though we call insertLoanDetails method to insert a loan record, the database insert is undone when the transaction is rolled back. This way we don't have to worry about leaving any test data in the tables after the integration tests are executed or run any special DB cleanup scripts to delete the test data created during the tests.&lt;br /&gt;&lt;br /&gt;To test transaction state, testLoadLoanDetails() method calls transaction manager helper methods endTransaction() and startNewTransaction() to commit the current transaction and get a new transaction respectively. The new transaction starts a new Unit Of Work (UOW) where the LoanDetails domain object doesn't exist in the system. These helper methods are useful for testing lazy loading feature in ORM tools such as Hibernate, TopLink, and OpenJPA. Note: These helper methods work in pre-Java 5 applications as well.&lt;br /&gt;&lt;br /&gt;AllIntegationTests:&lt;br /&gt;Finally, there is AllIntegationTests test suite that runs all Funding Service related tests in one execution. Listing 7 shows the source for this test suite class.&lt;br /&gt;&lt;br /&gt;Listing 7. FundingServiceImplSpringJpaTest class&lt;br /&gt;&lt;br /&gt;package com.ideature.agiletestingspring.loanapp;&lt;br /&gt;&lt;br /&gt;import org.junit.runner.RunWith;&lt;br /&gt;import org.junit.runners.Suite;&lt;br /&gt;import org.junit.runners.Suite.SuiteClasses;&lt;br /&gt;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.service.FundingServiceImplIntegrationTest;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.service.FundingServiceImplSpringDITest;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.service.FundingServiceImplSpringJpaTest;&lt;br /&gt;import com.ideature.agiletestingspring.loanapp.service.FundingServiceImplTest;&lt;br /&gt;&lt;br /&gt;@RunWith(Suite.class)&lt;br /&gt;@SuiteClasses(value = {&lt;br /&gt;FundingServiceImplTest.class,&lt;br /&gt;FundingServiceImplIntegrationTest.class,&lt;br /&gt;FundingServiceImplSpringDITest.class,&lt;br /&gt;FundingServiceImplSpringJpaTest.class&lt;br /&gt;})&lt;br /&gt;public class AllIntegrationTests {&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;To execute these tests make sure the configuration file (loanapp-applicationContext-jpa.xml) location is specified in the test classpath. You can enable Log4J logging to verify that Spring beans are being loaded by the application context. Look for CachedIntrospectionResults DEBUG messages that show the loading of entity manager, datasource, transaction manager and other objects required for running the integration tests.&lt;br /&gt;Conclusions&lt;br /&gt;&lt;br /&gt;Spring makes test driven J2EE application development a reality by offering Java EE developers an easy and powerful framework to write and run both unit and integration tests outside the container. Its non-invasive configuration management, dependency injection to use mock objects, and consistent abstraction over hard-to-stub APIs makes unit testing outside the container easy. Its testing module uses Dependency Injection (DI) and Aspect Oriented Programming (AOP) techniques to create a foundation on which we can build our unit and integration tests.&lt;br /&gt;&lt;br /&gt;Some of the best practices of writing tests using Spring test classes are as follows:&lt;br /&gt;&lt;br /&gt;* Make sure you have the same Spring configuration files in the integration tests as in the deployed environment so you don't need to worry about any differences that may cause problems when the application is deployed in the production environment.&lt;br /&gt;* There are some differences that are related to database connection pooling and transaction infrastructure to keep in mind when using Spring framework. If you are deploying to a full-blown application server, you will probably use its connection pool (available through JNDI) and JTA implementation. Thus in production you will use a JndiObjectFactoryBean for the DataSource, and JtaTransactionManager. JNDI and JTA will not be available in out-of-container integration tests, so we should use Commons DBCP BasicDataSource and DataSourceTransactionManager or HibernateTransactionManager for these tests.&lt;br /&gt;* Spring's integration testing support is not a replacement for the real regression testing . Regression testing the application functionality is as close as we can get to how the end-users will use the application when it's implemented in the production environment.&lt;br /&gt;&lt;br /&gt;We should make it a practice to think and plan about testing and involve QA team right from the beginning of a project. We should write unit tests to cover as many as scenarios and paths (including exception paths) in the main class. Test Driven Development (TDD) is a great way to achieve the desired test coverage and production quality in the code we write in the project. If we can't get this TDD going in our projects, we should atleast try the other TDD (Test During Development) and make sure the code is unit tested before it's deployed to the integration environment (usually Test environment).&lt;br /&gt;Resources&lt;br /&gt;&lt;br /&gt;* Spring Testing Documentation&lt;br /&gt;* Spring in Action, Second Edition, Craig Walls with Ryan Breidenbach, Manning Publications&lt;br /&gt;* System Integration Testing Using Spring , Rod Johnson, The Spring Experience 2006.&lt;br /&gt;* Java Persistence API&lt;br /&gt;* Spring JPA Documentation&lt;br /&gt;&lt;br /&gt;Bookmark&lt;br /&gt;digg+, &lt;br /&gt;reddit+, &lt;br /&gt;del.icio.us+, &lt;br /&gt;dzone+, &lt;br /&gt;facebook+ &lt;br /&gt;slashdot+ &lt;br /&gt;&lt;br /&gt;13 comments&lt;br /&gt;&lt;br /&gt;Watch Thread Reply&lt;br /&gt;there is just so much wrong with that article &amp;amp; the code in it. by James Richardson Posted Nov 13, 2007 10:38 AM&lt;br /&gt;Re: there is just so much wrong with that article &amp;amp; the code in it. by Nathan Hughes Posted Nov 14, 2007 12:28 PM&lt;br /&gt;Re: there is just so much wrong with that article &amp;amp; the code in it. by Morgan Creighton Posted Nov 14, 2007 1:20 PM&lt;br /&gt;new as dependency injection by James Richardson Posted Nov 14, 2007 5:29 PM&lt;br /&gt;Re: new as dependency injection by Tim Andersen Posted Nov 27, 2007 1:18 PM&lt;br /&gt;Re: new as dependency injection by James Richardson Posted Nov 28, 2007 10:42 AM&lt;br /&gt;Re: new as dependency injection by Y Z Posted Feb 24, 2008 9:08 AM&lt;br /&gt;Re: there is just so much wrong with that article &amp;amp; the code in it. by Luc Dewavrin Posted Nov 18, 2007 9:04 AM&lt;br /&gt;fully worked example by James Richardson Posted Nov 18, 2007 5:28 PM&lt;br /&gt;Re: fully worked example by Thomas Anderson Posted Jul 10, 2008 10:12 AM&lt;br /&gt;Re: fully worked example by Thomas Anderson Posted Jul 10, 2008 10:24 AM&lt;br /&gt;Tear down the wall! by Michael James Posted Nov 20, 2007 10:46 PM&lt;br /&gt;Guice anyone? by Tom Nichols Posted Apr 30, 2008 10:29 AM&lt;br /&gt;Sort by date descending&lt;br /&gt;&lt;br /&gt;1.&lt;br /&gt;&lt;br /&gt;Back to top&lt;br /&gt;there is just so much wrong with that article &amp;amp; the code in it.&lt;br /&gt;&lt;br /&gt;Nov 13, 2007 10:38 AM by James Richardson&lt;br /&gt;&lt;br /&gt;where to start?&lt;br /&gt;&lt;br /&gt;Spring - Java has a perfectly good dependency injection framework built in. Its called 'new'.&lt;br /&gt;&lt;br /&gt;Extremely weak naming of tests - Looking at the test name in isolation give you no idea what the test is trying to prove.&lt;br /&gt;&lt;br /&gt;Needless logging in tests - Just what is the point - if you care about something then you can assert() it.&lt;br /&gt;&lt;br /&gt;Extremely poor class naming - LoanDetailsRepositoryJpaImpl (!)&lt;br /&gt;&lt;br /&gt;No generics - You're using Java 5 constructs: @Test, but then reverting to 1.4 typeless collections.&lt;br /&gt;&lt;br /&gt;No content testing - You persist fields into the database, but then dont check that you load then back in correctly. The content testing you do do doesn't purge the entity from memory - thus making it meaningless.&lt;br /&gt;&lt;br /&gt;Bad data type modelling - Using doubles for money amounts is poor practice.&lt;br /&gt;&lt;br /&gt;you talk about UnitOfWork - but then don't abstract it - making it very unclear as to whats going on.&lt;br /&gt;&lt;br /&gt;Suggestions:&lt;br /&gt;&lt;br /&gt;Use simple constructors to "Repositories" that take an entity manager.&lt;br /&gt;&lt;br /&gt;Create EntityManagers simply using java in your test code.&lt;br /&gt;&lt;br /&gt;Use transactional aware wrappers that allow your tests to work in the correct transactional context.&lt;br /&gt;&lt;br /&gt;Use the Builder pattern to reduce the amount of set up code for the items you create.&lt;br /&gt;&lt;br /&gt;Use sensible names for your classes &amp;amp; methods:&lt;br /&gt;not LoanDetails, but Loan&lt;br /&gt;not loanDetailsRepository.insertLoanDetails(..), but persistentLoans.add(loan)&lt;br /&gt;not LoanDetailsRepositoryJpaImpl but PersistentLoans&lt;br /&gt;not testLoanFunding, but testCanAddALoanAndFindItByItsPrimaryKey&lt;br /&gt;&lt;br /&gt;Compose don't inherit - look at how deep your inheritance hierarchy is...&lt;br /&gt;&lt;br /&gt;Use Hamcrest to give you an extremely powerful set of assertions.&lt;br /&gt;&lt;br /&gt;An example (also look no spring!):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public void setUp() throws SQLException, EnvironmentException {&lt;br /&gt;SystemConfiguration systemConfiguration = SystemConfiguration.load();&lt;br /&gt;DatabaseCleaner.forAllTables(systemConfiguration).clean();&lt;br /&gt;entityManager = TestConfiguration.createEntityManager(systemConfiguration);&lt;br /&gt;transactomatic = new Transactomatic(entityManager);&lt;br /&gt;&lt;br /&gt;todoList = new PersistentTodoList(entityManager);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public void testCanAddAMaturingLoanAndFindItByItsPrimaryKey() throws Exception {&lt;br /&gt;final int remoteSystemId = 765;&lt;br /&gt;&lt;br /&gt;final AbstractMaturingLoanTodoItem item = new PositionLevelMaturingLoanTodoItemBuilder()&lt;br /&gt;.withRemoteSystemId(remoteSystemId)&lt;br /&gt;.build();&lt;br /&gt;&lt;br /&gt;transactomatic.perform(new UnitOfWork() {&lt;br /&gt;public void work() {&lt;br /&gt;todoList.addItem(item);&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;transactomatic.perform(new UnitOfWork() {&lt;br /&gt;public void work() throws Exception {&lt;br /&gt;AbstractMaturingLoanTodoItem found = (AbstractMaturingLoanTodoItem) todoList.findById(item.getId());&lt;br /&gt;assertThat(found, SamePublicFieldsMatcher.samePublicFieldsAs(item));&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;James Richardson&lt;br /&gt;time4tea technology&lt;br /&gt;&lt;br /&gt;Reply&lt;br /&gt;2.&lt;br /&gt;&lt;br /&gt;Back to top&lt;br /&gt;Re: there is just so much wrong with that article &amp;amp; the code in it.&lt;br /&gt;&lt;br /&gt;Nov 14, 2007 12:28 PM by Nathan Hughes&lt;br /&gt;&lt;br /&gt;how amazingly clueless of you.&lt;br /&gt;&lt;br /&gt;Reply&lt;br /&gt;3.&lt;br /&gt;&lt;br /&gt;Back to top&lt;br /&gt;Re: there is just so much wrong with that article &amp;amp; the code in it.&lt;br /&gt;&lt;br /&gt;Nov 14, 2007 1:20 PM by Morgan Creighton&lt;br /&gt;&lt;br /&gt;James, your first comment is the most interesting. Can "new" really be thought of as a dependency injector? The thing about "new" is that whoever is calling it needs to know the implementation of the interface.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MyInterface foo = new MyImplementation();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It's not always desirable for the caller to have to worry about that. Particularly, when unit testing, and a separate implementation would be desired.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MyInterface foo = new MyImplemenationMock();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To me, the most important advantage of Spring is AOP. One can advise methods of MyInterface without polluting the biz logic, or altering the code that acquires the foo instance.&lt;br /&gt;&lt;br /&gt;Reply&lt;br /&gt;4.&lt;br /&gt;&lt;br /&gt;Back to top&lt;br /&gt;new as dependency injection&lt;br /&gt;&lt;br /&gt;Nov 14, 2007 5:29 PM by James Richardson&lt;br /&gt;&lt;br /&gt;I think it can.&lt;br /&gt;&lt;br /&gt;Whoever is calling "new" does indeed need to pick an implementation. Really all that spring is doing is moving that "new" call out of java (where its easily refactored) and into xml(where it isn't). Additionally, by using the xml, you are losing so much information - such as the interface names, the generic types, and a visual understanding of how it all fits together.&lt;br /&gt;&lt;br /&gt;By simply calling the object constructor with the implementations you need in that instance (thereby making your object fully functional at construction time) you have "injected" it with its dependencies. If thats hard, it probably means that the object acts on too many things, and thus could do with some refactoring.&lt;br /&gt;&lt;br /&gt;By losing the visual clues, you also lose important information about how your application _reads_, because you are too concerned with the xml. Nobody would talk about a FruitBean, and a FruitBeanGreenRoundImpl and FruitBeanYellowLongBitCurvyImpl, most people would talk about Fruit, Apples and Bananas.&lt;br /&gt;&lt;br /&gt;How can spring help when unit testing? In a unit test you will be testing the functionality of only a single class. Why would you want an entire framework to get in the way? Writing an xml file, configuring an applicationcontext and pulling the object out of the map cannot possibly be easier than writing new()...if you need a mock or stub then just make one. Again - if thats hard because of all the mock setup you need to do, then you probably need to refactor... If a testcase can't fit into a single screenful of code, mocks or no, then its an indicator that there's too much going on...&lt;br /&gt;&lt;br /&gt;AOP is a bit different - if you need it then fine, but I wouldn't advise it for greenfield applications where you control the source - just make your code do what you want it to do...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;James Richardson&lt;br /&gt;time4tea technology&lt;br /&gt;&lt;br /&gt;Reply&lt;br /&gt;5.&lt;br /&gt;&lt;br /&gt;Back to top&lt;br /&gt;Re: there is just so much wrong with that article &amp;amp; the code in it.&lt;br /&gt;&lt;br /&gt;Nov 18, 2007 9:04 AM by Luc Dewavrin&lt;br /&gt;&lt;br /&gt;Hi James,&lt;br /&gt;&lt;br /&gt;I have read your comments and tend to agree with you. I have seen awful testing implementations with Spring like wrapper as Spring beans that started transactions and executed the real unit test methods. Then, the unit test starter classes loaded these wrapper beans and executed methods on them.&lt;br /&gt;&lt;br /&gt;Also with Spring we had to maintain Spring context files for both production and testing.&lt;br /&gt;&lt;br /&gt;Your all Java solution looks much simpler. Are the utility classes that you used in your example opensource, or would you know an opensource project that has tests with similar classes ?&lt;br /&gt;&lt;br /&gt;Reply&lt;br /&gt;6.&lt;br /&gt;&lt;br /&gt;Back to top&lt;br /&gt;fully worked example&lt;br /&gt;&lt;br /&gt;Nov 18, 2007 5:28 PM by James Richardson&lt;br /&gt;&lt;br /&gt;Is here&lt;br /&gt;&lt;br /&gt;Reply&lt;br /&gt;7.&lt;br /&gt;&lt;br /&gt;Back to top&lt;br /&gt;Tear down the wall!&lt;br /&gt;&lt;br /&gt;Nov 20, 2007 10:46 PM by Michael James&lt;br /&gt;&lt;br /&gt;There's really a continuum between unit testing, integration testing, regression testing, etc. As the article states, "usually" regression testing is done using specialized QA tools, often with expensive licenses in proprietary scripting languages that "programmers" don't have access to, don't easily snap into your continuous integration server, etc. But this needn't be so. Nowadays we can do more and more of our testing in the JUnit f
