<?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-5788997848984326788</id><updated>2012-02-17T21:46:53.822+05:30</updated><category term='Plugins'/><category term='javascript'/><category term='web'/><category term='Hibernate'/><category term='paging'/><category term='Design'/><category term='XML'/><category term='Tips'/><category term='API'/><category term='Web Service'/><category term='Tutorials'/><category term='Programming'/><category term='Open Source'/><category term='Configuration'/><category term='JQuery'/><category term='Development'/><category term='Portlet'/><category term='Frameworks'/><category term='struts'/><category term='General'/><category term='hacks'/><category term='Linux'/><category term='Eclipse'/><category term='Networking'/><category term='Tools'/><category term='Patterns'/><category term='Spring'/><category term='Freeware'/><category term='Liferay'/><category term='Html'/><category term='Articles'/><category term='Facebook'/><category term='Wildcards'/><category term='Applet'/><category term='Quartz'/><title type='text'>Java Library @ TechLads</title><subtitle type='html'>Java problems,tips,resolutions and libs...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-8441667823411178002</id><published>2010-09-28T11:56:00.001+05:30</published><updated>2010-09-28T11:57:31.587+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Quartz'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Liferay'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Liferay 6- Scheduler Engine design change</title><content type='html'>&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;In Liferay 5.2.x, we had com.liferay.portal.kernel.job.IntervalJob as a Quartz scheduler job, which needs to be implemented for different jobs we need for Quartz trigger execution.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;In Liferay 6, the design pf scheduler engine has been changed and introduced combination with JMS. I have prepared the small class cum collaboration diagram, which can help understanding how we need to make triggers now onwards.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://3.bp.blogspot.com/_szsM-EakoOE/TKGKFd1Q14I/AAAAAAAAFdI/ZhMS5iI_1LY/s1600/LFR-6-Scheduler-Engine.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="214" src="http://3.bp.blogspot.com/_szsM-EakoOE/TKGKFd1Q14I/AAAAAAAAFdI/ZhMS5iI_1LY/s320/LFR-6-Scheduler-Engine.png" width="320" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Basically, they made use of messaging with Quartz. The Job class for liferay is now fixed which is com.liferay.portal.scheduler.job.MessageSenderJob .&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: Verdana,sans-serif; font-size: small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Now we have a com.liferay.portal.kernel.messaging.MessageListener which is to be implemented for different job handling.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;The schedulerEnginUtil class will register the listener with perticular queue destination and schedules new trigger as per the SchedulerEntry details with MessageSenderJob. When trigger fired, this Job class will eventually sends message to queue, which will eventually go to the listener.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;This time, not as like previous scheduler, they have given exposure to Message which can contain some payload data if needed for job execution. This is very helpful sometimes.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;By default the method schedule(SchedulerEntry schedulerEntry, ClassLoader classLoader)from SchedulerEngineUtil sends null Message. So, we might need to copy and pass some payload object if needed.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-8441667823411178002?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/8441667823411178002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=8441667823411178002&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/8441667823411178002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/8441667823411178002'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/09/liferay-6-scheduler-engine-design.html' title='Liferay 6- Scheduler Engine design change'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_szsM-EakoOE/TKGKFd1Q14I/AAAAAAAAFdI/ZhMS5iI_1LY/s72-c/LFR-6-Scheduler-Engine.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-56333447213283329</id><published>2010-09-07T17:55:00.002+05:30</published><updated>2010-09-07T17:56:54.368+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='struts'/><category scheme='http://www.blogger.com/atom/ns#' term='Portlet'/><category scheme='http://www.blogger.com/atom/ns#' term='Liferay'/><title type='text'>Liferay Struts Portlet: Usage of SessionErrors class...</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;This is very common issues we come across when we want to change portal code with extension environment. Mostly we do is, copying the code from portal to ext and making new struts portlet. &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;And for sending errors to pages, we use &lt;incode&gt;SessionErrors.add(...)&lt;/incode&gt; method, which will eventually forward to default error.jsp file. So you will never find what is happening. Simple thing, to make this working fine, is...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;- Make new empty page named &lt;incode&gt;error.jsp&lt;/incode&gt; in your portlet.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;- Make new &lt;incode&gt;Struts-config&lt;/incode&gt; and &lt;incode&gt;tiles-def&lt;/incode&gt; entry of your new JSP in ext.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;- From your &lt;incode&gt;render&lt;/incode&gt; method, forward to the new file when you have &lt;incode&gt;SessionErrors&lt;/incode&gt; filled with errors like,&lt;/span&gt;&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt;&lt;br /&gt; if (!SessionErrors.isEmpty(req)) {&lt;br /&gt;  return mapping.findForward("portlet.portlet_name.error");&lt;br /&gt; }&lt;br /&gt; &lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;See this link to understand the detailed problem...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.liferay.com/community/forums/-/message_boards/message/113965"&gt;http://www.liferay.com/community/forums/-/message_boards/message/113965&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-56333447213283329?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/56333447213283329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=56333447213283329&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/56333447213283329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/56333447213283329'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/09/liferay-struts-portlet-usage-of.html' title='Liferay Struts Portlet: Usage of SessionErrors class...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-4674693058445613507</id><published>2010-08-31T15:27:00.000+05:30</published><updated>2010-08-31T15:27:05.772+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Service'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Liferay'/><title type='text'>Liferay: Exposing Webservice &amp; access using Axis Client...</title><content type='html'>&lt;span style="font-family: Verdana,sans-serif; font-size: small;"&gt;&lt;/span&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Basically in liferay, we create services using service builder, which is like child's play. In service.xml, we need to put local and remote both attributes, and it will generate class for web service also.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;The link shows steps,&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;- To generate web services using service builder.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;- To generate WSDD changes.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;- To access web service from Axis client&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;More @ &lt;a href="http://arvindm.com/2010/03/23/web-services-in-liferay/"&gt;http://arvindm.com/2010/03/23/web-services-in-liferay/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-4674693058445613507?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/4674693058445613507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=4674693058445613507&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/4674693058445613507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/4674693058445613507'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/08/liferay-exposing-webservice-access.html' title='Liferay: Exposing Webservice &amp; access using Axis Client...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-7284816994603415586</id><published>2010-08-20T13:54:00.002+05:30</published><updated>2010-08-20T13:57:36.278+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Portlet'/><category scheme='http://www.blogger.com/atom/ns#' term='Liferay'/><title type='text'>Liferay Wrapper Plugins ...</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Very nice article about liferay core functionality extension. You can create wrappers around core services and it will be in service when you compile-deploy it! Isn't that's great? Check the link.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://www.liferay.com/web/juan.fernandez/blog/-/blogs/liferay-wrapper-plugins"&gt;Liferay Wrapper Plugins&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-7284816994603415586?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/7284816994603415586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=7284816994603415586&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/7284816994603415586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/7284816994603415586'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/08/liferay-wrapper-plugins.html' title='Liferay Wrapper Plugins ...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-8029349026996508984</id><published>2010-08-17T17:16:00.001+05:30</published><updated>2010-08-17T17:18:06.133+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Portlet'/><category scheme='http://www.blogger.com/atom/ns#' term='Liferay'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Liferay: Make Custom "Add Application" portlet ...</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;Sometimes client will amaze us by giving very very complex requirements which not seem to be a value adding thing. But still we need to complete it as it's our work :). Same happened here, when i need to make a portlet replicating the "Add Application" liferay portlet.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;Though its not new, it has given me chance to see how "Add Application" menu works.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;Basically liferay uses a Javascript file named &lt;incode&gt;layout_configuration.js&lt;/incode&gt; to call the &lt;incode&gt;layout_configuration&lt;/incode&gt; portlet.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;Liferay has in-built portlet named &lt;incode&gt;layout_configuration&lt;/incode&gt; for this functionality. It renders the same using &lt;incode&gt;LayoutConfiguration.toggle('87');&lt;/incode&gt; where 87 is the portlet ID.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;Find the following portlet in file &lt;incode&gt;portal\portal-web\docroot\WEB-INF\liferay-portlet.xml&lt;/incode&gt;,&lt;/div&gt;&lt;br /&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;code&gt; &amp;lt;portlet&amp;gt;  &lt;br /&gt;         &amp;lt;portlet-name&amp;gt;87&amp;lt;/portlet-name&amp;gt;  &lt;br /&gt;         &amp;lt;icon&amp;gt;/html/icons/default.png&amp;lt;/icon&amp;gt;  &lt;br /&gt;         &amp;lt;struts-path&amp;gt;layout_configuration&amp;lt;/struts-path&amp;gt;  &lt;br /&gt;         &amp;lt;use-default-template&amp;gt;false&amp;lt;/use-default-template&amp;gt;  &lt;br /&gt;         &amp;lt;show-portlet-access-denied&amp;gt;false&amp;lt;/show-portlet-access-denied&amp;gt;  &lt;br /&gt;         &amp;lt;show-portlet-inactive&amp;gt;false&amp;lt;/show-portlet-inactive&amp;gt;  &lt;br /&gt;         &amp;lt;restore-current-view&amp;gt;false&amp;lt;/restore-current-view&amp;gt;  &lt;br /&gt;         &amp;lt;private-request-attributes&amp;gt;false&amp;lt;/private-request-attributes&amp;gt;  &lt;br /&gt;         &amp;lt;private-session-attributes&amp;gt;false&amp;lt;/private-session-attributes&amp;gt;  &lt;br /&gt;         &amp;lt;render-weight&amp;gt;50&amp;lt;/render-weight&amp;gt;  &lt;br /&gt;         &amp;lt;system&amp;gt;true&amp;lt;/system&amp;gt;  &lt;br /&gt;     &amp;lt;/portlet&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;Also find the portlet in file &lt;incode&gt;\portal\portal-web\docroot\WEB-INF\portlet-custom.xml&lt;/incode&gt; as below,&lt;/div&gt;&lt;br /&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;code&gt; &amp;lt;portlet&amp;gt;  &lt;br /&gt;         &amp;lt;portlet-name&amp;gt;87&amp;lt;/portlet-name&amp;gt;  &lt;br /&gt;         &amp;lt;display-name&amp;gt;Layout Configuration&amp;lt;/display-name&amp;gt;  &lt;br /&gt;         &amp;lt;portlet-class&amp;gt;com.liferay.portlet.StrutsPortlet&amp;lt;/portlet-class&amp;gt;  &lt;br /&gt;         &amp;lt;init-param&amp;gt;  &lt;br /&gt;             &amp;lt;name&amp;gt;view-action&amp;lt;/name&amp;gt;  &lt;br /&gt;             &amp;lt;value&amp;gt;/layout_configuration/view&amp;lt;/value&amp;gt;  &lt;br /&gt;         &amp;lt;/init-param&amp;gt;  &lt;br /&gt;         &amp;lt;expiration-cache&amp;gt;0&amp;lt;/expiration-cache&amp;gt;  &lt;br /&gt;         &amp;lt;supports&amp;gt;  &lt;br /&gt;             &amp;lt;mime-type&amp;gt;text/html&amp;lt;/mime-type&amp;gt;  &lt;br /&gt;         &amp;lt;/supports&amp;gt;  &lt;br /&gt;         &amp;lt;resource-bundle&amp;gt;com.liferay.portlet.StrutsResourceBundle&amp;lt;/resource-bundle&amp;gt;  &lt;br /&gt;     &amp;lt;/portlet&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;You will find the path &lt;incode&gt;layout_configuration&lt;/incode&gt; in files &lt;incode&gt;struts-config.xml&lt;/incode&gt; and &lt;incode&gt;tiles-defs.xml&lt;/incode&gt; in the same folder.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;b&gt;In &lt;incode&gt;struts-config&lt;/incode&gt;&lt;/b&gt;,&lt;/div&gt;&lt;br /&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;code&gt;     &amp;lt;!-- Layout Configuration --&amp;gt;  &lt;br /&gt;     &amp;lt;action path="/layout_configuration/templates" forward="portlet.layout_configuration.templates" /&amp;gt;  &lt;br /&gt;     &amp;lt;action path="/layout_configuration/view" forward="portlet.layout_configuration.view" /&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;b&gt;In &lt;incode&gt;tiles-defs&lt;/incode&gt;&lt;/b&gt;,&lt;/div&gt;&lt;br /&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;code&gt; &amp;lt;!-- Layout Configuration --&amp;gt;  &lt;br /&gt; &amp;lt;definition name="portlet.layout_configuration" extends="portlet"&amp;gt;  &lt;br /&gt;     &amp;lt;put name="portlet_decorate" value="false" /&amp;gt;  &lt;br /&gt; &amp;lt;/definition&amp;gt;  &lt;br /&gt; &amp;lt;definition name="portlet.layout_configuration.templates" path="/portlet/layout_configuration/templates.jsp" /&amp;gt;  &lt;br /&gt; &amp;lt;definition name="portlet.layout_configuration.view" extends="portlet.layout_configuration"&amp;gt;  &lt;br /&gt;     &amp;lt;put name="portlet_content" value="/portlet/layout_configuration/view.jsp" /&amp;gt;  &lt;br /&gt; &amp;lt;/definition&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;At first I started learning what liferay is doing. Basically in this portlet, liferay generates the HTML layout of all portlets in &lt;incode&gt;liferay-display.xml&lt;/incode&gt; as per the category. It makes the whole tree structure of categories and subcategories. This portlet is not described in liferay-disaply.xml, so it will not be disaplayed in the tree.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;Then it loads this portlet on &lt;incode&gt;onclick&lt;/incode&gt; event of "Add Application" menu click. It calls the portal servlet at url &lt;incode&gt;/portal/render_portlet&lt;/incode&gt;, which will render the portlet and shows the result HTML in popup dialog.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;Check the javascript function from &lt;incode&gt;layout_configuration.js&lt;/incode&gt; file,&lt;/div&gt;&lt;br /&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;code&gt; toggle: function(ppid) {  &lt;br /&gt;         var instance = this;  &lt;br /&gt;         var plid = themeDisplay.getPlid();  &lt;br /&gt;         var doAsUserId = themeDisplay.getDoAsUserIdEncoded();  &lt;br /&gt;         if (!instance.menu) {  &lt;br /&gt;             var url = themeDisplay.getPathMain() + '/portal/render_portlet';  &lt;br /&gt;             var popupWidth = 250;  &lt;br /&gt;             var body = jQuery('body');  &lt;br /&gt;             body.addClass('lfr-has-sidebar');  &lt;br /&gt;             instance._dialog = Liferay.Popup(  &lt;br /&gt;                 {  &lt;br /&gt;                     width: popupWidth,  &lt;br /&gt;                     message: '&amp;lt;div class="loading-animation" /&amp;gt;',  &lt;br /&gt;                     position: [5,5],  &lt;br /&gt;                     resizable: false,  &lt;br /&gt;                     title: Liferay.Language.get("add-application"),  &lt;br /&gt;                     onClose: function() {  &lt;br /&gt;                         instance.menu = null;  &lt;br /&gt;                         body.removeClass('lfr-has-sidebar');  &lt;br /&gt;                     }  &lt;br /&gt;                 }  &lt;br /&gt;             );  &lt;br /&gt;             jQuery.ajax(  &lt;br /&gt;                 {  &lt;br /&gt;                     url: url,  &lt;br /&gt;                     data: {  &lt;br /&gt;                         p_l_id: plid,  &lt;br /&gt;                         p_p_id: ppid,  &lt;br /&gt;                         p_p_state: 'exclusive',  &lt;br /&gt;                         doAsUserId: doAsUserId  &lt;br /&gt;                     },  &lt;br /&gt;                     success: function(message) {  &lt;br /&gt;                         instance._dialog.html(message);  &lt;br /&gt;                         instance._loadContent();  &lt;br /&gt;                     }  &lt;br /&gt;                 }  &lt;br /&gt;             );  &lt;br /&gt;         }  &lt;br /&gt;     }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;After that, the javascript adds click and drag-drop even for all portlet divs of that popup dialog. So that user will be able to add the portlet into page by click OR drag-drop.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;I need to show list of portlets of specified categories only without the categories.So i need to copy this portlet as it is and filter as per the category.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;First of all i choosen the plugins environment for my new portlet, but it failed because i need to use the static resource named &lt;incode&gt;WebAppPool&lt;/incode&gt; as per the code below,&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;code&gt;&lt;br /&gt;PortletCategory portletCategory = (PortletCategory)WebAppPool.get(String.valueOf(company.getCompanyId()), WebKeys.PORTLET_CATEGORY);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;This pool is maintained by liferay, it has all the categories on server startup. Now liferay loads the war file of plugin portlet when we add the portlet in page. So new classloader will be used here. And in java, child classloader can't access parent classloader's resources.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;So i decided to move to ext environment. I made the new "Custom Add Application" portlet in ext with some code changes.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;1. Need to filter the categories, for that i used portlet's &lt;incode&gt;init-param&lt;/incode&gt; to define my including categories as below,&lt;/div&gt;&lt;br /&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;code&gt; &amp;lt;init-param&amp;gt;  &lt;br /&gt;         &amp;lt;name&amp;gt;includeCategories&amp;lt;/name&amp;gt;  &lt;br /&gt;         &amp;lt;value&amp;gt;myCategory,yours&amp;lt;/value&amp;gt; &amp;lt;!-- Comma seperated category names, sub-categories will not be filtered...--&amp;gt;  &lt;br /&gt;     &amp;lt;/init-param&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;2. Changed the code in &lt;incode&gt;view.jsp&lt;/incode&gt;, included the categories only given in the &lt;incode&gt;init-param&lt;/incode&gt; of above step and will show in HTML un-ordered list. Sent all categories to &lt;incode&gt;view_category.jsp&lt;/incode&gt;.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;3. Changed the code in &lt;incode&gt;view_category.jsp&lt;/incode&gt;, displayed the portlets from all categories of above step as HTML list-items. It only shows portlets, ignoring the categories from view.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;4. Same JS file has been used with different name to keep the drag-drop support for portlet list-items. Changed the JS file accordingly. Like ID for the result element is passed because now we don't want it to be in popup dialog etc...&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;5. Made new theme from classic, and changed the &lt;incode&gt;navigation.vm&lt;/incode&gt; to show the above portlet as navigation menu item.&lt;/div&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;Though this was not extra-ordinary development, i got the chance to look into some internals of Liferay's odd style of developing a complex product, which may give us harsh times if touched :) (Isn't its too complex for a portal?).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-8029349026996508984?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/8029349026996508984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=8029349026996508984&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/8029349026996508984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/8029349026996508984'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/08/liferay-make-custom-add-application.html' title='Liferay: Make Custom &quot;Add Application&quot; portlet ...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-7893041143408128682</id><published>2010-08-03T18:00:00.003+05:30</published><updated>2010-08-03T18:17:06.714+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Some Useful Linux commands while deploying...</title><content type='html'>&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;While deploying any WAR in tomcat on Linux platform, most problem we have faced is Linux terminal commands. In all industries you will mostly have a Linux server for test server,staging server etc...So most of the times developers need to test the code locally and then deploy it in centralized test OR development server where other can access and test it.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;The steps will be same for all programmers. We get an email from so called IT people with deployment instruction having IP, username ,password (Which is always weird and we always copy paste it :)) etc... We Linux into the server using Putty or some other terminal client. But most of windows developers will face problem here. So some commands which are very easy to remember are,&lt;/span&gt;&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt;&lt;br /&gt;- cd (Same as windows)&lt;br /&gt;- pwd (Shows current working dir)&lt;br /&gt;- ./ (this folowing with script filename, will execute the script. You can also use 'su')&lt;br /&gt;- ps ax (Shows running process details, with process ID. like windows task manager shows.)&lt;br /&gt;- grep hi (Finds the string 'hi')&lt;br /&gt;- kill -9 567 (Kills process with ID 567)&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Now in Linux if you have many servers running and you want to stop only specific one then you can use following combination,&lt;/span&gt;&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt;- ps ax|grep projDir (This will show the process having projDir in sys variable.)&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;After that we can kill that process easily.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Before running &lt;incode&gt;startup.sh&lt;/incode&gt; you must have set variable for &lt;incode&gt;JAVA_HOME&lt;/incode&gt;, so that tomcat can find the java env.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;There are other commands which are for changing file permissions (Read only, executable etc...) but will post it later.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;-- Update&lt;/b&gt; By Kunal -- &lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;- scp sourcepath user@destserverhost:destpath (Secure copy of file from one linux server to another)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;scp /root/example.html root@66.235.111.88:/home/example&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-7893041143408128682?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/7893041143408128682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=7893041143408128682&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/7893041143408128682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/7893041143408128682'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/08/some-useful-linux-commands-while.html' title='Some Useful Linux commands while deploying...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-5651074905071153009</id><published>2010-07-30T18:06:00.000+05:30</published><updated>2010-07-30T18:06:38.057+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='Portlet'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Spring MVC portlet with annotations</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;Java portlet framework is awesome for portal developers. Different portal frameworks are there which supports portlet development in their environment. They also support spring portlet. Spring's portlet support is exposed through Spring MVC interface. Spring provides MVC based portlet development which is so easy and neatly architectured.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Spring provides class &lt;incode&gt;org.springframework.web.portlet.DispatcherPortlet&lt;/incode&gt; which is to be difined in &lt;incode&gt;portlet.xml&lt;/incode&gt;.&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;code&gt;  &amp;lt;portlet&amp;gt;  &lt;br /&gt;     &amp;lt;description xml:lang="en"&amp;gt;Portlet Description&amp;lt;/description&amp;gt;  &lt;br /&gt;     &amp;lt;portlet-name&amp;gt;portlet-name&amp;lt;/portlet-name&amp;gt;  &lt;br /&gt;     &amp;lt;display-name xml:lang="en"&amp;gt;Portlet Display Name&amp;lt;/display-name&amp;gt;  &lt;br /&gt;     &amp;lt;portlet-class&amp;gt;org.springframework.web.portlet.DispatcherPortlet&amp;lt;/portlet-class&amp;gt;  &lt;br /&gt;     &amp;lt;init-param&amp;gt;  &lt;br /&gt;       &amp;lt;name&amp;gt;contextConfigLocation&amp;lt;/name&amp;gt;  &lt;br /&gt;       &amp;lt;value&amp;gt;/WEB-INF/appContext.xml&amp;lt;/value&amp;gt;  &lt;br /&gt;     &amp;lt;/init-param&amp;gt;  &lt;br /&gt;     &amp;lt;expiration-cache&amp;gt;0&amp;lt;/expiration-cache&amp;gt;  &lt;br /&gt;     &amp;lt;supports&amp;gt;  &lt;br /&gt;       &amp;lt;mime-type&amp;gt;text/html&amp;lt;/mime-type&amp;gt;  &lt;br /&gt;       &amp;lt;portlet-mode&amp;gt;VIEW&amp;lt;/portlet-mode&amp;gt;  &lt;br /&gt;     &amp;lt;/supports&amp;gt;  &lt;br /&gt;     &amp;lt;portlet-info&amp;gt;  &lt;br /&gt;       &amp;lt;title&amp;gt;Portlet Name&amp;lt;/title&amp;gt;  &lt;br /&gt;       &amp;lt;short-title&amp;gt;Portlet Name&amp;lt;/short-title&amp;gt;  &lt;br /&gt;       &amp;lt;keywords&amp;gt;Spring Portlet MVC&amp;lt;/keywords&amp;gt;  &lt;br /&gt;     &amp;lt;/portlet-info&amp;gt;  &lt;br /&gt;   &amp;lt;/portlet&amp;gt;   &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The init param &lt;incode&gt;contextConfigLocation&lt;/incode&gt; defines the application context XML file to be loaded for this portlet. This file has the spring bean definition for classes implementing &lt;incode&gt;Controller&lt;/incode&gt; interface OR annotated classes with &lt;incode&gt;@Controller&lt;/incode&gt;. &lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Annotated Controller class is as follows,&lt;/div&gt;&lt;pre class="CICodeFormatter" style="font-family: Verdana,sans-serif;"&gt;&lt;code class="CICodeFormatter"&gt; @Controller  &lt;br /&gt; @RequestMapping  &lt;br /&gt; public class MyController {  &lt;br /&gt;   &lt;br /&gt;     private static final Logger _LOG = Logger.getLogger(MyController.class);  &lt;br /&gt;       &lt;br /&gt;     //Default render method will call this method...  &lt;br /&gt;     @SuppressWarnings("unchecked")  &lt;br /&gt;     @RequestMapping({"VIEW","/demoportlet/jsp2.do"})  &lt;br /&gt;     public Object defaultRender(Model model, PortletRequest request,RenderResponse response) {  &lt;br /&gt;         response.setContentType("text/html; charset=UTF-8");  &lt;br /&gt;         String action = request.getParameter("action");  &lt;br /&gt;         if("action1".equals(action)) {  &lt;br /&gt;              ...  &lt;br /&gt;             return "demoportlet/jsp1";  &lt;br /&gt;         } else {              &lt;br /&gt;              ...  &lt;br /&gt;             return "demoportlet/jsp2";  &lt;br /&gt;         }  &lt;br /&gt;     }  &lt;br /&gt;       &lt;br /&gt;     // Direct request mapping based on action parameter value = 'someAction'  &lt;br /&gt;     @RequestMapping(params = "action=someAction")   &lt;br /&gt;     public Object actionOne(RenderRequest actionRequest, RenderResponse actionResponse) throws Exception {  &lt;br /&gt;         actionResponse.setContentType("text/html; charset=UTF-8");  &lt;br /&gt;          ...          &lt;br /&gt;         return "demoportlet/jsp2";  &lt;br /&gt;     }  &lt;br /&gt; }  &lt;br /&gt;   &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;In &lt;incode&gt;web.xml&lt;/incode&gt; we need to define a servlet &lt;incode&gt;org.springframework.web.servlet.DispatcherServlet&lt;/incode&gt; and &lt;incode&gt;org.springframework.web.servlet.ViewRendererServlet&lt;/incode&gt; for JSP resolving as follows,&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;code&gt;&amp;lt;servlet&amp;gt;  &lt;br /&gt;     &amp;lt;servlet-name&amp;gt;view-servlet&amp;lt;/servlet-name&amp;gt;  &lt;br /&gt;     &amp;lt;servlet-class&amp;gt;org.springframework.web.servlet.ViewRendererServlet&amp;lt;/servlet-class&amp;gt;  &lt;br /&gt;     &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;  &lt;br /&gt;  &amp;lt;/servlet&amp;gt;  &lt;br /&gt;    &lt;br /&gt;  &amp;lt;servlet&amp;gt;  &lt;br /&gt;  &amp;lt;servlet-name&amp;gt;normal&amp;lt;/servlet-name&amp;gt;  &lt;br /&gt;  &amp;lt;servlet-class&amp;gt;org.springframework.web.servlet.DispatcherServlet&amp;lt;/servlet-class&amp;gt;  &lt;br /&gt;  &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;  &lt;br /&gt;  &amp;lt;/servlet&amp;gt;   &lt;br /&gt;   &lt;br /&gt;  &amp;lt;servlet-mapping&amp;gt;  &lt;br /&gt;  &amp;lt;servlet-name&amp;gt;normal&amp;lt;/servlet-name&amp;gt;  &lt;br /&gt;  &amp;lt;url-pattern&amp;gt;*.do&amp;lt;/url-pattern&amp;gt;  &lt;br /&gt;  &amp;lt;/servlet-mapping&amp;gt;   &lt;br /&gt;    &lt;br /&gt;  &amp;lt;servlet-mapping&amp;gt;  &lt;br /&gt;     &amp;lt;servlet-name&amp;gt;view-servlet&amp;lt;/servlet-name&amp;gt;  &lt;br /&gt;      &amp;lt;url-pattern&amp;gt;/WEB-INF/servlet/view&amp;lt;/url-pattern&amp;gt;  &lt;br /&gt;  &amp;lt;/servlet-mapping&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;In order for &lt;incode&gt;DispatcherPortlet&lt;/incode&gt; rendering to work, you must declare an instance of the &lt;incode&gt;ViewRendererServlet&lt;/incode&gt; .&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;In the Portlet MVC framework, each DispatcherPortlet has its own WebApplicationContext, which inherits all the beans already defined in the root WebApplicationContext. These inherited beans can be overridden in the portlet-specific scope, and new scope-specific beans can be defined local to a given portlet instance.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The &lt;incode&gt;DispatcherServlet&lt;/incode&gt; will look for &lt;incode&gt;normal-servlet.xml&lt;/incode&gt; as we declared its name as &lt;incode&gt;'normal'&lt;/incode&gt;. This file will contain the definitions for beans which are needed to handle the portlet scanning, annotation handling etc... So first of all, the request will come to &lt;incode&gt;DispatcherServlet&lt;/incode&gt; as its Spring MVC, and then it will scan for portlet controllers using spring's &lt;incode&gt;&amp;lt;context:component-scan&amp;gt;&lt;/incode&gt; tag.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;We also need to define the context param &lt;incode&gt;contextConfigLocation&lt;/incode&gt; in web.xml which is loaded by &lt;incode&gt;DispatcherServlet&lt;/incode&gt; on server startup. This will have all the beans required by portlets.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;code&gt; &amp;lt;context-param&amp;gt;  &lt;br /&gt;  &amp;lt;description&amp;gt;Spring Context XML location&amp;lt;/description&amp;gt;  &lt;br /&gt;  &amp;lt;param-name&amp;gt;contextConfigLocation&amp;lt;/param-name&amp;gt;  &lt;br /&gt;  &amp;lt;param-value&amp;gt;classpath:conf/spring/global.xml&amp;lt;/param-value&amp;gt;  &lt;br /&gt;  &amp;lt;/context-param&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The &lt;incode&gt;normal-servlet.xml&lt;/incode&gt; will look like follows, where we need to define beans for annotation handling.&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;code&gt; &amp;lt;beans xmlns="http://www.springframework.org/schema/beans"  &lt;br /&gt;     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  &lt;br /&gt;     xmlns:context="http://www.springframework.org/schema/context"  &lt;br /&gt;     xmlns:util="http://www.springframework.org/schema/util"  &lt;br /&gt;     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  &lt;br /&gt;         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd  &lt;br /&gt;         http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"&amp;gt;  &lt;br /&gt;           &lt;br /&gt;     &amp;lt;context:annotation-config /&amp;gt;          &lt;br /&gt;   &lt;br /&gt;     &amp;lt;bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"&amp;gt;  &lt;br /&gt;       &amp;lt;property name="cookieName" value="lang"/&amp;gt;  &lt;br /&gt;       &amp;lt;!-- in seconds. If set to -1, the cookie is not persisted (deleted when browser shuts down) --&amp;gt;  &lt;br /&gt;       &amp;lt;property name="cookieMaxAge" value="100000"/&amp;gt;  &lt;br /&gt;     &amp;lt;/bean&amp;gt;  &lt;br /&gt;   &lt;br /&gt;     &amp;lt;bean id="localeChangeInterceptor"  &lt;br /&gt;    class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"&amp;gt;  &lt;br /&gt;       &amp;lt;property name="paramName" value="locale"/&amp;gt;  &lt;br /&gt;     &amp;lt;/bean&amp;gt;  &lt;br /&gt;       &lt;br /&gt;     &amp;lt;bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"&amp;gt;  &lt;br /&gt;         &amp;lt;property name="interceptors"&amp;gt;  &lt;br /&gt;             &amp;lt;list&amp;gt;  &lt;br /&gt;                 &amp;lt;ref bean="localeChangeInterceptor"/&amp;gt;  &lt;br /&gt;             &amp;lt;/list&amp;gt;  &lt;br /&gt;         &amp;lt;/property&amp;gt;  &lt;br /&gt;         &amp;lt;property name="order" value="10" /&amp;gt;  &lt;br /&gt;     &amp;lt;/bean&amp;gt;    &lt;br /&gt;     &lt;br /&gt;   &amp;lt;bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/&amp;gt;  &lt;br /&gt;       &lt;br /&gt;     &amp;lt;context:component-scan base-package="com.spring.controller" /&amp;gt;      &lt;br /&gt; &amp;lt;/beans&amp;gt;  &lt;br /&gt;   &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The &lt;incode&gt;&amp;lt;context:component-scan&amp;gt;&lt;/incode&gt; will finds the controller classes from given package which are annotated with &lt;incode&gt;@Controller&lt;/incode&gt;.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Other than is, we need to enter portlet information in portal framework's configuration files in which we want to deploy and use this portlet. When we add portlet from the portal, the controller methods will get call.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-5651074905071153009?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/5651074905071153009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=5651074905071153009&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/5651074905071153009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/5651074905071153009'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/07/spring-mvc-portlet-with-annotations.html' title='Spring MVC portlet with annotations'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-1468075193262383548</id><published>2010-07-28T17:42:00.001+05:30</published><updated>2010-07-28T17:46:22.944+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='paging'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Html'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Display tag - Opensource JSP paging library...</title><content type='html'>&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;Paging is important part when we have much data to show at once. We need to do all hectic coding for paging, like keep the total count, then count total pages to be shown, keep total records per page etc... This is nothing new but repeating and it takes bit time. So why not use some lib which gives you all of this with basic tags?&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;Note from the homepage : "The display tag library is an open source suite of custom tags that provide high-level web presentation patterns which will work in an MVC model. The library provides a significant amount of functionality while still being easy to use."&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;Basic steps to use are:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;1. Get the jar file from &lt;a href="http://displaytag.sourceforge.net/"&gt;http://displaytag.sourceforge.net&lt;/a&gt; and put it in classpath.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;2. In your JSP page write following import for taglib.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt; &amp;lt;%@ taglib uri="http://displaytag.sf.net" prefix="display" %&amp;gt;  &lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;3. Check the following code for displaying the list of Objects as table with paging. You can configure different propeties of table as below, also can define CSS classes for diff. tags.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt;&lt;br /&gt; &amp;lt;display:table name="lstObject" defaultsort="1" pagesize="20" sort="external" partialList="true"   &lt;br /&gt;     size="totalCount" uid="lstObject" id="myObject"  &lt;br /&gt;             export="false" requestURI="&amp;lt;%=someUrl%&amp;gt;" class="data"&amp;gt;   &lt;br /&gt;               &lt;br /&gt;             &amp;lt;!-- For detailed understanding for each property, check the link http://displaytag.sourceforge.net/1.2/configuration.html --&amp;gt;  &lt;br /&gt;             &amp;lt;display:setProperty name="paging.banner.placement" value="both" /&amp;gt;  &lt;br /&gt;             &amp;lt;display:setProperty name="paging.banner.group_size" value="10" /&amp;gt;      &lt;br /&gt;             &amp;lt;display:setProperty name="paging.banner.no_items_found"&amp;gt;  &lt;br /&gt;                 &amp;lt;span class="lfloat"&amp;gt;No {0} found.&amp;lt;/span&amp;gt;  &lt;br /&gt;             &amp;lt;/display:setProperty&amp;gt;  &lt;br /&gt;             &amp;lt;display:setProperty name="paging.banner.one_item_found"&amp;gt;  &lt;br /&gt;                 &amp;lt;span class="lfloat"&amp;gt;One {0} found.&amp;lt;/span&amp;gt;  &lt;br /&gt;             &amp;lt;/display:setProperty&amp;gt;              &lt;br /&gt;             &amp;lt;display:setProperty name="paging.banner.all_items_found"&amp;gt;  &lt;br /&gt;                 &amp;lt;span class="lfloat"&amp;gt;{0} {1} found, displaying all {2}.&amp;lt;/span&amp;gt;  &lt;br /&gt;             &amp;lt;/display:setProperty&amp;gt;  &lt;br /&gt;             &amp;lt;display:setProperty name="paging.banner.some_items_found"&amp;gt;  &lt;br /&gt;                 &amp;lt;span class="lfloat"&amp;gt;{0} {1} found, displaying {2} to {3}.&amp;lt;/span&amp;gt;  &lt;br /&gt;             &amp;lt;/display:setProperty&amp;gt;              &lt;br /&gt;             &amp;lt;display:setProperty name="paging.banner.full"&amp;gt;  &lt;br /&gt;                 &amp;lt;div class="paging_footer"&amp;gt;  &lt;br /&gt;                     &amp;lt;div class="rfloat"&amp;gt;  &lt;br /&gt;                         &amp;lt;div class="lfloat" style="padding-top:6px;"&amp;gt;[&amp;lt;a href="{1}"&amp;gt;First&amp;lt;/a&amp;gt; | &amp;lt;a href="{2}"&amp;gt;Prev&amp;lt;/a&amp;gt;]&amp;lt;/div&amp;gt;  &lt;br /&gt;                         &amp;lt;div class="paging_wrap lfloat"&amp;gt;                          &lt;br /&gt;                             {0}                          &lt;br /&gt;                         &amp;lt;/div&amp;gt;  &lt;br /&gt;                         &amp;lt;div class="rfloat" style="padding-top:6px;"&amp;gt;[&amp;lt;a href="{3}"&amp;gt;Next&amp;lt;/a&amp;gt; | &amp;lt;a href="{4}"&amp;gt;Last&amp;lt;/a&amp;gt;]&amp;lt;/div&amp;gt;  &lt;br /&gt;                     &amp;lt;/div&amp;gt;  &lt;br /&gt;                 &amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;  &lt;br /&gt;             &amp;lt;/display:setProperty&amp;gt;  &lt;br /&gt;             &amp;lt;display:setProperty name="paging.banner.first"&amp;gt;  &lt;br /&gt;                 &amp;lt;div class="paging_footer"&amp;gt;  &lt;br /&gt;                     &amp;lt;div class="rfloat"&amp;gt;  &lt;br /&gt;                         &amp;lt;div class="lfloat" style="padding-top:6px;"&amp;gt;[First | Prev]&amp;lt;/div&amp;gt;  &lt;br /&gt;                         &amp;lt;div class="paging_wrap lfloat"&amp;gt;  &lt;br /&gt;                              {0}  &lt;br /&gt;                         &amp;lt;/div&amp;gt;  &lt;br /&gt;                         &amp;lt;div class="rfloat" style="padding-top:6px;"&amp;gt;[&amp;lt;a href="{3}"&amp;gt;Next&amp;lt;/a&amp;gt; | &amp;lt;a href="{4}"&amp;gt;Last&amp;lt;/a&amp;gt;]&amp;lt;/div&amp;gt;  &lt;br /&gt;                     &amp;lt;/div&amp;gt;  &lt;br /&gt;                 &amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;  &lt;br /&gt;             &amp;lt;/display:setProperty&amp;gt;          &lt;br /&gt;             &amp;lt;display:setProperty name="paging.banner.last"&amp;gt;                  &lt;br /&gt;                 &amp;lt;div class="paging_footer"&amp;gt;  &lt;br /&gt;                     &amp;lt;div class="rfloat"&amp;gt;  &lt;br /&gt;                         &amp;lt;div class="lfloat" style="padding-top:6px;"&amp;gt;[&amp;lt;a href="{1}"&amp;gt;First&amp;lt;/a&amp;gt; | &amp;lt;a href="{2}"&amp;gt;Prev&amp;lt;/a&amp;gt;]&amp;lt;/div&amp;gt;  &lt;br /&gt;                         &amp;lt;div class="paging_wrap lfloat"&amp;gt;                          &lt;br /&gt;                             {0}  &lt;br /&gt;                         &amp;lt;/div&amp;gt;  &lt;br /&gt;                         &amp;lt;div class="rfloat" style="padding-top:6px;"&amp;gt;[Next | Last]&amp;lt;/div&amp;gt;  &lt;br /&gt;                     &amp;lt;/div&amp;gt;  &lt;br /&gt;                 &amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;  &lt;br /&gt;             &amp;lt;/display:setProperty&amp;gt;  &lt;br /&gt;             &amp;lt;display:setProperty name="paging.banner.onepage" value="" /&amp;gt; &amp;lt;!-- Because dont want to show any value if only one page...--&amp;gt;  &lt;br /&gt;               &lt;br /&gt;             &amp;lt;display:setProperty name="paging.banner.page.selected"&amp;gt;  &lt;br /&gt;                 &amp;lt;div class="lfloat"&amp;gt;  &lt;br /&gt;                     &amp;lt;a onclick="return false;" class="active" href="javascript:void(0);"&amp;gt;{0}&amp;lt;/a&amp;gt;  &lt;br /&gt;                 &amp;lt;/div&amp;gt;  &lt;br /&gt;             &amp;lt;/display:setProperty&amp;gt;                      &lt;br /&gt;             &amp;lt;display:setProperty name="paging.banner.page.link"&amp;gt;  &lt;br /&gt;                 &amp;lt;div class="lfloat"&amp;gt;  &lt;br /&gt;                     &amp;lt;a href="{1}" title="Goto page {0}"&amp;gt;{0}&amp;lt;/a&amp;gt;  &lt;br /&gt;                 &amp;lt;/div&amp;gt;  &lt;br /&gt;             &amp;lt;/display:setProperty&amp;gt;  &lt;br /&gt;               &lt;br /&gt;             &amp;lt;display:setProperty name="paging.banner.page.separator" value=" " /&amp;gt;    &amp;lt;!-- Seperator between page numbers ,, i.e this will show "[First | Prev] 1 2 3 [Last | Next]"--&amp;gt;          &lt;br /&gt;             &amp;lt;% MyObject myObject = (MyObject)pageContext.getAttribute("myObject"); %&amp;gt; &amp;lt;!-- Get the object from pageContext, which is writter in 'id' attribute --&amp;gt;  &lt;br /&gt;              &amp;lt;display:column title="My title" class="first"&amp;gt;  &lt;br /&gt;              &amp;lt;!-- An y HTMl or jsp scriptlet can be used here... --&amp;gt;  &lt;br /&gt;              &amp;lt;/display:column&amp;gt;  &lt;br /&gt;              &amp;lt;display:column property="name" title="2nd Column"/&amp;gt;  &lt;br /&gt;              &amp;lt;display:column title="3rd Column"&amp;gt;&amp;lt;%= myObject.getSomeValue() %&amp;gt;&amp;lt;/display:column&amp;gt;  &lt;br /&gt;              ...               &lt;br /&gt;         &amp;lt;/display:table&amp;gt;  &lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;4. The displaytag table can be used as follows. Where,&lt;br /&gt;&lt;br&gt;- &lt;incode&gt;pagesize&lt;/incode&gt; is total records per page&lt;br /&gt;&lt;br&gt;- &lt;incode&gt;sort="external"&lt;/incode&gt; means list given is sorted&lt;br /&gt;&lt;br&gt;- &lt;incode&gt;size&lt;/incode&gt; defined the total records for which paging will be done&lt;br /&gt;&lt;br&gt;- &lt;incode&gt;name&lt;/incode&gt; defines the list object for which the table will be generated&lt;br /&gt;&lt;br&gt;- &lt;incode&gt;id&lt;/incode&gt; means internal object for each row which can be used in JSP scriptlets to do some data manipulations.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt; &amp;lt;display:table name="lstObject" defaultsort="1" pagesize="20" sort="external" partialList="true"   &lt;br /&gt;     size="totalCount" uid="lstObject" id="myObject"  &lt;br /&gt;             export="false" requestURI="&amp;lt;%=someUrl%&amp;gt;" class="data"&amp;gt;  &lt;br /&gt;             ...  &lt;br /&gt;             &amp;lt;/display:table&amp;gt;  &lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;5. You can set any property for display tag as below. You can also write HTML inside the property tag. For detailed understanding for each property this library supports, check the link - &lt;a href="http://displaytag.sourceforge.net/1.2/configuration.html"&gt;http://displaytag.sourceforge.net/1.2/configuration.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt; &amp;lt;display:setProperty name="paging.banner.page.separator" value=" " /&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;HomePage:&lt;/b&gt; &lt;a href="http://displaytag.sourceforge.net/"&gt;http://displaytag.sourceforge.net&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Configuration properties:&lt;/b&gt; &lt;a href="http://displaytag.sourceforge.net/1.2/configuration.html"&gt;http://displaytag.sourceforge.net/1.2/configuration.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-1468075193262383548?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/1468075193262383548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=1468075193262383548&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/1468075193262383548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/1468075193262383548'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/07/display-tag-opensource-jsp-paging.html' title='Display tag - Opensource JSP paging library...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-9123555696337258084</id><published>2010-06-09T15:32:00.000+05:30</published><updated>2010-06-09T15:32:16.431+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='JQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='struts'/><category scheme='http://www.blogger.com/atom/ns#' term='Html'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='Liferay'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Liefray: Using JSONObject for Ajax in Plugin Portlet...</title><content type='html'>&lt;span style="font-family: Verdana,sans-serif; font-size: small;"&gt;&lt;/span&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Many times we face situations when we need to use Ajax call from JSP pages. Using jQuery, its very easy to call any JSP through AJAX. You can just call the JSP and show its response from callback into some DOM element.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt; $.ajax({  &lt;br /&gt;      type: 'POST',  &lt;br /&gt;      url: getUrl(),  &lt;br /&gt;      data: {},                                   &lt;br /&gt;      success: function(returnData) {  &lt;br /&gt;          $('#someElementId').html(returnData);  &lt;br /&gt;      }  &lt;br /&gt;     });  &lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;But this is useful when you want some big data OR some complex UI layout which is hard to generate using callback javascript function. Simple we call the JSP in which we have already designed the layout properly so we don't need to bother about manipulating the &lt;incode&gt;returnData&lt;/incode&gt; in javascript.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Now think if you only need some small amount of data from server side, how will go? Making a new JSP for such a small task is not worhty i think. One technology is there for our help,JSON. JSON is a simple string notation of any object, which represents key-value pair like hashmap but uses its own structure to define objects.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;Liferay provides &lt;incode&gt;com.liferay.portal.struts.JSONAction&lt;/incode&gt; class which is a struts Action class. But to use this one in portlet we need to configure the portlet as a &lt;incode&gt;com.liferay.portlet&lt;/incode&gt;. But there is one more way to use JSON with plugin portlet, using overriding &lt;incode&gt;serveResource&lt;/incode&gt; method from &lt;incode&gt;GenericPortlet&lt;/incode&gt; class into your portlet class.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt; protected void getSomeDataAsJson(ResourceRequest request, ResourceResponse response)  &lt;br /&gt; throws PortletException, IOException {  &lt;br /&gt;     String myParam = ParamUtil.getString(request, "myParam","");  &lt;br /&gt;     // Some service call using params from request...  &lt;br /&gt;     Obj obj = getDataFromSomeService(myParam);  &lt;br /&gt;     JSONObject jsonObj = JSONFactoryUtil.createJSONObject();  &lt;br /&gt;     // obj can be anything... Integer,Boolean,String or some custom POJO...  &lt;br /&gt;     jsonObj.put("testData", obj);  &lt;br /&gt;     OutputStream os = response.getPortletOutputStream();  &lt;br /&gt;     try {  &lt;br /&gt;         os.write(jsonObj.toString().getBytes());  &lt;br /&gt;     }  &lt;br /&gt;     finally {  &lt;br /&gt;         os.close();  &lt;br /&gt;     }  &lt;br /&gt; }  &lt;br /&gt; @Override  &lt;br /&gt; public void serveResource(ResourceRequest request, ResourceResponse response)  &lt;br /&gt;         throws PortletException, IOException {  &lt;br /&gt;     String cmd = ParamUtil.getString(request,Constants.CMD);  &lt;br /&gt;     if ("getSomeDataAsJson".equals(cmd)) {  &lt;br /&gt;         getSomeDataAsJson(request, response);  &lt;br /&gt;     }  &lt;br /&gt; }  &lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;The above method will provide the JSON object as a result in javascript callback function. Check the Ajax call,&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt; $("input:button[@name='&amp;lt;portlet:namespace /&amp;gt;SomeThing']").click (function() {  &lt;br /&gt;     $('#&amp;lt;portlet:namespace /&amp;gt;myDiv').text("");  &lt;br /&gt;     //URL which goes to your portlet...  &lt;br /&gt;     var url = "&amp;lt;portlet:resourceURL&amp;gt;&amp;lt;portlet:param name='&amp;lt;%=Constants.CMD %&amp;gt;' value='getSomeDataAsJson' /&amp;gt;&amp;lt;/portlet:resourceURL&amp;gt;";      &lt;br /&gt;     //Append your hidden input fields in the resourceURL...   &lt;br /&gt;     url +="&amp;amp;"+$('input:hidden').serialize();   &lt;br /&gt;     $.ajax({  &lt;br /&gt;             url: url,  &lt;br /&gt;             data: {},  &lt;br /&gt;             dataType: 'json',  &lt;br /&gt;             success: function(message) {  &lt;br /&gt;                     $('#&amp;lt;portlet:namespace /&amp;gt;myDiv').text(message.testData);  &lt;br /&gt;                     }  &lt;br /&gt;             }  &lt;br /&gt;         );      &lt;br /&gt;     });  &lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;This way we don't need to create JSPs for small data fetching. Show other ways also using simple AJAX calling (Like DWR supports, direct calling JAVA class method from JS and returns data in JS callback).&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-9123555696337258084?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/9123555696337258084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=9123555696337258084&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/9123555696337258084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/9123555696337258084'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/06/liefray-using-jsonobject-for-ajax-in.html' title='Liefray: Using JSONObject for Ajax in Plugin Portlet...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-1457165095462666727</id><published>2010-06-04T14:55:00.001+05:30</published><updated>2010-06-04T14:56:49.323+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='JQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Plugins'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Javascript-ajax RSS feed reader - using jQuery with jGFeed ...</title><content type='html'>Check the new version of Ajax feed reader, which is using jQuery with jGFeed. &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt; &amp;lt;html&amp;gt;&amp;lt;head&amp;gt;  &lt;br /&gt; &amp;lt;script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"&amp;gt;&amp;lt;/script&amp;gt;  &lt;br /&gt; &amp;lt;script type= "text/javascript" language='javascript'&amp;gt;  &lt;br /&gt; //&amp;lt;![CDATA[  &lt;br /&gt; (function($) {  &lt;br /&gt;   $.extend( {  &lt;br /&gt; jGFeed : function(url, fnk, num, key) {  &lt;br /&gt;       // Make sure url to get is defined  &lt;br /&gt;       if (url == null) return false;  &lt;br /&gt;       // Build Google Feed API URL  &lt;br /&gt;       var gurl = "http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&amp;amp;callback=?&amp;amp;q="+url;  &lt;br /&gt;       if (num != null) gurl += "&amp;amp;num="+num;  &lt;br /&gt;       if (key != null) gurl += "&amp;amp;key="+key;  &lt;br /&gt;       // AJAX request the API  &lt;br /&gt;       $.getJSON(gurl, function(data) {  &lt;br /&gt;         if (typeof fnk == 'function')  &lt;br /&gt;           fnk.call(this, data.responseData.feed);  &lt;br /&gt;         else  &lt;br /&gt;           return false;  &lt;br /&gt;       });  &lt;br /&gt;     }  &lt;br /&gt;   });  &lt;br /&gt; })(jQuery);  &lt;br /&gt; var strArr = ['http://www.thinkdigit.com/forum/external.php?type=RSS','http://www.snapfiles.com/feeds/sf20fw.xml',  &lt;br /&gt;        'http://www.download.com/3410-2001-0-10.xml','http://www.download.com/3412-2001-0-10.xml',  &lt;br /&gt;        'http://www.download.com/3412-2003-0-25.xml','http://www.videohelp.com/rss/tools',  &lt;br /&gt;        'http://www.videohelp.com/rss/forum','http://www.pcstats.com/rss/rss.xml','http://feeds.feedburner.com/Techdudes',  &lt;br /&gt;        'http://feeds.feedburner.com/jQueryHowto'];  &lt;br /&gt; var isXml = true;  &lt;br /&gt; function loadXml() {  &lt;br /&gt;   var index = Math.floor(Math.random()*strArr.length);  &lt;br /&gt;   getJsonData(strArr[index],'targetDiv');  &lt;br /&gt; }  &lt;br /&gt; //loadXml();  &lt;br /&gt; function getJsonData(dataSource, divId) {  &lt;br /&gt;   $.jGFeed(dataSource,  &lt;br /&gt;   function(feeds) {  &lt;br /&gt;     if (!feeds) {  &lt;br /&gt;       alert('there was an error');  &lt;br /&gt;     }  &lt;br /&gt;     var html = "";  &lt;br /&gt;     for (var i=0;i&amp;lt;feeds.entries.length;i++) {  &lt;br /&gt;       var entry = feeds.entries[i];  &lt;br /&gt;       var title = entry.title;  &lt;br /&gt;       var link = entry.link;  &lt;br /&gt;       var description = entry.contentSnippet;  &lt;br /&gt;       var pubDate = entry.publishedDate;  &lt;br /&gt;       html += "&amp;lt;div class='entry'&amp;gt;&amp;lt;h4 class='postTitle'&amp;gt;&amp;lt;a class='fancy block' href='" + link + "' target='_blank'&amp;gt;" + title + "&amp;lt;/a&amp;gt;&amp;lt;/h4&amp;gt;";  &lt;br /&gt;       // html += "&amp;lt;em class='date'&amp;gt;" + pubDate + "&amp;lt;/em&amp;gt;";  &lt;br /&gt;       var categories = " Lables : ";  &lt;br /&gt;       if (entry.categories &amp;amp;&amp;amp; entry.categories.length&amp;gt;0) {  &lt;br /&gt;         categories += entry.categories[0];  &lt;br /&gt;         for (var j=1;j&amp;lt;entry.categories.length;j++) {  &lt;br /&gt;           categories +=", " +entry.categories[j];  &lt;br /&gt;         }  &lt;br /&gt;         html += "&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;"+categories+"&amp;lt;/b&amp;gt;&amp;lt;/p&amp;gt;";  &lt;br /&gt;       }  &lt;br /&gt;       html += "&amp;lt;p class='description'&amp;gt;" + description + "&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;";  &lt;br /&gt;     }  &lt;br /&gt;     var btn = "&amp;lt;input type='button' value='Reload' onclick='getJsonData(\""+dataSource +"\",\""+divId+"\");' /&amp;gt;&amp;lt;/br&amp;gt;";  &lt;br /&gt;     $('#'+divId).html(btn + html);  &lt;br /&gt;   },  &lt;br /&gt;   50);  &lt;br /&gt; }  &lt;br /&gt; function cleartDiv(divId) {  &lt;br /&gt;   var obj = document.getElementById(divId);  &lt;br /&gt;   if (obj) {  &lt;br /&gt;     //obj.style.display = 'none';  &lt;br /&gt;     obj.innerHTML="";  &lt;br /&gt;   }  &lt;br /&gt; }  &lt;br /&gt; function getNewData(url,divId) {  &lt;br /&gt;   if (url!=0) {  &lt;br /&gt;     if (!url) {  &lt;br /&gt;       var index = Math.floor(Math.random()*strArr.length);  &lt;br /&gt;       getJsonData(strArr[index],divId);  &lt;br /&gt;     } else {  &lt;br /&gt;       getJsonData(url,divId);  &lt;br /&gt;     }  &lt;br /&gt;   }  &lt;br /&gt; }  &lt;br /&gt; //window.setInterval("getNewData()", 7000); // update the data every 20 mins  &lt;br /&gt; //]]&amp;gt;  &lt;br /&gt; &amp;lt;/script&amp;gt;  &lt;br /&gt; &amp;lt;/head&amp;gt;  &lt;br /&gt; &amp;lt;body onload="getNewData('http://www.videohelp.com/rss/tools','targetDiv');"&amp;gt;  &lt;br /&gt;     &amp;lt;select onchange="javascript:getNewData(this.options[this.selectedIndex].value,'targetDiv');" size="9" style="width:25%;"&amp;gt;  &lt;br /&gt;         &amp;lt;option value='0' selected="selected"&amp;gt;Please Select&amp;lt;/option&amp;gt;  &lt;br /&gt;         &amp;lt;option value='http://www.thinkdigit.com/forum/external.php?type=RSS'&amp;gt;ThinkDigit.com&amp;lt;/option&amp;gt;  &lt;br /&gt;         &amp;lt;option value='http://www.snapfiles.com/feeds/sf20fw.xml'&amp;gt;SnapFiles.com&amp;lt;/option&amp;gt;  &lt;br /&gt;         &amp;lt;option value='http://www.articlecity.com/xml/main.xml'&amp;gt;ArticleCity.com&amp;lt;/option&amp;gt;  &lt;br /&gt;         &amp;lt;option value='http://www.download.com/3410-2001-0-10.xml'&amp;gt;Download.com populars&amp;lt;/option&amp;gt;  &lt;br /&gt;         &amp;lt;option value='http://www.download.com/3412-2001-0-10.xml'&amp;gt;Download.com New&amp;lt;/option&amp;gt;  &lt;br /&gt;         &amp;lt;option value='http://www.download.com/3412-2003-0-25.xml'&amp;gt;Download.com 25 New Titles&amp;lt;/option&amp;gt;  &lt;br /&gt;         &amp;lt;option value='http://feeds.feedburner.com/Techdudes'&amp;gt;TechDudes&amp;lt;/option&amp;gt;  &lt;br /&gt;     &amp;lt;/select&amp;gt;  &lt;br /&gt;     &amp;lt;div id="linkDiv" style="width:98%;height:25px;overflow:auto;"/&amp;gt;  &lt;br /&gt;     &amp;lt;div id="targetDiv" style="border:dashed 1px;background:#fafafa;width:70%;height:450px;overflow:auto;font-family:verdana;font-size:10px;"/&amp;gt;  &lt;br /&gt; &amp;lt;/body&amp;gt;  &lt;br /&gt; &amp;lt;/html&amp;gt;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&amp;nbsp;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;jGFeed: &lt;a href="http://plugins.jquery.com/project/jgfeed"&gt;http://plugins.jquery.com/project/jgfeed&lt;/a&gt; &lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-1457165095462666727?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/1457165095462666727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=1457165095462666727&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/1457165095462666727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/1457165095462666727'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/06/javascript-ajax-rss-feed-reader-using.html' title='Javascript-ajax RSS feed reader - using jQuery with jGFeed ...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-3041050156172044032</id><published>2010-06-02T14:50:00.000+05:30</published><updated>2010-06-02T14:50:09.893+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='JQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>jQuery - usage of $.bind method...</title><content type='html'>&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;jQuery is widely used javascript library which provides easy ways to do complex things. By using simple Javscript, it takes too much time to code it, but jQuery simple it down to few lines.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;To check multiple Checkboxes, i have written the following code.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt; &amp;lt;script type="text/javascript" src="html/js/jquery.js"&amp;gt;&amp;lt;/script&amp;gt;  &lt;br /&gt; &amp;lt;script type="text/javascript"&amp;gt;  &lt;br /&gt; //on load, register events for checkboxes...  &lt;br /&gt; $(document).ready(  &lt;br /&gt;      function() {       &lt;br /&gt;           $('#chk_all').change(checkAll);            &lt;br /&gt;           $('form[@name="fm"] input:checkbox[@name!="chk_all"]').each (function(index) {  &lt;br /&gt;                $(this).change(selectForDelete);  &lt;br /&gt;           });  &lt;br /&gt;      }  &lt;br /&gt; );  &lt;br /&gt; function checkAll(){  &lt;br /&gt;      var isCheck = this.checked;  &lt;br /&gt;      $('form[@name="fm"] input:checkbox[@name!="chk_all"]').each(function(){  &lt;br /&gt;           this.checked = isCheck;  &lt;br /&gt;           $(this).trigger("change");  &lt;br /&gt;      });  &lt;br /&gt; }  &lt;br /&gt; function selectForDelete(){  &lt;br /&gt;      var alertIdsObj = $('form[@name="fm"] input[@name="deleteIds"]');  &lt;br /&gt;      if (this.checked) {  &lt;br /&gt;           if (alertIdsObj.val().indexOf(this.value)==-1) {  &lt;br /&gt;                if(alertIdsObj.val()=='') {  &lt;br /&gt;                     alertIdsObj.val(''+this.value);  &lt;br /&gt;                } else {  &lt;br /&gt;                     alertIdsObj.val(alertIdsObj.val()+","+this.value);  &lt;br /&gt;                }  &lt;br /&gt;           }  &lt;br /&gt;      } else {  &lt;br /&gt;           if (alertIdsObj.val().indexOf(this.value)&amp;gt;=0) {  &lt;br /&gt;                alertIdsObj.val(alertIdsObj.val().replace(this.value+',',''));  &lt;br /&gt;                alertIdsObj.val(alertIdsObj.val().replace(','+this.value,''));  &lt;br /&gt;                alertIdsObj.val(alertIdsObj.val().replace(this.value,''));  &lt;br /&gt;           }  &lt;br /&gt;      }  &lt;br /&gt; }  &lt;br /&gt; //Function called for item details...  &lt;br /&gt; function viewAlertDetails(alertId) {  &lt;br /&gt;           $.ajax({  &lt;br /&gt;            type: 'POST',  &lt;br /&gt;            url: getUrl()+"&amp;amp;alertId="+alertId+"&amp;amp;cmd=detailed-market-alerts",  &lt;br /&gt;            data: {},                                           &lt;br /&gt;            success: function(returnData) {  &lt;br /&gt;                 $('#-mainDiv').hide();  &lt;br /&gt;                 $('#-detailsDiv').html(returnData);  &lt;br /&gt;                 $('#-detailsDiv').show();       &lt;br /&gt;            }  &lt;br /&gt;           });       &lt;br /&gt; }  &lt;br /&gt; function getUrl() {  &lt;br /&gt;      var url = new String(document.location);  &lt;br /&gt;      var index = url.indexOf("?");  &lt;br /&gt;      if (index!=-1) {  &lt;br /&gt;           url = url.substring(0,index);  &lt;br /&gt;      }  &lt;br /&gt;      return url;  &lt;br /&gt; }  &lt;br /&gt; //function called from second page to go back to first page with latest data...  &lt;br /&gt; //Repalces the old content with new  &lt;br /&gt; function viewAlerts() {  &lt;br /&gt;      $.ajax({  &lt;br /&gt;            type: 'POST',  &lt;br /&gt;            url: getUrl(),  &lt;br /&gt;            data: {},                                           &lt;br /&gt;            success: function(returnData) {       &lt;br /&gt;                var myData = $(returnData).find('#-mainDiv').html();  &lt;br /&gt;                $('#-mainDiv').html(myData);  &lt;br /&gt;                $('#chk_all').bind('change', checkAll);  &lt;br /&gt;                $('form[@name="fm"] input:checkbox[@name!="chk_all"]').each (function(index) {            &lt;br /&gt;                     $(this).bind('change',selectForDelete);            &lt;br /&gt;                });  &lt;br /&gt;                $('#-detailsDiv').html("");  &lt;br /&gt;                $('#-detailsDiv').hide();  &lt;br /&gt;                $('#-mainDiv').show();  &lt;br /&gt;                return true;  &lt;br /&gt;            }  &lt;br /&gt;           });       &lt;br /&gt;      return false;  &lt;br /&gt; }  &lt;br /&gt; &amp;lt;/script&amp;gt;  &lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;The flow is as below,&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;- First page shows list of data.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;- By clicking particular item from the list, i hides the &lt;incode&gt;mainDiv&lt;/incode&gt; and shows details of the item in &lt;incode&gt;detailsDiv&lt;/incode&gt; using &lt;incode&gt;$.ajax&lt;/incode&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;- By clicking "Back" button from &lt;incode&gt;detailsDiv&lt;/incode&gt;, i again loads the main page using &lt;incode&gt;$.ajax&lt;/incode&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;The problem is, when i go to second page and comes on the first page using &lt;incode&gt;$.ajax&lt;/incode&gt;,i change the HTML content of &lt;incode&gt;mainDiv&lt;/incode&gt; with the latest data in &lt;incode&gt;viewAlerts()&lt;/incode&gt; javascript function as &lt;incode&gt;$('#-mainDiv').html(myData);&lt;/incode&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;If you check the script, you will notice that i have registered the event handling for checkboxes in the document,One for main checkbox and one for all other checkboxes of the list, using &lt;incode&gt;$(document).ready()&lt;/incode&gt; jQuery function. Event handling works fine at first page. But when we change the html content of the div afterwards, event handler automatically removed.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;So to re-enable the events on checkboxes,we need to use following code in &lt;incode&gt;viewAlerts()&lt;/incode&gt; javascript function.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;code&gt; $('#chk_all').bind('change', checkAll);  &lt;br /&gt; $('form[@name="fm"] input:checkbox[@name!="chk_all"]').each (function(index) {  &lt;br /&gt;      $(this).bind('change',selectForDelete);            &lt;br /&gt; });  &lt;/code&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;incode&gt;$(jQueryDomObj).bind(eventName,function)&lt;/incode&gt; is very useful if you want to manipulate the element contents using javascript.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-3041050156172044032?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/3041050156172044032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=3041050156172044032&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/3041050156172044032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/3041050156172044032'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/06/jquery-usage-of-bind-method.html' title='jQuery - usage of $.bind method...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-57242552580946467</id><published>2010-06-01T21:40:00.000+05:30</published><updated>2010-06-01T21:40:17.965+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><title type='text'>HibernateDaoSupport with HibernateTemplate - defaultAutoCommit set false...</title><content type='html'>I am working on a web application which needs hibernate for DB integration. So i decided to use hibernate with spring. As we all know that Spring is very lightweight and supports hibernate in an easy way. Also i am used to spring &lt;incode&gt;JdbcDaoSupport&lt;/incode&gt; for DB integration and &lt;incode&gt;StoredProcedure&lt;/incode&gt; class for SQL Server stored procedures.&lt;br /&gt;&lt;br /&gt;While working this time i decided to use &lt;incode&gt;HibernateDaoSupport&lt;/incode&gt;. Your &lt;incode&gt;DAO&lt;/incode&gt; class must extend this class to use &lt;incode&gt;HibernateTemplate&lt;/incode&gt; class.&lt;br /&gt;&lt;br /&gt;Steps to make &lt;incode&gt;DAO&lt;/incode&gt; using this,&lt;br /&gt;&lt;br /&gt;- Extend &lt;incode&gt;HibernateDaoSupport&lt;/incode&gt; and also an interface if you have.&lt;br /&gt;- Define your methods which provides different Database operations (CREATE, DELETE, FETCH, UPDATE, INSERT etc...) &lt;br /&gt;- Define required beans as below,&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt; &amp;lt;bean id="dataSource"  &lt;br /&gt; class="org.apache.commons.dbcp.BasicDataSource"&amp;gt;  &lt;br /&gt;  &amp;lt;property name="driverClassName"&amp;gt;  &lt;br /&gt;   &amp;lt;value&amp;gt;com.mysql.jdbc.Driver&amp;lt;/value&amp;gt;  &lt;br /&gt;  &amp;lt;/property&amp;gt;  &lt;br /&gt;  &amp;lt;property name="url"&amp;gt;  &lt;br /&gt;   &amp;lt;value&amp;gt;jdbc:mysql://localhost/testdb&amp;lt;/value&amp;gt;  &lt;br /&gt;  &amp;lt;/property&amp;gt;  &lt;br /&gt;  &amp;lt;property name="username" value="username" /&amp;gt;  &lt;br /&gt;  &amp;lt;property name="password" value="passwordforit" /&amp;gt;  &lt;br /&gt;  &amp;lt;property name="defaultAutoCommit" value="true" /&amp;gt;  &lt;br /&gt;  &amp;lt;property name="defaultTransactionIsolation" value="2" /&amp;gt;  &lt;br /&gt;  &amp;lt;property name="maxActive" value="100" /&amp;gt;  &lt;br /&gt;  &amp;lt;property name="maxIdle" value="50" /&amp;gt;  &lt;br /&gt;  &amp;lt;property name="minIdle" value="50" /&amp;gt;  &lt;br /&gt;  &amp;lt;property name="maxWait" value="100" /&amp;gt;  &lt;br /&gt;  &amp;lt;property name="initialSize" value="20" /&amp;gt;  &lt;br /&gt; &amp;lt;/bean&amp;gt;  &lt;br /&gt; &amp;lt;!-- Database Property --&amp;gt;  &lt;br /&gt; &amp;lt;bean id="hibernateProperties"  &lt;br /&gt; class="org.springframework.beans.factory.config.PropertiesFactoryBean"&amp;gt;  &lt;br /&gt;  &amp;lt;property name="properties"&amp;gt;  &lt;br /&gt;   &amp;lt;props&amp;gt;  &lt;br /&gt;    &amp;lt;prop key="hibernate.hbm2ddl.auto"&amp;gt;update&amp;lt;/prop&amp;gt;  &lt;br /&gt;    &amp;lt;prop key="hibernate.dialect"&amp;gt;  &lt;br /&gt;    org.hibernate.dialect.MySQLDialect&amp;lt;/prop&amp;gt;  &lt;br /&gt;    &amp;lt;prop key="hibernate.show_sql"&amp;gt;true&amp;lt;/prop&amp;gt;  &lt;br /&gt;    &amp;lt;prop key="hibernate.cache.provider_class"&amp;gt;  &lt;br /&gt;    net.sf.ehcache.hibernate.EhCacheProvider&amp;lt;/prop&amp;gt;  &lt;br /&gt;   &amp;lt;/props&amp;gt;  &lt;br /&gt;  &amp;lt;/property&amp;gt;  &lt;br /&gt; &amp;lt;/bean&amp;gt;  &lt;br /&gt; &amp;lt;!-- Hibernate SessionFactory --&amp;gt;  &lt;br /&gt; &amp;lt;bean id="sessionFactory"  &lt;br /&gt; class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&amp;gt;  &lt;br /&gt;  &amp;lt;property name="dataSource"&amp;gt;  &lt;br /&gt;   &amp;lt;ref local="dataSource" /&amp;gt;  &lt;br /&gt;  &amp;lt;/property&amp;gt;  &lt;br /&gt;  &amp;lt;property name="hibernateProperties"&amp;gt;  &lt;br /&gt;   &amp;lt;ref bean="hibernateProperties" /&amp;gt;  &lt;br /&gt;  &amp;lt;/property&amp;gt;  &lt;br /&gt;  &amp;lt;!-- OR mapping files. --&amp;gt;  &lt;br /&gt;  &amp;lt;property name="mappingResources"&amp;gt;  &lt;br /&gt;   &amp;lt;list&amp;gt;  &lt;br /&gt;    &amp;lt;value&amp;gt;myMapping.hbm.xml&amp;lt;/value&amp;gt;  &lt;br /&gt;   &amp;lt;/list&amp;gt;  &lt;br /&gt;  &amp;lt;/property&amp;gt;  &lt;br /&gt; &amp;lt;/bean&amp;gt;  &lt;br /&gt; &amp;lt;bean id="MyDAOTarget" class="com.dao.MyDAO"&amp;gt;  &lt;br /&gt;  &amp;lt;property name="sessionFactory"&amp;gt;  &lt;br /&gt;   &amp;lt;ref bean="sessionFactory" /&amp;gt;  &lt;br /&gt;  &amp;lt;/property&amp;gt;  &lt;br /&gt; &amp;lt;/bean&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;- Define transactionManager for transaction managment as below,&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt; &amp;lt;bean id="transactionManager"  &lt;br /&gt; class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&amp;gt;  &lt;br /&gt;  &amp;lt;property name="dataSource"&amp;gt;  &lt;br /&gt;   &amp;lt;ref bean="dataSource" /&amp;gt;  &lt;br /&gt;  &amp;lt;/property&amp;gt;  &lt;br /&gt; &amp;lt;/bean&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;- Define &lt;incode&gt;org.springframework.transaction.interceptor.TransactionProxyFactoryBean&lt;/incode&gt; as below, which will eventually make proxy bean on the class given in &lt;incode&gt;target&lt;/incode&gt; property.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt; &amp;lt;bean id="MyDAO" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&amp;gt;   &lt;br /&gt;   &amp;lt;property name="transactionManager"&amp;gt;   &lt;br /&gt;     &amp;lt;ref bean="transactionManager"/&amp;gt;  &lt;br /&gt;   &amp;lt;/property&amp;gt;   &lt;br /&gt;   &amp;lt;property name="target"&amp;gt;   &lt;br /&gt;     &amp;lt;ref bean="MyDAOTarget"/&amp;gt;  &lt;br /&gt;   &amp;lt;/property&amp;gt;   &lt;br /&gt;   &amp;lt;property name="transactionAttributes"&amp;gt;  &lt;br /&gt;     &amp;lt;props&amp;gt;   &lt;br /&gt;       &amp;lt;prop key="insert*"&amp;gt;PROPAGATION_REQUIRED, ISOLATION_READ_COMMITTED&amp;lt;/prop&amp;gt;  &lt;br /&gt;       &amp;lt;prop key="update*"&amp;gt;PROPAGATION_REQUIRED, ISOLATION_READ_COMMITTED&amp;lt;/prop&amp;gt;   &lt;br /&gt;       &amp;lt;prop key="delete*"&amp;gt;PROPAGATION_REQUIRED, ISOLATION_READ_COMMITTED&amp;lt;/prop&amp;gt;  &lt;br /&gt;       &amp;lt;prop key="find*"&amp;gt;PROPAGATION_REQUIRED, ISOLATION_READ_COMMITTED, readOnly&amp;lt;/prop&amp;gt;   &lt;br /&gt;     &amp;lt;/props&amp;gt;   &lt;br /&gt;   &amp;lt;/property&amp;gt;  &lt;br /&gt; &amp;lt;/bean&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;- Use &lt;incode&gt;getHibernateTemplate().get(Class entityClass,Serializable id)&lt;/incode&gt; OR &lt;incode&gt;getHibernateTemplate().load(Class entityClass,Serializable id)&lt;/incode&gt; to load particular enoty from Database.&lt;br /&gt;- Use &lt;incode&gt;getHibernateTemplate().find(String queryString,Object value)&lt;/incode&gt; to find entities using HQL/SQL query.&lt;br /&gt;- Use &lt;incode&gt;getHibernateTemplate().delete()&lt;/incode&gt;, &lt;incode&gt;getHibernateTemplate().deleteAll()&lt;/incode&gt; for removing entities from Database.&lt;br /&gt;- Use &lt;incode&gt;getHibernateTemplate().update()&lt;/incode&gt; OR &lt;incode&gt;getHibernateTemplate().saveOrUpdate()&lt;/incode&gt; for updating/inserting entity in the Database.&lt;br /&gt;&lt;br /&gt;It seems so easy right? But no, wait! All these works fine when you have &lt;incode&gt; &amp;lt;property name="defaultAutoCommit" value="true" /&amp;gt; &lt;/incode&gt;. When you change this property to false, all updates to database will not take effect. Because in that case we need to begin and commit transaction form the code.&lt;br /&gt;&lt;br /&gt;I have tried using &lt;incode&gt;getHibernateTemplate()&lt;/incode&gt; for update operations but it failed. It doesn't work with transactions. So try as per the following method.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt; public void updateMyObj(MyObj myObj) {  &lt;br /&gt;   Session session = getSession(true);// true means allow create new session if required.  &lt;br /&gt;   Transaction trans = session.beginTransaction();  &lt;br /&gt;   session.saveOrUpdate(myObj);  &lt;br /&gt;   trans.commit();  &lt;br /&gt; }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Same thing works for any update operation. This is really strange, i tried for one whole day using &lt;incode&gt;getHibernateTemplate()&lt;/incode&gt; but it never worked with &lt;incode&gt;&amp;lt;property name="defaultAutoCommit" value="false" /&amp;gt;&lt;/incode&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-57242552580946467?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/57242552580946467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=57242552580946467&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/57242552580946467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/57242552580946467'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/06/hibernatedaosupport-with.html' title='HibernateDaoSupport with HibernateTemplate - defaultAutoCommit set false...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-9194443120224780751</id><published>2010-05-27T22:18:00.001+05:30</published><updated>2010-05-27T22:24:31.476+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Wildcards'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Java Wildcards Vs. Generics...</title><content type='html'>I have never used wildcards in java until i read this. &lt;br /&gt;&lt;br /&gt;Let's say I have a super class &lt;incode&gt;Vehicle&lt;/incode&gt; and few sub classes like &lt;incode&gt;Scooter&lt;/incode&gt;, &lt;incode&gt;Bike&lt;/incode&gt;, &lt;incode&gt;Car&lt;/incode&gt;, etc... Now I need to have a list of vehicles, my first thought would be something like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt; List&amp;lt;Vehicle&amp;gt; lstVehicles;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Instead, some people are recommending something like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt; List&amp;lt;? extends Vehicle&amp;gt; lstVehicles;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Why should I use wildcards instead of simple generics?&lt;br /&gt;&lt;br /&gt;Because Java generics are invariant.&lt;br /&gt;&lt;br /&gt;Suppose we have B extends A:&lt;br /&gt;&lt;br /&gt;* B is a subtype of A&lt;br /&gt;* an &lt;incode&gt;instanceof B&lt;/incode&gt; is also an &lt;incode&gt;instanceof A&lt;/incode&gt;&lt;br /&gt;&lt;br /&gt;Since Java arrays are covariant:&lt;br /&gt;&lt;br /&gt;* &lt;incode&gt;B[]&lt;/incode&gt; is a subtype of &lt;incode&gt;A[]&lt;/incode&gt;&lt;br /&gt;* an &lt;incode&gt;instanceof B[]&lt;/incode&gt; is also an &lt;incode&gt;instanceof A[]&lt;/incode&gt;&lt;br /&gt;&lt;br /&gt;However, Java generics are invariant:&lt;br /&gt;&lt;br /&gt;* &lt;incode&gt;List&amp;lt;B&amp;gt;&lt;/incode&gt; is NOT a subtype of &lt;incode&gt;List&amp;lt;A&amp;gt;&lt;/incode&gt;&lt;br /&gt;* a &lt;incode&gt;instanceof List&amp;lt;B&amp;gt;&lt;/incode&gt; is NOT an &lt;incode&gt;instanceof List&amp;lt;A&amp;gt;&lt;/incode&gt;.&lt;br /&gt;&lt;br /&gt;Wildcards are used to make it more flexible while preserving type safety.&lt;br /&gt;&lt;br /&gt;* &lt;br /&gt;&lt;incode&gt;List&amp;lt;B&amp;gt;&lt;/incode&gt; is a &lt;incode&gt;List&amp;lt;? extends A&amp;gt;&amp;nbsp;&lt;/incode&gt;&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/extra/generics/wildcards.html"&gt;Wildcards&lt;/a&gt; &lt;br /&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/extra/generics/index.html"&gt;Generics&lt;/a&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/extra/generics/subtype.html"&gt;Generics and subtyping&lt;/a&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/extra/generics/morefun.html"&gt;More fun with wildcards&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-9194443120224780751?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/9194443120224780751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=9194443120224780751&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/9194443120224780751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/9194443120224780751'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/05/java-wildcards-vs-generics.html' title='Java Wildcards Vs. Generics...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-1640257798806981992</id><published>2010-05-21T15:50:00.004+05:30</published><updated>2010-05-22T19:45:11.446+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Java String manipulation: Appending empty string to 'var.subString(x,y)' saves memory...</title><content type='html'>&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Verdana,sans-serif; font-size: small;"&gt;In java usually we do SubString operation as follows.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; String strMainData = "Some long String..." ;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; String strSub= strMainData.subString(i,j); // Where i and j are index values...&lt;/code&gt;&lt;/pre&gt;&lt;span style="font-family: Verdana,sans-serif; font-size: small;"&gt;&lt;br /&gt;This operation will keep the reference to same object strMainData,but only returns smaller string as per the indexes. So it uses same memory as the original String.&lt;br /&gt;&lt;br /&gt;We should use it as follows.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; String strSub = new String(strMainData.subString(i,j));&lt;/code&gt;&lt;/pre&gt;&lt;span style="font-family: Verdana,sans-serif; font-size: small;"&gt;OR&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; String strSub = strMainData.subString(i,j) +"";&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-family: Verdana,sans-serif; font-size: small;"&gt;This will only keep the reference to new smaller String and removes reference to original String variable.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-family: Verdana,sans-serif; font-size: small;"&gt;&lt;span style="font-size: small;"&gt;More @ &lt;a href="http://stackoverflow.com/questions/2147783/why-does-appending-to-a-string-save-memory"&gt;StackOverflow&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: Verdana,sans-serif; font-size: small;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-1640257798806981992?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/1640257798806981992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=1640257798806981992&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/1640257798806981992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/1640257798806981992'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/05/java-string-manipulation-appending.html' title='Java String manipulation: Appending empty string to &apos;var.subString(x,y)&apos; saves memory...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-4377840334972646881</id><published>2010-05-21T15:14:00.002+05:30</published><updated>2010-05-22T19:41:25.572+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Singleton refactored:Initialization on demand holder idiom...</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Hey guys, check this out. I found this while searching around different styles for singleton pattern. It basically provides on demand loading of the instance.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;public class Something {&lt;br /&gt;&amp;nbsp;private Something() {&lt;br /&gt;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;private static class LazyHolder {&lt;br /&gt;&amp;nbsp; private static final Something INSTANCE = new Something();&lt;br /&gt;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;public static Something getInstance() {&lt;br /&gt;&amp;nbsp; return LazyHolder.INSTANCE;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The static class LazyHolder is only executed when the static method getInstance is invoked on the class Something, and the first time this happens the JVM will load and initialize the LazyHolder class. The initialization of the LazyHolder class results in static variable INSTANCE being initialized by executing the (private) constructor for the outer class Something.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;More @ &lt;a href="http://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom"&gt;Wiki&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-4377840334972646881?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/4377840334972646881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=4377840334972646881&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/4377840334972646881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/4377840334972646881'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/05/singleton-refactoredinitialization-on.html' title='Singleton refactored:Initialization on demand holder idiom...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-7304197019118293965</id><published>2010-05-21T06:50:00.000+05:30</published><updated>2010-05-21T06:50:00.186+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Hibernate'/><title type='text'>Hibernate : One-to-many Parent-Child relationships...</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Hibernate is quite good ORM framework. When we need one-to-many relationship in hibernate, we need to take &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;ArrayList&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt; or &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Set&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;. If the structure is kind of tree, then hibernate can perform wired if not properly tweaked.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Basically if you are having some sort of many to one relationships  structure from child to parent. In hibernate all depends on mapping. Tweak your mapping, Use One-to-many  relationship from parent to child using &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;java.util.Set&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Do not use &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;ArrayList&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt; because List is ordered, so hibernate will add  extra column for that ordering only.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Also check your &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;lazy&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt; property. If you load parent and you have set  &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;lazy="false"&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt; on its child set property (variable which is of type Set), then all of its children will be  loaded from DB which can affect the performance.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;Also check &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;'inverse'&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt; property for children. If inverse is true in  child table, that means you can manage the child entity separately.  Otherwise you have to do that using the parent only.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-7304197019118293965?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/7304197019118293965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=7304197019118293965&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/7304197019118293965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/7304197019118293965'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/05/hibernate-one-to-many-parent-child.html' title='Hibernate : One-to-many Parent-Child relationships...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-8837740683378371242</id><published>2010-05-20T17:00:00.002+05:30</published><updated>2010-05-22T19:42:09.268+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Service'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Networking'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>AXIS2 web service client - without sub/proxy ...</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;This article is regarding how to call an web service without modifying the client each time for diff. web service OR method call. Basically we use stub/proxy classes for diff. web service method calls using Axis2, but internelly it calls using XML SOAP envelopes. So, we can direcftly convert the client to use Axis2 API classes and provide an implementation which only needs to handle the response from the call. Response will be in XML format,so we need to fetch data from XML. We can covnert XML into Pojos using Castor or JAXB libs.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;You can directly use ServiceClient class to call web service, which provides call using XML only and returns XML response. For different methods of web service, you have to convert the XML response to some java POJO to use it. Only Response handling needs to be done at your end. that you can do like from XML to Map etc...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;So you won't need any other stub classes to call any web service, only needs to handle response XML or converted POJO. &lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;This is the way you don't need to modify your client every time for diff. web services. You can develop like providing a response handler to client externally. So that for every different web service you will have diff. response handler class which is implementation of you interface.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;//common interface for response handlers...&lt;br /&gt;//implement this for diff. web service/methods&lt;br /&gt;&lt;br /&gt;public interface WSRespHandler{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Object getMeResp(Object respData);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//pass particular handler to client when you call some WS&lt;br /&gt;public class WebServiceClient {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Object getResp(WSRespHandler respHandler) {&lt;br /&gt;&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; return repHandler.getMeResp(xmlData);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;References:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation-on-the-Client-Side.htm&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif; text-align: justify;"&gt;&lt;span style="font-size: small;"&gt;http://www.devdaily.com/blog/post/java/java-web-service-client-read-array-list/&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-8837740683378371242?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/8837740683378371242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=8837740683378371242&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/8837740683378371242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/8837740683378371242'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/05/axis2-web-service-client-without.html' title='AXIS2 web service client - without sub/proxy ...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-5685758507726628234</id><published>2010-05-20T13:43:00.004+05:30</published><updated>2010-05-27T22:22:36.587+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Facebook integration in your web application...</title><content type='html'>This is not regarding only java, you can do this on any web application in different languages also.&lt;br /&gt;&lt;br /&gt;Facebook is getting popular now a days. Almost every site has facebook login enabled, so that if the user has facebook account he can login using that and can use the site as a registered user. For this the user must allow the site to use his facebook user data (Friends list, profile details etc...). Facebook provides different set of APIs to do such integration with your site.&lt;br /&gt;&amp;nbsp; &lt;br /&gt;It basically provides different client APIs which are based on different technologies lke PHP, Java, Javascript etc.. Here i will show you how to integrate facebook only using javascript API, which is the best way to do this.&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1. First step is, you have to include the javascript from FB as follows.&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;script type="text/javascript"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. You have to init the Facebook JS library with you facebook API key and provide the XDReceiver url. XDReceiver.htm is provided by facebook which is to be uploaded on you server to handle the callback to Facebook's javascript functions. It will store facebook cookies on your server so that you can access the facebook session in your site to fetch facebook data for the logged in user.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FB.init("myApiKey","/html/xd_receiver.htm", {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "doNotUseCachedConnectState" : false&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,"reloadIfSessionStateChanged" : true&amp;nbsp;&amp;nbsp;&amp;nbsp; //Reloads the page if user logs in OR out&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,"ifUserConnected" : showFacebookInviteLink()&amp;nbsp;&amp;nbsp;&amp;nbsp; //Is user connects to FB, executes the provided JS function&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; });&lt;/code&gt;&lt;/pre&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3. Now you need to call function which will provide the facebook login popup for user. User can login into facebook and then allows the application to use his/her data.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FB.Connect.requireSession(); // This will give the popup to login&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;&amp;nbsp; // This will check if FB is initiated with application key and user logged in or not. On user session, it will executes the function.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FB.ensureInit(function() {&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; FB.Facebook.get_sessionState().waitUntilReady(&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; function() {&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; &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; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;/code&gt;&lt;/pre&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4. To logout from Facebook, you just need to call JS function &lt;incode&gt;FB.Connect.logout();&lt;/incode&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Now you can access different functions of the FB JS library to acces any data it supports to use on your site/application having session initiated.I will show how to show invite friends popup dialog on your site/application. Call the below function on invite button/link click event.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function inviteFacebookFriends() {&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; FB.ensureInit(function() {&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; FB.Facebook.get_sessionState().waitUntilReady(&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; function() { //on Connect succes&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; var fbml = "";&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; fbml = '&amp;lt;fb:fbml&amp;gt;\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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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;fb:request-form\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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Redirect back to this page&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + ' action="'+document.location+'"\n'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + ' method="POST"\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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + ' invite="true"\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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + ' type="app test invite"\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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + ' content="app test inviting...\n'&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + ' label=\'Join me!\' /&amp;gt;"\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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + '&amp;gt;\n'&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;&amp;nbsp;&amp;nbsp;&amp;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;fb:multi-friend-selector\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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + ' rows="2"\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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + ' cols="4"\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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + ' bypass="Cancel"\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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + ' showborder="false"\n'&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + ' exclude_ids="excludeIds"\n'&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; + ' actiontext="Use this form to invite your friends to connect to my site."/&amp;gt;\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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;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;/fb:request-form&amp;gt;' + ' &amp;lt;/fb:fbml&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; &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; var dialog = new FB.UI.FBMLPopupDialog("Invite Friends To This Site",fbml);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dialog.setContentWidth(650);&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; //dialog.setContentHeight(450);&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; dialog.show();&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; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/code&gt;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;Thats it! This will show the standard popup dialog for friends invitation. Basically this FBMl will be rendered by facebook js API.Now user can select any of his friends and send them invitation to join your site. Let me know if you have any queries OR problems, will try to help around.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-5685758507726628234?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/5685758507726628234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=5685758507726628234&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/5685758507726628234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/5685758507726628234'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2010/05/facebook-integration-in-your-web.html' title='Facebook integration in your web application...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-4201646306837247931</id><published>2009-03-15T00:27:00.000+05:30</published><updated>2009-03-15T00:32:01.617+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Telnet Client part 2 - using Apache net implementation...</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;I have shown Telnet client using socket programming which is my own logic.But Apache has already done this for us in their Net package which is freely available to download.So we can use that &lt;span style="font-weight: bold;"&gt;org.apache.commons.net.telnet.TelnetClient&lt;/span&gt; class for using telnet connection.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Its a very simple class.You can download its source and can figure out what they have done. Though i will show simple usage for it. &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;blockquote style="color: rgb(0, 153, 0);"&gt;&lt;code&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;TelnetClient tc = new TelnetClient();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;tc.connect("localhost", 23);&lt;/span&gt;&lt;code&gt;&lt;/code&gt;&lt;/code&gt;&lt;/blockquote&gt; Then you can register a listener thread to get response from the telnet connection shown above. For full examples, check out &lt;a href="http://www.java2s.com/Code/Java/Network-Protocol/ExampleofuseofTelnetClient.htm"&gt;java2s&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Its nothing new, but a good implementation what we understood so far.&lt;br /&gt;If you want totally command prompt like session for telnet, then you must wait for response from execution of the given command.Then only the next command will be sent over, as we do in DOS/Terminal.So for that we must have a logic which check the input stream and receives response.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-4201646306837247931?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/4201646306837247931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=4201646306837247931&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/4201646306837247931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/4201646306837247931'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2009/03/telnet-client-part-2-using-apache-net.html' title='Telnet Client part 2 - using Apache net implementation...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-781248266437559417</id><published>2008-12-20T13:20:00.000+05:30</published><updated>2008-12-19T23:45:06.436+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Networking'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Telnet client with java...</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Telnet is very important utiliy we use.We can call remote server commands and use different services running on perticular port.Mostly telnet server runs on 23,but can be differed .&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Through java, if we want to make remote connection over some port then we have two different ways.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;1. Use windows/linux telnet command line utility (which is same on both win and linux... :).)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;OR&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;2. Use socket programming using java.net package.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;In first way, we need to get hands on the process.We can achieve that using &lt;blockquote&gt;&lt;code&gt;Process p = Runtime.getRuntime().exec(&amp;lt;system command or exe path&gt;)&lt;/code&gt;&lt;/blockquote&gt;But i don't think this should be used for telnet like communication,because telnet requires continuous session running on remote server and executing you commands.Sometimes it can be so that after executing several commands,you need to rollback so you can cancle all the commands.so its a continuous and sequential process most of the times.The Process class used can be out of our hands anytime if the executable crashes or if anything bad happen(Mostly..the exe crash...).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;So, we have another,'Socket' way here, which connects to perticular host on given port number and try to open TCP connection with it.If the host is listening on port and connection accepted,then we can send our commands to the host.(I know, i know, that we all know sockets since our starting graduation days :) ,but let me tell guys... ).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;There are two ways to make a telnet client using Sockets.&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;1.Make it CLI based,means which accepts every input from Command Line Interface entered by user.&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;2.Make it automated,which takes command list from some file or database,generates a script or list of commands and run it whole on host.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;First one is quite easy,i think you all might have done that :).Just let me tell you little what to do...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;1.CLI based Telnet...&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;/span&gt;&lt;blockquote  style="font-family:verdana;"&gt;&lt;code&gt;&lt;span style="font-size:85%;"&gt;Socket soc = new Socket(host,port);&lt;br /&gt;DataInputStream din=new DataInputStream(soc.getInputStream());&lt;br /&gt;PrintWriter dout = new PrintWriter(soc.getOutputStream(),true);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;BufferedReader br=new BufferedReader(new InputStreamReader(System.in));&lt;/span&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;See,we have taken InputStream of socket and made a PrintWriter on the OutputStreamof it to send commands.Also we have taken BufferedReader for user inputs from CL.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;...&lt;br /&gt;....&lt;br /&gt;&lt;br /&gt;do&lt;br /&gt;{&lt;br /&gt;char[] buffer = new char[8192];&lt;br /&gt;int mark = bReader.read(buffer);&lt;br /&gt;StringBuffer sb = null;&lt;br /&gt;for(int i=0;i&amp;lt;buffer.length;i++){&lt;br /&gt; char c = buffer[i];&lt;br /&gt; if(c!='\0'){        //To avoid null characters printed...&lt;br /&gt;  if(sb == null){&lt;br /&gt;   sb = new StringBuffer(buffer.length);&lt;br /&gt;  }&lt;br /&gt;  sb.append(c);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;System.out.print((sb!=null)?sb.toString():"-- No Response --");&lt;br /&gt;Command=br.readLine();  //takes commands from CL by user...&lt;br /&gt;if(!Command.equals("quit"))&lt;br /&gt;{&lt;br /&gt; dout.println(Command);&lt;br /&gt;}&lt;br /&gt;}while(!Command.equals("quit"));    //exit the loop if user sends 'quit'...&lt;br /&gt;...&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;This gives you same telnet as you got in your OS, so i think its simple but good to know :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;2.Automated Telnet...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;It will be almost same,except we will have a ArrayList/Array of commands in hand before we create Socket.And then change the loop onto the list to execute all the commands one after another...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;code&gt;int j=-1;&lt;br /&gt;String[] commands = new String[5];&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;....&lt;br /&gt;&lt;br /&gt;do&lt;br /&gt;{&lt;br /&gt;j++;&lt;br /&gt;char[] buffer = new char[8192];&lt;br /&gt;int mark = bReader.read(buffer);&lt;br /&gt;StringBuffer sb = null;&lt;br /&gt;for(int i=0;i&amp;lt;buffer.length;i++){&lt;br /&gt;char c = buffer[i];&lt;br /&gt;if(c!='\0'){//To avoid null characters printed...&lt;br /&gt; if(sb == null){&lt;br /&gt;  sb = new StringBuffer(buffer.length);&lt;br /&gt; }&lt;br /&gt; sb.append(c);&lt;br /&gt;}&lt;br /&gt;}  &lt;br /&gt;System.out.print((sb!=null)?sb.toString():"-- No Response --");&lt;br /&gt;Command = commands[j];&lt;br /&gt;if(Command==null || Command.length()&amp;lt;0)&lt;br /&gt;  break;&lt;br /&gt;dout.println(Command+"\n");&lt;br /&gt;}while(j&amp;lt;commands.length);&lt;br /&gt;...&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;So this will executes all commands in commands Array of String.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;So folks,this ends our telnet socket :).Same like this we can make client or scripts for FTP automation.It helps in real time situation when you need to make some jobs for backup,export/import files on remote host etc...Waiting for you responses...&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-781248266437559417?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/781248266437559417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=781248266437559417&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/781248266437559417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/781248266437559417'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/12/telnet-client-with-java.html' title='Telnet client with java...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-2584126809231571100</id><published>2008-12-17T22:53:00.000+05:30</published><updated>2008-12-17T22:58:41.967+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Freeware'/><category scheme='http://www.blogger.com/atom/ns#' term='Networking'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Snmp4J - Java library for SNMP Communication...</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;We all know that if we need to use more on socket programming in java then we must use native code in c++.SNMP (Simple network Management Protocol) is used for communication with the network devices.Any network device can be queried using SNMP request.Snmp4j is the library which provides you implementation to make SNMP requests.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;We can query any device (Switch,PC etc...) if it has a SNMP agent running,which will handle our SNMP request and respond with the proper data.This library made it so easy for us without looking into much details of SNMP.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;In basic,SNMP is used for getting information (GET requests),but sometimes it can be used to set values in the device (SET requests).Assume that every device has a list of pre-defined variables in it,which are called OID(Object IDs).These OIDs will have a specific structure (which is called MIB file,which seems like a tree structured as in registry).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;OID looks like 1.3.6.1.4.1.318.1.1.1.12.3.2.1.3.1, which has a special meaning.It has a description(name) and an associated value in it.When you query particular OID (i.e 1.3.6.1....),it will give its associated value.You can set its value also (if its allowed ;)).OIDs also have communities(Public,Private etc...) which shows permissions.Mostly public community is allowed to be viewed by SNMP requests.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;See the example below how to make a SNMP request,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;        &lt;/span&gt;&lt;blockquote style="color: rgb(0, 0, 153); font-family: courier new;"&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;import org.snmp4j.*;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;        ...&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;        ...&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;        OctetString communityName = new OctetString("public");  &lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;  String ipAddressUrl = strIpAddress+"/"+161; //161 is used for SNMP Agent...&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;  Address targetAddress = new UdpAddress(ipAddressUrl); &lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;  TransportMapping transport = new DefaultUdpTransportMapping();&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;  Snmp snmp = new Snmp(transport);&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;  snmp.listen();&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;  CommunityTarget target = new CommunityTarget();&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;  target.setAddress(targetAddress);&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;  target.setRetries(3);&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;  target.setTimeout(500);&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;  PDU pdu = new PDU();&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;        pdu.setType(PDU.GET);&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;        OID oid = new OID("1.3.6.1.2.1.1.");&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;        VariableBinding vb = new VariableBinding(oid);&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;        pdu.add(vb);&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;        ...&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;        ...&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:78%;" &gt;        snmp.send(pdu, target);&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;So the last line, snmp.send(pdu, target), will return the SNMP4j Response having the value for OID we set in the PDU.This is just the example of how to get any data from OID.We can set the values using SET PDU.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-2584126809231571100?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/2584126809231571100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=2584126809231571100&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/2584126809231571100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/2584126809231571100'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/12/snmp4j-java-library-for-snmp.html' title='Snmp4J - Java library for SNMP Communication...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-615117329614755183</id><published>2008-11-25T23:03:00.000+05:30</published><updated>2008-11-25T23:15:49.832+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Batch insert/update DB - Use XML as you data...</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Today we have many strange requirements because of latest developments in the IT market. We are having tons of data to be inserted in databases or files etc.Mainly for DB operation, we can use batch insert/update, which calls DB for multiple rows of params.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;This is not an excellent thing, but i think you should take care of this.Just think that if you are having 100 rows to be inserted in one table, and you make batch update call from you java code.How much time and resources it will take?We just can't answer this question.Yeah, we can't but we have different solution here.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Instead of making batch params data, you make and XML data using XSLT transformation or Castor mapping.We will see what these both things mean later. Today every Database server supports XML parameters as an input to Stored procedure/Function.You can pass your XML to the SP, and then handle the XML traversal logic inside the SP.You are done!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;You just need to,&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;1.Create the XML data for Input param.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;2.Pass the XML,execute the SP.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;3.SP will handle the XML data and do the processing fetching the data from XML(Using Xpath traversal)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;4.SP also can return resultset data as an XML content, which you can again transform map to Object.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;XML Transformation:&lt;/span&gt; is done by javax.xml.Transform package, which takes one XML as input,Used XSLT file to transform input XML to XML format as defined by the XSLT.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;span style="font-weight: bold;"&gt;Castor Mapping:&lt;/span&gt;is done by third party open source jar, which maps Object to XML and XML to object.So you can directly get XML/Object using this.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-615117329614755183?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/615117329614755183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=615117329614755183&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/615117329614755183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/615117329614755183'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/11/batch-insertupdate-db-use-xml-as-you.html' title='Batch insert/update DB - Use XML as you data...'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-2481209827101403070</id><published>2008-07-14T10:58:00.000+05:30</published><updated>2008-07-14T11:00:39.435+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Remote Method call - EJB/HTTPClient/Web Service?</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;This is not a new thing i am talking about,but i have used this for first time. Until now i have been used to EJB for remote method invocations. I use it for some bussiness logic which is on another distributed server. And i am not ashamed of telling that i have not used Web services :(.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;This was a need in my project to call a method of another application which can be on same machine or another. First i thought i need to call a EJB and its all mess because of heavy loads for a simple method call. But when i saw the implementation, i got confused how i will cuse it! But my senior told me to check using HTTPClient from apache commons.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Its very simple to call a method on servlet using HTTPClient. Check the code below. We will just use PostMethod class for parameters to be passed and execute the request. So as per the parameters,the servlet will do its work.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;PostMethod postMethod = new PostMethod("http://some.blah.com");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;postMethod.setParameter("some_id", "1");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;postMethod.setParameter("param1", "any data");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;postMethod.setParameter("param2", "any data");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;int status = httpClient.executeMethod(postMethod); //status will be your response...&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Its so simple. But though its not a call which returns something. I mean you cna see i am just passign some information to some method to invoke some processing which is independent and i don't need its response.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-2481209827101403070?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/2481209827101403070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=2481209827101403070&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/2481209827101403070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/2481209827101403070'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/07/remote-method-call-ejbhttpclientweb.html' title='Remote Method call - EJB/HTTPClient/Web Service?'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-7533944634229242846</id><published>2008-05-20T12:42:00.000+05:30</published><updated>2008-05-20T14:29:42.497+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Controlling Module Dependencies in Eclipse</title><content type='html'>&lt;div style="font-family: verdana; text-align: justify;"&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;J2EE Module Dependencies is a critical issue in an enterprise application. You need your one web module to access some re&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;sources while prohibiting others. Similar is the case with EJB modules.&lt;/span&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;Let’s figure it out with Eclipse Web Tools Platform. I consider that you all have ability to create projects and modules in Eclipse; so skipping those steps. I have Eclipse 3.3 with WTP 2.0 M6.&lt;/span&gt;&lt;/p&gt;&lt;div style="font-family: verdana; text-align: justify;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;I have create&lt;/span&gt;&lt;span style="font-size:85%;"&gt;d project with following details.&lt;/span&gt;&lt;/p&gt;&lt;div style="font-family: verdana; text-align: justify;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;MyProject – &lt;st1:place st="on"&gt;&lt;st1:city st="on"&gt;&lt;/st1:city&gt;&lt;/st1:place&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;st1:place st="on"&gt;&lt;st1:city st="on"&gt;E&lt;/st1:city&gt;&lt;/st1:place&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;st1:place st="on"&gt;&lt;st1:city st="on"&gt;nterprise&lt;/st1:city&gt;&lt;/st1:place&gt; project&lt;/span&gt;&lt;/p&gt;&lt;div style="font-family: verdana; text-align: justify;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;MyEJB_Module &lt;/span&gt;&lt;span style="font-size:85%;"&gt;– Contains bean class&lt;/span&gt;&lt;/p&gt;&lt;div style="font-family: verdana; text-align: justify;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;MyEJBClient_Module – Contains interfaces of EJB, VO, and BeanUtil.&lt;/span&gt;&lt;/p&gt;&lt;div style="font-family: verdana; text-align: justify;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;MyWeb_Modules – Holds JSPs, servlets and all presentation tier stuffs.&lt;/span&gt;&lt;/p&gt;&lt;div style="font-family: verdana; text-align: justify;"&gt;  &lt;/div&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;MyJava_Module – Contains common classeslike constants, utilities.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_yX3CbIw2gr8/SDJ8SdBV0hI/AAAAAAAAACo/k5pw3fZt-y8/s1600-h/1.JPG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_yX3CbIw2gr8/SDJ8SdBV0hI/AAAAAAAAACo/k5pw3fZt-y8/s320/1.JPG" alt="" id="BLOGGER_PHOTO_ID_5202357176036086290" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="font-family: verdana; text-align: justify;"&gt;     &lt;/div&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;Starting with MyProject, select properties from right click menu. In property dialog, select “J2EE Module Dependencies”. You will find all the modules. Select all as project is dependent on all modules.&lt;/span&gt;&lt;/p&gt;&lt;div style="font-family: verdana; text-align: justify;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_yX3CbIw2gr8/SDJ9ndBV0jI/AAAAAAAAAC4/r0-SC26N43U/s1600-h/2.JPG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_yX3CbIw2gr8/SDJ9ndBV0jI/AAAAAAAAAC4/r0-SC26N43U/s400/2.JPG" alt="" id="BLOGGER_PHOTO_ID_5202358636324966962" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;Now you can configure dependency of individual module, let’s take an example of web module. In “J2EE Module Dependencies” window, you will find a radio button group which would has by default “Use EJB Client Jars” option selected. That radio button groups defines visibility of EJB jar. &lt;/span&gt;&lt;/p&gt;&lt;div style="font-family: verdana; text-align: justify;"&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_yX3CbIw2gr8/SDJ-E9BV0kI/AAAAAAAAADA/Z8n4DWrt8LA/s1600-h/3.JPG"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_yX3CbIw2gr8/SDJ-E9BV0kI/AAAAAAAAADA/Z8n4DWrt8LA/s400/3.JPG" alt="" id="BLOGGER_PHOTO_ID_5202359143131107906" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;As clients of any EJB should be isolated from bean classes, it is preferable not to select other options where you can define dependencies with EJB jar file. After all, EJB clients should not have any kind of dependencies with EJB jar.&lt;/span&gt;&lt;/p&gt;&lt;div style="font-family: verdana; text-align: justify;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;Now here if I select MyEJB_ModuleClient.jar only, MyWeb_Module won’t able to access classes defined in MyJava_Module until you redefine module dependencies.&lt;/span&gt;&lt;/p&gt;&lt;div style="font-family: verdana; text-align: justify;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;Similarity you can define dependencies with Utility project, specifically saying third party libraries. You want one module to access one jar and isolate others all you need to do is add library in main project (MyProject in my case) and then configure dependencies of other modules.&lt;/span&gt;&lt;/p&gt;&lt;div style="font-family: verdana; text-align: justify;"&gt;    &lt;/div&gt;&lt;p class="MsoNormal"  style="color: rgb(0, 0, 0); font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;This feature takes care of dependencies on behalf of you and let you concentrate on other tasks.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-7533944634229242846?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/7533944634229242846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=7533944634229242846&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/7533944634229242846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/7533944634229242846'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/05/controlling-module-dependencies-in.html' title='Controlling Module Dependencies in Eclipse'/><author><name>Jay Rajani</name><uri>http://www.blogger.com/profile/02389311692455209003</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://3.bp.blogspot.com/_yX3CbIw2gr8/TANzTPVxR8I/AAAAAAAAAOU/Tm12ORaTFdc/S220/8bf096e0c18e5aa4.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_yX3CbIw2gr8/SDJ8SdBV0hI/AAAAAAAAACo/k5pw3fZt-y8/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-3025693619890005584</id><published>2008-05-15T15:35:00.000+05:30</published><updated>2008-05-15T15:41:38.038+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Servicemix PollingComponentSupport - stuck if lower period and higher threadPoolSize</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Again i got one issue with servicemix Poller components.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;We have two FilePoller components here and we kept the period to 10 minutes. Which means the instance of FilePoller will run at every 10 minutes. Now say if I have two instances, each run at 10 minutes, and 5 minutes gap between them. So it means after every five minutes, files will be picked by one of them. And the WorkManager, which is given to FilePoller as property, has threadPoolSize of 30.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;All was working fine with this configuration.30 threads in pool, every five minutes any of two pullers will pick files. But now we have to change it. When we changed the period from 10 minutes to 1 minute, we got strange errors. Yes even you won't believe it. While testing concurrency we got, FileNotFound exception even though the file exists there, and many other concurrency issues. We looked into the logs and found that sometimes the load goes only on one server and the other is always idle doing nothing. Because when it comes, the first one is doing task.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Then we decided to decrease the thredPoolSize. Becasue if puller get 30 files for 30 threads from the pool, and when it comes to 31st file from the folder and if any of previous 30 threads is in the pool after it has completed its job, then it will take the file. It means, though we have pool size of 30, it may be possible that it can process more than 30 files per instance (say 32 to 38 files). So we decided to make pool size to 10.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Now after making 10 it seems to be working fine. Each one is picking almost equal numbers of files and sharing load as it should. Let’s see if more issues are coming or not.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;So, key thing to be remembered is &lt;blockquote style="font-style: italic;"&gt;"Keep you threadPoolSize and period on which instance will run in proportion to each other. If period is long then threads can be more but if you want to reduce the period, you must take care of pool size."&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-3025693619890005584?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/3025693619890005584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=3025693619890005584&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/3025693619890005584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/3025693619890005584'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/05/servicemix-pollingcomponentsupport.html' title='Servicemix PollingComponentSupport - stuck if lower period and higher threadPoolSize'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-2114068820831537138</id><published>2008-05-13T11:47:00.000+05:30</published><updated>2008-05-13T11:48:20.834+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Java optimization and performance</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: verdana; font-weight: bold;font-size:85%;" &gt;No new Exception if not needed&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Many of us do this when we want to throw an error. But if you are throwing exception from another catch, then don't make new exception object. Keep throwing the same exception which you caught if possible. This will be better for performance. And also in new exception usually we change the description only to reflect the perfect error cause, but other ways are there to track it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana; font-weight: bold;font-size:85%;" &gt;Avoid excessive synchronization&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Yah threading can be a bit complex situation sometimes in java. And we all use synchronization to avoid dead locks. But it needs a more attention then we give it. Try to make a block of code synchronized rather then making the whole method synched. The whole method will stop all other threads, waiting to go inside it. It will generate more overhead. So keep the design like we need less sync code.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana; font-weight: bold;font-size:85%;" &gt;Release DB and File IO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;This is the most case in which we all do something wrong.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;DB connections must be closed after completing your DB transactions because its a limited resource.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Also if you are using File IO, then must close file streams after completing the task.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Best way for this is, to write the releasing code in 'finally' block of the method.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana; font-weight: bold;font-size:85%;" &gt;Use StringBuffer/StringBuilder rather than String&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;We use string manipulations in our daily coding many times. And all we do is always making new String object. As most of us know, String is immutable object (which means once assigned you can't change its value), so when you assign existing String object another value, it will make new String object. And most string operation generates lot of small String objects.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;If it’s possible to use StringBuffer or StringBuilder instead of String then its more more way better. Because it will be one object having all your data in it and you can get String form it when you want.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Now StringBuilder is nonSynchronized and StringBuffer is synchronized. So if you don't have threading issues and don't need Sync, then you must use StringBuilder which is included since jdk 1.5.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Later on we will talk about more points also when i remember them :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-2114068820831537138?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/2114068820831537138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=2114068820831537138&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/2114068820831537138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/2114068820831537138'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/05/java-optimization-and-performance.html' title='Java optimization and performance'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-559008385350535537</id><published>2008-05-09T17:07:00.000+05:30</published><updated>2008-05-09T17:08:30.462+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='Freeware'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>servicemix problems: NormalizedMessage getContent,copyPropertiesAndAttachments()</title><content type='html'>&lt;div  style="text-align: justify; font-family: verdana;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;Though servicemix is widely used and very nice ESB framework, it has some basic problems.The one i am talking about here is very little thing but it can be annoying if you forget this or don't know this.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;While creating and sending &lt;code&gt;NormalizedMessage&lt;/code&gt; object from any data, after doing that if you read data using &lt;code&gt;NormalizedMessage.getContent()&lt;/code&gt; method and send the message object with exhchange to deliveryChannel, using &lt;code&gt;DeliveryChannelImpl.send(MessageExchange)&lt;/code&gt; method, then you will get null exception in &lt;code&gt;DeliveryChannelImpl&lt;/code&gt; class.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Yes this is true.I don't know why, but it removes content from the message object.Only the content is removed and the properties are still there.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;You can read properties from it in same component as many times as you want.If you are forwarding same message to next component, properties will automatically goes.But if you read content once, you must set it again :(.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Also remember that if you need to make new &lt;code&gt;MessageExchange&lt;/code&gt;, then you must copy all properties and attachments using &lt;code&gt;TransformComponentSupport.copyPropertiesAndAttachments(outExchange,inMsg,outMsg)&lt;/code&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; method.Then all your data from one message will be copied to another message.&lt;br /&gt;&lt;br /&gt;So keep checking this if you getting null Exceptions while sending message through &lt;code&gt;DeliveryChannel&lt;/code&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-559008385350535537?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/559008385350535537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=559008385350535537&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/559008385350535537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/559008385350535537'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/05/servicemix-problems-normalizedmessage.html' title='servicemix problems: NormalizedMessage getContent,copyPropertiesAndAttachments()'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-2983966543390253668</id><published>2008-05-09T17:06:00.000+05:30</published><updated>2008-05-09T17:07:40.226+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='Freeware'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Spring Framework problem : SqlReturnResultSet() not returned</title><content type='html'>&lt;div style="text-align: justify; font-family: verdana;"&gt;&lt;span style=";font-size:85%;" &gt;One more problem with servicemix and spring is in DAO classes, when you make any private static class of StoreProcedure, then in its constructor you must declare &lt;code&gt;SqlReturnResultSet &lt;/code&gt;&lt;/span&gt;&lt;span style=";font-size:85%;" &gt; before you declare&lt;/span&gt;&lt;span style=";font-size:85%;" &gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt; SqlParameter&lt;/code&gt;.Otherwise you will not be able to find return data from StoredProcedure execution.Check the code below,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote  style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;public MySp(JdbcTemplate jdbcTemplate){&lt;br /&gt;super(jdbcTemplate,"sp_mysp");&lt;br /&gt;declareParameter(new SqlReturnResultSet("strRs",rsMyResultSet));&lt;br /&gt;declareParameter(new SqlReturnResultSet("strRs1",rsMyResultSet1));&lt;br /&gt;declareParameter(new SqlParameter("myId", Types.INTEGER));&lt;br /&gt;compile();&lt;br /&gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;span style=";font-size:85%;" &gt;so keep in mind while using Spring DAO support.Must declare resultsets first.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-2983966543390253668?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/2983966543390253668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=2983966543390253668&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/2983966543390253668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/2983966543390253668'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/05/spring-framework-problem.html' title='Spring Framework problem : SqlReturnResultSet() not returned'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-5647673054925686163</id><published>2008-05-01T19:07:00.000+05:30</published><updated>2008-05-01T19:13:53.698+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='struts'/><category scheme='http://www.blogger.com/atom/ns#' term='Html'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Using Struts tags - &lt;logic:iterate&gt;,&lt;logic:equal&gt;,&lt;bean:write&gt;</title><content type='html'>&lt;span style=";font-family:verdana;font-size:85%;"  &gt;I was wondering what should i write about now.And suddenly i got this to do.&lt;br /&gt;I have a small change in the jsp which is made using struts framework.In struts, there are many tags which are easy to use and generate output fast.easy to write.&lt;br /&gt;&lt;br /&gt;In struts, we have ActionServlet,Action classes and ActionForms.&lt;br /&gt;&lt;br /&gt;ActionServlet will transfer the request to ActionServlet with ActionForms containing all the HTML form data.so you can access any data of the of ActionForm from Servlet request.&lt;br /&gt;&lt;br /&gt;See the below code.then we will talk regarding it.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;select name="sel1" id="selTestStruts" style="width:90px;"&gt;&lt;br /&gt;  &amp;lt;option value="0" selected="selected"&gt;Please Select&lt;br /&gt;  &amp;lt;logic:iterate id="myBean" name="someForm" property="someFormProp1"&gt;&lt;br /&gt;      &amp;lt;logic:equal value="test" property="someStrPropOfMyBean" name="myBean"&gt;&lt;br /&gt;          &amp;lt;option value='&amp;lt;bean:write name="myBean" property="someStrPropOfMyBean"/&gt;'&gt;&amp;lt;bean:write name="myBean" property="someNamePropOfMyBean"/&gt;&amp;lt;/option&gt;&lt;br /&gt;      &amp;lt;/logic:equal&gt;&lt;br /&gt;  &amp;lt;/logic:iterate&gt;&lt;br /&gt;&amp;lt;/select&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;here we are trying to fill HTML select box using struts' &lt;code&gt;&amp;lt;logic:iterate&gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;logic:equal&gt;&lt;/code&gt;&lt;code&gt;&amp;lt;bean:write&gt;&lt;/code&gt; tags.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;logic:iterate&gt;&lt;/code&gt; will iterate on 'someFormProp1' of 'someForm' which is in the http request.it will make 'myBean' from property 'someFormProp1' which is a List of some data.&lt;br /&gt;&lt;br /&gt;You can simply write any property from that 'myBean' we made above.But i also shown here how you can put logic to seperate things on some property value so you don't need to put logic in the SP or generate another property for it.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;logic:equal&gt;&lt;/code&gt; checks the value of property named 'someStrPropOfMyBean' with the string given in &lt;code&gt;'value="test"'&lt;/code&gt; attribute (means with 'test' here). If the value matches then only it will make new &lt;code&gt;&amp;lt;option&gt;&lt;/code&gt; for &lt;code&gt;&amp;lt;select&gt;&lt;/code&gt; box.&lt;br /&gt;&lt;br /&gt;same thing you can do with not including some specific value match using &lt;code&gt;&amp;lt;logic:notEqual&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;bean:write&gt;&lt;/code&gt; tag will simply write property 'someStrPropOfMyBean' of 'myBean' which is a object of some Value Object class from the List property 'someFormProp1' of 'someForm'.&lt;br /&gt;&lt;br /&gt;Though this is very simple thing but i write because may be this can be helpful to some newbies.&lt;/span&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-5647673054925686163?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/5647673054925686163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=5647673054925686163&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/5647673054925686163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/5647673054925686163'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/05/using-struts-tags.html' title='Using Struts tags - &amp;lt;logic:iterate&gt;,&amp;lt;logic:equal&gt;,&amp;lt;bean:write&gt;'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-1835210027906990152</id><published>2008-04-25T10:58:00.000+05:30</published><updated>2008-04-25T11:02:50.985+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><title type='text'>Castor Xml mapping: mapping.loadMapping() gives IOException for filepath</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;font style="font-family: verdana;" size="2"&gt;This is very know problem i think and many of you know it but then also i am writing it here.&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-family: verdana;" size="2"&gt;For convert a Value Object class directly in pre-defined XML format we use castor mapping.We give xml mapping file (as we have seen in earlier tutorial) to &lt;code&gt;Mapping&lt;/code&gt; class object as below which will write xml string in &lt;code style="color: rgb(153, 102, 51);"&gt;strWriter&lt;/code&gt; object from Object &lt;code style="color: rgb(153, 102, 51);"&gt;obj&lt;/code&gt;.&lt;/font&gt;&lt;br /&gt;&lt;font style="font-family: verdana;" size="2"&gt;&lt;/font&gt;&lt;blockquote&gt;&lt;font style="font-family: verdana;" size="2"&gt;Mapping mapping = new Mapping();&lt;/font&gt;&lt;br /&gt;&lt;font style="font-family: verdana; color: rgb(153, 102, 51);" size="2"&gt;mapping.loadMapping(mappingXmlFilename);&lt;/font&gt;&lt;br /&gt;&lt;font style="font-family: verdana;" size="2"&gt;strWriter = new StringWriter();&lt;/font&gt;&lt;br /&gt;&lt;font style="font-family: verdana;" size="2"&gt;Marshaller marshaller = new Marshaller(strWriter);&lt;/font&gt;&lt;br /&gt;&lt;font style="font-family: verdana;" size="2"&gt;marshaller.setMapping(mapping);&lt;/font&gt;&lt;br /&gt;&lt;font style="font-family: verdana;" size="2"&gt;marshaller.marshal(obj);&lt;/font&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;font style="font-family: verdana;" size="2"&gt;But when i given directly the filename to loadMapping method, it gives IOException as below:&lt;/font&gt;&lt;br /&gt;&lt;font style="font-family: verdana; color: rgb(255, 0, 0);" size="2"&gt;&lt;blockquote&gt;IOException : \shared\p1\p2\shared\p1\p2\lai-sup-mapping.xml&lt;/blockquote&gt;&lt;/font&gt;&lt;font style="font-family: verdana;" size="2"&gt;i have given absolute filepath &lt;span style="font-weight: bold;"&gt;'\\shared\p1\p2\lai-sup-mapping.xml'&lt;/span&gt; and then also it is generating it using relative one.So throwing IOException for file.&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-family: verdana;" size="2"&gt;Then i have changed the thing and instead of giving filepath, i have made a &lt;code&gt;org.xml.sax.InputSource&lt;/code&gt; object from the xml file and passed that xml source to loadMapping() as below:&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="font-family: verdana;" size="2"&gt;&lt;/font&gt;&lt;blockquote&gt;&lt;font style="font-family: verdana;" size="2"&gt;Mapping mapping = new Mapping();&lt;/font&gt;&lt;br /&gt;&lt;font style="font-family: verdana; color: rgb(153, 102, 51);" size="2"&gt;InputSourcemappingSource =&lt;br /&gt;    newInputSource(new FileInputStream(mappingXmlFilename));&lt;/font&gt;&lt;br style="color: rgb(153, 102, 51);"&gt;&lt;font style="font-family: verdana; color: rgb(153, 102, 51);" size="2"&gt;mapping.loadMapping(mappingSource);&lt;/font&gt;&lt;br /&gt;&lt;font style="font-family: verdana;" size="2"&gt;strWriter = new StringWriter();&lt;/font&gt;&lt;br /&gt;&lt;font style="font-family: verdana;" size="2"&gt;Marshaller marshaller = new Marshaller(strWriter);&lt;/font&gt;&lt;br /&gt;&lt;font style="font-family: verdana;" size="2"&gt;marshaller.setMapping(mapping);&lt;/font&gt;&lt;br /&gt;&lt;font style="font-family: verdana;" size="2"&gt;marshaller.marshal(obj);&lt;/font&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;font style="font-family: verdana;" size="2"&gt;And its working fine.Now its generating correct XML file from the given Value object.&lt;/font&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-1835210027906990152?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/1835210027906990152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=1835210027906990152&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/1835210027906990152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/1835210027906990152'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/04/castor-xml-mapping-mappingloadmapping.html' title='Castor Xml mapping: mapping.loadMapping() gives IOException for filepath'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-8810707292005599323</id><published>2008-04-24T15:07:00.000+05:30</published><updated>2008-04-24T15:10:25.748+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='hacks'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Servicemix Queue filled - Queue size increased</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;I have been using servicemix since more then 1 year.As we have seen in urlier articles that servicemix uses ActiveMQ for Message queuing. The messages sent are filled in the Queue of destined component which will be fetched later on.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;When we started using Servicemix, we faced a strange problem.After running for sometimes,our application stops processing messages.When we looked in the JMS Queue, we found that after certain period the messages in the queue are not removing.So new messages can't be processed.The Queue is full and we must restart the application to get rid of this.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Then we dig into the source code of servicemix and found how queue is given size.We increased the size as per our need and the problem was solved.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Basically when message processed by the component, it will be removed from its queue.But for some reason, if message not processed or not removed from the queue then further messages will be stored in the queue and processing stops.The application seems to be running but messages are not processed.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;The class &lt;code&gt;org.apache.servicemix.jbi.util.BoundedLinkedQueue&lt;/code&gt; contains the property &lt;code&gt;capacity_&lt;/code&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Constructor of this class contains the magic which initializes the capacity of queue size.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;By default it is 1024.you can change it as per your need. I mean how much messages you think will be processed after every restart.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;code:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;public BoundedLinkedQueue() {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;  this(1024);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;public BoundedLinkedQueue(int capacity) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;  if (capacity &lt;= 0)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;    throw new IllegalArgumentException();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;  capacity_ = capacity;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;  putSidePutPermits_ = capacity;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;  head_ = new LinkedNode(null);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;  last_ = head_;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;}&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;I just simply changes the 1024 to bigger number like 1024*10 etc...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Try this.may be it can solve your problem also.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;And others who know about servicemix and want to share their problems and tweaks are welcome.Put your comments here i will post it.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-8810707292005599323?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/8810707292005599323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=8810707292005599323&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/8810707292005599323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/8810707292005599323'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/04/servicemix-queue-filled-queue-size.html' title='Servicemix Queue filled - Queue size increased'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-1496891731315823209</id><published>2008-04-24T11:04:00.000+05:30</published><updated>2008-04-24T11:06:41.805+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Java Web application cookie lost!</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;I got one new change to do in our java web application.I have not been in it since 2 or 4 months and forgot some of its settings.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;First of all my jboss refuses to run from eclipse!i was very worried about it, but later i re-configured it as a "dynamic web application" project in eclipse.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;So when jboss runs finally, i logged in it and a big blast! it redirected me to error page. I checked the logs but i can't find anything.I was thinking that even i have not chnaged the things in code,configuration etc. then also it stucks here?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;But suddenly, a spark happned and i remembered that we set domain for cookies in most web applications.And that thing sucks in local environment.&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;cookie setting code:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Cookie c1 = new Cookie(name, value);&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;c1.setDomain(domainName);&lt;/span&gt;&lt;/blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;So i just commented out &lt;code&gt;c1.setDomain(domainName);&lt;/code&gt; and my application is ok.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-1496891731315823209?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/1496891731315823209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=1496891731315823209&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/1496891731315823209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/1496891731315823209'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/04/java-web-application-cookie-lost.html' title='Java Web application cookie lost!'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-8440079127793225763</id><published>2008-04-21T16:17:00.000+05:30</published><updated>2008-04-21T16:34:20.898+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='API'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Java Mail API with Encoded Attachment FileNames</title><content type='html'>&lt;span style=";font-family:verdana;font-size:85%;"  &gt;This is very strange problem i faces as per me. May be because different email clients have different encodings or something else, but we will get encoded filename header from some email clients like lotus, blackberry phone etc.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Message header for attachment:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Content-Transfer-Encoding: base64&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Content-Type: image/jpeg&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Content-Disposition:attachment;&lt;br /&gt;  filename="=?Windows-1252?B?SU1HMDAwMTYuanBn?="&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Then i was stucked with the thing that how to decode the filename.I have the filename only in subject line.But i can not trust that because say if 3 attachments are there, then there will be 3 filenames in subject in order.But we should not depend on the subject of the email.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;code&gt;javax.mail.internet.MimeUtility&lt;/code&gt; util class which helps to decode the encoded strings in message header values as below&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Method:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;blockquote&gt;javax.mail.internet.MimeUtility.decodeText(strValueToBeDecoded);&lt;/blockquote&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;But most of the encodings with java 1.3.1 are not supported. At least 1.4.1 must be used.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-8440079127793225763?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/8440079127793225763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=8440079127793225763&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/8440079127793225763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/8440079127793225763'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/04/java-mail-api-with-encoded-attachment.html' title='Java Mail API with Encoded Attachment FileNames'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-2700175851019062620</id><published>2008-04-11T16:22:00.000+05:30</published><updated>2008-04-11T16:25:31.355+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Freeware'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Eclipse Shortcuts</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;I was free as my code with CR is done. i was thinking wht to write and it just sparked in my mind that this can be a good thing though many of us has explored this.But then also it can help some newbies.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Maximize/minimize the selected window     - &lt;span style="font-weight: bold;"&gt;Ctrl +M&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Generate getters/setter                 - &lt;span style="font-weight: bold;"&gt;Alt+Shift+s + r&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Override/implement methods                 - &lt;/span&gt;&lt;span style="font-family: verdana; font-weight: bold;font-size:85%;" &gt;Alt+Shift+s&lt;/span&gt;&lt;span style="font-family: verdana; font-weight: bold;font-size:85%;" &gt; + v&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Show type implementation                 - &lt;span style="font-weight: bold;"&gt;Ctrl+T&lt;/span&gt; on selected type in java file&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;quick class member browser                - &lt;span style="font-weight: bold;"&gt;Ctrl+o&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;search usage of selected member            - &lt;span style="font-weight: bold;"&gt;Ctrl+Alt+H&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;comment/uncomment selected lines        - &lt;span style="font-weight: bold;"&gt;ctrl+/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;Open declaration                        - &lt;span style="font-weight: bold;"&gt;F3&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;&lt;/span&gt;&lt;span style="font-family: verdana;font-size:85%;" &gt;This is what most used ones. You also can submit if i missed important ones in commnets.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-2700175851019062620?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/2700175851019062620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=2700175851019062620&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/2700175851019062620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/2700175851019062620'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/04/eclipse-shortcuts.html' title='Eclipse Shortcuts'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-6171281079587144815</id><published>2008-04-11T15:52:00.000+05:30</published><updated>2008-04-11T16:14:48.582+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Tutorials'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Using Apache ServiceMix - ESB with spring</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_szsM-EakoOE/R_9A8PFdhyI/AAAAAAAABR0/8miH0Py_ivs/s1600-h/ServiceMix3.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_szsM-EakoOE/R_9A8PFdhyI/AAAAAAAABR0/8miH0Py_ivs/s400/ServiceMix3.png" alt="" id="BLOGGER_PHOTO_ID_5187936699339867938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Apache ServiceMix is an open source ESB (Enterprise Service Bus) that combines the functionality of a Service Oriented Architecture (SOA) and an Event Driven Architecture (EDA)  to create an agile, enterprise ESB.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Apache ServiceMix is an open source distributed ESB built from the ground up on the  Java Business Integration (JBI) specification JSR 208 and released under the Apache license. The goal of JBI is to allow components and services to be integrated in a vendor independent way, allowing users and vendors to plug and play.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;Features:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ServiceMix is lightweight and easily embeddable, has integrated Spring support and can be run at the edge of the network (inside a client or server), as a standalone ESB provider or as a service within another ESB. You can use ServiceMix in Java SE or a Java EE application server.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ServiceMix uses ActiveMQ to provide remoting, clustering, reliability and distributed failover.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ServiceMix is completely integrated into Apache Geronimo, which allows you to deploy JBI components and services directly into Geronimo. ServiceMix is being JBI certified as part of the Geronimo project.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Other J2EE application servers ServiceMix has been integrated with include JBoss, JOnAS with more to follow.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ServiceMix includes a complete JBI container supporting all parts of the JBI specification including:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;* Normalized Message Service and Router&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;* JBI Management MBeans&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;* Ant Tasks for management and installation of components&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;* full support for the JBI deployment units with hot-deployment of JBI components&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;ServiceMix also provides a simple to use Client API for working with JBI components and services.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;How to use?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;JBI components can be created extending servicemix's implementation classes.This is required because only then can you will be able to use the plug-&amp;amp;-play component,which is our purpose to use servicemix ESB. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;You can develop Binding components which can receive data through HTTP and Files.Servicemix has already provided specific classes so you can deal with http request,input folder.&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;HTTP - org.apache.servicemix.components.http.HttpConnector.&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;File - org.apache.servicemix.components.file.FilePoller&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;So your class will use the HTTP request/file to fetch data and will make an &lt;span style="font-weight: bold;"&gt;javax.jbi.messaging.NormalizedMessage&lt;/span&gt; class object.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;This &lt;span style="font-weight: bold;"&gt;NormalizedMessage&lt;/span&gt; object will be then given to &lt;span style="font-weight: bold;"&gt;javax.jbi.messaging.MessageExchange&lt;/span&gt; implementation (&lt;span style="font-weight: bold;"&gt;InOnly&lt;/span&gt; or &lt;span style="font-weight: bold;"&gt;InOut&lt;/span&gt;) and &lt;span style="font-weight: bold;"&gt;MessageExchange &lt;/span&gt;will be then routed to the next component configured as service endpoint in application context xml file.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;application context xml code:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&amp;lt;sm:activationSpec componentName="myfilePoller" service="foo:myfilePoller" destinationService="foo:myDrool"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;    &amp;lt;sm:component&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;        &amp;lt;bean class="test.my.file.MyFilePoller"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;            &amp;lt;property name="workManager" ref="workManager" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;            &amp;lt;property name="file" value="C:/inbox" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;            &amp;lt;property name="period" value="120000" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;            &amp;lt;property name="deleteFile" value="true" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;        &amp;lt;/bean&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;    &amp;lt;/sm:component&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&amp;lt;/sm:activationSpec&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&amp;lt;sm:activationSpec componentName="myDrool" service="foo:myDrool"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;    &amp;lt;sm:component&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;        &amp;lt;bean class="org.apache.servicemix.components.drools.DroolsComponent"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;            &amp;lt;property name="ruleBaseResource" value="classpath:myRule1.xml" /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;        &amp;lt;/bean&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;    &amp;lt;/sm:component&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&amp;lt;/sm:activationSpec&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Here &lt;span style="font-weight: bold;"&gt;MyFilePoller&lt;/span&gt; is the class which will poll files from &lt;span style="font-weight: bold;"&gt;'C:/inbox'&lt;/span&gt; folder. And make messaging as we discussed above.&lt;span style="font-weight: bold;"&gt;'myDrool'&lt;/span&gt; is its destination component which is an drools component.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;Drools&lt;/span&gt; is like dynamic routing.We just need to make rules in xml file and that xml will be loaded automtically if its configured in applicationContext file as above. Its jar must be in &lt;span style="font-weight: bold;"&gt;'lib'&lt;/span&gt; dir of the server.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Below is the drools xml which declares the rule base on which the &lt;span style="font-weight: bold;"&gt;NormalizedMessage &lt;/span&gt;will be routed to appropriate destination component.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;NormalizedMessage &lt;/span&gt;can contain data and properties.We can read its property in XML rule base.And based on particular property, we can route the message.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Check the xml below.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;myRule1.xml:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&amp;lt;rule-set name="cheese rules"&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;  xmlns="http://drools.org/rules"&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;  xmlns:java="http://drools.org/semantics/java"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;    &amp;lt;application-data identifier="jbi"&gt;org.apache.servicemix.components.drools.JbiHelper&amp;lt;/application-data&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;    &amp;lt;application-data identifier="context"&gt;javax.jbi.component.ComponentContext&amp;lt;/application-data&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;    &amp;lt;application-data identifier="deliveryChannel"&gt;javax.jbi.messaging.DeliveryChannel&amp;lt;/application-data&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;    &amp;lt;rule name="Rule for componentOne"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;        &amp;lt;parameter identifier="exchange"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;            &amp;lt;class&gt;javax.jbi.messaging.MessageExchange&amp;lt;/class&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;        &amp;lt;/parameter&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;        &amp;lt;java:condition&gt;"TRUE".equalsIgnoreCase(exchange.getMessage("in").getProperty("isForComponentOne").toString()) == true&amp;lt;/java:condition&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;        &amp;lt;java:consequence&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;                jbi.forwardToService("http://servicemix.apache.org/demo/", "componentOne");&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;        &amp;lt;/java:consequence&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;    &amp;lt;/rule&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;    &amp;lt;rule name="Rule for anotherComponent"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;        &amp;lt;parameter identifier="exchange"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;            &amp;lt;class&gt;javax.jbi.messaging.MessageExchange&amp;lt;/class&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;        &amp;lt;/parameter&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;        &amp;lt;java:condition&gt;"TRUE".equalsIgnoreCase(exchange.getMessage("in").getProperty("isForComponentOne").toString()) == false&amp;lt;/java:condition&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;        &amp;lt;java:consequence&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;                        jbi.forwardToService("http://servicemix.apache.org/demo/", "anotherComponent");&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;        &amp;lt;/java:consequence&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;    &amp;lt;/rule&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&amp;lt;/rule-set&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;This will route the message to &lt;span style="font-weight: bold;"&gt;'componentOne'&lt;/span&gt; if the property tested in condition is true and toward &lt;span style="font-weight: bold;"&gt;'anotherComponent'&lt;/span&gt; otherwise.Both components also will be specified in applicationcontext xml file.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;This is how routing does work.Now we will talk about how each component get notified of message transfered.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Every intemediate component in servicemix will create new message and Exchange,pass it to next component after finishing its processing and send notification to the previous component.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;code:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;getDeliveryChannel().send(newExchange);&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;done(exchange);&lt;/span&gt;&lt;/blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;At last, we now talk about the service endpoint, which has opposite task compared to binding components.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;BindingComponents takes in and creates messages, Service endpoints throw out the messages and finishes the process.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;we have 3 to 4 different outbidding components here and its having some classes already provided.&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;File - org.apache.servicemix.components.file.FileWriter&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;FTP - org.apache.servicemix.components.net.FTPSender&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;HTTP - org.apache.servicemix.components.util.OutBinding ( i have used this becasue in http, we will jsut send data to some URL or so and then processing is finished.)&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Mail/SMTP - org.apache.servicemix.components.email.MimeMailSender&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;This is how we can use servicemix. You can add different components as per your needs at any place in the whole flow and define the path in xml applicationContext and Rule base files.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;The changes or additions afterward will require some small changes only. You need to define new properties in NormalizedMessage and based on that property you can create new RuleBase files. And using drools, create new routing path for new feature.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Its very easy to use though feels very tricky and complex in the beggining.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;we Will discuss more. :)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-6171281079587144815?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/6171281079587144815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=6171281079587144815&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/6171281079587144815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/6171281079587144815'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/04/using-apache-servicemix-esb-with-spring.html' title='Using Apache ServiceMix - ESB with spring'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_szsM-EakoOE/R_9A8PFdhyI/AAAAAAAABR0/8miH0Py_ivs/s72-c/ServiceMix3.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-4840360981225803863</id><published>2008-04-11T11:05:00.000+05:30</published><updated>2008-04-11T11:06:25.267+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='General'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Developement Processes: Some Important some boring</title><content type='html'>&lt;div  style="text-align: justify;font-family:verdana;"&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;This is no new thing i am writing about.All developers know this and gone through this when ever they got some new thing to develop. It hurts in heart when someone says something which you must do as a process and feels boring.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;As per SDLC, some basic steps needed for developers are,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;Reading specs and use cases&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;This is most annoying thing i ever found. Yes because what the analysis team does all knows. Copy-paste some basic paragraphs from the templates,making funny and ugly diagram in word which is never usable to developers,using fast vivid colors which will just make you cry or feels you are reading some horror story and finally the language which is too complex and contains thing which are not of use! What they mention you can't get and what you want them to know they can't deal with it!&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;Deciding approach &amp;amp; Making design diagrams&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;This is somewhat very important thing if the team is well. Otherwise all are just suggesting diff. approaches and no decisions at the end!Design diagrams must be prepared before the development but sometimes the project managers or the CEOs are in so hurry that they want get it done fast and deployed even without any Technical documents/design diagrams!&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Sometimes the coder submits the diagrams and docs for review but the leaders/seniors are so busy (or may be ignoring it thinking 'its not related to my project') and not reviewed it.And after the code is done, they will find holes and design problems in that.Now say who's fault is this?&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;This is cool when its a small thing and approach is simple, but when you are expecting a whole big feature/module/functionality in short period ,with testing yes keep this in mind "with testing" done,then its a hell for developer. After the coding done, developer asked for diagrams. Now say, isn't its boring? Yes that what i am saying. It sucks!&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;Coding&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Its best part if the thing is designed and design is reviewed properly.As per my experience this is the least time taking step for a good team.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;Code Review&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;CR must be done. But if its done in quite short time after the code done. it means, CR should be fast process of all because developer can complete task fast if its in period while he is inside the thing.Once he had given for CR and you get back to him after some 1 month or so then he even doesn't remember what he had done!&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;And at some places, quite boring procedures for CR. you submit code filenames for CR, distribute it to some person,write comments on it and etc... This is time wasting and it stinks! It must be a simple process like pressing a button because developers' time is not for this funny things.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Deployment&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;This may be complex thing but it should not waste coders time. But at some places, system people stuck and call for coders.Some are intelligent to get into but some are even not understanding on total help and documentation provided by a coder.Only the instructions needed to be given by a coder.Its not his job to deploy the whole titanic into the sea!&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana;font-size:85%;"  &gt;Testing&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Now is the worst thing that a developer may be need to do sometimes.Yes i have done this even more than hundreds times because of some funny and frustrating test cycles! Sometimes they even don't know how to test &amp;amp; What should they do!You can say its better you do it all instead giving them the idea.This is mostly happens because nowadays testing people are nontechnical! They just know clicking the button and etc.They don't know how to deal with application internals and view log and all.May be companies wants some nontechnical arts graduate as a tester in less money instead of a good testing software engineer!&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;And sometimes they raise wrong bugs which have been tested with wrong scenarios,even on your instructions that this is not right one to test!And when you draft a mail which makes them shy or some senior person bang on them, they feels you like an enemy!&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Bug fixing&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;This is most 'long long long' process for coders.The diff. natured(technical/nontechnical,thinking themselves as coders) testers rais long list of bugs out which rare cases are function issues.Most are like for UI things.And when a coder is given a bug which not of his area then definitely it will consume more time and if we calculate total time for such non-related-area bugs of all coders then it will make a big difference in the process completion date.May be it can delay release if the testing cycles are more in numbers but less detailed and proper.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;This is not like i am bored of coding. I love coding but everything which is having its charms,have some bad things also associated with it.Say if testers are also coders then? may be you can get more bugs? yes but you can test fats and at the end your final release would be a great thing.Same thing applies for all team in SDLC ;). i mean analysis,project management,testing all. &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;I am telling what i think. It depends on particular's likings ;)&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:verdana;font-size:85%;"  &gt;Just do Code.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-4840360981225803863?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/4840360981225803863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=4840360981225803863&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/4840360981225803863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/4840360981225803863'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/04/developement-processes-some-important.html' title='Developement Processes: Some Important some boring'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-6654657745626676220</id><published>2008-04-04T22:41:00.000+05:30</published><updated>2008-04-04T22:52:04.968+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Plugins'/><category scheme='http://www.blogger.com/atom/ns#' term='Freeware'/><title type='text'>Relo - Relationship based Exploration (UML Like Diagrams)</title><content type='html'>&lt;div  style="font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_szsM-EakoOE/RugWSs424xI/AAAAAAAAAbI/AIMVIJ22Mcw/s1600-h/relo.gif"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://3.bp.blogspot.com/_szsM-EakoOE/RugWSs424xI/AAAAAAAAAbI/AIMVIJ22Mcw/s400/relo.gif" alt="" id="BLOGGER_PHOTO_ID_5109358287794922258" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Relo helps developers explore and understand large codebases. Developers often face code that is hard to understand with over half their time being spent on understanding code. Relo allows developers to easily create relevant and intuitive diagrams, along with features to help automatically build diagrams based on the users past navigation.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: verdana; text-align: justify;"&gt;  &lt;/div&gt;&lt;p  style="font-family: verdana; text-align: justify;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;While Relo diagrams are similar to UML, they also allow developers to zoom in to view details and edit the code using embedded text editors. These diagrams represent only a small manageable part of the code and do not include irrelevant details, thus allowing a developer to focus on important code relationships.&lt;/span&gt;&lt;/p&gt;&lt;div style="font-family: verdana; text-align: justify;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://relo.csail.mit.edu/index.html"&gt;Relo HomePage&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-6654657745626676220?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/6654657745626676220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=6654657745626676220&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/6654657745626676220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/6654657745626676220'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/04/relo-relationship-based-exploration-uml.html' title='Relo - Relationship based Exploration (UML Like Diagrams)'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_szsM-EakoOE/RugWSs424xI/AAAAAAAAAbI/AIMVIJ22Mcw/s72-c/relo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-1693950990106499408</id><published>2008-04-04T22:38:00.000+05:30</published><updated>2008-04-04T22:40:58.649+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Applet'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Html'/><title type='text'>Java - Javascript interaction</title><content type='html'>&lt;div  style="text-align: justify; font-family: verdana;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;Many of us using javascript in daily coding.I am a java developer and using ajax with applet also.And i need to call applet methods from javascript.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Actually i knew this while i was facing a strange problem (ofcourse it was strange for me becasue i was not aware of this!). The applet used is compiled in JRE 1.4.0.And whenever anyone having JRE version newer than 1.4.0 tried accessing that applet, the call from javascript to applet method gives error "Object doesn't support this property". So i was very much tired of compiling applet with different versions of Jre but no luck.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;So once i found the &lt;span style="color: rgb(0, 153, 0);"&gt;&amp;lt;param&gt;&lt;/span&gt; tags for &lt;span style="color: rgb(0, 153, 0);"&gt;&amp;lt;Object&gt;&lt;/span&gt; element which is now used for applet in HTML code.And then i used these tags for java and javascript interaction.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;we will look at what parameters we should use the applet and object tags to 'switch on' the java-js communications.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;According to the java 5 documentation, if you use the APPLET tag, you do not need any special parameters to allow a javascript to call the applet's method. On the other hand if you use the OBJECT tag you need to use the scriptable parameter. Things use to be slightly different in the older versions.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;For an applet to call javascript methods, all you need to do is add the mayscript parameter&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;so the tags are &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&amp;lt;object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;        width= "290" height= "290" style="border-width:0;"  id="rup" name="rup"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;        codebase="http://java.sun.com/products/plugin/autodl/&lt;br /&gt;     jinstall-1_4_1-windows-i586.cab#version=1,4,1"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;        &amp;lt;param name="archive" value="jsapplet.jar"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;        &amp;lt;param name="code" value="com.raditha.articles.JSHelloWorld"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;        &amp;lt;param name="mayscript" value="yes"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;        &amp;lt;param name="scriptable" value="true"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;        &amp;lt;param name="name" value="jssapplet"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&amp;lt;/object&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;The object tag can actually cause the most recent version of the java plug in to be downloaded if the user does not have it installed or if the version present is older than the minimum requirement (in this case 1.4.1). If you want to be able to do the same for Netscape Navigator the object tag has to change slightly:&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote style="color: rgb(0, 153, 0);"&gt;&lt;span style="color: rgb(204, 153, 51);font-size:85%;" &gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&amp;lt;object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;    width= "290" height= "290" style="border-width:0;"  id="rup" name="rup"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;    codebase="http://java.sun.com/products/plugin/autodl/&lt;br /&gt; jinstall-1_4_1-windows-i586.cab#version=1,4,1"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;    &amp;lt;param name="archive" value="jsapplet.jar"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;    &amp;lt;param name="code" value="com.raditha.articles.JSHelloWorld"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;    &amp;lt;param name="mayscript" value="yes"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;    &amp;lt;param name="scriptable" value="true"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;    &amp;lt;param name="name" value="jsapplet"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&amp;lt;/object&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;Calling applet method from javascript is simple. You just need to do &lt;span style="color: rgb(204, 153, 51);"&gt;d&lt;span style="color: rgb(0, 153, 0);"&gt;ocument.getElementById("appletid").methodName();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;But calling javascript from Applet is somewhat tricky.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;In order to call javascripts we need to get hold of a JSObject. But first things first, we need to import the netscape.javascript.JSObject into our class.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt; &lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;public void init()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;        jsObj= JSObject.getWindow(this);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;    }&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;    &lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;All that remains to do is to add the JButton to our applet. Then we add an ActionListener to the JButton, and it's actionPerformed method calls the javascript.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;/span&gt;&lt;blockquote style="color: rgb(0, 153, 0);"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 153, 51);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(0, 153, 0);font-size:85%;" &gt;&lt;span style="color: rgb(204, 153, 51);"&gt;       &lt;blockquote&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;public void actionPerformed(ActionEvent e) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;                if(jsObj != null )&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;                    try {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;                        jsObj.call("updatePage", new String[] {txt.getText()});&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;                    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;                    catch (Exception ex) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;                        ex.printStackTrace();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;                    }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;        }&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;thats it! it will call the method from jsObj.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;hope this helps someone like me for first time.Enjoy!&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-1693950990106499408?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/1693950990106499408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=1693950990106499408&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/1693950990106499408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/1693950990106499408'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/04/java-javascript-interaction.html' title='Java - Javascript interaction'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5788997848984326788.post-4406273639796651472</id><published>2008-04-04T22:33:00.000+05:30</published><updated>2008-04-04T22:35:26.059+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><title type='text'>Java Spring Framework : Multiple PropertyPlaceholderConfigurer configurtion</title><content type='html'>&lt;div  style="text-align: justify; font-family: verdana;font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;This is very small thing which can be very annoying while coding in spring framework. Of cource no one can directly understand the problem until he faced that.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;At first, I had only one property file from which i am reading some values into spring applicationContext Xml configuration file.So when i needed to add second one for my new feature, i think it is just to add new propertyPlaceholderConfigurer bean with second prop file.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;my first prop file 'default-prop.properties' is :&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote  style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;default-prop.custName=testing customer&lt;br /&gt;default-prop.address=building1&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;and the bean definition in the applicationContext xml file for this is:&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote  style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;bean id="propertyConfigurer"&lt;br /&gt;class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;&lt;br /&gt;&amp;lt;property name="location"&gt;&lt;br /&gt;&amp;lt;value&gt;classpath:default-prop.properties&amp;lt;/value&gt;&lt;br /&gt;&amp;lt;/property&gt;&lt;br /&gt;&amp;lt;/bean&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;so while adding second one, i have just added second bean for it like:&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote  style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;bean id="propertyConfigurerNew"&lt;br /&gt;class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;&lt;br /&gt;&amp;lt;property name="location"&gt;&lt;br /&gt;&amp;lt;value&gt;classpath:second-prop.properties&amp;lt;/value&gt;&lt;br /&gt;&amp;lt;/property&gt;&lt;br /&gt;&amp;lt;/bean&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;and in xml, prop has been read as,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote  style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;property name="customerName" value="${default-prop.custName}" /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;But when i done this, i got error &lt;/span&gt;&lt;blockquote  style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;"Could not resolve placeholder 'default-prop.custName' "&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;So i have to do some workaround and digg into spring references. And i found that we can define seperate placeHolderPrefix and suffix for each property configurer bean.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;I have changed the bean definition as,&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote  style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;bean id="propertyConfigurer"&lt;br /&gt;class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;&lt;br /&gt;&amp;lt;property name="location"&gt;&lt;br /&gt;&amp;lt;value&gt;classpath:default-prop.properties&amp;lt;/value&gt;&lt;br /&gt;&amp;lt;/property&gt;&lt;br /&gt;&amp;lt;property name="placeholderPrefix" value="${" /&gt;&lt;br /&gt;&amp;lt;property name="placeholderSuffix" value="}" /&gt;&lt;br /&gt;&amp;lt;/bean&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;bean id="propertyConfigurerNew"&lt;br /&gt;class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;&lt;br /&gt;&amp;lt;property name="location"&gt;&lt;br /&gt;&amp;lt;value&gt;classpath:second-prop.properties&amp;lt;/value&gt;&lt;br /&gt;&amp;lt;/property&gt;&lt;br /&gt;&amp;lt;property name="placeholderPrefix" value="#[" /&gt;&lt;br /&gt;&amp;lt;property name="placeholderSuffix" value="]" /&gt;&lt;br /&gt;&amp;lt;/bean&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;it means, for first prop bean, we will use ${default-prop.custName} and for second bean we will use #[second-prop.secondName]&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;And voila! it solved my problem...&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;You can also use&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote  style="font-family:verdana;"&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;property name="ignoreUnresolvablePlaceholders" value="true" /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;for each PropertyPlaceholderConfigurer bean defined. But, i have used the prefix-suffix one solution.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;And my problem is resolved.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;Give your comments on this problem and solution.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5788997848984326788-4406273639796651472?l=javalibs.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javalibs.blogspot.com/feeds/4406273639796651472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5788997848984326788&amp;postID=4406273639796651472&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/4406273639796651472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5788997848984326788/posts/default/4406273639796651472'/><link rel='alternate' type='text/html' href='http://javalibs.blogspot.com/2008/04/java-spring-framework-multiple.html' title='Java Spring Framework : Multiple PropertyPlaceholderConfigurer configurtion'/><author><name>Parth Barot</name><uri>http://www.blogger.com/profile/12842456592664178430</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
