<?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:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3936546507981722114</id><updated>2024-11-05T18:43:30.158-08:00</updated><category term="JAXWS"/><category term="ceilometer"/><category term="cxf"/><category term="openstack"/><category term="Annotation driven spring aop"/><category term="Apache Camel"/><category term="Ariba"/><category term="B.o.B"/><category term="Business Proposal"/><category term="Custom Component"/><category term="HOT template"/><category term="Hibernate"/><category term="ID3"/><category term="ID3V2"/><category term="IS_SUPPORTING_EXTERNAL_ENTITIES"/><category term="JAXB"/><category term="JAXWS RI"/><category term="JSF"/><category term="Log4jConfigurationServlet"/><category term="MP3"/><category term="Marshalling"/><category term="Multiple Transaction Manager"/><category term="PMP"/><category term="Project Management Planning"/><category term="Proposal"/><category term="Proposal Process"/><category term="RFP"/><category term="RFP Process"/><category term="RFP Proposal Sample"/><category term="RFP Sample"/><category term="Request For Proposal"/><category term="SOAP"/><category term="SOAPUI"/><category term="SUPPORT_DTD"/><category term="Spring Transaction"/><category term="Spring Transaction Annotation"/><category term="The Foundations"/><category term="Unmarshalling"/><category term="Webservice"/><category term="XML External Entity"/><category term="XXE"/><category term="XmlJavaTypeAdapter"/><category term="XmlSlurper"/><category term="aggregator"/><category term="async"/><category term="automated dozer testing"/><category term="autoscaling"/><category term="buttercup"/><category term="devstack"/><category term="directory structure"/><category term="dozer"/><category term="email"/><category term="endeca"/><category term="enterprise integration"/><category term="error handling in spring"/><category term="esb"/><category term="heat"/><category term="iPod"/><category term="jaudiotagger"/><category term="java"/><category term="log4j"/><category term="log4j configuration servlet"/><category term="mdex presentation api"/><category term="mule"/><category term="nagios"/><category term="nrdp"/><category term="nrds"/><category term="object transformation"/><category term="oracle"/><category term="orchestration"/><category term="parallel process"/><category term="search"/><category term="splitter"/><category term="spring"/><category term="spring aop"/><category term="web services"/><title type='text'>10-99</title><subtitle type='html'>Technical Blog mostly computer software and programming.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-5693939866004878976</id><published>2015-07-14T12:06:00.002-07:00</published><updated>2015-07-14T12:06:45.653-07:00</updated><title type='text'>Ready Set Go Openstack!</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;b id=&quot;docs-internal-guid-1bcbd6f6-8de7-c7ba-72ba-68d5de6916f5&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;margin-left: 0pt;&quot;&gt;
&lt;table style=&quot;border-collapse: collapse; border: none; width: 602px;&quot;&gt;&lt;colgroup&gt;&lt;col width=&quot;*&quot;&gt;&lt;/col&gt;&lt;col width=&quot;136&quot;&gt;&lt;/col&gt;&lt;col width=&quot;162&quot;&gt;&lt;/col&gt;&lt;col width=&quot;*&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;
&lt;tr style=&quot;height: 0px;&quot;&gt;&lt;td style=&quot;background-color: #a4c2f4; border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #a4c2f4; border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;LAYER&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;background-color: #a4c2f4; border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Example Technology&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;background-color: #a4c2f4; border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Workaround (ignore)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;height: 0px;&quot;&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;5&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Customer VMs&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Virtual machines&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;height: 0px;&quot;&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;4&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Openstack Services (Proxy to Virtualization)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;nova-api, nova-compute, nova-scheduler….cinder-api, cinder-volume….neutron...swift..&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;ol style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://docs.openstack.org/juno/install-guide&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;devstack&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;height: 0px;&quot;&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;3&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Virtualization Software (Hypervisor- Type B)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;KVM, QEMU, XEN, LXC, Docker, Ironic, Hyper-V&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;height: 0px;&quot;&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Operating System &amp;nbsp;(Virtualization Software (Hypervisor- Type A))&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Ubuntu, Redhat, Vmware ESXi&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Only because we have a laptop with windows&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;VirtualBox &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;-&amp;gt; Create a Ubuntu VM and assume that is our Baremetal server with ubuntu. &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Vagrant (&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;script to spin a VM and install stuff&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style=&quot;height: 0px;&quot;&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Hardware (baremetal)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Laptop, HP Servers, Dell Racks, blade servers&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;[study material]&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Read the following in order. Read a topic such as Openstack Identity first in the admin guide then in config guide and then in install guide. Then repeat the same order for Openstack Image, compute etc.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Admin guide: &lt;/span&gt;&lt;a href=&quot;http://docs.openstack.org/admin-guide-cloud/content/&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://docs.openstack.org/admin-guide-cloud/content/&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Configuration Guide: &lt;/span&gt;&lt;a href=&quot;http://docs.openstack.org/kilo/config-reference/content/&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://docs.openstack.org/kilo/config-reference/content/&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Install Guide: &lt;/span&gt;&lt;a href=&quot;http://docs.openstack.org/juno/install-guide/install/apt/content/index.html&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://docs.openstack.org/juno/install-guide/install/apt/content/index.html&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;[Hands on]&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;In order to install openstack (which needs multiple nodes - at least one controller node, one compute node) we need to spin multiple nodes in personal laptop and hence we need to use a virtualization software&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;https://www.virtualbox.org/wiki/Downloads&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;VirtualBox &lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;(is the virtualization software) &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;http://www.vagrantup.com/downloads.html&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Vagrant &lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;( we can write a script to spin a VM instead of using VirtualBox UI)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;http://docs.openstack.org/developer/devstack/&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Devstack &lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;is a all in one box openstack install. It is a bunch of shell scripts that install openstack as described in the install guide. These scripts deploy openstack components all in one box and hence not supposed to be used for production installs. It is intended for development and test purpose installs only.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Installing Openstack in Laptop using &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;VirtualBox&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Vagrant&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; and &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Devstack&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Install VirtualBox by downloading from, choose all defaults. &lt;/span&gt;&lt;a href=&quot;https://www.virtualbox.org/wiki/Downloads&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;https://www.virtualbox.org/wiki/Downloads&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Install Vagrant by downloading from, choose all defaults &lt;/span&gt;&lt;a href=&quot;http://www.vagrantup.com/downloads.html&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://www.vagrantup.com/downloads.html&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Now we are ready to write a vagrant script and create a ubuntu VM in windows laptop. &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;create a folder in your laptop, say c:\devstack&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;open command prompt and &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;cd c:\devstack&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; and run following commands&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;download a 64 bit ubuntu image&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;vagrant box add precise64 &lt;/span&gt;&lt;a href=&quot;http://files.vagrantup.com/precise64.box&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://files.vagrantup.com/precise64.box&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;spin a ubuntu VM using Vagrant and VirtualBox inside windows laptop&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;create a file : &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;c:\devstack\Vagrantfile&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; with following contents&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; list-style-type: disc; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;color: #1155cc; font-family: Arial;&quot;&gt;&lt;u&gt;&lt;span style=&quot;font-size: 14.6666669845581px; line-height: 20.2399997711182px; white-space: pre-wrap;&quot;&gt;https://gist.github.com/sheenaa24/c92a600dae0f0c4cef38&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; list-style-type: disc; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;font-family: Arial;&quot;&gt;&lt;span style=&quot;font-size: 14.6666666666667px; line-height: 1.38; white-space: pre-wrap;&quot;&gt;boot the VM using vagrant up and at following location as follows&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;c:\devstack &amp;gt; &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;vagrant up&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;above will output a successful VM creation stating ssh port as 2222&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;ssh to the new VM using following command&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;c:\devstack &amp;gt; &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;vagrant ssh&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;At the end of above steps you should have successfully spun a ubuntu VM inside windows and presented a ssh shell into the new VM&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/b&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; download devstack scripts to install openstack - all in one box&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;on the ssh shell session for the ubuntu VM download devstack scripts using following commands&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;sudo apt-get update&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;sudo apt-get -y install git&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;git clone git://git.openstack.org/openstack-dev/devstack&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;cd devstack&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;install openstack&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;cd /home/vagrant/devstack&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;vi local.conf&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;paste the following into this file and save &lt;/span&gt;&lt;u style=&quot;color: #1155cc; font-size: medium; line-height: normal;&quot;&gt;&lt;span style=&quot;font-size: 14.6666669845581px; line-height: 20.2399997711182px; white-space: pre-wrap;&quot;&gt;https://gist.github.com/sheenaa24/a87d70ad95be5a755ee1&lt;/span&gt;&lt;/u&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;./stack.sh&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;Access openstack&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;dashboard: &lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;a href=&quot;http://localhost:8080/&quot; style=&quot;text-decoration: none;&quot;&gt;&lt;span style=&quot;background-color: transparent; color: #1155cc; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;http://localhost:8080&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;user/pass : admin/letm3in&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;command line tools&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;cd /home/vagrant/devstack&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;source openrc admin admin&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;any command line tool example. such as:&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;ul style=&quot;margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;list VMs: &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;nova list&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li dir=&quot;ltr&quot; style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;&quot;&gt;
&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;list images: &lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: black; font-family: Arial; font-size: 14.666666666666666px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;glance image-list&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;span style=&quot;font-family: Arial; font-size: 14.6666666666667px; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;keystone tenants: &lt;/span&gt;&lt;span style=&quot;font-family: Arial; font-size: 14.6666666666667px; font-weight: bold; vertical-align: baseline; white-space: pre-wrap;&quot;&gt;keystone tenant-list&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/5693939866004878976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/5693939866004878976' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/5693939866004878976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/5693939866004878976'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2015/07/ready-set-go-openstack.html' title='Ready Set Go Openstack!'/><author><name>Sheena</name><uri>http://www.blogger.com/profile/08186479806821610596</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-1195029276434485378</id><published>2015-02-22T11:43:00.000-08:00</published><updated>2015-02-23T05:51:13.827-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="autoscaling"/><category scheme="http://www.blogger.com/atom/ns#" term="ceilometer"/><category scheme="http://www.blogger.com/atom/ns#" term="devstack"/><category scheme="http://www.blogger.com/atom/ns#" term="heat"/><category scheme="http://www.blogger.com/atom/ns#" term="HOT template"/><category scheme="http://www.blogger.com/atom/ns#" term="openstack"/><category scheme="http://www.blogger.com/atom/ns#" term="orchestration"/><title type='text'>Autoscaling Example Using Openstack Heat and Ceilometer on a Devstack install</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;https://wiki.openstack.org/wiki/Heat&quot;&gt;Heat : Openstack&#39;s orchestration service&lt;/a&gt;.&lt;br /&gt;
&lt;a href=&quot;https://wiki.openstack.org/wiki/Ceilometer&quot;&gt;Ceilometer: Openstack&#39;s usage collection service&lt;/a&gt;.&lt;br /&gt;
&lt;a href=&quot;https://wiki.openstack.org/wiki/Nova&quot;&gt;Nova: Openstack&#39;s compute service&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://docs.openstack.org/developer/devstack/&quot;&gt;Devstack: All in one machine install of openstack services&lt;/a&gt;. Meets development purposes.&lt;br /&gt;
&lt;a href=&quot;https://www.vagrantup.com/&quot;&gt;Vagrant: Scripting to spin a VM for development purposes&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: purple;&quot;&gt;&lt;u&gt;Real Business usecase&lt;/u&gt;&lt;/span&gt;&lt;/h2&gt;
Real business use case:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;spin 2 VMs to serve standard load&lt;/li&gt;
&lt;li&gt;scale up to 3 VMs when CPU load on existing VMs rises above a threshold&lt;/li&gt;
&lt;li&gt;scale down to 1 VMs when CPU loads are below a threshold. &amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
&lt;u&gt;&lt;span style=&quot;color: purple;&quot;&gt;
Outline Steps during this exercise&lt;/span&gt;&lt;/u&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Setup a new linux install. Create a VM using Vagrant and VirtualBox&lt;/li&gt;
&lt;li&gt;Download devstack and install Openstack services&lt;/li&gt;
&lt;li&gt;Create a Heat HOT template describing our use case&lt;/li&gt;
&lt;li&gt;Verify that on launch Heat, Ceilometer and Nova work in tandem to achieve our use case.&lt;/li&gt;
&lt;li&gt;Analyze the glue that ties heat, ceilometer and nova together.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: purple;&quot;&gt;&lt;u&gt;Step 1: Setup a new linux install. Create a VM using Vagrant and VirtualBox&lt;/u&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;install VirtualBox&amp;nbsp;https://www.virtualbox.org/wiki/Downloads&lt;/li&gt;
&lt;li&gt;install Vagrant&amp;nbsp;http://www.vagrantup.com/downloads.html&lt;/li&gt;
&lt;li&gt;open a terminal and import a vagrant box&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
vagrant box add trusty64 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Create a working folder and a new file named Vagrantfile with following contents&lt;/li&gt;
&lt;script src=&quot;https://gist.github.com/rakesh-patnaik/9e3edb8354feab1aab03.js&quot;&gt;&lt;/script&gt;
&lt;li&gt;bring up the VM&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
vagrant up&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;ssh on to the newly created vm&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
vagrant ssh&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;update and install git&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get -y install git&lt;/div&gt;
&lt;br /&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
&lt;u&gt;&lt;span style=&quot;color: purple;&quot;&gt;Step 2: Download devstack and install Openstack services&lt;/span&gt;&lt;/u&gt;&lt;/h2&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;git clone git://git.openstack.org/openstack-dev/devstack&amp;nbsp;&lt;/li&gt;
&lt;li&gt;cd devstack&lt;/li&gt;
&lt;li&gt;git checkout stable/icehouse&lt;/li&gt;
&lt;li&gt;create a local.conf file as follows . I have substituted a password: letm3in across the board as this is just a example demonstration and nothing serious.
&lt;script src=&quot;https://gist.github.com/rakesh-patnaik/0aef511888c5441c6167.js&quot;&gt;&lt;/script&gt;&lt;/li&gt;
&lt;li&gt;./stack.sh&amp;nbsp;&lt;/li&gt;
&lt;li&gt;After the above script completes you should be able to perform following to test out a successful install&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Open horizon dashboard using your browser at &lt;a href=&quot;http://localhost:8080/&quot;&gt;http://localhost:8080/&lt;/a&gt; and login using admin/letm3in&lt;/li&gt;
&lt;li&gt;Access keystone API to generate a auth token. Assuming the port forwarding is same as in the Vagrantfile above
&lt;script src=&quot;https://gist.github.com/rakesh-patnaik/771d9fbb1ca060f2fedf.js&quot;&gt;&lt;/script&gt;&lt;/li&gt;
&lt;li&gt;Access ceilometer API at&amp;nbsp;&lt;a href=&quot;http://localhost:8082/v2&quot;&gt;http://localhost:8082/v2&lt;/a&gt;&amp;nbsp;assuming the&amp;nbsp;port forwarding is same as in the Vagrantfile above&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;h2&gt;
&lt;u&gt;&lt;span style=&quot;color: purple;&quot;&gt;Step 3:&amp;nbsp;Create a Heat HOT template describing our use case&lt;/span&gt;&lt;/u&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;/div&gt;
Assumptions that you might need to stick to:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;ceilometer collects metrics every 10 minutes (this is the default on a devstack install)&lt;/li&gt;
&lt;li&gt;cpu_util in my deployment ranged around 0.65% by observation and hence my ceilometer alarm thresholds in my template are listed at 0.65%&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Now the template (explanation below the template)
&lt;script src=&quot;https://gist.github.com/rakesh-patnaik/b037f6a9bd4c959aee76.js&quot;&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Explanation:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;The template is broadly divided into two sections - parameters and resources&lt;/li&gt;
&lt;li&gt;Parameters provide a means to provide values into the template when it is loaded into Heat using either command line or horizon dashboard. I have pasted some snapshots as to how these parameters play out when you use horizon dashboard to load it.&lt;/li&gt;
&lt;li&gt;Resources section is a listing of following resources&lt;/li&gt;
&lt;li&gt;A resource called &quot;asg&quot; - named to abbreviate auto scaling group. Please feel free to name as it suits you. This resource list that it deals in a list of resources that form this group. In this case just one resource - a instance or VM that we will use heat to launch or tear down during our upscale or downscale operations&lt;/li&gt;
&lt;li&gt;A resource called &quot;scale_up_policy&quot; and a resource called &quot;scale_down_policy&quot; which define our policy around up scale operation where we increase the count of our resource in asg group (nova instance) by either +1 or -1&lt;/li&gt;
&lt;li&gt;A resource called &quot;cpu_alarm_high&quot; and a resource called &quot;cpu_alarm_low&quot; which define the ceilometer alarms that heat will provision to be called back upon for up scale or down scale operations when thresholds are satisfied. I have used a threshold definition using cpu_util meter to be computed over 600 seconds (equivalent to ceilometer collection intervals) and the alarm evaluation over 1 period of 600 seconds. Please check the output of the ceilometer call to retrieve alarms that explain further on call back urls and query criteria.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Launch the above template using horizon dashboard&lt;/b&gt;:&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Login to dashboard at&amp;nbsp;&lt;a href=&quot;http://localhost:8080/&quot;&gt;http://localhost:8080/&lt;/a&gt; using admin/letm3in&lt;/li&gt;
&lt;li&gt;Change the tenant on the top of the page to admin&lt;/li&gt;
&lt;li&gt;click on Project -&amp;gt; Orchestration -&amp;gt; stacks&lt;/li&gt;
&lt;li&gt;Click Launch Stack button and select file and browse to the HOT template above and say ok.&lt;/li&gt;
&lt;li&gt;The next page that shows up is a page to provide values you specified in properties section of the template. You might need to collect a image id from Project -&amp;gt; Compute -&amp;gt; images page. Provide password letm3in and hit Next.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizBl2kmTgD1zkUK9lx0VNaiK1UEM630jUJl2WEl2UPKp_s5dtcDoUgFJKrI8NrouZfqoivRcsji6qZftkdOS_ZOZk__cC4O-BZ6FUDIrBsrtZISDKh2UnvDa817axE7xbS-O3_CGwhNYo/s1600/Launch_template.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizBl2kmTgD1zkUK9lx0VNaiK1UEM630jUJl2WEl2UPKp_s5dtcDoUgFJKrI8NrouZfqoivRcsji6qZftkdOS_ZOZk__cC4O-BZ6FUDIrBsrtZISDKh2UnvDa817axE7xbS-O3_CGwhNYo/s1600/Launch_template.PNG&quot; height=&quot;147&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Next page shows a in progress template launch. Please wait for status to show complete.&lt;/li&gt;
&lt;li&gt;At this point the stack is at the desired capacity of resources under &quot;asg&quot; section. We will have to wait for at lease 20 more minutes for cpu_util metric to show up and raise alarms either cpu_util higher than 0.65% or lower than 0.65% to drive auto scaling.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;h2&gt;
&lt;span style=&quot;color: purple;&quot;&gt;&lt;u&gt;Step 4:&amp;nbsp;Verify that on launch Heat, Ceilometer and Nova work in tandem to achieve our use case.&lt;/u&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Upon waiting for around 20 minutes (600 seconds x 2 intervals) ceilometer would have collected cpu meters and computed cpu_util metric to raise either a cpu_alarm_high or cpu_alarm_low. Please browse to Project -&amp;gt; Orchestration -&amp;gt; stacks -&amp;gt; click on the template -&amp;gt; select events tab to show something as follows that I experienced. Notice that it specifies the cpu_util value and the policy that got triggered. In my case it triggered a scale_up_policy as cpu_util was 5.8% followed by a scale_down_policy because cpu_util was at 0.59% followed by a scale_up_policy as cpu_util was at 0.66%&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJtO5nUygMhRckG67yBkBjQD6yYDHOWvC5bpjibam0qeBuiGw7eH3CMqaZEvpwLxDllPEgMG-xUmeEY3gk4OrnnsTbTreRjsjYnNkNJyyUsVXVGJeCrM4vBC_6RxoolR0_xDJu9gsVxso/s1600/stack_events.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJtO5nUygMhRckG67yBkBjQD6yYDHOWvC5bpjibam0qeBuiGw7eH3CMqaZEvpwLxDllPEgMG-xUmeEY3gk4OrnnsTbTreRjsjYnNkNJyyUsVXVGJeCrM4vBC_6RxoolR0_xDJu9gsVxso/s1600/stack_events.PNG&quot; height=&quot;107&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2&gt;
&lt;span style=&quot;color: purple;&quot;&gt;&lt;u&gt;Step 4:&amp;nbsp;Analyze the glue that ties heat, ceilometer and nova together.&lt;/u&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Heat template definition of metadata drives metadata flow over to nova and ceilometer alarms. Following sections of the above depicted heat template. Upon launch heat creates resources to the desired capacity. In our example 2 VMs. Following metadata definition in the HOT template drives this:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCaoYfwPg_cthji7kpjiAHuzgq2UZbwEvu23qC8OxdBnXCjC3jYywQGxGagg9F71EfwCbulwIKQkJtALCV7T9s0ij2VKg2qYcvANY9nbhwEsTDoPweJHIEDl90flzEQFAp66ZGuyyArMw/s1600/HOT-instance-metadata.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCaoYfwPg_cthji7kpjiAHuzgq2UZbwEvu23qC8OxdBnXCjC3jYywQGxGagg9F71EfwCbulwIKQkJtALCV7T9s0ij2VKg2qYcvANY9nbhwEsTDoPweJHIEDl90flzEQFAp66ZGuyyArMw/s1600/HOT-instance-metadata.PNG&quot; height=&quot;164&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Nova API call to retrieve instance detail shows the above defined metadata in action. Mark lines 71, 72 and 73 with metadata that was defined by HOT template:
&lt;script src=&quot;https://gist.github.com/rakesh-patnaik/184607442b9bb8c83581.js&quot;&gt;&lt;/script&gt;
&lt;/li&gt;
&lt;li&gt;Ceilometer Alarm definition that queries for cpu_util on resources with metadata defined by HOT template. Mark lines for metadata based query on ceilometer alarms. Mark lines 23 - 28 and 58 - 63 in the gist below that was created by HOT template
&lt;script src=&quot;https://gist.github.com/rakesh-patnaik/fc8bd080a356bfd19e66.js&quot;&gt;&lt;/script&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/1195029276434485378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/1195029276434485378' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/1195029276434485378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/1195029276434485378'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2015/02/autoscaling-example-using-openstack.html' title='Autoscaling Example Using Openstack Heat and Ceilometer on a Devstack install'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizBl2kmTgD1zkUK9lx0VNaiK1UEM630jUJl2WEl2UPKp_s5dtcDoUgFJKrI8NrouZfqoivRcsji6qZftkdOS_ZOZk__cC4O-BZ6FUDIrBsrtZISDKh2UnvDa817axE7xbS-O3_CGwhNYo/s72-c/Launch_template.PNG" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-4674656723700043415</id><published>2014-08-11T14:41:00.003-07:00</published><updated>2020-07-12T12:18:41.158-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PMP"/><category scheme="http://www.blogger.com/atom/ns#" term="Project Management Planning"/><title type='text'>Passing PMP in 21 days</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Everyone,&lt;br /&gt;
&lt;br /&gt;
If you have worked in a project which followed SDM processes, then it is easy to pass PMP exam. I am listing below the steps taken by me to get my PMP in 3 weeks.&lt;br /&gt;
&lt;br /&gt;
Step 1 : Register for 35 hours of PM education from ProXalt for $35&lt;br /&gt;
&lt;br /&gt;
Step 2 : Read Head first PMP to understand the concepts. It is really easy and fun to learn. I encourage everyone to read this before reading any other PMP book.&lt;br /&gt;
&lt;br /&gt;
Step 3 : Take short sample tests. You will find it is difficult to get a passing score, because scenario based questions are not covered in Head First PMP.&lt;br /&gt;
&lt;br /&gt;
Step 4 : Read&amp;nbsp;&lt;span style=&quot;font-family: &amp;quot;segoe ui&amp;quot; , &amp;quot;lucida grande&amp;quot; , &amp;quot;helvetica neue&amp;quot; , sans-serif; font-size: 15px; line-height: 27px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://pmexamlessonslearned.com/recommends/rita&quot; style=&quot;-webkit-transition: all 0.5s ease-out; border-bottom-color: transparent; border-bottom-style: dotted; border-bottom-width: 2px; box-sizing: border-box; font-family: &#39;Segoe UI&#39;, &#39;Lucida Grande&#39;, &#39;Helvetica Neue&#39;, sans-serif; font-size: 15px; line-height: 27px; text-decoration: none; transition: all 0.5s ease-out;&quot; target=&quot;_blank&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;Rita Mulcahy’s PMP&lt;/span&gt;&lt;/a&gt;&amp;nbsp;Exam prep 8th Edition. This has in-depth explanations for scenario based questions. Has tons of exercises, flow charts and what-next, what-before kinda questions which will help you map the processes and knowledge areas. Glance through it once again.&lt;br /&gt;
&lt;br /&gt;
Step 5 : Read notes and ITTOs like&amp;nbsp;Abhishek&#39;s Version - Rajesh Nair PMP Notes&lt;br /&gt;
&lt;br /&gt;
Step 6 : Take as many PMP free tests as possible. Register for free sets of questions from various sites. It is okay to retake tests twice. Take Oliver Lehmann&#39;s test which is the most difficult.&lt;br /&gt;
&lt;br /&gt;
Step 7 : Reference PMBOK guide when you check answers for the test.&lt;br /&gt;
&lt;br /&gt;
Step 8 : Once you score 70% or above in tests, book your test with prometric.&lt;br /&gt;
&lt;br /&gt;
Step 9 : &amp;nbsp;Go and write the exam!&lt;br /&gt;
&lt;br /&gt;
Thank you all for reading this!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/4674656723700043415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/4674656723700043415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/4674656723700043415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/4674656723700043415'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2014/08/passing-pmp-in-21-days.html' title='Passing PMP in 21 days'/><author><name>Sheena</name><uri>http://www.blogger.com/profile/08186479806821610596</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-2938441613942198557</id><published>2014-05-16T09:22:00.001-07:00</published><updated>2014-05-16T09:26:08.509-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ceilometer"/><category scheme="http://www.blogger.com/atom/ns#" term="nagios"/><category scheme="http://www.blogger.com/atom/ns#" term="nrdp"/><category scheme="http://www.blogger.com/atom/ns#" term="nrds"/><category scheme="http://www.blogger.com/atom/ns#" term="openstack"/><title type='text'>OpenStack Monitoring with Nagios</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Monitoring OpenStack can be placed widely into two buckets.&lt;br /&gt;
&lt;div&gt;
1. Monitor OpenStack infrastructure&lt;/div&gt;
&lt;div&gt;
2. Monitor OpenStack services grouped by tenants/projects&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
#1 above can be performed using &lt;a href=&quot;http://www.nagios.com/&quot;&gt;Nagios&lt;/a&gt;. Monitoring aspects such as CPU, RAM, Disk Space, Network, installed OpenStack processes (e.g. nova-conductor, nova-scheduler, swift-proxy &amp;nbsp;etc. )&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
#2 above can be performed using &lt;a href=&quot;http://docs.openstack.org/developer/ceilometer/measurements.html&quot;&gt;Ceilometer API&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There are a lot of good articles on the web depicting Nagios usage. This particular model depicted as part of the diagram below uses nagios with &lt;a href=&quot;http://exchange.nagios.org/directory/Addons/Passive-Checks/NRDP--2D-Nagios-Remote-Data-Processor/details&quot;&gt;NRDP &lt;/a&gt;and &lt;a href=&quot;http://exchange.nagios.org/directory/Addons/Components/Nagios-Remote-Data-Sender-(NRDS)/details&quot;&gt;NRDS &lt;/a&gt;to monitor an OpenStack ecosystem.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-cA-hi6Cs5mSeGcBb0uFH0Zaz1_DsBgeoSrWI-pJ5KhFSAfOp30ciyjW1fayHEAQdhFmi-FUho4PZ1M4BEJD10ARidKc6ANLnCgLCnfB8TZCGVGdi2dkqr0B2rrHCURyhzN7wfIGzVuA/s1600/MonitoringOpenStack.jpeg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-cA-hi6Cs5mSeGcBb0uFH0Zaz1_DsBgeoSrWI-pJ5KhFSAfOp30ciyjW1fayHEAQdhFmi-FUho4PZ1M4BEJD10ARidKc6ANLnCgLCnfB8TZCGVGdi2dkqr0B2rrHCURyhzN7wfIGzVuA/s1600/MonitoringOpenStack.jpeg&quot; height=&quot;320&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/2938441613942198557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/2938441613942198557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/2938441613942198557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/2938441613942198557'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2014/05/openstack-monitoring-with-nagios.html' title='OpenStack Monitoring with Nagios'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-cA-hi6Cs5mSeGcBb0uFH0Zaz1_DsBgeoSrWI-pJ5KhFSAfOp30ciyjW1fayHEAQdhFmi-FUho4PZ1M4BEJD10ARidKc6ANLnCgLCnfB8TZCGVGdi2dkqr0B2rrHCURyhzN7wfIGzVuA/s72-c/MonitoringOpenStack.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-5269631941506247884</id><published>2014-05-13T13:57:00.001-07:00</published><updated>2014-05-15T14:09:08.720-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ariba"/><category scheme="http://www.blogger.com/atom/ns#" term="Business Proposal"/><category scheme="http://www.blogger.com/atom/ns#" term="Proposal"/><category scheme="http://www.blogger.com/atom/ns#" term="Proposal Process"/><category scheme="http://www.blogger.com/atom/ns#" term="Request For Proposal"/><category scheme="http://www.blogger.com/atom/ns#" term="RFP"/><category scheme="http://www.blogger.com/atom/ns#" term="RFP Process"/><category scheme="http://www.blogger.com/atom/ns#" term="RFP Proposal Sample"/><category scheme="http://www.blogger.com/atom/ns#" term="RFP Sample"/><title type='text'>Responding to an RFP(Request For Proposal)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h2 style=&quot;-webkit-text-stroke-width: 0px; color: black; font-family: &#39;Times New Roman&#39;; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
What is RFP?&lt;/h2&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
A request for proposal (RFP) is a document that an organization posts to elicit bids from potential vendors for a product or service.&lt;span style=&quot;background-color: white; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;This usually is done to have several companies bid on the work, thus producing more competitive prices. However, if it is not done correctly, it can produce no bids or bids that are a waste of your time.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;RFP is usually developed by Sourcing team with the help of&amp;nbsp;sponsors, business users and sourcing/strategy team.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;There are sourcing and procurement tools available in the industry from various organizations like Ariba, SourceOne, Enporion, etc.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;Sourcing Team&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;Sends RFP to Vendors, respond to questions from vendors, setup meeting with vendors to present the proposal. They pass the information back and forth between the vendors and business users who requested the RFP. Sourcing team make sure all processes are followed&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;RFP Review team&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&amp;nbsp;This team reviews the responses for the RFP and score the vendors for their proposals. Score card is given to every reviewer in the RFP team. Reviewers consists of Business users, IT partners, Business and IT architecture team, strategy team, Managers, Directors, etc.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;Selection Criteria&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;The proposals you get back in response to your RFP will differ. Each organization that responds to an RFP&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&amp;nbsp;will have different strengths. Selection criteria can be lowest cost, best quality, most complete feature set, etc. You should decide up front whether you are looking for the lowest cost, the fastest delivery, or some combination. Various comparative approach like Cost Benefit Ratio, Present Value, Net Present Value, Internal Rate of Return(IRR), Payback Period or more mathematical approach like linear, Nonlinear, Dynamic, Integer, Multi-Objective algorithms, etc. can be used.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;Time Restriction&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;When an RFP is published, there is a time limit set to respond to with your proposal.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;RFP is send out via mail or email to selected Vendors by the sourcing team. Participating vendors are selected based on industry experience, features provided,&amp;nbsp;clientele, etc. Sourcing team can either pre-select few vendors or post it to all eligible parties.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 12px; line-height: 18px;&quot;&gt;Proposal submission process usually consist of Responding to RFP questionnaire, Presenting the proposal followed by the Demonstration of the solution/product/service.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;During the proposal review vendors are scored on the RFP responses, Proposal presentation and Cost. &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;background-color: white; font-family: Verdana; font-size: large; line-height: 18px;&quot;&gt;How to Respond to an RFP?&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
First and foremost thing to do is form a RFP response team. Team should consists of presenters, marketing staff, SMEs, technical writer, multimedia/stylist, management staffs, etc.&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;The team can analyse the RFP and create a proposal to respond to the RFP. Usually the questionnaire consists of a list of&amp;nbsp;inquiries&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&amp;nbsp;to check if the product/service can handle the client demands.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;The questions could be categorized based on major business/client needs. There could be additional sections for Non-Disclosure Agreement(NDA), Financial Profile, Company Profile, Minority/Women-owned Business, Current Customer Status/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;Industry Experience&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;, References, Supplier Governance and Cost.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;For an IT project, it may also have additional questions regarding Project Managements, Architecture, etc.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Questionnaire will have Response&amp;nbsp;Submission Instructions, Introduction about the Client/Need and options to attach&amp;nbsp;additional documents. Additional instructions may be provided on how to attach response documents like Financial Matrix table, Professional Services Pricing Sheet, glossary, etc. A Sample Response Submission Instruction is shown below.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitJ8nOUMqTmoATHnFsts3bMhEPn9pZMDyn9XWXRzsI5SGVyvHiqmwvrmH3TlEaufRHVY6SgK2XZRHVFMYETBudaXAL4Z0KByiYAvb68JXzcn_SJ5uxJzxSaMqGWzNEW8fZryPViz_wWrY/s1600/Response-Instructions.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitJ8nOUMqTmoATHnFsts3bMhEPn9pZMDyn9XWXRzsI5SGVyvHiqmwvrmH3TlEaufRHVY6SgK2XZRHVFMYETBudaXAL4Z0KByiYAvb68JXzcn_SJ5uxJzxSaMqGWzNEW8fZryPViz_wWrY/s1600/Response-Instructions.jpg&quot; height=&quot;171&quot; style=&quot;cursor: move;&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;Introduction will describe the project objectives, product requirements, scope and need by date.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Financial Profile will have questions related to your company&#39;s financial situation like &#39;Has your organization been involved in material merger/Acquisition/Divestiture&amp;nbsp;activity in the last three years&#39;, &#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Please provide a copy of your organization’s Comprehensive Dun &amp;amp; Bradstreet Report&#39;, &#39;How does your organization ensure compliance with state/federal regulatory requirements&#39;, etc.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Sample Financial Profile related questions are shown below.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLQ1_HfIql5u4x7U6LPTixNxvnrHLTv3c8geSRQCeSzdxuHwEmCWw65lK3BovdW-IQnAeO5eqlL4h_CalOy_A27ByXeyQypMhyVci3aKwaBUZ0V1zNpM_rK9VruWCYIPtn0k4D0d2Nong/s1600/Financial-Profile.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLQ1_HfIql5u4x7U6LPTixNxvnrHLTv3c8geSRQCeSzdxuHwEmCWw65lK3BovdW-IQnAeO5eqlL4h_CalOy_A27ByXeyQypMhyVci3aKwaBUZ0V1zNpM_rK9VruWCYIPtn0k4D0d2Nong/s1600/Financial-Profile.jpg&quot; height=&quot;171&quot; style=&quot;cursor: move;&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Company Profile will contain questions regarding your organization like total number of customers, employees,, repeat client ratio, industry awards, etc.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Sample Company Profile related questions are shown below.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTExnYhYJ8lyRLtOuxafvTFisvh6U-n46Xkx8REL-1p0b7fvJkU_gQjiDRKb6KEjWLhvG_Gn9wHjMeT1FrJwzjDXuu7V4UNrXXZjQTeI2_veoUkfbOPiRzDMiO0ZxjZqGZoxAauY1R_f8/s1600/Company-Profile.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTExnYhYJ8lyRLtOuxafvTFisvh6U-n46Xkx8REL-1p0b7fvJkU_gQjiDRKb6KEjWLhvG_Gn9wHjMeT1FrJwzjDXuu7V4UNrXXZjQTeI2_veoUkfbOPiRzDMiO0ZxjZqGZoxAauY1R_f8/s1600/Company-Profile.jpg&quot; height=&quot;126&quot; style=&quot;cursor: move;&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Minority/Women-Owned Business will have to answer additional questions like supplier diversity program, MWBE certification, etc.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9l7zKNqiLj41IkMnb2ytqqX4896UzL7Phvaigojklwr55Ds4O4SZHMRGN0H3zqzO2J_XkJ2JvUCNN2z7mlRnJEL9kyL5T19-5QKVCCVpGjH_gkc0U00W9do_b_vguU-PjVgH54GmknLE/s1600/Minority-Women.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9l7zKNqiLj41IkMnb2ytqqX4896UzL7Phvaigojklwr55Ds4O4SZHMRGN0H3zqzO2J_XkJ2JvUCNN2z7mlRnJEL9kyL5T19-5QKVCCVpGjH_gkc0U00W9do_b_vguU-PjVgH54GmknLE/s1600/Minority-Women.jpg&quot; height=&quot;93&quot; style=&quot;cursor: move;&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Additional questions related to current relationship with the organization could be present. If you have done business in the past with this client, then it is a good idea to highlight all the achievements with proof.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkcZj_nPqnDbFZdEdUr0DjeGTuQVvvlhBXF4Fzfl8qz3b14SW-kR5MYExf3h1j1c7uHSN8xNYq5CmnDa_2tF-DX758y5-Z6LBBZiBzMMV7ye2F6itdlHTo0ua4Don-HKeoIUzyEatYrFc/s1600/Current-Customer-Status.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkcZj_nPqnDbFZdEdUr0DjeGTuQVvvlhBXF4Fzfl8qz3b14SW-kR5MYExf3h1j1c7uHSN8xNYq5CmnDa_2tF-DX758y5-Z6LBBZiBzMMV7ye2F6itdlHTo0ua4Don-HKeoIUzyEatYrFc/s1600/Current-Customer-Status.jpg&quot; height=&quot;101&quot; style=&quot;cursor: move;&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Reference section requests multiple contacts, brief descriptions of services/products provided with&amp;nbsp;time frame.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Supplier Governance questions talks about supplier support model, if there are resources working outside of present country, typical SLAs, etc. Sample is provided below.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-4Wq9sr3ZTqbG4O-wf59cnkP4ldQjVmEYi5LVfZCIFxE7wXwb95kxbiByzXHTPVpeR6cHSKwd3wTJuG9a7a37-H-5W_UeAjL2wHwKRivxvJr1Gdvv1YiaCBIcKYTUz4WHdsvPUEU4Dm0/s1600/Supplier-Governance.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-4Wq9sr3ZTqbG4O-wf59cnkP4ldQjVmEYi5LVfZCIFxE7wXwb95kxbiByzXHTPVpeR6cHSKwd3wTJuG9a7a37-H-5W_UeAjL2wHwKRivxvJr1Gdvv1YiaCBIcKYTUz4WHdsvPUEU4Dm0/s1600/Supplier-Governance.jpg&quot; height=&quot;137&quot; style=&quot;cursor: move;&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Architecture related questions can request for high -level logical view of your architecture, server&amp;nbsp;environments, process flows, etc. IT related RFP can ask for Platform, Availability &amp;amp; Scalability, Infrastructure &amp;amp; Reliability, Disaster Recovery and Information&amp;nbsp;Security&amp;nbsp;related questions.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijZwfDv4713btg6XlW0wFWoh2t3vwQciPtuXDdKW5JeHWslHSp77_cb-Sglr17k3fsrtWN7MG8AY4Tl4Mo86c6cvNUFvsvch3lpTfE_RJh0xghGFd5uehKrQjKIgnQTMbfnDlDPrEksh4/s1600/IT-Architecture.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijZwfDv4713btg6XlW0wFWoh2t3vwQciPtuXDdKW5JeHWslHSp77_cb-Sglr17k3fsrtWN7MG8AY4Tl4Mo86c6cvNUFvsvch3lpTfE_RJh0xghGFd5uehKrQjKIgnQTMbfnDlDPrEksh4/s1600/IT-Architecture.jpg&quot; height=&quot;122&quot; style=&quot;cursor: move;&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Cost related questions have pricing details for the product, licenses, warranty period, Escrow account, Service Level Agreements, etc.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Sample Cost related questions are as shown below.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgJv90hhBmHm7htGSoxtLvZR75f3qBBardVgeWeMNgpeIdGNYTpua29zaI4yw9iv7iHHDdmDDonPHQHuzaJaKP-9xbRrREZOn1dNg7YMZRRdv-aRY8bnlMBG7Tgrmw4lgdVFOT1ORYxqI/s1600/Cost.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgJv90hhBmHm7htGSoxtLvZR75f3qBBardVgeWeMNgpeIdGNYTpua29zaI4yw9iv7iHHDdmDDonPHQHuzaJaKP-9xbRrREZOn1dNg7YMZRRdv-aRY8bnlMBG7Tgrmw4lgdVFOT1ORYxqI/s1600/Cost.jpg&quot; height=&quot;121&quot; style=&quot;cursor: move;&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 12px; line-height: 18px;&quot;&gt;Provide detailed answers for questions related to the product/service being requested. Final selection of the vendor will be based on the services/product features that accurately fit the requested needs in RFP. Sample questions from a company for Life Insurance Industry is shown below.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;-webkit-text-stroke-width: 0px; clear: both; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; margin: 0px; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLsZBBbX-7YhQFy_eppxeuR5jprLWl7IlD5x1QpvDF-BAwIrdoyZzcO7A9mLgoYXFmWhPbia8kQSfSgqwJ2RlACeTqfNQbNERrwsT-Yb2l_XYSLgH0Ez5ePpSWW6ejBY1jN0-DXwKIJTc/s1600/Needs-Insurance.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLsZBBbX-7YhQFy_eppxeuR5jprLWl7IlD5x1QpvDF-BAwIrdoyZzcO7A9mLgoYXFmWhPbia8kQSfSgqwJ2RlACeTqfNQbNERrwsT-Yb2l_XYSLgH0Ez5ePpSWW6ejBY1jN0-DXwKIJTc/s1600/Needs-Insurance.jpg&quot; height=&quot;84&quot; style=&quot;cursor: move;&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Additional documents can be attached to support any of the answers provided for questions.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;By answering the RFP questionnaire, you are&amp;nbsp;actually&amp;nbsp;shaping your proposal. Proposal is prepared based on&amp;nbsp;the needs listed in RFP. Proposal, cost estimates, glossary,&amp;nbsp;brochures, etc. are send to RFP contact.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: large; line-height: 18px;&quot;&gt;How to Present a Proposal?&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Based on the responses, sourcing team will invite vendors to present the proposal. Usually the presentation can be anywhere from 2 - 6 hours including the demo of the product or service offered.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Presentation deck can be printed out along with product brochures and distributed to the group before the presentation.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 12px; line-height: 18px;&quot;&gt;Presentation and Demo ends with a Question &amp;amp; Answer session. Reviewers regroup and calculate the scores. Based on score the appropriate vendor for the product/service is selected.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;Additional details are requested from selected vendor and the procurement process begins. There could be&amp;nbsp;scenarios&amp;nbsp;in which multiple vendors are selected and additional deep dive-ins are conducted. 1 more&amp;nbsp;vendors can be asked to produce a POC (Proof Of Concept) before the contract is signed.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-size: 12px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: Verdana;&quot;&gt;&lt;span style=&quot;background-color: white; font-size: 12px; line-height: 18px;&quot;&gt;Saying this, I end this blog on how to respond to an RFP.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #333333; font-family: Verdana; font-size: 12px; line-height: 18px;&quot;&gt;Thank you for reading!&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;-webkit-text-stroke-width: 0px; color: black; font: medium &#39;Times New Roman&#39;; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt;
&lt;div style=&quot;margin: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/5269631941506247884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/5269631941506247884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/5269631941506247884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/5269631941506247884'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2014/05/responding-to-rfprequest-for-proposal.html' title='Responding to an RFP(Request For Proposal)'/><author><name>Sheena</name><uri>http://www.blogger.com/profile/08186479806821610596</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitJ8nOUMqTmoATHnFsts3bMhEPn9pZMDyn9XWXRzsI5SGVyvHiqmwvrmH3TlEaufRHVY6SgK2XZRHVFMYETBudaXAL4Z0KByiYAvb68JXzcn_SJ5uxJzxSaMqGWzNEW8fZryPViz_wWrY/s72-c/Response-Instructions.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-122168280536015642</id><published>2014-03-04T14:01:00.001-08:00</published><updated>2014-04-13T12:43:52.263-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="endeca"/><category scheme="http://www.blogger.com/atom/ns#" term="mdex presentation api"/><category scheme="http://www.blogger.com/atom/ns#" term="oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="search"/><title type='text'>Endeca Presentation API class diagram</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;a href=&quot;http://docs.oracle.com/cd/E28910_01/index.html&quot;&gt;Endeca presentation API&lt;/a&gt; is a huge object graph with multitudes of navigation paths and objects. I managed to compile the following class diagram while I used Endeca presentation API for Record Search and Dimension search. I will try to update more as I compile more.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Note: This is not a complete class diagram and is just a means to figure out retrieving record search and dimension search responses from Endeca.&lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
Following maven project is a endeca client POC project that I created to test endeca connection.&lt;a href=&quot;https://bitbucket.org/rpatnaik_lsi/endeca-client-poc&quot;&gt;&amp;nbsp;https://bitbucket.org/rpatnaik_lsi/endeca-client-poc&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8yzrrZZzYPhVdCz6ZbzTz29Gl9cjmMcLcHj32LxCoAIW1IyRJDudx9DV6eKHHhl1nF-Mpjd8Ccw-14LFTfCqvUmhw_zTbJ6ZOTMwj0dQwBX_gt5Nchx7kb88GJvTTySCy7o7DXAniUtM/s1600/Endeca+Presentation+API+-+Class+Diagram.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8yzrrZZzYPhVdCz6ZbzTz29Gl9cjmMcLcHj32LxCoAIW1IyRJDudx9DV6eKHHhl1nF-Mpjd8Ccw-14LFTfCqvUmhw_zTbJ6ZOTMwj0dQwBX_gt5Nchx7kb88GJvTTySCy7o7DXAniUtM/s1600/Endeca+Presentation+API+-+Class+Diagram.png&quot; height=&quot;320&quot; width=&quot;172&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/122168280536015642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/122168280536015642' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/122168280536015642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/122168280536015642'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2014/03/endeca-presentation-api-class-diagram.html' title='Endeca Presentation API class diagram'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8yzrrZZzYPhVdCz6ZbzTz29Gl9cjmMcLcHj32LxCoAIW1IyRJDudx9DV6eKHHhl1nF-Mpjd8Ccw-14LFTfCqvUmhw_zTbJ6ZOTMwj0dQwBX_gt5Nchx7kb88GJvTTySCy7o7DXAniUtM/s72-c/Endeca+Presentation+API+-+Class+Diagram.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-485000649868146306</id><published>2014-02-11T09:47:00.000-08:00</published><updated>2014-02-11T09:47:02.327-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aggregator"/><category scheme="http://www.blogger.com/atom/ns#" term="async"/><category scheme="http://www.blogger.com/atom/ns#" term="esb"/><category scheme="http://www.blogger.com/atom/ns#" term="java"/><category scheme="http://www.blogger.com/atom/ns#" term="mule"/><category scheme="http://www.blogger.com/atom/ns#" term="parallel process"/><category scheme="http://www.blogger.com/atom/ns#" term="splitter"/><title type='text'>Parallel Processing in Mule ESB</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Following is an example of parallel processing in Mule ESB. I tried a couple of other posts out there that suggested parallel processing but when I picked the threading model in them they seemed single threaded. Most of the documentation out there on this topic is a bit confusing. &lt;async&gt; router is a good candidate to spin a parallel asynchronous router and process jobs that are resource intensive. But &lt;async&gt; lacks the ability to queue a list of objects to process asynchronously. Mule &lt;vm&gt; transport in a exchange-pattern=one-way can queue a list of tasks and in combination with &lt;async&gt; router can achieve parallel processing a list of objects. Additionally the &lt;collection-splitter&gt; and &lt;collection-aggregator&gt; routers are required to perform splitting of a list of tasks and aggregation respectively. In all following is the list of mule constructs required to perform the task of parallel processing a list of objects/tasks.&lt;/collection-aggregator&gt;&lt;/collection-splitter&gt;&lt;/async&gt;&lt;/vm&gt;&lt;/async&gt;&lt;/async&gt;&lt;br /&gt;
&lt;br /&gt;
input: A list of objects&lt;br /&gt;
output: A list of processed objects&lt;br /&gt;
&lt;br /&gt;
Mule constructs:&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;collection-splitter router: To split the list of input objects&lt;/li&gt;
&lt;li&gt;vm transport: To queue the objects for parallel processing&lt;/li&gt;
&lt;li&gt;async router: To process a object asynchronously and in a mult-threaded model&lt;/li&gt;
&lt;li&gt;collection-aggregator router: To aggregate the split and processed objects back to a list for output&lt;/li&gt;
&lt;/ol&gt;
&lt;span style=&quot;color: #a64d79;&quot;&gt;Project Code - &lt;a href=&quot;https://www.blogger.com/goog_726642427&quot;&gt;Mule Studio Project as zip&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;color: #a64d79;&quot;&gt;&lt;a href=&quot;http://sites.google.com/site/rockycodes/mule_parallel_process_capitalcase.zip&quot;&gt;http://sites.google.com/site/rockycodes/mule_parallel_process_capitalcase.zip&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #a64d79;&quot;&gt;Mule flow: parallel-processing-flow.xml&lt;/span&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;

&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;mule xmlns:https=&quot;http://www.mulesoft.org/schema/mule/https&quot; xmlns:cxf=&quot;http://www.mulesoft.org/schema/mule/cxf&quot; xmlns:tracking=&quot;http://www.mulesoft.org/schema/mule/ee/tracking&quot; xmlns:http=&quot;http://www.mulesoft.org/schema/mule/http&quot;
 xmlns:vm=&quot;http://www.mulesoft.org/schema/mule/vm&quot; xmlns=&quot;http://www.mulesoft.org/schema/mule/core&quot; xmlns:json=&quot;http://www.mulesoft.org/schema/mule/json&quot; xmlns:doc=&quot;http://www.mulesoft.org/schema/mule/documentation&quot;
 xmlns:spring=&quot;http://www.springframework.org/schema/beans&quot; version=&quot;EE-3.4.1&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
 xsi:schemaLocation=&quot;http://www.mulesoft.org/schema/mule/cxf http://www.mulesoft.org/schema/mule/cxf/current/mule-cxf.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd
http://www.mulesoft.org/schema/mule/https http://www.mulesoft.org/schema/mule/https/current/mule-https.xsd
http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/3.1/mule-json.xsd&quot;&amp;gt;

 &amp;lt;flow name=&quot;ParallelProcessFlow&quot; doc:name=&quot;ParallelProcessFlow&quot;&amp;gt;
  &amp;lt;http:inbound-endpoint exchange-pattern=&quot;request-response&quot; address=&quot;http://localhost:8081/capitalize&quot; doc:name=&quot;HTTP&quot; method=&quot;POST&quot; /&amp;gt;
  &amp;lt;json:json-to-object-transformer returnClass=&quot;java.util.List&quot; /&amp;gt;
  &amp;lt;request-reply timeout=&quot;180000&quot;&amp;gt; &amp;lt;!-- timeout in 3 minutes --&amp;gt;
   &amp;lt;vm:outbound-endpoint path=&quot;one-string-for-processing-vm&quot; doc:name=&quot;send-one-string-for-processing-vm&quot;&amp;gt;
    &amp;lt;message-properties-transformer scope=&quot;outbound&quot;&amp;gt;
     &amp;lt;delete-message-property key=&quot;MULE_REPLYTO&quot; /&amp;gt;
    &amp;lt;/message-properties-transformer&amp;gt;
    &amp;lt;collection-splitter enableCorrelation=&quot;ALWAYS&quot; /&amp;gt;
   &amp;lt;/vm:outbound-endpoint&amp;gt;
   &amp;lt;vm:inbound-endpoint path=&quot;aggregate-processed-strings-vm&quot; doc:name=&quot;aggregate-processed-strings-vm&quot;&amp;gt;
    &amp;lt;collection-aggregator timeout=&quot;120000&quot; /&amp;gt; &amp;lt;!-- timeout in 2 minutes --&amp;gt;
   &amp;lt;/vm:inbound-endpoint&amp;gt;
  &amp;lt;/request-reply&amp;gt;
  &amp;lt;json:object-to-json-transformer /&amp;gt;
 &amp;lt;/flow&amp;gt;

 &amp;lt;flow name=&quot;capitalcase-one-string-flow&quot; doc:name=&quot;capitalcase-one-string-flow&quot;&amp;gt;
  &amp;lt;vm:inbound-endpoint path=&quot;one-string-for-processing-vm&quot; doc:name=&quot;receive-one-string-to-convert-to-capital-case-vm&quot; /&amp;gt;
  &amp;lt;async&amp;gt;
   &amp;lt;logger message=&quot;***CapitalCase #[payload] at #[System.currentTimeMillis()] using #[Thread.currentThread().getName()]&quot; level=&quot;INFO&quot; /&amp;gt;
   &amp;lt;expression-transformer expression=&quot;#[payload.toUpperCase()]&quot; doc:name=&quot;Change to Uppercase&quot; /&amp;gt;
   &amp;lt;logger message=&quot;***CapitalCased #[payload] at #[System.currentTimeMillis()]&quot; level=&quot;INFO&quot; /&amp;gt;
   &amp;lt;vm:outbound-endpoint path=&quot;aggregate-processed-strings-vm&quot; doc:name=&quot;send-back-capitalcase-string-for-aggregation-vm&quot; /&amp;gt;
  &amp;lt;/async&amp;gt;
 &amp;lt;/flow&amp;gt;

&amp;lt;/mule&amp;gt;


&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/485000649868146306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/485000649868146306' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/485000649868146306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/485000649868146306'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2014/02/parallel-processing-in-mule-esb.html' title='Parallel Processing in Mule ESB'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-1117717148984675470</id><published>2013-02-20T22:10:00.002-08:00</published><updated>2013-02-21T08:21:17.822-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="IS_SUPPORTING_EXTERNAL_ENTITIES"/><category scheme="http://www.blogger.com/atom/ns#" term="SUPPORT_DTD"/><category scheme="http://www.blogger.com/atom/ns#" term="XML External Entity"/><category scheme="http://www.blogger.com/atom/ns#" term="XmlSlurper"/><category scheme="http://www.blogger.com/atom/ns#" term="XXE"/><title type='text'>XML External Entity(XXE) Vulnerability and Prevention</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #a64d79;&quot;&gt;Definition&lt;/span&gt;&lt;/h2&gt;
Xml External Entity(XXE) is an XML entity construct as defined in the XML 1.0 Standard which can access local or remote content via a declared system identifier. More about XXE can be found in the XML 1.0 standard specification at the following location:&lt;br /&gt;
&lt;a href=&quot;http://www.w3.org/TR/REC-xml/#sec-external-ent&quot;&gt;http://www.w3.org/TR/REC-xml/#sec-external-ent&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Example XML that references a URL to retrieve EURO to USD currency conversion:&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;

&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&amp;gt;
 &amp;lt;!DOCTYPE foo [  
   &amp;lt;!ELEMENT foo ANY &amp;gt;
   &amp;lt;!ENTITY euroToUSDRate SYSTEM &quot;http://rate-exchange.appspot.com/currency?from=USD&amp;amp;to=EUR&quot; &amp;gt;]&amp;gt;
&amp;lt;foo&amp;gt;&amp;amp;euroToUSDRate;&amp;lt;/foo&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
When a parser parses the above XML a reference to &quot;euroToUSDRate&quot; is replaced by the JSON response from the URL and the resultant XML is as follows:&amp;nbsp;&lt;/div&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;

&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&amp;gt;
 &amp;lt;!DOCTYPE foo [  
   &amp;lt;!ELEMENT foo ANY &amp;gt;
   &amp;lt;!ENTITY euroToUSDRate SYSTEM &quot;http://rate-exchange.appspot.com/currency?from=USD&amp;amp;to=EUR&quot; &amp;gt;]&amp;gt;
&amp;lt;foo&amp;gt;{&quot;to&quot;: &quot;EUR&quot;, &quot;rate&quot;: 0.75278530600000004, &quot;from&quot;: &quot;USD&quot;}&amp;lt;/foo&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #a64d79;&quot;&gt;Vulnerability&lt;/span&gt;&lt;/h2&gt;
Since all external entity references are resolved when the parser parses the XML and the fact that an external entity could either be a file on the local file system or a URL to a file on an external site this could lead to some of the following:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;If the reference is to a file on the local file system the parser might reveal the file contents. Check the examples below where a history file on my local drive is revealed.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;If the reference is resolved to a file whose size exceed allocated memory to the parser it might lead to a system crash.&lt;/li&gt;
&lt;li&gt;A webserver serving display content by utilizing the de-referenced entity reference might lead to injection attacks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #a64d79;&quot;&gt;Protection&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
Most XML Parsers are configurable inorder to disable this feature. By configuring appropriate properties we can protect against the XXE vulnerability. Below is an example of how this can be achieved in Groovy and in Java.&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Groovy&amp;nbsp;&lt;/h3&gt;
&lt;div&gt;
XmlSlurper parser in Groovy in its default configuration allows de-referencing external entities and hence is vulnerable. The following Groovy script demonstrates how a file in the local file system (a mysql history file in my local system) can be revealed.&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Vulnerable Parser Example:&amp;nbsp;&lt;/h4&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;

rake0702@MHKTQWDV13:~/servers/groovy-2.0.5/scripts$ cat xxeDemo.groovy 

def xmlWithXXEVulnerability = &#39;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;&amp;lt;!DOCTYPE customer[&amp;lt;!ENTITY name SYSTEM &quot;/Users/rake0702/.mysql_history&quot;&amp;gt;]&amp;gt;&amp;lt;customer&amp;gt;&amp;lt;name&amp;gt;&amp;amp;name;&amp;lt;/name&amp;gt;&amp;lt;/customer&amp;gt;&#39;
def xxeVulnerableParser = new XmlSlurper();
def parsedObjWithMySqlHistory = xxeVulnerableParser.parseText(xmlWithXXEVulnerability)
println parsedObjWithMySqlHistory

rake0702@MHKTQWDV13:~/servers/groovy-2.0.5/scripts$ groovy xxeDemo.groovy 

show tables;
select * from strategy;
update strategy set auto_activate=true where family=&#39;BASE&#39;;
select * from strategy;
select * from strategy where auto_activate=true;
select * from strategy;

&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Non-Vulnerable Parser Example:&lt;/h4&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;

rake0702@MHKTQWDV13:~/servers/groovy-2.0.5/scripts$ cat xxeSafeDemo.groovy 

def xmlWithXXEVulnerability = &#39;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;&amp;lt;!DOCTYPE customer[&amp;lt;!ENTITY name SYSTEM &quot;/Users/rake0702/.mysql_history&quot;&amp;gt;]&amp;gt;&amp;lt;customer&amp;gt;&amp;lt;name&amp;gt;&amp;amp;name;&amp;lt;/name&amp;gt;&amp;lt;/customer&amp;gt;&#39;
def nonXXEVulnerableParser = new XmlSlurper();
nonXXEVulnerableParser.setFeature(&quot;http://xml.org/sax/features/external-general-entities&quot;, false)
def parsedObj = nonXXEVulnerableParser.parseText(xmlWithXXEVulnerability)
println parsedObj

rake0702@MHKTQWDV13:~/servers/groovy-2.0.5/scripts$ groovy xxeSafeDemo.groovy 

rake0702@MHKTQWDV13:~/servers/groovy-2.0.5/scripts$ 

&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;text-align: left;&quot;&gt;
Java&lt;/h3&gt;
&lt;div&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;You can prevent the Xml eXternal Entity (XXE) attack by unmarshalling from an XMLStreamReader that has the IS_SUPPORTING_EXTERNAL_ENTITIES and/or XMLInputFactory.SUPPORT_DTD properties set to false.&lt;/div&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;

JAXBContext jc = JAXBContext.newInstance(Customer.class);

XMLInputFactory xif = XMLInputFactory.newFactory();
xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
xif.setProperty(XMLInputFactory.SUPPORT_DTD, false);
XMLStreamReader xsr = xif.createXMLStreamReader(new StreamSource(&quot;/Users/rake0702/servers/xml/xxeVulnerable.xml&quot;));

Unmarshaller unmarshaller = jc.createUnmarshaller();
Customer customer = (Customer) unmarshaller.unmarshal(xsr);

&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;color: #a64d79;&quot;&gt;References&lt;/span&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;a href=&quot;https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing&quot;&gt;https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/1117717148984675470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/1117717148984675470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/1117717148984675470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/1117717148984675470'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2013/02/definition-xml-external-entityxxe-is.html' title='XML External Entity(XXE) Vulnerability and Prevention'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-281260017513439592</id><published>2012-03-09T20:15:00.001-08:00</published><updated>2014-04-10T12:54:02.013-07:00</updated><title type='text'>Java development environment best practices</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span style=&quot;background-color: rgba(255, 255, 255, 0.918); color: #222222; font-family: arial,sans-serif; font-size: 13px;&quot;&gt;&amp;nbsp;following are the standards/best practices for Java Development I have seen in projects. Please feel free to correct/add with your own experience.&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
1.&amp;nbsp;Java Code:&amp;nbsp;All developers could use a common editor formatting standard.&lt;a href=&quot;http://sites.google.com/site/rockycodes/EclipseStandardCodeStyle.xml&quot;&gt; I have attached a code style&amp;nbsp;formatting&amp;nbsp;for eclipse&lt;/a&gt; that can be imported using project-&amp;gt;preferences-&amp;gt; Java -&amp;gt; Code Style -&amp;gt; Formatter&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
also use project-&amp;gt;preferences-&amp;gt;java-&amp;gt;&lt;wbr&gt;&lt;/wbr&gt;editor-&amp;gt;Save Actions and make sure the above formatting is executed on save actions&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
2.&amp;nbsp;Java Code:&amp;nbsp;Usual java coding styles are standardized and an exhaustive listing is available at&amp;nbsp;&lt;a href=&quot;http://www.sourceformat.com/coding-standard-java.htm&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://www.sourceformat.&lt;wbr&gt;&lt;/wbr&gt;com/coding-standard-java.htm&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.921569); text-align: -webkit-auto;&quot;&gt;
&lt;div style=&quot;color: #222222; font-family: arial, sans-serif; font-size: 13px;&quot;&gt;
3.&amp;nbsp;Source Control:&amp;nbsp;Each code change could be performed in a separate code branch(named after the related jira/ticket) as in case of GIT version control system or should be tagged with a jira/ticket number in case of SVN or similar version control systems. Source control is picking pace as a service and is being provided as a SAAS. &lt;b&gt;&lt;a href=&quot;http://bitbucket.org/&quot;&gt;bitbucket.org&lt;/a&gt;&lt;/b&gt; is a very popular provider that provides free unlimited private repositories.&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
4.&amp;nbsp;Build Mangement:&amp;nbsp;If maven is used for build management tasks. Each project should have a scm url pointing to the company wide maven repository. This ensures dependencies and maven releases are faster/secure and not exposed to the outside. All dependent projects should depend on RELEASE versions.&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
5. &lt;b&gt;Test Driven Development (TDD)&lt;/b&gt; is preferred development methodology. As of recent efforts a more improvised means devised on top of TTD is &lt;b&gt;Behavior Driven Development(BDD). &lt;/b&gt;BDD takes a step further in building more robust and agile software. It glues business scenarios in a better way around software development process. Scenarios and steps are provided in BDD that can be expressed in a language called Gherkin. Java and Ruby communities have provided &lt;a href=&quot;http://jbehave.org/&quot;&gt;JBehave &lt;/a&gt;and &lt;a href=&quot;http://cukes.info/&quot;&gt;Cucumber &lt;/a&gt;that is programmatic expression to software behavior.&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
6. Tools like EMMA (&lt;a href=&quot;http://emma.sourceforge.net/&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://emma.sourceforge.net/&lt;/a&gt;) for code coverage can be useful to figure out how much of production code is tested in the Unit tests. Code quality can be plugged into build management and continuous integration via tools like &lt;b&gt;&lt;a href=&quot;http://www.sonarqube.org/&quot;&gt;sonar&lt;/a&gt;&lt;/b&gt;.&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
7. If JUnit(&lt;a href=&quot;http://www.junit.org/&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://www.junit.org/&lt;/a&gt;) is used for unit test code, mocking frameworks like Mockito (&lt;a href=&quot;http://code.google.com/p/mockito/&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://code.google.com/p/&lt;wbr&gt;&lt;/wbr&gt;mockito/&lt;/a&gt;) should be used for mocking external resources instead of using real external resources. Data access object tests should use DBUnit (&lt;a href=&quot;http://www.dbunit.org/&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://www.dbunit.org/&lt;/a&gt;) to mock database data rather than using hard coded values from the database.&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
8. Code review could be performed before committing code. Some code review tools that can be used are:&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&amp;nbsp;Crucible:&amp;nbsp;&lt;a href=&quot;http://www.atlassian.com/software/crucible/overview&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://www.&lt;wbr&gt;&lt;/wbr&gt;atlassian.com/software/&lt;wbr&gt;&lt;/wbr&gt;crucible/overview&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&amp;nbsp;CodeCollaborator:&amp;nbsp;&lt;a href=&quot;http://smartbear.com/products/software-development/code-review/code-review-tool-1&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://&lt;wbr&gt;&lt;/wbr&gt;smartbear.com/products/&lt;wbr&gt;&lt;/wbr&gt;software-development/code-&lt;wbr&gt;&lt;/wbr&gt;review/code-review-tool-1&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&amp;nbsp;Open Source tools:&amp;nbsp;&lt;a href=&quot;http://ostatic.com/blog/open-source-code-review-tools&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://ostatic.com/&lt;wbr&gt;&lt;/wbr&gt;blog/open-source-code-review-&lt;wbr&gt;&lt;/wbr&gt;tools&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
9. Continuous integration servers can be used to ensure that code is intact at all times. Several CI tools are available that can be configured to listen to Source control systems and email reports.&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&amp;nbsp;TeamCity:&amp;nbsp;&lt;a href=&quot;http://www.jetbrains.com/teamcity/&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://www.&lt;wbr&gt;&lt;/wbr&gt;jetbrains.com/teamcity/&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&amp;nbsp;Hudson:&amp;nbsp;&lt;a href=&quot;http://hudson-ci.org/&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://hudson-ci.org/&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;Jenkins: &lt;a href=&quot;http://jenkins-ci.org/&quot;&gt;http://jenkins-ci.org/&lt;/a&gt; &lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;
Continuous Integration is picking pace as a service as well. Popular SAAS for build management and continuous integration is&lt;b&gt;&amp;nbsp;&lt;a href=&quot;http://www.cloudbees.com/&quot;&gt;cloudbees&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
several good rules can be configured into CI servers to ensure project quality. Code coverage, complexity, duplication etc are few. Project release can be centrally performed from CI servers so rules are not broken or would require special exceptions being made.&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
10. Project management and issues management can be performed using tools like:&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
JIRA:&amp;nbsp;&lt;a href=&quot;http://www.atlassian.com/software/jira/overview&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://www.atlassian.&lt;wbr&gt;&lt;/wbr&gt;com/software/jira/overview&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
TRAC:&amp;nbsp;&lt;a href=&quot;http://trac.edgewall.org/&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://trac.edgewall.&lt;wbr&gt;&lt;/wbr&gt;org/&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
many more can be found at&amp;nbsp;&lt;a href=&quot;http://www.smashingmagazine.com/2008/11/13/15-useful-project-management-tools/&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://www.&lt;wbr&gt;&lt;/wbr&gt;smashingmagazine.com/2008/11/&lt;wbr&gt;&lt;/wbr&gt;13/15-useful-project-&lt;wbr&gt;&lt;/wbr&gt;management-tools/&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
all the above listed tools can be integrated to a PM tool for better record keeping.&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
11. Code Quality/analysis/reporting is a good but optional feature. Each code commit can be followed by an automatic analysis by such tools. It performs algorithmic analysis on a specific set of rules to report issues like code complexity, too long java methods, insufficient code coverage, possible use of better standards like code patterns instead of clumsy decision blocks( eg strategy pattern instead of if-else or switch blocks), too long java classes, redundant code/unused code, orphan variables and just a trillion more things.&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
tools available:&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;a href=&quot;http://www.sonarsource.org/&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://www.sonarsource.org/&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: rgba(255, 255, 255, 0.917969); color: #222222; font-family: arial, sans-serif; font-size: 13px; text-align: -webkit-auto;&quot;&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#Java&quot; style=&quot;color: #1155cc;&quot; target=&quot;_blank&quot;&gt;http://en.wikipedia.org/wiki/&lt;wbr&gt;&lt;/wbr&gt;List_of_tools_for_static_code_&lt;wbr&gt;&lt;/wbr&gt;analysis#Java&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Other java development tools that could be of good use are:&lt;br /&gt;
- &lt;a href=&quot;http://code.google.com/javadevtools/codepro/doc/index.html&quot;&gt;Goolgle CodePro Analytix&lt;/a&gt; &lt;br /&gt;
- &lt;a href=&quot;http://zeroturnaround.com/jrebel/&quot;&gt;JRebel&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/281260017513439592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/281260017513439592' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/281260017513439592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/281260017513439592'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2012/03/java-development-environment-best.html' title='Java development environment best practices'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-5979744159507272741</id><published>2011-09-27T00:14:00.000-07:00</published><updated>2011-09-27T00:14:05.846-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automated dozer testing"/><category scheme="http://www.blogger.com/atom/ns#" term="dozer"/><category scheme="http://www.blogger.com/atom/ns#" term="object transformation"/><title type='text'>Automated test for Dozer transformations</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Source for this topic can be downloaded from: &lt;br /&gt;
&lt;a href=&quot;http://sites.google.com/site/rockycodes/dozer-automated-test.zip&quot;&gt;http://sites.google.com/site/rockycodes/dozer-automated-test.zip &lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Dozer is an api to perform object transformations. A significant use case in a project is the transformations from Domain Objects(or ORM entitiy objects) to DTOs(Data transfer objects). &lt;a href=&quot;http://dozer.sourceforge.net/&quot;&gt;More about dozer....&lt;/a&gt;&lt;br /&gt;
A simple example would be:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
public class ValueObject{
  private int attr1;
  .... other attributes....
}

public class DTO{
  private int attr1;
  ...other attributes...
}

private DozerBeanMapper beanMapper

ValueObject valueObjectinstance = getValueObjectInstance();AutomatedDozerTestReport&lt;valueobject,dto&gt; testReport =  new AutomatedDozerTester().testClasses(ValueObject.class, DTO.class)
assertTrue(testReport.getMappingFailures().isEmpty());


//map ValueObject to DTO using dozer
DTO dtoInstance = beanMapper.map( valueObjectinstance, DTO.class);

&lt;/valueobject,dto&gt;&lt;/code&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
In one of the use cases I came across several hundreds of such transformations to and from Domain to DTO objects. Unit testing so many objects by instantiating each Domain object with attributes and verifying the transformed DTO would involve sever thousands of lines of code. Instead an automated class that would cerate a new instance of a given Domain class , perform transformation and assert the transformed DTO instance would be of great help. This is exactly what the following project is meant to perform. The automated tester in the attached source would perform a test in the following fashion:&lt;br /&gt;
&lt;br /&gt;
Usage: &lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
AutomatedDozerTestReport&amp;lt;ValueObject,DTO&amp;gt; testReport =  new AutomatedDozerTester().testClasses(ValueObject.class, DTO.class)
assertTrue(testReport.getMappingFailures().isEmpty());

&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
testClasses() method in AutomatedDozerTester: (see attached source)&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;


public &amp;lt;T, P&amp;gt; AutomatedDozerTestReport&amp;lt;T, P&amp;gt; testClasses(Class&amp;lt;T&amp;gt; sourceClass, Class&amp;lt;P&amp;gt; destinationClass, DozerBeanMapper beanMapper) throws Exception {
	AutomatedDozerTestReport&amp;lt;T, P&amp;gt; testReport = new AutomatedDozerTestReport&amp;lt;T, P&amp;gt;(sourceClass, destinationClass);

	T newSrcInstance = getInstanceWithValues(sourceClass);

	P destMappedInstance = beanMapper.map(newSrcInstance, destinationClass);

	testReport.setSourceInstance(newSrcInstance);
	testReport.setDestInstance(destMappedInstance);
	matchAndGenerateReport(testReport, newSrcInstance, destMappedInstance, &quot;&quot;, &quot;&quot;);

	return testReport;

}

&lt;/code&gt;
&lt;/pre&gt;
&lt;br /&gt;
There are certain limitations to testing using AutomatedDozerTester as of now:&lt;br /&gt;
1. Does not support custom converters at field level.&lt;br /&gt;
2. Need to add to AutomatedDozerTester.getValueFromFactory() in case a new data type is used in the objects&lt;br /&gt;
3. The report object sometimes fails to report proper unmappedSourceAttributes.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/5979744159507272741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/5979744159507272741' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/5979744159507272741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/5979744159507272741'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2011/09/automated-test-for-dozer.html' title='Automated test for Dozer transformations'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-6427776908712209694</id><published>2011-07-11T14:23:00.000-07:00</published><updated>2011-08-01T16:09:28.914-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="log4j"/><category scheme="http://www.blogger.com/atom/ns#" term="log4j configuration servlet"/><category scheme="http://www.blogger.com/atom/ns#" term="Log4jConfigurationServlet"/><title type='text'>configuring log4j using configuration servlet</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Logging levels on log4j are varied and range low to high from:&lt;br /&gt;
&lt;br /&gt;
ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF&lt;br /&gt;
&lt;br /&gt;
In a normal production deployed app we would set the logging levels to WARN or for that case to ERROR. Some performance maniac deployer would even turn off logs and cripple a developers life :(&lt;br /&gt;
&lt;br /&gt;
In some cases when we can run the same error path for an app deployed to prod to recreate the error the Log4j configuration servlet comes to rescue.&lt;br /&gt;
We can set logging to the desired level at runtime and perform the error path and capture the logs.&lt;br /&gt;
We &lt;b&gt;need not&lt;/b&gt; change the log4j.xml, rebuild the ear and deploy the app. Configuration servlet configures log4j at runtime.&lt;br /&gt;
&lt;br /&gt;
Log4j v1.3 &lt;a href=&quot;http://wiki.apache.org/logging-log4j/Log4jv13Features&quot;&gt;http://wiki.apache.org/logging-log4j/Log4jv13Features&lt;/a&gt; has this capability. Unfortunately this version has been abandoned and users requested to fall back to 1.2. A sourceforge open source project called &quot;openutils-log4j&quot; mirrors the same functionality and can be used. More info can be found at &lt;a href=&quot;http://openutils.sourceforge.net/openutils-log4j/servlet.html&quot;&gt;http://openutils.sourceforge.net/openutils-log4j/servlet.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Adding this functionality to the web app is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;web.xml&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
 &amp;lt;servlet&amp;gt;
  &amp;lt;servlet-name&amp;gt;log4j&amp;lt;/servlet-name&amp;gt;
  &amp;lt;display-name&amp;gt;Log4j configuration Servlet&amp;lt;/display-name&amp;gt;
  &amp;lt;servlet-class&amp;gt;it.openutils.log4j.Log4jConfigurationServlet&amp;lt;/servlet-class&amp;gt;
 &amp;lt;/servlet&amp;gt;

 &amp;lt;servlet-mapping&amp;gt;
  &amp;lt;servlet-name&amp;gt;log4j&amp;lt;/servlet-name&amp;gt;
  &amp;lt;url-pattern&amp;gt;/log4j&amp;lt;/url-pattern&amp;gt;
 &amp;lt;/servlet-mapping&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;dependency in pom.xml&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
    &amp;lt;dependency&amp;gt;
     &amp;lt;groupId&amp;gt;net.sourceforge.openutils&amp;lt;/groupId&amp;gt;
     &amp;lt;artifactId&amp;gt;openutils-log4j&amp;lt;/artifactId&amp;gt;
     &amp;lt;version&amp;gt;2.0.5&amp;lt;/version&amp;gt;
 &amp;lt;/dependency&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
The log4j configuration servlet would appear at a url as follows:&lt;br /&gt;
&lt;br /&gt;
http://localhost:9090/&lt;service-context&gt;/log4j&lt;br /&gt;
&lt;br /&gt;
and the page would appear something like this:&lt;br /&gt;
&lt;/service-context&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg16UpM42H8BXQpCOwbajxkBDZ-aTqXzxmZD_DnyoxHA7-GTzGNNnLtof4fNCAIAQHdZHjInBI9mVI8z-AfTIswsWhjd445n3Ys6RIULiJljPNAL3P7-jG2Y-WR1tD4BUp59_bj-MO2V_Q/s1600/Screenshot.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;412&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg16UpM42H8BXQpCOwbajxkBDZ-aTqXzxmZD_DnyoxHA7-GTzGNNnLtof4fNCAIAQHdZHjInBI9mVI8z-AfTIswsWhjd445n3Ys6RIULiJljPNAL3P7-jG2Y-WR1tD4BUp59_bj-MO2V_Q/s640/Screenshot.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;service-context&gt;&lt;br /&gt;
&lt;/service-context&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/6427776908712209694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/6427776908712209694' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/6427776908712209694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/6427776908712209694'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2011/07/configuring-log4j-using-configuration.html' title='configuring log4j using configuration servlet'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg16UpM42H8BXQpCOwbajxkBDZ-aTqXzxmZD_DnyoxHA7-GTzGNNnLtof4fNCAIAQHdZHjInBI9mVI8z-AfTIswsWhjd445n3Ys6RIULiJljPNAL3P7-jG2Y-WR1tD4BUp59_bj-MO2V_Q/s72-c/Screenshot.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-8754767790923323926</id><published>2011-06-01T00:40:00.000-07:00</published><updated>2011-07-15T13:05:14.501-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Annotation driven spring aop"/><category scheme="http://www.blogger.com/atom/ns#" term="email"/><category scheme="http://www.blogger.com/atom/ns#" term="error handling in spring"/><category scheme="http://www.blogger.com/atom/ns#" term="spring aop"/><title type='text'>ErrorWrap: An Error handling Spring aspect, logs and sends email notification</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;Error handling - Logging the error and notifying the error(via email or other means) is a cross-cutting concern. Top level web service methods and API methods are candidates that might need such handling.&lt;br /&gt;
Following article is about a spring aspect that captures the error, logs the method signature and arguments where the error occurred and&amp;nbsp; emails the error notification to a pre-configured email destination. This aspect is annotation driven hence is easily pluggable to any existing method that is part of a spring bean.&lt;br /&gt;
&lt;br /&gt;
Code(eclipse project) can be downloaded from the following location:&lt;br /&gt;
&lt;a href=&quot;http://sites.google.com/site/rockycodes/ErrorWrapper.zip&quot;&gt;http://sites.google.com/site/rockycodes/ErrorWrapper.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Following is an example usage of the aspect annotation on few webservice methods:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;

@ErrorWrap(logException = true, sendEmail = false)
public String bar(String fooPasscode) {
....
}

@ErrorWrap //by default log the error and also send an email
public String foo(String barPasscode) {
....
}

&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
The ErrorWrap annotation that is used as a pointcut definition for this aspect is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;ErrorWrap.java &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;

package com.blog10_99.error;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ErrorWrap {
 boolean sendEmail() default  true;
 boolean logException() default true;
 boolean ignoreDeclaredExceptions() default true;
 String appender() default &quot;&quot;;
}

&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
The aspect that is defined for achieving this purpose is as follows. It defines a pointcut using the ErrorWrap annotation as defined above.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;ErrorHandlerAspect.java &lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;

package com.blog10_99.error;

import java.util.Arrays;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;

@Aspect
public class ErrorHandlerAspect {

 private static final String METHOD_INFO_MSG = &quot;Error encountered while invocation of n Method: %s n Arguments: [%s]&quot;;

 private static final Logger logger = LoggerFactory.getLogger(ErrorHandlerAspect.class);

 private MailSender mailSender;

 private SimpleMailMessage messageTemplate;

 @AfterThrowing(pointcut=&quot;@annotation(errorWrap)&quot;,
     throwing=&quot;exception&quot;)
 public void handleException(JoinPoint joinPoint,
    Throwable exception,
    ErrorWrap errorWrap){

  if (errorWrap.ignoreDeclaredExceptions() &amp;amp;&amp;amp;
 isExceptionDeclaredType(exceptionThrown, joinPoint)) {
    return;
  }

  String appender = errorWrap.appender();
  if (StringUtils.isNotEmpty(errorWrap.appender())) {
   appender += &quot;: &quot;;
  }

  String methodInfo = String.format(METHOD_INFO_MSG, joinPoint.getSignature(), Arrays.asList(joinPoint.getArgs()));

  logger.error(appender + methodInfo);

  if(errorWrap.logException()){
   logger.error(appender + &quot;Exception trace:n&quot;, exception);
  }

  if(errorWrap.sendEmail()){
   logger.debug(appender + &quot;Sending email.&quot;);
   sendEmail(exception, methodInfo);
  }
 }

 private void sendEmail(Throwable exception, String methodInfo) {
  SimpleMailMessage message = getMessageTemplate();
  StringBuilder messageBody = new StringBuilder();
  messageBody.append(methodInfo);
  messageBody.append(&quot;n&quot;);
  messageBody.append(&quot;Exception Trace: n&quot; + ExceptionUtils.getStackTrace(exception));
  message.setText(messageBody.toString());
  getMailSender().send(message);
 }

 private boolean isExceptionDeclaredType(Throwable exceptionThrown, JoinPoint joinPoint) {
  MethodSignature signature = (MethodSignature) joinPoint.getSignature();
  boolean exceptionOfDeclaredType = false;
  @SuppressWarnings(&quot;unchecked&quot;)
  Class&lt;exception&gt;[] declaredExceptions = signature.getExceptionTypes();
  if (ArrayUtils.isNotEmpty(declaredExceptions)) {
   for (Class&lt;exception&gt; declaredExClass : declaredExceptions) {
    if (declaredExClass.isAssignableFrom(exceptionThrown.getClass())) {
     exceptionOfDeclaredType = true;
 break;
    }
   }
  }
  return exceptionOfDeclaredType;
 }

 public MailSender getMailSender() {
  return mailSender;
 }

 public void setMailSender(MailSender mailSender) {
  this.mailSender = mailSender;
 }

 public SimpleMailMessage getMessageTemplate() {
  return messageTemplate;
 }

 public void setMessageTemplate(SimpleMailMessage messageTemplate) {
  this.messageTemplate = messageTemplate;
 }
}

&lt;/exception&gt;&lt;/exception&gt;&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
Rest of the configuration for email and sample web services with execution unit tests can be found in the attached code link above.&lt;br /&gt;
The test com.blog10_99.error.ExecuteAndTestErrorWrap is what I used to test the error handling when the FooBarService methods are invoked.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/8754767790923323926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/8754767790923323926' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/8754767790923323926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/8754767790923323926'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2011/06/errorwrap-error-handling-spring-aspect.html' title='ErrorWrap: An Error handling Spring aspect, logs and sends email notification'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-1904301897281448102</id><published>2011-05-05T10:10:00.000-07:00</published><updated>2011-05-05T10:15:29.833-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="B.o.B"/><category scheme="http://www.blogger.com/atom/ns#" term="buttercup"/><category scheme="http://www.blogger.com/atom/ns#" term="The Foundations"/><title type='text'>B.o.B hip hop feat on The Foundations</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/The_Foundations&quot;&gt;&lt;/a&gt;I was listening to B.o.B and stumbled across this song:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;object class=&quot;BLOGGER-youtube-video&quot; classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0&quot; data-thumbnail-src=&quot;http://2.gvt0.com/vi/03Ntf_3QDLo/0.jpg&quot; height=&quot;266&quot; width=&quot;320&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/03Ntf_3QDLo&amp;fs=1&amp;source=uds&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#FFFFFF&quot; /&gt;&lt;embed width=&quot;320&quot; height=&quot;266&quot; src=&quot;http://www.youtube.com/v/03Ntf_3QDLo&amp;fs=1&amp;source=uds&quot; type=&quot;application/x-shockwave-flash&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;
remembered a song that this is based off The Foundations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;object class=&quot;BLOGGER-youtube-video&quot; classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0&quot; data-thumbnail-src=&quot;http://2.gvt0.com/vi/bb_OEaHfWII/0.jpg&quot; height=&quot;266&quot; width=&quot;320&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/bb_OEaHfWII&amp;fs=1&amp;source=uds&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#FFFFFF&quot; /&gt;&lt;embed width=&quot;320&quot; height=&quot;266&quot; src=&quot;http://www.youtube.com/v/bb_OEaHfWII&amp;fs=1&amp;source=uds&quot; type=&quot;application/x-shockwave-flash&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;
Foundations were a British Music band active from 1967 - 1970. I will not copy paste any more :) If u want to read more go to &lt;a href=&quot;http://en.wikipedia.org/wiki/The_Foundations&quot;&gt;wikipedia link to Foundations&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
one more song that hit the charts:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;object class=&quot;BLOGGER-youtube-video&quot; classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0&quot; data-thumbnail-src=&quot;http://3.gvt0.com/vi/S7CvuadC8_c/0.jpg&quot; height=&quot;266&quot; width=&quot;320&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/S7CvuadC8_c&amp;fs=1&amp;source=uds&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#FFFFFF&quot; /&gt;&lt;embed width=&quot;320&quot; height=&quot;266&quot; src=&quot;http://www.youtube.com/v/S7CvuadC8_c&amp;fs=1&amp;source=uds&quot; type=&quot;application/x-shockwave-flash&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;
asta la vista ....&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/1904301897281448102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/1904301897281448102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/1904301897281448102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/1904301897281448102'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2011/05/bob-hip-hop-feat-on-foundations.html' title='B.o.B hip hop feat on The Foundations'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-2415857283144779306</id><published>2011-03-16T02:45:00.000-07:00</published><updated>2011-03-16T10:31:34.006-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apache Camel"/><category scheme="http://www.blogger.com/atom/ns#" term="cxf"/><category scheme="http://www.blogger.com/atom/ns#" term="enterprise integration"/><category scheme="http://www.blogger.com/atom/ns#" term="web services"/><title type='text'>Camel and Cxf integration use cases</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;a href=&quot;http://camel.apache.org/&quot;&gt;Apache Camel&lt;/a&gt; is a very powerful java api to implement workflow based implementations in an enterprise application. Cxf services are an essential part of enterprise as well. Hence, integration of Camel and Cxf services could be thumbs up to the architecture of an enterprise java application.&lt;br /&gt;
&lt;br /&gt;
&lt;b style=&quot;color: blue;&quot;&gt;Code &lt;/b&gt;for this project can be downloaded from the following location:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://sites.google.com/site/rockycodes/CamelCxfDemo.zip&quot;&gt;http://sites.google.com/site/rockycodes/CamelCxfDemo.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Following use cases are part of this demo application:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Make the entry point of a Camel workflow as a Cxf webservice. A http soap xml call on the the service could invoke the Camel workflow and return the response soap xml back as a response.&lt;/li&gt;
&lt;li&gt;Invoke a Cxf web service in one of the workflow steps of the Camel route.&lt;/li&gt;
&lt;/ul&gt;Components of the application are as follows:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt; A Cxf webservice &quot;KeyService&quot;&lt;/li&gt;
&lt;li&gt;A Camel entry point exposed as webservice &quot;RouteEntryPointService&quot;&lt;/li&gt;
&lt;li&gt;A Camel route&lt;/li&gt;
&lt;/ul&gt;flow: A webservice request invokes&amp;nbsp; &quot;RouteEntryPointService&quot; that triggers the Camel workflow. As part of the workflow another webservice &quot;KeyService&quot; is invoked and the response is processed before returning a response to the initial call that invoked the workflow or camel route.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;Spring Application Context file&lt;/span&gt; applicationContext.xml&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;

&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
 xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:camel=&quot;http://camel.apache.org/schema/spring&quot;
 xmlns:util=&quot;http://www.springframework.org/schema/util&quot; xmlns:tx=&quot;http://www.springframework.org/schema/tx&quot;
 xmlns:amq=&quot;http://activemq.apache.org/schema/core&quot; xmlns:cxf=&quot;http://camel.apache.org/schema/cxf&quot;
 xmlns:jaxws=&quot;http://cxf.apache.org/jaxws&quot;
 xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring-2.1.0.xsd
 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
 http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd
 http://camel.apache.org/schema/cxf http://activemq.apache.org/camel/schema/cxf/camel-cxf.xsd
 http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd&quot;&amp;gt;

 &amp;lt;import resource=&quot;classpath:META-INF/cxf/cxf.xml&quot; /&amp;gt;
 &amp;lt;import resource=&quot;classpath:META-INF/cxf/cxf-extension-soap.xml&quot; /&amp;gt;
 &amp;lt;import resource=&quot;classpath:META-INF/cxf/cxf-servlet.xml&quot; /&amp;gt;

 &amp;lt;jaxws:endpoint id=&quot;keyServiceImplEndPoint&quot;
  xmlns:blog10_99=&quot;http://www.10_99.blogspot.com/com/blog10_99/ws/common&quot;
  implementor=&quot;#keyServiceImpl&quot; address=&quot;/services/KeyService&quot;
  serviceName=&quot;KeyService&quot; /&amp;gt;

 &amp;lt;bean id=&quot;keyServiceImpl&quot; class=&quot;com.blog10_99.ws.impl.KeyServiceImpl&quot; /&amp;gt;

 &amp;lt;cxf:cxfEndpoint id=&quot;routeEntryPointService&quot;
  address=&quot;/services/RouteEntryPointService&quot;
  serviceClass=&quot;com.blog10_99.ws.common.RouteEntryService&quot; 
  xmlns:blog10_99=&quot;http://www.10_99.blogspot.com/com/blog10_99/ws/common&quot;&amp;gt;
  &amp;lt;cxf:properties&amp;gt;
   &amp;lt;entry key=&quot;dataFormat&quot; value=&quot;POJO&quot; /&amp;gt;
   &amp;lt;entry key=&quot;setDefaultBus&quot; value=&quot;true&quot; /&amp;gt;
  &amp;lt;/cxf:properties&amp;gt;
 &amp;lt;/cxf:cxfEndpoint&amp;gt;

    &amp;lt;bean id=&quot;keyServiceClient&quot; class=&quot;com.blog10_99.ws.common.KeyService&quot;
        factory-bean=&quot;keyServiceClientProxyFactory&quot; factory-method=&quot;create&quot; lazy-init=&quot;true&quot;/&amp;gt;

    &amp;lt;bean id=&quot;keyServiceClientProxyFactory&quot; class=&quot;org.apache.cxf.jaxws.JaxWsProxyFactoryBean&quot; lazy-init=&quot;true&quot;&amp;gt;
        &amp;lt;property name=&quot;serviceClass&quot; value=&quot;com.blog10_99.ws.common.KeyService&quot; /&amp;gt;
        &amp;lt;property name=&quot;address&quot; value=&quot;http://localhost:9666/CamelCxfDemo/services/KeyServiceImpl?wsdl&quot; /&amp;gt;
    &amp;lt;/bean&amp;gt;

 &amp;lt;camel:camelContext trace=&quot;true&quot;&amp;gt;
  &amp;lt;camel:route&amp;gt;
   &amp;lt;camel:from
    uri=&quot;cxf:bean:routeEntryPointService&quot; /&amp;gt;
   &amp;lt;camel:to uri=&quot;bean:routeEntryRequestProcessor&quot;/&amp;gt;
   &amp;lt;camel:to uri=&quot;bean:keyServiceClient?method=getKey&quot;/&amp;gt;
   &amp;lt;camel:to uri=&quot;bean:routeExitResponseProcessor&quot;/&amp;gt;
  &amp;lt;/camel:route&amp;gt;
 &amp;lt;/camel:camelContext&amp;gt;
 
 &amp;lt;bean id=&quot;routeEntryRequestProcessor&quot; class=&quot;com.blog10_99.handlers.RouteEntryRequestProcessor&quot;/&amp;gt;
 
 &amp;lt;bean id=&quot;routeExitResponseProcessor&quot; class=&quot;com.blog10_99.handlers.RouteExitResponseProcessor&quot;/&amp;gt;
 
&amp;lt;/beans&amp;gt;

&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
rest of the files can be found in the source code at:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://sites.google.com/site/rockycodes/CamelCxfDemo.zip&quot;&gt;http://sites.google.com/site/rockycodes/CamelCxfDemo.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
steps to execute the demo:&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;at the source root execute &quot;mvn jetty:run&quot;&lt;/li&gt;
&lt;li&gt;from a SOAP UI create a project with wsdl at :&lt;/li&gt;
&lt;/ol&gt;http://localhost:9666/CamelCxfDemo/services/RouteEntryPointService?wsdl&lt;br /&gt;
&lt;br /&gt;
populate the default request with a requestor string attribute and execute it.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/2415857283144779306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/2415857283144779306' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/2415857283144779306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/2415857283144779306'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2011/03/camel-and-cxf-integration-use-cases.html' title='Camel and Cxf integration use cases'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-3758686532239148268</id><published>2010-11-28T00:13:00.000-08:00</published><updated>2010-11-28T00:18:31.356-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Multiple Transaction Manager"/><category scheme="http://www.blogger.com/atom/ns#" term="Spring Transaction"/><category scheme="http://www.blogger.com/atom/ns#" term="Spring Transaction Annotation"/><title type='text'>Multi Transaction Manager Spring Configuration - A Mix of Declarative and XML Configuration</title><content type='html'>Spring transaction management involves specifying transaction boundaries and transaction Propagation using either annotations or configuring it in XML.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;What this post is about:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The annotation(declarative) approach is limited to creating and configuring boundary for a single transaction manager but fails to address the scenario of multiple transaction managers. XML configuration approach is the only means to achieve this. Multiple transactions could be required either around a single point cut Or weave one transaction around a point cut and another around a different point cut but in the same work flow path.&lt;br /&gt;
&lt;br /&gt;
The best way to find out Transactions begin and end in Spring is to watch the log using log4j. Following scenarios are few that might be of interest. The attached code has the complete maven project with Unit tests that can be run to watch the transaction log show.&lt;br /&gt;
&lt;br /&gt;
&lt;b style=&quot;color: blue;&quot;&gt;Code &lt;/b&gt;for this project can be downloaded from the following location:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://sites.google.com/site/rockycodes/SpringMultiDatasrc.zip&quot;&gt;http://sites.google.com/site/rockycodes/SpringMultiDatasrc.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li style=&quot;color: black;&quot;&gt;A Single point cut, Single transaction manager configuration using &lt;/li&gt;
&lt;ul&gt;&lt;li style=&quot;color: blue;&quot;&gt;XML configuration&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: blue;&quot;&gt;Declarative Annotations&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;A Single Point cut, Multiple Transaction managers using&lt;/li&gt;
&lt;ul style=&quot;color: blue;&quot;&gt;&lt;li&gt;XML configuration&lt;/li&gt;
&lt;li&gt;Annotations cannot be used for more than one txn manager. Annotation driven approach limits binding a single transaction manager to transaction annotations.&lt;/li&gt;
&lt;li&gt;A Mix of XML Configuration and Annotations.One of the txn managers can be configured using XML config and the other using annotations. This is not advised as it seriously effects maintainability of the application.&lt;/li&gt;
&lt;/ul&gt;&lt;/ol&gt;The code below depicts a project with &lt;span style=&quot;color: blue;&quot;&gt;Two DataSources&lt;/span&gt;,&lt;span style=&quot;color: blue;&quot;&gt; Two Transaction Managers&lt;/span&gt;, &lt;span style=&quot;color: blue;&quot;&gt;Two Advices&lt;/span&gt; and a set of &lt;span style=&quot;color: blue;&quot;&gt;PointCut definitions &lt;/span&gt;that weave the transaction boundaries for the two transaction managers.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;All the transaction configurations are depicted in the following Spring ApplicationContext file&lt;/span&gt; applicationContext.xml&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;

&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
 xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:aop=&quot;http://www.springframework.org/schema/aop&quot;
 xmlns:tx=&quot;http://www.springframework.org/schema/tx&quot;
 xsi:schemaLocation=&quot;
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
     http://www.springframework.org/schema/aop 
     http://www.springframework.org/schema/aop/spring-aop-3.0.xsd&quot;&amp;gt;

 &amp;lt;bean id=&quot;dataSourceOne&quot; class=&quot;org.apache.commons.dbcp.BasicDataSource&quot;
  destroy-method=&quot;close&quot;&amp;gt;
  &amp;lt;property name=&quot;driverClassName&quot; value=&quot;org.hsqldb.jdbcDriver&quot; /&amp;gt;
  &amp;lt;property name=&quot;url&quot; value=&quot;jdbc:hsqldb:memone:dbone&quot; /&amp;gt;
  &amp;lt;property name=&quot;username&quot; value=&quot;sa&quot; /&amp;gt;
  &amp;lt;property name=&quot;password&quot; value=&quot;&quot; /&amp;gt;
 &amp;lt;/bean&amp;gt;

 &amp;lt;bean id=&quot;dataSourceTwo&quot; class=&quot;org.apache.commons.dbcp.BasicDataSource&quot;
  destroy-method=&quot;close&quot;&amp;gt;
  &amp;lt;property name=&quot;driverClassName&quot; value=&quot;org.hsqldb.jdbcDriver&quot; /&amp;gt;
  &amp;lt;property name=&quot;url&quot; value=&quot;jdbc:hsqldb:memtwo:dbtwo&quot; /&amp;gt;
  &amp;lt;property name=&quot;username&quot; value=&quot;sa&quot; /&amp;gt;
  &amp;lt;property name=&quot;password&quot; value=&quot;&quot; /&amp;gt;
 &amp;lt;/bean&amp;gt;

 &amp;lt;bean id=&quot;transactionManagerOne&quot;
  class=&quot;org.springframework.jdbc.datasource.DataSourceTransactionManager&quot;&amp;gt;
  &amp;lt;property name=&quot;dataSource&quot; ref=&quot;dataSourceOne&quot; /&amp;gt;
 &amp;lt;/bean&amp;gt;

 &amp;lt;bean id=&quot;transactionManagerTwo&quot;
  class=&quot;org.springframework.jdbc.datasource.DataSourceTransactionManager&quot;&amp;gt;
  &amp;lt;property name=&quot;dataSource&quot; ref=&quot;dataSourceTwo&quot; /&amp;gt;
 &amp;lt;/bean&amp;gt;

 &amp;lt;tx:advice id=&quot;txAdviceOne&quot; transaction-manager=&quot;transactionManagerOne&quot;&amp;gt;
  &amp;lt;tx:attributes&amp;gt;
   &amp;lt;tx:method name=&quot;*&quot; /&amp;gt;
  &amp;lt;/tx:attributes&amp;gt;
 &amp;lt;/tx:advice&amp;gt;

 &amp;lt;tx:advice id=&quot;txAdviceTwo&quot; transaction-manager=&quot;transactionManagerTwo&quot;&amp;gt;
  &amp;lt;tx:attributes&amp;gt;
   &amp;lt;tx:method name=&quot;*&quot; /&amp;gt;
  &amp;lt;/tx:attributes&amp;gt;
 &amp;lt;/tx:advice&amp;gt;

 &amp;lt;aop:config&amp;gt;
  &amp;lt;aop:pointcut id=&quot;pcForMethod_singlePC_SingleTxnMgr_XMLConfig&quot;
   expression=&quot;execution(* com.blog10_99.business.BusinessHandler.singlePC_SingleTxnMgr_XMLConfig())&quot; /&amp;gt;
  &amp;lt;aop:advisor advice-ref=&quot;txAdviceOne&quot; pointcut-ref=&quot;pcForMethod_singlePC_SingleTxnMgr_XMLConfig&quot; /&amp;gt;
 &amp;lt;/aop:config&amp;gt;

 &amp;lt;aop:config&amp;gt;
  &amp;lt;aop:pointcut id=&quot;pcForMethod_singlePC_TwoTxnMgr_XMLConfig_TxnMgrOne&quot;
   expression=&quot;execution(* com.blog10_99.business.BusinessHandler.singlePC_TwoTxnMgr_XMLConfig())&quot; /&amp;gt;
  &amp;lt;aop:advisor advice-ref=&quot;txAdviceOne&quot; pointcut-ref=&quot;pcForMethod_singlePC_TwoTxnMgr_XMLConfig_TxnMgrOne&quot; /&amp;gt;
 &amp;lt;/aop:config&amp;gt;

 &amp;lt;aop:config&amp;gt;
  &amp;lt;aop:pointcut id=&quot;pcForMethod_singlePC_TwoTxnMgr_XMLConfig_TxnMgrTwo&quot;
   expression=&quot;execution(* com.blog10_99.business.BusinessHandler.singlePC_TwoTxnMgr_XMLConfig())&quot; /&amp;gt;
  &amp;lt;aop:advisor advice-ref=&quot;txAdviceTwo&quot; pointcut-ref=&quot;pcForMethod_singlePC_TwoTxnMgr_XMLConfig_TxnMgrTwo&quot; /&amp;gt;
 &amp;lt;/aop:config&amp;gt;

 &amp;lt;aop:config&amp;gt;
  &amp;lt;aop:pointcut id=&quot;pcForMethod_singlePC_TwoTxnMgr_OneXMLConfigOneAnnotation_TxnMgrTwo&quot;
   expression=&quot;execution(* com.blog10_99.business.BusinessHandler.singlePC_TwoTxnMgr_OneXMLConfigOneAnnotation())&quot; /&amp;gt;
  &amp;lt;aop:advisor advice-ref=&quot;txAdviceTwo&quot; pointcut-ref=&quot;pcForMethod_singlePC_TwoTxnMgr_OneXMLConfigOneAnnotation_TxnMgrTwo&quot; /&amp;gt;
 &amp;lt;/aop:config&amp;gt;

 &amp;lt;!-- annotation driven can co-exist with other XML Configs. The transaction-manager
  attribute specified is used to run transaction boundaries wherever annotations
  are specified. If this attribute is not specified transaction manager with id &quot;transactionManager&quot;
  is used. There is none with that name specified in this context. 
  --&amp;gt;
    &amp;lt;tx:annotation-driven transaction-manager=&quot;transactionManagerOne&quot;/&amp;gt;

 &amp;lt;bean id=&quot;handler&quot; class=&quot;com.blog10_99.business.BusinessHandlerImpl&quot;/&amp;gt;
 
&amp;lt;/beans&amp;gt;

&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;The BusinessHandler interface file&lt;/span&gt; BusinessHandler.java&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
package com.blog10_99.business;

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

public interface BusinessHandler {

 public abstract void singlePC_SingleTxnMgr_XMLConfig();

 @Transactional(propagation = Propagation.REQUIRED)
 public abstract void singlePC_SingleTxnMgr_Annotations();

 public abstract void singlePC_TwoTxnMgr_XMLConfig();

 @Transactional(propagation = Propagation.REQUIRED)
 public abstract void singlePC_TwoTxnMgr_OneXMLConfigOneAnnotation();

}
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;The BusinessHandler Implementation file&lt;/span&gt; BusinessHandlerImpl.java&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
package com.blog10_99.business;

import org.apache.log4j.Logger;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

public class BusinessHandlerImpl implements BusinessHandler {

 private static final Logger LOGGER = Logger.getLogger( BusinessHandlerImpl.class );

 @Override
 public void singlePC_SingleTxnMgr_XMLConfig(){
 }

 @Override
 @Transactional(propagation=Propagation.REQUIRED)
 public void singlePC_SingleTxnMgr_Annotations(){
 }

 @Override
 public void singlePC_TwoTxnMgr_XMLConfig(){
 }

 @Override
 @Transactional(propagation = Propagation.REQUIRED)
 public void singlePC_TwoTxnMgr_OneXMLConfigOneAnnotation(){
 }
}
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;Unit Test to execute and run the methods&lt;/span&gt; BusinessHandler_UT.java&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
package com.blog10_99.business;

import javax.annotation.Resource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={&quot;/applicationContext.xml&quot;})
public class BusinessHandler_UT {

 @Resource(name=&quot;handler&quot;)
 private BusinessHandler handler;
 
 @Test
 public void watchLogOn_singlePC_SingleTxnMgr_XMLConfig() throws Exception{
  handler.singlePC_SingleTxnMgr_XMLConfig();
 }
 
 @Test
 public void watchLogOn_singlePC_SingleTxnMgr_Annotations() throws Exception{
  handler.singlePC_SingleTxnMgr_Annotations();
 }

 
 @Test
 public void watchLogOn_singlePC_TwoTxnMgr_XMLConfig() throws Exception{
  handler.singlePC_TwoTxnMgr_XMLConfig();
 }

 
 @Test
 public void watchLogOn_singlePC_TwoTxnMgr_OneXMLConfigOneAnnotation() throws Exception{
  handler.singlePC_TwoTxnMgr_OneXMLConfigOneAnnotation();
 }

}
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;Log4J config to enable logging for spring framework&lt;/span&gt; log4j.xml&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;!DOCTYPE log4j:configuration SYSTEM &quot;log4j.dtd&quot;&amp;gt;

&amp;lt;log4j:configuration xmlns:log4j=&quot;http://jakarta.apache.org/log4j/&quot;
 debug=&quot;false&quot;&amp;gt;

 &amp;lt;!-- logs to system console --&amp;gt;
 &amp;lt;appender name=&quot;CONSOLE&quot; class=&quot;org.apache.log4j.ConsoleAppender&quot;&amp;gt;
  &amp;lt;param name=&quot;Target&quot; value=&quot;System.out&quot; /&amp;gt;
  &amp;lt;param name=&quot;Threshold&quot; value=&quot;ALL&quot; /&amp;gt;
  &amp;lt;layout class=&quot;org.apache.log4j.PatternLayout&quot;&amp;gt;
   &amp;lt;param name=&quot;ConversionPattern&quot; value=&quot;%d{ABSOLUTE} %-5p [%c{1}] %m%n&quot; /&amp;gt;
  &amp;lt;/layout&amp;gt;
 &amp;lt;/appender&amp;gt;

 &amp;lt;logger name=&quot;org.springframework&quot; additivity=&quot;false&quot;&amp;gt;
  &amp;lt;level value=&quot;TRACE&quot; /&amp;gt;
  &amp;lt;appender-ref ref=&quot;CONSOLE&quot; /&amp;gt;
 &amp;lt;/logger&amp;gt;

 &amp;lt;root&amp;gt;
  &amp;lt;level value=&quot;ALL&quot; /&amp;gt;
  
  &amp;lt;appender-ref ref=&quot;CONSOLE&quot; /&amp;gt;
 &amp;lt;/root&amp;gt;

&amp;lt;/log4j:configuration&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/3758686532239148268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/3758686532239148268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/3758686532239148268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/3758686532239148268'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2010/11/multi-transaction-manager-spring.html' title='Multi Transaction Manager Spring Configuration - A Mix of Declarative and XML Configuration'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-8625041868826819303</id><published>2010-09-24T23:38:00.000-07:00</published><updated>2010-09-24T23:38:26.377-07:00</updated><title type='text'>A callback Java Collection</title><content type='html'>A collection is meant to store or group together objects. In most cases the purpose is to retrieve it later after collecting and process/modify the objects within. Almost always this retrieval or traversal of the collection is after all the objects have been collected. There could be a use case where in the retrieval/processing of these objects is triggered on events such as:&lt;br /&gt;
- The number of objects collected within, a particular threshold reached&lt;br /&gt;
- The time elapsed&lt;br /&gt;
&lt;br /&gt;
Following implementation depicts a callback collection that would perform a callback on such events. Additionally events could be decorated such that a logical OR of such events could be performed.&lt;br /&gt;
&lt;br /&gt;
source at : &lt;br /&gt;
&lt;a href=&quot;https://sites.google.com/site/rockycodes/CallbackCollection.zip&quot;&gt;https://sites.google.com/site/rockycodes/CallbackCollection.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;Usage of the collection as shown below in CallbackCollectionUsage.java&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
package com.blog10_99.usage;

import java.util.ArrayList;
import java.util.Collection;

import com.blog10_99.callbackcoll.CallbackCollection;
import com.blog10_99.callbackcoll.CallbackCollectionHandler;
import com.blog10_99.callbackcoll.MaxSizeCallbackCollection;

public class CallbackCollectionUsage implements CallbackCollectionHandler&amp;lt;String&amp;gt;{

 public static void main(String args[]){
  new CallbackCollectionUsage().performTest();
 }
 
 private void performTest(){
  Long MAX_SIZE = 5L;
  CallbackCollection&amp;lt;String&amp;gt; callbackCollection = new MaxSizeCallbackCollection&amp;lt;String&amp;gt;(new ArrayList&amp;lt;String&amp;gt;(), MAX_SIZE);
  callbackCollection.addCallbackHandler(this);
  for(int i=0;i&amp;lt;10;i++){
   callbackCollection.add(&quot;String:&quot; + i);
  }  
 }
 
 @Override
 public void callbackCollectionNotification(Collection&amp;lt;String&amp;gt; collection) {
  System.out.println(&quot;Callback performed:&quot;);
  for(String obj : collection){
   System.out.println(obj);
  }
  collection.clear();
 }
}
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;The CallbackCollection interface&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
package com.blog10_99.callbackcoll;

import java.util.Collection;

public interface CallbackCollection&amp;lt;T&amp;gt;{
 public Collection&amp;lt;T&amp;gt; getCollection();
    public void addCallbackHandler(CallbackCollectionHandler&amp;lt;T&amp;gt; handler);
    public Collection&amp;lt;CallbackCollectionHandler&amp;lt;T&amp;gt;&amp;gt; getCallbackHandlers();
    public void initiateNotification();
    public boolean isReady();
    public boolean add(T object);
}
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;The MaxSizeCallbackCollection implementation&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
package com.blog10_99.callbackcoll;

import java.util.Collection;

public class MaxSizeCallbackCollection&amp;lt;T&amp;gt; extends AbstractCallbackCollection&amp;lt;T&amp;gt;{
    private Long maxSize = Long.MAX_VALUE;
    private AbstractCallbackCollection&amp;lt;T&amp;gt; decoration;

    public MaxSizeCallbackCollection(Collection&amp;lt;T&amp;gt; collection,Long maxSize){
     super(collection);
        this.maxSize = maxSize;
        this.decoration = new DefaultCallbackCollection&amp;lt;T&amp;gt;(collection,true);
    }

    public MaxSizeCallbackCollection(Collection&amp;lt;T&amp;gt; collection,Long maxSize, AbstractCallbackCollection&amp;lt;T&amp;gt; decoration){
        this(collection,maxSize);
        if (decoration != null) {
            this.decoration = decoration;
        }
    }

    @Override
    public boolean add(T element) {
        boolean result = super.add(element);
        if(isReady()){
            initiateNotification();
        }
        return result;
    }

    @Override
    public boolean isReady() {
        if((super.getCollection().size() == maxSize) &amp;amp;&amp;amp; decoration.isReady()){
            return true;
        }
        return false;
    }
}
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
Rest of the code including AbstractCallbackCollection.java, CallbackCollectionHandler.java, TimeOutCallbackCollection.java can be found in the source at the following location:&lt;br /&gt;
&lt;a href=&quot;http://www.blogger.com/goog_1315372654&quot;&gt;&lt;br /&gt;
&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://sites.google.com/site/rockycodes/CallbackCollection.zip&quot;&gt;https://sites.google.com/site/rockycodes/CallbackCollection.zip&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Additionally synchronization issues might crop up when&amp;nbsp; TimeOutCallbackCollection type is used. I ended up dumping this kind and using Spring3.0 timer constructs like Scheduler.</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/8625041868826819303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/8625041868826819303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/8625041868826819303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/8625041868826819303'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2010/09/callback-java-collection.html' title='A callback Java Collection'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-7080808791861117878</id><published>2010-09-19T23:04:00.000-07:00</published><updated>2010-09-19T23:04:26.317-07:00</updated><title type='text'>JSF2.0 Navigation Use Cases</title><content type='html'>Navigation to and from workflow steps and pages in a web application is central to its design and usability. JSF2.0 brings smiles to developers because of its easy to use navigation features. JSF1.2 made developers do all the navigation as a configuration in xml configuration but JSF2.0 comes with new implicit navigation, button like UI component control navigation, EL driven navigation outcomes. All these cool new additions almost make JSF1.2 apps look like they were from the stone age.&lt;br /&gt;
&lt;br /&gt;
In the following code example that has &quot;pageOne.xhtml&quot;, &quot;pageTwo.xhtml&quot; and &quot;pageThree.xhtml&quot; h:commandButton can be used for navigation in the following ways:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt; Implicit Navigation using h:commandButton&#39;s action attribute&lt;/li&gt;

&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
&amp;lt;h:commandButton action=&quot;pageTwo&quot; value=&quot;Go To pageTwo&quot; /&amp;gt;

&amp;lt;h:button outcome=&quot;pageTwo&quot; value=&quot;Go To pageTwo&quot; /&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;
&lt;li&gt;Implicit Navigation using action method binding&lt;/li&gt;

&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
&amp;lt;h:commandButton action=&quot;#{pageOneController.navigateToPageTwo}&quot; value=&quot;Go To pageTwo&quot; /&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;Request Scoped Managed bean PageOneController: 
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
package com.blog10_99.jsfnavigation;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.event.ActionEvent;

@ManagedBean
@RequestScoped
public class PageOneController {
 
 private boolean readyToGoToPageTwo;
 
 public String navigateToPageTwo(){
  return &quot;pageTwo&quot;;
 }
 
 public void decideApplicationState(ActionEvent ae){
  if(Math.random() &amp;lt; 0.5){
   readyToGoToPageTwo = true;
  }else{
   readyToGoToPageTwo = false;
  }
 }

 public boolean isReadyToGoToPageTwo() {
  return readyToGoToPageTwo;
 }

 public void setReadyToGoToPageTwo(boolean readyToGoToPageTwo) {
  this.readyToGoToPageTwo = readyToGoToPageTwo;
 }
}

&lt;/code&gt;
&lt;/pre&gt;
&lt;li&gt;Conditional Navigation using faces-config.xml EL&lt;/li&gt;

&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
&amp;lt;h:commandButton actionListener=&quot;#{pageOneController.decideApplicationState}&quot; value=&quot;Go To pageTwo or pageThree&quot; /&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;faces-config.xml: 
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;faces-config xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot;
 xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
 xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd&quot;
 version=&quot;2.0&quot;&amp;gt;
 &amp;lt;application&amp;gt;
  &amp;lt;resource-bundle&amp;gt;
   &amp;lt;base-name&amp;gt;com.blog10_99.jsfnavigation.messages.messages&amp;lt;/base-name&amp;gt;
   &amp;lt;var&amp;gt;msgs&amp;lt;/var&amp;gt;
  &amp;lt;/resource-bundle&amp;gt;
 &amp;lt;/application&amp;gt;

 &amp;lt;navigation-rule&amp;gt;
  &amp;lt;from-view-id&amp;gt;/ui/pageOne.xhtml&amp;lt;/from-view-id&amp;gt;
  &amp;lt;navigation-case&amp;gt;
   &amp;lt;if&amp;gt;#{pageOneController.readyToGoToPageTwo}&amp;lt;/if&amp;gt;
   &amp;lt;to-view-id&amp;gt;/ui/pageTwo.xhtml&amp;lt;/to-view-id&amp;gt;
  &amp;lt;/navigation-case&amp;gt;
  &amp;lt;navigation-case&amp;gt;
   &amp;lt;if&amp;gt;#{!pageOneController.readyToGoToPageTwo}&amp;lt;/if&amp;gt;
   &amp;lt;to-view-id&amp;gt;/ui/pageThree.xhtml&amp;lt;/to-view-id&amp;gt;
  &amp;lt;/navigation-case&amp;gt;
 &amp;lt;/navigation-rule&amp;gt;
&amp;lt;/faces-config&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;refer above for commandButton&#39;s actionListener method decideApplicationState() in the listing of the request scoped managed bean class PageOneController  &lt;/ol&gt;&lt;span style=&quot;color: blue;&quot;&gt;Source code with maven project for the above JSF2.0 navigation demo can be downloaded from the following location: &lt;/span&gt;&lt;a href=&quot;https://sites.google.com/site/rockycodes/jsfnavigation.zip&quot;&gt;https://sites.google.com/site/rockycodes/jsfnavigation.zip&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/7080808791861117878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/7080808791861117878' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/7080808791861117878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/7080808791861117878'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2010/09/jsf20-navigation-use-cases.html' title='JSF2.0 Navigation Use Cases'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-6099012979156227676</id><published>2010-08-07T22:18:00.000-07:00</published><updated>2011-10-16T23:25:13.783-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="directory structure"/><category scheme="http://www.blogger.com/atom/ns#" term="ID3"/><category scheme="http://www.blogger.com/atom/ns#" term="ID3V2"/><category scheme="http://www.blogger.com/atom/ns#" term="iPod"/><category scheme="http://www.blogger.com/atom/ns#" term="jaudiotagger"/><category scheme="http://www.blogger.com/atom/ns#" term="MP3"/><title type='text'>MP3 ID3V2 tag modifier tool to have a directory structure grouping in your iPod just like in your hard-drive</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
IPOD/IPhone does a good job grouping music over some tags but fails badly on some. For example  grouping like IPOD --&amp;gt; more.. --&amp;gt; Albums takes you to songs grouped by a unique combination of Artist and Album name. This grouping leaves you with a scattered list of songs from an album whose songs have been sung by different artists. For me this resulted in having 5 listings of the same album name in the Albums view because each song in it was sung by a separate artist. I had to manually change to play songs from the same album and it was one of my&amp;nbsp;favorites&amp;nbsp;!&lt;br /&gt;
&lt;br /&gt;
I almost wish I had a folder structure listed out in my IPOD that was just like the one on my hard-drive!&lt;br /&gt;
&lt;br /&gt;
I granted myself this wish and found the following workaround:&lt;br /&gt;
&lt;br /&gt;
IPOD --&amp;gt; more.. --&amp;gt; Composers is a group that I never use. I created a tool that given a root folder name on the hard-drive(I had all my songs in c:\songs) recursively browses each folder and sets the composer attribute of the ID3V2 tag of a MP3 file to the name of its folder. Hence if I had songs in folder C:\songs\metallica\Death Magnetic, all songs in this folder would be updated to have a composer value of Death Magnetic. After having run the tool I cleared out my itunes and dragged all my modified files back again and got my iphone sync&#39;d. Wo...hooo!! now the exact same directory structure grouping shows up when I browse to IPOD --&amp;gt; more.. --&amp;gt; Composers&lt;br /&gt;
&lt;br /&gt;
My songs folder was c:\songs hence I used the following command:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;java -jar SeekNChange.jar &quot;C:\songs&quot;&lt;/code&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #3366ff; font-weight: bold;&quot;&gt;Download the SeekNChange.jar file from the following location:&lt;/span&gt;&lt;br /&gt;
&lt;a href=&quot;https://sites.google.com/site/rockycodes/SeekNChange.jar&quot;&gt;https://sites.google.com/site/rockycodes/SeekNChange.jar&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #3366ff; font-weight: bold;&quot;&gt;External Libraries and Tools used&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.jthink.net/jaudiotagger/&quot;&gt;jaudiotagger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://fjep.sourceforge.net/&quot;&gt;Fat Jar Eclipse Plug-In&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #3366ff; font-weight: bold;&quot;&gt;Source Code:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(153, 153, 153); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-style: dashed; border-top-width: 1px; color: black; font-family: &#39;Andale Mono&#39;, &#39;Lucida Console&#39;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 659px;&quot;&gt;&lt;code&gt;
package com.blog10_99.music;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class MP3SeekNModifier {
 private FileWriter logFile;

 public void modifyComposerForMP3sInFolderToParentFolderName(
   String folderPath) throws IOException {
  System.out.println(&quot;modifying composer names in folder: &quot; + folderPath);
  File inputFolder = new File(folderPath);
  logFile = new FileWriter(new File(folderPath, &quot;SeekNChangeErrors.txt&quot;));
  modifyComposer(inputFolder);
  logFile.close();
 }

 private void modifyComposer(File parentFolder) throws IOException {
  System.out.println(&quot;modifying composer names in folder: &quot;
    + parentFolder.getAbsolutePath());
  File[] children = parentFolder.listFiles();
  if (children == null) {
   return;
  }
  for (File childFile : children) {
   if (childFile.isDirectory()) {
    modifyComposer(childFile);
    logFile.flush();
   } else {
    changeComposer(parentFolder, childFile);
   }
  }
 }

 private void changeComposer(File parentFolder, File childFile)
   throws IOException {
  if (childFile.canWrite()
    &amp;amp;&amp;amp; childFile.getAbsolutePath().matches(
      &quot;.*\\.{1}?[(mp)(MP)(mP)(Mp)]+3&quot;)) {
   try {
    new MP3FileID3Modifier().modifyId3V2Composer(childFile,
      parentFolder.getName());
   } catch (Exception e) {
    String logMessage = &quot;Could not modify composer for file: &quot;
      + childFile.getAbsolutePath();
    System.out.println(logMessage);
    e.printStackTrace();
    logFile.write(logMessage + &quot;\n&quot;);
   }
  }
 }

 public static void main(String args[]) throws IOException {
    if (args == null || args.length != 1) {
  System.out.println(&quot;USAGE: java -jar SeekNChange.jar &lt;folder path=&quot;&quot;&gt;&quot;);
  return;
    }
    new MP3SeekNModifier()
    .modifyComposerForMP3sInFolderToParentFolderName(args[0]);
 }
}

&lt;/folder&gt;&lt;/code&gt;
&lt;/pre&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;/div&gt;
&lt;pre style=&quot;background-color: #eeeeee; border-bottom-color: rgb(153, 153, 153); border-bottom-style: dashed; border-bottom-width: 1px; border-left-color: rgb(153, 153, 153); border-left-style: dashed; border-left-width: 1px; border-right-color: rgb(153, 153, 153); border-right-style: dashed; border-right-width: 1px; border-top-color: rgb(153, 153, 153); border-top-style: dashed; border-top-width: 1px; color: black; font-family: &#39;Andale Mono&#39;, &#39;Lucida Console&#39;, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 659px;&quot;&gt;&lt;code&gt;package com.blog10_99.music;

import java.io.File;

import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.tag.FieldKey;
import org.jaudiotagger.tag.Tag;

public class MP3FileID3Modifier {
 public void modifyId3V2Composer(File mp3File, String composerName)
   throws Exception {
  System.out.println(&quot;processing... &quot; + mp3File.getAbsolutePath());
  AudioFile f = AudioFileIO.read(mp3File);
  Tag tag = f.getTagOrCreateAndSetDefault();
  tag.setField(FieldKey.COMPOSER, composerName);
  f.commit();
  System.out.println(&quot;changed composer for: &quot; + mp3File.getName()
    + &quot; to &quot; + composerName);
 }
}
&lt;/code&gt;
&lt;/pre&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/6099012979156227676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/6099012979156227676' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/6099012979156227676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/6099012979156227676'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2010/08/mp3-idv3-tag-modifier-tool-to-have.html' title='MP3 ID3V2 tag modifier tool to have a directory structure grouping in your iPod just like in your hard-drive'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-4578433382749988000</id><published>2010-06-23T16:45:00.000-07:00</published><updated>2010-10-27T09:45:34.435-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cxf"/><category scheme="http://www.blogger.com/atom/ns#" term="JAXWS"/><category scheme="http://www.blogger.com/atom/ns#" term="spring"/><title type='text'>Creating a CXF client using spring</title><content type='html'>This post demonstrates creating a JAXWS client to a webservice using CXF. You could create a CXF client in plain java code or you could configure the same in spring and inject it into your business objects for use.&lt;br /&gt;
&lt;br /&gt;
Following simple webservice interface could be taken as an example service:&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
package com.blog10_99.svc;
@javax.jws.WebService
public interface AddService{
    public int add(int number1, int number2);
}
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
Supposing the above service is deployed and accessible at the following url: &lt;br /&gt;
http://localhost/myservices/AddService&lt;br /&gt;
&lt;br /&gt;
WSDL URL:&lt;br /&gt;
http://localhost/myservices/AddService?wsdl&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #741b47;&quot;&gt;&lt;b&gt;A simple CXF Client using plain java code:&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
org.apache.cxf.jaxws.JaxWsProxyFactoryBean factory = new org.apache.cxf.jaxws.JaxWsProxyFactoryBean();
factory.setServiceClass(com.blog10_99.svc.AddService.class);
factory.setAddress(&quot;http://localhost/myservices/AddService&quot;);
com.blog10_99.svc.AddService client = (com.blog10_99.svc.AddService) factory.create();
System.out.println(client.add(1, 2));
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;color: #741b47;&quot;&gt;&lt;b&gt;A simple CXF Client configured using spring:&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
&amp;lt;bean id=&quot;proxyFactory&quot; class=&quot;org.apache.cxf.jaxws.JaxWsProxyFactoryBean&quot;&amp;gt;
  &amp;lt;property name=&quot;serviceClass&quot; value=&quot;com.blog10_99.svc.AddService&quot; /&amp;gt;
  &amp;lt;property name=&quot;address&quot; value=&quot;http://localhost/myservices/AddService&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;

&amp;lt;bean id=&quot;client&quot; class=&quot;com.blog10_99.svc.AddService&quot;
  factory-bean=&quot;proxyFactory&quot; factory-method=&quot;create&quot; /&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;&lt;br /&gt;
The bean with id &quot;client&quot; can now be injected into any business bean and used to invoke the service.</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/4578433382749988000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/4578433382749988000' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/4578433382749988000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/4578433382749988000'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2010/06/creating-cxf-client-using-spring.html' title='Creating a CXF client using spring'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-529984647201971162</id><published>2010-03-06T13:33:00.000-08:00</published><updated>2010-06-23T16:47:11.755-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Custom Component"/><category scheme="http://www.blogger.com/atom/ns#" term="Hibernate"/><category scheme="http://www.blogger.com/atom/ns#" term="JSF"/><title type='text'>Custom Paginated JSF Table Component using Hibernate</title><content type='html'>It is a custom component that takes in a reference to Hibernate Session Factory, a desired page size and a Hibernate entity class name. Yikes!!! it takes in a &quot;Session Factory&quot;... A UI component !!! Yes this one plays a Rambo!&lt;br /&gt;
usage:&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black;  font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&amp;lt;blog10_99:ptable pageSize=&quot;5&quot;
            entityClass=&quot;com.blog10_99.entities.Person&quot;
            sessionFactory=&quot;#{sessionFactoryProvider.sessionFactory}&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;looks like:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrCTr2RgbTG4jlqusLcoqe1jQsBwCIg-3FitmpTJb4FK0m4FtCvc4uznYVmrqIEsBT2bEaau_HvNrr3T6IKfk0gMLDek_ADtrG3XDHtzwL53Uq7OyOtmFDYzSV6pH0zgddhjUqu8ye2e4/s1600-h/ptable.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;139&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrCTr2RgbTG4jlqusLcoqe1jQsBwCIg-3FitmpTJb4FK0m4FtCvc4uznYVmrqIEsBT2bEaau_HvNrr3T6IKfk0gMLDek_ADtrG3XDHtzwL53Uq7OyOtmFDYzSV6pH0zgddhjUqu8ye2e4/s640/ptable.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;- &quot;sessionFactory&quot; attribute in the tag is used to take in a managed bean EL that evaluates to a configured Session Factory instance.&amp;nbsp; &lt;br /&gt;
- &quot;entityClass&quot; attribute reffers to a fully qualified Entity Class name that has been mapped in Hibernate and is part of the session factory configuration.&lt;br /&gt;
- &quot;pageSize&quot; refers to the number of rows to fetch in one go.&lt;br /&gt;
&lt;br /&gt;
This component uses hibernate&#39;s ability to fetch paginated data as follows:&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;Criteria criteria = session.createCriteria(getEntityClass());
        criteria.setFirstResult(startIndex);
        criteria.setMaxResults(pageSize);        
        List entities = criteria.list();
&lt;/code&gt;&lt;/pre&gt;There was&lt;a href=&quot;http://www.exadel.com/tutorial/jsf/jsftutorial-customcomponents.html&quot;&gt; this great tutorial&lt;/a&gt; that I mined out from the web and that tought me to pacakage a custom component.&lt;br /&gt;
Download link to the packaged component:&lt;br /&gt;
&lt;a href=&quot;http://sites.google.com/site/rockycodes/ptable.jar&quot;&gt;http://sites.google.com/site/rockycodes/ptable.jar&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;This jar also contains the source code for the Component Class, Tag Class, Renderer class, TLD file used to build the component. Directory structure looks like this:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwFzoChuyXj3z1UnV6xOvElLIF1ULAXtxpcZp1JLfG0MnJplM8uPpdO-D0txV6-z_p8FuiU1p8lbS1UhZHtQxxK6UkqtmGz5yReBK7w1iTLFQGRXESfbg1Mt3eEHKWOgKkDqmWqbPESJo/s1600-h/ptableDirStr.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwFzoChuyXj3z1UnV6xOvElLIF1ULAXtxpcZp1JLfG0MnJplM8uPpdO-D0txV6-z_p8FuiU1p8lbS1UhZHtQxxK6UkqtmGz5yReBK7w1iTLFQGRXESfbg1Mt3eEHKWOgKkDqmWqbPESJo/s320/ptableDirStr.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;the faces-config.xml file in the distributable jar file for the component is just for reference and I could not make out a plugable way to use it. Component and Renderer declaration has to go in manually in to whichever project a JSF component needs to be used.&lt;br /&gt;
&lt;br /&gt;
Following is a link to a demo project that uses this component:&lt;br /&gt;
&lt;a href=&quot;http://sites.google.com/site/rockycodes/DemoPTable.zip&quot;&gt;http://sites.google.com/site/rockycodes/DemoPTable.zip&lt;/a&gt;&lt;br /&gt;
this project also contains sql scripts CreatePersonTable.sql and PopulatePersonTableProc.sql under the resources dir that can be used to populate the database for this demo. You might need to configure &quot;hibernate.cfg.xml&quot; to use the correct URL and username/password for your database instance. I tried this on a Oracle Express Edition database that is free for download fro Oracle&#39;s Website.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #741b47;&quot;&gt;&lt;b&gt;Component Code Follows:&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;com.blog10_99.jsf.component.UIPaginatedTable&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;package com.blog10_99.jsf.component;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import javax.faces.component.UIComponentBase;
import javax.faces.context.FacesContext;

import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;

import com.blog10_99.jsf.renderer.PaginatedTableHtmlRenderer;

public class UIPaginatedTable extends UIComponentBase {
    public static final String COMPONENT_FAMILY_TYPE = &quot;blog10_99.paginatedtable&quot;;
    private Class entityClass;
    private int pageSize;
    private int currentPageNumber;
    
    @Override
    public String getFamily() {
        return COMPONENT_FAMILY_TYPE;
    }

    @Override
    public String getRendererType() {
        return PaginatedTableHtmlRenderer.RENDERER_TYPE;
    }

    public List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; getEntityData() {
        List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; entityAttrValuesInStrings = new ArrayList&amp;lt;List&amp;lt;String&amp;gt;&amp;gt;();
        List entities = getEntitiesFromSource(getCurrentPageNumber()
                * getPageSize(), getPageSize(), getEntityClass());
        for (Object entity : entities) {
            List&amp;lt;String&amp;gt; attrValues = new ArrayList&amp;lt;String&amp;gt;();
            Field[] fields = getEntityClass().getDeclaredFields();
            for (Field field : fields) {
                String fieldValue = &quot;&quot;;
                try {
                    field.setAccessible(true);
                    fieldValue = field.get(entity).toString();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                attrValues.add(fieldValue);
            }
            entityAttrValuesInStrings.add(attrValues);
        }
        return entityAttrValuesInStrings;
    }

    private List getEntitiesFromSource(int startIndex, int pageSize,
            Class entityClass) {
        SessionFactory sessionFactory =(SessionFactory)getAttributes().get(&quot;sessionFactory&quot;);
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        Criteria criteria = session.createCriteria(getEntityClass());
        criteria.setFirstResult(startIndex);
        criteria.setMaxResults(pageSize);        
        List entities = criteria.list();
        return entities;
    }

    public Class getEntityClass() {
        return entityClass;
    }

    public void setEntityClass(Class entityClass) {
        this.entityClass = entityClass;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getCurrentPageNumber() {
        return currentPageNumber;
    }

    public void setCurrentPageNumber(int currentPageNumber) {
        this.currentPageNumber = currentPageNumber;
    }
    
    @Override
    public Object saveState(FacesContext context) {
        Object values[] = new Object[2];
        values[0] = super.saveState(context);
        values[1] = collectCustomTableComponentAttributeValues();
        return ((Object) (values));
    }

    @Override
    public void restoreState(FacesContext context, Object state) {
        Object values[] = (Object[]) state;
        super.restoreState(context, values[0]);
        restoreCustomTableComponentAttributeValues((Object[]) values[1]);
    }

    private Object[] collectCustomTableComponentAttributeValues(){
        Object customTableComponentValues[] = new Object[3];
        customTableComponentValues[0] = getEntityClass();
        customTableComponentValues[1] = getPageSize();
        customTableComponentValues[2] = getCurrentPageNumber();
        return customTableComponentValues;
    }
    
    private void restoreCustomTableComponentAttributeValues(Object[] customTableComponentValues){
        setEntityClass((Class) customTableComponentValues[0]);
        setPageSize((Integer)customTableComponentValues[1]);
        setCurrentPageNumber((Integer) customTableComponentValues[2]);        
    }
}

&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;com.blog10_99.jsf.renderer.PaginatedTableHtmlRenderer&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;package com.blog10_99.jsf.renderer;

import java.io.IOException;
import java.lang.reflect.Field;
import java.util.List;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.render.Renderer;

import com.blog10_99.jsf.component.UIPaginatedTable;

public class PaginatedTableHtmlRenderer extends Renderer {
    public static final String RENDERER_TYPE = &quot;blog10_99.paginatedtable&quot;;

    @Override
    public void decode(FacesContext context, UIComponent component) {
        super.decode(context, component);
        if ((context == null) || (component == null)) {
            throw new NullPointerException();
        }
        UIPaginatedTable paginatedTableComponent = (UIPaginatedTable) component;
        String key = &quot;currentPageNumber&quot;;
        String value = (String) context.getExternalContext()
                .getRequestParameterMap().get(key);
        if (value != null) {
            paginatedTableComponent.setCurrentPageNumber(new Integer(value));
        }else{
            paginatedTableComponent.setCurrentPageNumber(paginatedTableComponent.getCurrentPageNumber() + 1);
        }
    }

    @Override
    public void encodeEnd(FacesContext context, UIComponent component)
            throws IOException {
        ResponseWriter writer = context.getResponseWriter();
        UIPaginatedTable paginatedTableComponent = (UIPaginatedTable) component;
        writer.startElement(&quot;table&quot;, component);
        writer.writeAttribute(&quot;width&quot;, &quot;80%&quot;, &quot;width&quot;);
        writer.writeAttribute(&quot;border&quot;, &quot;1&quot;, &quot;border&quot;);
        writer.startElement(&quot;caption&quot;, component);
        writer.write(&quot;Hibernate Entity: &quot;+ paginatedTableComponent.getEntityClass().getCanonicalName());
        writer.endElement(&quot;caption&quot;);
        writer.startElement(&quot;thead&quot;, component);
        writer.startElement(&quot;tr&quot;, component);
        for (Field entityField : paginatedTableComponent.getEntityClass()
                .getDeclaredFields()) {
            writer.startElement(&quot;th&quot;, component);
            writer.write(entityField.getName().toUpperCase());
            writer.endElement(&quot;th&quot;);
        }
        writer.endElement(&quot;tr&quot;);
        writer.endElement(&quot;thead&quot;);
        writer.startElement(&quot;tbody&quot;, component);
        List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; entityAttrValuesList = paginatedTableComponent
                .getEntityData();
        if (entityAttrValuesList != null) {

            for (List&amp;lt;String&amp;gt; entityAttrValues : entityAttrValuesList) {
                writer.startElement(&quot;tr&quot;, component);
                for (String attrValue : entityAttrValues) {
                    writer.startElement(&quot;td&quot;, component);
                    writer.write(attrValue);
                    writer.endElement(&quot;td&quot;);
                }
                writer.endElement(&quot;tr&quot;);
            }
        }
        writer.endElement(&quot;tbody&quot;);
        writer.startElement(&quot;tfoot&quot;, component);
        writer.startElement(&quot;th&quot;, component);
        writer.startElement(&quot;input&quot;, component);
        writer.writeAttribute(&quot;id&quot;, &quot;currentPageNumber&quot;, &quot;id&quot;);
        writer.writeAttribute(&quot;type&quot;, &quot;hidden&quot;, &quot;type&quot;);
        writer.writeAttribute(&quot;value&quot;,paginatedTableComponent.getCurrentPageNumber() , &quot;value&quot;);
        writer.endElement(&quot;input&quot;);
        int startRowIndex = paginatedTableComponent.getCurrentPageNumber() * paginatedTableComponent.getPageSize();
        int endRowIndex = startRowIndex + paginatedTableComponent.getPageSize();
        writer.startElement(&quot;label&quot;, component);
        writer.write(&quot;Currently displaying rows &quot; + (startRowIndex + 1) + &quot; - &quot; + endRowIndex + &quot;     &quot;);
        writer.endElement(&quot;label&quot;);
        writer.endElement(&quot;th&quot;);
        writer.startElement(&quot;tr&quot;, component);
        writer.writeAttribute(&quot;colspan&quot;, &quot;3&quot;, &quot;colspan&quot;);
        writer.startElement(&quot;input&quot;, component);
        writer.writeAttribute(&quot;id&quot;, &quot;nextButton&quot;, &quot;id&quot;);
        writer.writeAttribute(&quot;type&quot;, &quot;submit&quot;, &quot;type&quot;);        
        writer.writeAttribute(&quot;value&quot;,&quot;Next &amp;gt; &quot; , &quot;value&quot;);
        writer.endElement(&quot;input&quot;);
        writer.endElement(&quot;tr&quot;);
        writer.endElement(&quot;tfoot&quot;);
        writer.endElement(&quot;table&quot;);
        writer.flush();
    }
}

&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;com.blog10_99.jsf.tag.PaginatedTableHtmlTag&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;package com.blog10_99.jsf.tag;

import javax.faces.component.UIComponent;
import javax.faces.el.ValueBinding;
import javax.faces.webapp.UIComponentTag;

import com.blog10_99.jsf.component.UIPaginatedTable;
import com.blog10_99.jsf.renderer.PaginatedTableHtmlRenderer;

public class PaginatedTableHtmlTag extends UIComponentTag {

    private String sessionFactory;
    private String entityClass;
    private String pageSize;
    
    @Override
    public String getComponentType() {
        return UIPaginatedTable.COMPONENT_FAMILY_TYPE;
    }

    @Override
    public String getRendererType() {
        return PaginatedTableHtmlRenderer.RENDERER_TYPE;
    }

    @Override
    protected void setProperties(UIComponent component) {
        super.setProperties(component);
        UIPaginatedTable paginatedTableComponent = (UIPaginatedTable) component; 
        evaluateAndSetSessionFactory(getPageSize(), &quot;pageSize&quot;, component);        
        paginatedTableComponent.setPageSize(new Integer(getPageSize()));        
        evaluateAndSetSessionFactory(getSessionFactory(),&quot;sessionFactory&quot;,component);
        try {
            paginatedTableComponent.setEntityClass(Class.forName(getEntityClass()));
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }        
    }

    private void evaluateAndSetSessionFactory(String tagAttributeValue,
            final String componentAttributeKey, UIComponent component) {
        if (tagAttributeValue != null) {
                ValueBinding vb = getFacesContext().getApplication()
                        .createValueBinding(tagAttributeValue);
                component.setValueBinding(componentAttributeKey, vb);
        }
    }

    @Override
    public void release() {
        super.release();
        setEntityClass(null);
        setSessionFactory(null);
        setPageSize(null);
    }

    public String getSessionFactory() {
        return sessionFactory;
    }

    public void setSessionFactory(String sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public String getEntityClass() {
        return entityClass;
    }

    public void setEntityClass(String entityClass) {
        this.entityClass = entityClass;
    }

    public String getPageSize() {
        return pageSize;
    }

    public void setPageSize(String pageSize) {
        this.pageSize = pageSize;
    }
}

&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;div style=&quot;color: blue;&quot;&gt;&lt;b&gt;faces-config.xml&lt;/b&gt;&lt;/div&gt;&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&#39;1.0&#39; encoding=&#39;UTF-8&#39;?&amp;gt;
&amp;lt;faces-config xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot;
    xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd&quot;
    version=&quot;1.2&quot;&amp;gt;

    &amp;lt;component&amp;gt;
        &amp;lt;component-type&amp;gt;blog10_99.paginatedtable&amp;lt;/component-type&amp;gt;
        &amp;lt;component-class&amp;gt;com.blog10_99.jsf.component.UIPaginatedTable&amp;lt;/component-class&amp;gt;
    &amp;lt;/component&amp;gt;

    &amp;lt;render-kit&amp;gt;
        &amp;lt;renderer&amp;gt;
            &amp;lt;component-family&amp;gt;blog10_99.paginatedtable&amp;lt;/component-family&amp;gt;
            &amp;lt;renderer-type&amp;gt;blog10_99.paginatedtable&amp;lt;/renderer-type&amp;gt;
            &amp;lt;renderer-class&amp;gt;com.blog10_99.jsf.renderer.PaginatedTableHtmlRenderer&amp;lt;/renderer-class&amp;gt;
        &amp;lt;/renderer&amp;gt;
    &amp;lt;/render-kit&amp;gt;

&amp;lt;/faces-config&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: blue;&quot;&gt;paginatedTable.tld&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;!DOCTYPE taglib PUBLIC &quot;-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN&quot;
&quot;http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd&quot;&amp;gt;
&amp;lt;taglib&amp;gt;
    &amp;lt;tlib-version&amp;gt;1.0&amp;lt;/tlib-version&amp;gt;
    &amp;lt;jsp-version&amp;gt;1.2&amp;lt;/jsp-version&amp;gt;
    &amp;lt;short-name&amp;gt;blog10_99&amp;lt;/short-name&amp;gt;
    &amp;lt;uri&amp;gt;http://10-99.blogspot.com/&amp;lt;/uri&amp;gt;
    &amp;lt;tag&amp;gt;
        &amp;lt;name&amp;gt;ptable&amp;lt;/name&amp;gt;
        &amp;lt;tag-class&amp;gt;com.blog10_99.jsf.tag.PaginatedTableHtmlTag&amp;lt;/tag-class&amp;gt;
        &amp;lt;attribute&amp;gt;
            &amp;lt;name&amp;gt;pageSize&amp;lt;/name&amp;gt;
            &amp;lt;description&amp;gt;Number of rows per page&amp;lt;/description&amp;gt;
        &amp;lt;/attribute&amp;gt;
        &amp;lt;attribute&amp;gt;
            &amp;lt;name&amp;gt;sessionFactory&amp;lt;/name&amp;gt;
            &amp;lt;description&amp;gt;sessionFactoryProvider&amp;lt;/description&amp;gt;
        &amp;lt;/attribute&amp;gt;
        &amp;lt;attribute&amp;gt;
            &amp;lt;name&amp;gt;entityClass&amp;lt;/name&amp;gt;
            &amp;lt;description&amp;gt;Canonical name of the Entity Class&amp;lt;/description&amp;gt;
        &amp;lt;/attribute&amp;gt;
    &amp;lt;/tag&amp;gt;
&amp;lt;/taglib&amp;gt;
&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/529984647201971162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/529984647201971162' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/529984647201971162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/529984647201971162'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2010/03/custom-jsf-paginated-table-using.html' title='Custom Paginated JSF Table Component using Hibernate'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrCTr2RgbTG4jlqusLcoqe1jQsBwCIg-3FitmpTJb4FK0m4FtCvc4uznYVmrqIEsBT2bEaau_HvNrr3T6IKfk0gMLDek_ADtrG3XDHtzwL53Uq7OyOtmFDYzSV6pH0zgddhjUqu8ye2e4/s72-c/ptable.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-8427897640915593317</id><published>2010-02-25T20:00:00.000-08:00</published><updated>2010-02-28T16:18:43.337-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JAXB"/><category scheme="http://www.blogger.com/atom/ns#" term="Marshalling"/><category scheme="http://www.blogger.com/atom/ns#" term="Unmarshalling"/><category scheme="http://www.blogger.com/atom/ns#" term="XmlJavaTypeAdapter"/><title type='text'>JAXB: Marshalling and Unmarshalling a non-trivial java.util.Map</title><content type='html'>JAXB can marshall or unmarshall a trivial java.util.Map such as Map, Map, Map etc. or Map where KeyType and ValueType have primitive types, Wrapper types or types that inturn again are made up of primitive types or warpper types. To be particular the KeyType or ValueType objects should not have a List kind of attribute. The XML generated out on Marshalling a Map object has the following format:&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&amp;lt;mapattributexmltypename&amp;gt;
  &amp;lt;entry&amp;gt;
    &amp;lt;key&amp;gt;
      &amp;lt;keytypeattribute1&amp;gt;...&amp;lt;/keytypeattribute1&amp;gt;
      &amp;lt;keytypeattribute2&amp;gt;...&amp;lt;/keytypeattribute2&amp;gt;
    &amp;lt;/key&amp;gt;
    &amp;lt;value&amp;gt;
      &amp;lt;valuetypeattribute1&amp;gt;...&amp;lt;/valuetypeattribute1&amp;gt;
      &amp;lt;valuetypeattribute2&amp;gt;...&amp;lt;/valuetypeattribute2&amp;gt;
    &amp;lt;/value&amp;gt;
  &amp;lt;/entry&amp;gt;
&amp;lt;/mapattributexmltypename&amp;gt;
&lt;/code&gt;&lt;/pre&gt;Note that in the above generated XML there is no &amp;lt;KeyType&amp;gt; and &amp;lt;ValueType&amp;gt; elements that embed their attributes. Hence if either the KeyType or the ValuType objects have a List kind of attribute then marshalling would result in something like the following:&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&amp;lt;mapattributexmltypename&amp;gt;
   &amp;lt;entry&amp;gt;
       &amp;lt;key&amp;gt;
      &amp;lt;keytypeattribute1&amp;gt;...&amp;lt;/keytypeattribute1&amp;gt;
      &amp;lt;keytypeattribute2&amp;gt;...&amp;lt;/keytypeattribute2&amp;gt;
      &amp;lt;listattributename&amp;gt;entry1&amp;lt;/listattributename&amp;gt;
      &amp;lt;listattributename&amp;gt;entry2&amp;lt;/listattributename&amp;gt;
    &amp;lt;/key&amp;gt;
    &amp;lt;value&amp;gt;
      &amp;lt;valuetypeattribute1&amp;gt;...&amp;lt;/valuetypeattribute1&amp;gt;
      &amp;lt;valuetypeattribute2&amp;gt;...&amp;lt;/valuetypeattribute2&amp;gt;
      &amp;lt;listattributename&amp;gt;entry1&amp;lt;/listattributename&amp;gt;
      &amp;lt;listattributename&amp;gt;entry2&amp;lt;/listattributename&amp;gt;
    &amp;lt;/value&amp;gt;
   &amp;lt;/entry&amp;gt;
&amp;lt;/mapattributexmltypename&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
Unmarshalling of which would be ambiguois logic.&lt;br /&gt;
&lt;br /&gt;
Hence marshalling of such non-trivial Maps can make use of XmlJavaTypeAdapter annotation and implement a XmlAdapter to overcome this problem. The key is to take the Map from the object and create a List of Wrapper objects that holds the KeyType and ValueType as its attributes and marshall. Upon unmarshalling we take the list of Wrapper type objects and rebuild the Map and set it back on on the object. The annotation XmlJavaTypeAdapter on top of the Map attribute on the object signals the Marshaller to use a specific Adapter to transform this Map object into another type( in this case a list of wrappers ). Upon Unmarshall the Unmarshaller again invokes a certian method in the Adapter to transform the List of Wrappers into the Map type before setting it on to the object.&lt;br /&gt;
Following example demonstrates the use of an Adapter:&lt;br /&gt;
&lt;br /&gt;
Download link for full Source: &lt;a href=&quot;http://sites.google.com/site/rockycodes/JAXBNonTrivialMap.zip&quot;&gt;http://sites.google.com/site/rockycodes/JAXBNonTrivialMap.zip &lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #3366ff; font-weight: bold;&quot;&gt;Object to Marshall &amp;amp; Unmarshall : PoolOfDreams.java&lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;package com.blog10_99;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = &quot;PoolOfDreams&quot;)
public class PoolOfDreams {
    private List&amp;lt;Dream&amp;gt; plainListOfDreams  = new ArrayList&amp;lt;Dream&amp;gt;();

    @XmlJavaTypeAdapter(DateVsDreamListXmlAdapter.class)
    private Map&amp;lt;Date, ArrayList&amp;lt;Dream&amp;gt;&amp;gt; dateVsListOfdreamsMap = new HashMap&amp;lt;Date,ArrayList&amp;lt;Dream&amp;gt;&amp;gt;();

    public PoolOfDreams() {

    }

    public List&amp;lt;Dream&amp;gt; getPlainListOfDreams() {
        return plainListOfDreams;
    }

    public void setPlainListOfDreams(List&amp;lt;Dream&amp;gt; plainListOfDreams) {
        this.plainListOfDreams = plainListOfDreams;
    }

    public Map&amp;lt;Date, ArrayList&amp;lt;Dream&amp;gt;&amp;gt; getDateVsListOfdreamsMap() {
        return dateVsListOfdreamsMap;
    }

    public void setDateVsListOfdreamsMap(
            Map&amp;lt;Date, ArrayList&amp;lt;Dream&amp;gt;&amp;gt; dateVsListOfdreamsMap) {
        this.dateVsListOfdreamsMap = dateVsListOfdreamsMap;
    }
}

&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;span style=&quot;color: #3366ff; font-weight: bold;&quot;&gt;Main Method Class: TestDream.java&lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.Set;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import com.blog10_99.Dream;
import com.blog10_99.PoolOfDreams;

public class TestDream {

    public static void main(String args[]) throws Exception {
        PoolOfDreams poolOfDreams = new PoolOfDreams();

        // data for PoolOfDreams :: List&amp;lt;Dream&amp;gt; plainListOfDreams
        Dream plainListDream1 = new Dream(&quot;Dream1 of plain List&amp;lt;Dream&amp;gt; kind&quot;);
        Dream plainListDream2 = new Dream(&quot;Dream2 of plain List&amp;lt;Dream&amp;gt; kind&quot;);
        poolOfDreams.getPlainListOfDreams().add(plainListDream1);
        poolOfDreams.getPlainListOfDreams().add(plainListDream2);

        // data for PoolOfDreams :: Map&amp;lt;Date, ArrayList&amp;lt;Dream&amp;gt;&amp;gt;
        // dateVsListOfdreamsMap
        Dream dateVsDreamListMapDream1 = new Dream(
                &quot;Dream-1 of Date Vs ArrayList&amp;lt;Dream&amp;gt; kind&quot;);
        Dream dateVsDreamListMapDream2 = new Dream(
                &quot;Dream-2 of Date Vs ArrayList&amp;lt;Dream&amp;gt; kind&quot;);
        ArrayList&amp;lt;Dream&amp;gt; dreamListForMap = new ArrayList&amp;lt;Dream&amp;gt;();
        dreamListForMap.add(dateVsDreamListMapDream1);
        dreamListForMap.add(dateVsDreamListMapDream2);
        poolOfDreams.getDateVsListOfdreamsMap().put(new Date(1),
                dreamListForMap);
        Dream dateVsDreamListMapDream3 = new Dream(
                &quot;Dream-3 of Date Vs ArrayList&amp;lt;Dream&amp;gt; kind&quot;);
        Dream dateVsDreamListMapDream4 = new Dream(
                &quot;Dream-4 of Date Vs ArrayList&amp;lt;Dream&amp;gt; kind&quot;);
        dreamListForMap = new ArrayList&amp;lt;Dream&amp;gt;();
        dreamListForMap.add(dateVsDreamListMapDream3);
        dreamListForMap.add(dateVsDreamListMapDream4);
        poolOfDreams.getDateVsListOfdreamsMap().put(new Date(2),
                dreamListForMap);

        JAXBContext jaxbContext = JAXBContext
                .newInstance(com.blog10_99.PoolOfDreams.class);
        Marshaller marshaller = jaxbContext.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        marshaller.marshal(poolOfDreams, new FileOutputStream(&quot;MyDream.xml&quot;));

        Unmarshaller unMarshaller = jaxbContext.createUnmarshaller();
        PoolOfDreams unMarshalledPoolOfDreams = (PoolOfDreams) unMarshaller
                .unmarshal(new File(&quot;MyDream.xml&quot;));

        System.out
                .println(&quot;------------------**********----------------------&quot;);

        System.out.println(&quot;Printing from List&amp;lt;Dream&amp;gt; plainListOfDreams&quot;);
        for (Dream dream : unMarshalledPoolOfDreams.getPlainListOfDreams()) {
            System.out.println(dream.getSubject());
        }

        System.out
                .println(&quot;------------------**********----------------------&quot;);

        System.out
                .println(&quot;Printing from Map&amp;lt;Date, ArrayList&amp;lt;Dream&amp;gt;&amp;gt; dateVsListOfdreamsMap&quot;);
        Set&amp;lt;Date&amp;gt; dreamDateKeySet = unMarshalledPoolOfDreams
                .getDateVsListOfdreamsMap().keySet();
        for (Date dreamDate : dreamDateKeySet) {
            System.out.println(&quot;----Dreams for Date: &quot; + dreamDate);
            for (Dream dream : unMarshalledPoolOfDreams
                    .getDateVsListOfdreamsMap().get(dreamDate)) {
                System.out.println(dream.getSubject());
            }
        }

    }

}
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;span style=&quot;color: #3366ff; font-weight: bold;&quot;&gt;Other Classes:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #3366ff; font-weight: bold;&quot;&gt;DateVsDreamListXmlAdapter.java&lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;package com.blog10_99;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class DateVsDreamListXmlAdapter
        extends
        XmlAdapter&amp;lt;DateKeyAndDreamsListValueHolderListWrapper, Map&amp;lt;Date, ArrayList&amp;lt;Dream&amp;gt;&amp;gt;&amp;gt; {

    @Override
    public DateKeyAndDreamsListValueHolderListWrapper marshal(
            Map&amp;lt;Date, ArrayList&amp;lt;Dream&amp;gt;&amp;gt; dateVsListOfdreamsMap) throws Exception {
        ArrayList&amp;lt;DateKeyAndDreamsListValueHolder&amp;gt; dateKeyAndDreamsListValueHolders = new ArrayList&amp;lt;DateKeyAndDreamsListValueHolder&amp;gt;();
        if (dateVsListOfdreamsMap != null) {
            Set&amp;lt;Date&amp;gt; dreamDatekeySet = dateVsListOfdreamsMap.keySet();
            for (Date dreamDate : dreamDatekeySet) {
                dateKeyAndDreamsListValueHolders
                        .add(new DateKeyAndDreamsListValueHolder(dreamDate,
                                dateVsListOfdreamsMap.get(dreamDate)));
            }
        }
        DateKeyAndDreamsListValueHolderListWrapper listWrapper = new DateKeyAndDreamsListValueHolderListWrapper();
        listWrapper
                .setDateKeyAndDreamsListValueHolders(dateKeyAndDreamsListValueHolders);
        return listWrapper;
    }

    @Override
    public Map&amp;lt;Date, ArrayList&amp;lt;Dream&amp;gt;&amp;gt; unmarshal(
            DateKeyAndDreamsListValueHolderListWrapper dateKeyAndDreamsListValueHolderList)
            throws Exception {
        Map&amp;lt;Date, ArrayList&amp;lt;Dream&amp;gt;&amp;gt; dateVsListOfdreamsMap = new HashMap&amp;lt;Date, ArrayList&amp;lt;Dream&amp;gt;&amp;gt;();
        if (dateKeyAndDreamsListValueHolderList != null) {
            for (DateKeyAndDreamsListValueHolder holder : dateKeyAndDreamsListValueHolderList
                    .getDateKeyAndDreamsListValueHolders()) {
                dateVsListOfdreamsMap.put(holder.getDate(), holder
                        .getDreamsList());
            }
        }
        return dateVsListOfdreamsMap;
    }
}

&lt;/code&gt;&lt;/pre&gt;&lt;span style=&quot;color: #3366ff; font-weight: bold;&quot;&gt;Dream.java&lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;package com.blog10_99;

public class Dream {
    private String subject;

    public Dream() {

    }

    public Dream(String subject) {
        setSubject(subject);
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String toString(){
        return getSubject();
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;span style=&quot;color: #3366ff; font-weight: bold;&quot;&gt;DateKeyAndDreamsListValueHolder.java&lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;package com.blog10_99;

import java.util.ArrayList;
import java.util.Date;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;

@XmlAccessorType(XmlAccessType.FIELD)
public class DateKeyAndDreamsListValueHolder {
    private Date date;
    private ArrayList&amp;lt;Dream&amp;gt; dreamsList = new ArrayList&amp;lt;Dream&amp;gt;();

    public DateKeyAndDreamsListValueHolder() {

    }

    public DateKeyAndDreamsListValueHolder(Date date,
            ArrayList&amp;lt;Dream&amp;gt; dreamsList) {
        this.date = date;
        this.dreamsList = dreamsList;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public ArrayList&amp;lt;Dream&amp;gt; getDreamsList() {
        return dreamsList;
    }

    public void setDreamsList(ArrayList&amp;lt;Dream&amp;gt; dreamsList) {
        this.dreamsList = dreamsList;
    }

}

&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;span style=&quot;color: #3366ff; font-weight: bold;&quot;&gt;DateKeyAndDreamsListValueHolderListWrapper.java&lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;package com.blog10_99;

import java.util.ArrayList;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;

@XmlAccessorType(XmlAccessType.FIELD)
public class DateKeyAndDreamsListValueHolderListWrapper {
    private ArrayList&amp;lt;DateKeyAndDreamsListValueHolder&amp;gt; dateKeyAndDreamsListValueHolders =
        new ArrayList&amp;lt;DateKeyAndDreamsListValueHolder&amp;gt;();

    public DateKeyAndDreamsListValueHolderListWrapper() {
    }

    public ArrayList&amp;lt;DateKeyAndDreamsListValueHolder&amp;gt; getDateKeyAndDreamsListValueHolders() {
        return dateKeyAndDreamsListValueHolders;
    }

    public void setDateKeyAndDreamsListValueHolders(
            ArrayList&amp;lt;DateKeyAndDreamsListValueHolder&amp;gt; dateKeyAndDreamsListValueHolders) {
        this.dateKeyAndDreamsListValueHolders = dateKeyAndDreamsListValueHolders;
    }
}

&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;span style=&quot;color: #3366ff; font-weight: bold;&quot;&gt;Generated File:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #3366ff; font-weight: bold;&quot;&gt;MyDream.xml&lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&amp;gt;
&amp;lt;poolofdreams&amp;gt;
    &amp;lt;plainlistofdreams&amp;gt;
        &amp;lt;subject&amp;gt;Dream1 of plain List&amp;amp;lt;Dream&amp;amp;gt; kind&amp;lt;/subject&amp;gt;
    &amp;lt;/plainListOfDreams&amp;gt;
    &amp;lt;plainlistofdreams&amp;gt;
        &amp;lt;subject&amp;gt;Dream2 of plain List&amp;amp;lt;Dream&amp;amp;gt; kind&amp;lt;/subject&amp;gt;
    &amp;lt;/plainListOfDreams&amp;gt;
    &amp;lt;datevslistofdreamsmap&amp;gt;
        &amp;lt;datekeyanddreamslistvalueholders&amp;gt;
            &amp;lt;date&amp;gt;1969-12-31T18:00:00.001-06:00&amp;lt;/date&amp;gt;
            &amp;lt;dreamslist&amp;gt;
                &amp;lt;subject&amp;gt;Dream-1 of Date Vs ArrayList&amp;amp;lt;Dream&amp;amp;gt; kind&amp;lt;/subject&amp;gt;
            &amp;lt;/dreamsList&amp;gt;
            &amp;lt;dreamslist&amp;gt;
                &amp;lt;subject&amp;gt;Dream-2 of Date Vs ArrayList&amp;amp;lt;Dream&amp;amp;gt; kind&amp;lt;/subject&amp;gt;
            &amp;lt;/dreamsList&amp;gt;
        &amp;lt;/dateKeyAndDreamsListValueHolders&amp;gt;
        &amp;lt;datekeyanddreamslistvalueholders&amp;gt;
            &amp;lt;date&amp;gt;1969-12-31T18:00:00.002-06:00&amp;lt;/date&amp;gt;
            &amp;lt;dreamslist&amp;gt;
                &amp;lt;subject&amp;gt;Dream-3 of Date Vs ArrayList&amp;amp;lt;Dream&amp;amp;gt; kind&amp;lt;/subject&amp;gt;
            &amp;lt;/dreamsList&amp;gt;
            &amp;lt;dreamslist&amp;gt;
                &amp;lt;subject&amp;gt;Dream-4 of Date Vs ArrayList&amp;amp;lt;Dream&amp;amp;gt; kind&amp;lt;/subject&amp;gt;
            &amp;lt;/dreamsList&amp;gt;
        &amp;lt;/dateKeyAndDreamsListValueHolders&amp;gt;
    &amp;lt;/dateVsListOfdreamsMap&amp;gt;
&amp;lt;/PoolOfDreams&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;span style=&quot;color: #3366ff; font-weight: bold;&quot;&gt;Output from the main program:&lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;
Dream1 of plain List&lt;dream&gt; kind
Dream2 of plain List&lt;dream&gt; kind
------------------**********----------------------
Printing from Map&lt;date, arraylist=&quot;&quot;&gt;&lt;dream&gt;&amp;gt; dateVsListOfdreamsMap
----Dreams for Date: Wed Dec 31 18:00:00 CST 1969
Dream-1 of Date Vs ArrayList&lt;dream&gt; kind
Dream-2 of Date Vs ArrayList&lt;dream&gt; kind
----Dreams for Date: Wed Dec 31 18:00:00 CST 1969
Dream-3 of Date Vs ArrayList&lt;dream&gt; kind
Dream-4 of Date Vs ArrayList&lt;dream&gt; kind
&lt;/dream&gt;&lt;/dream&gt;&lt;/dream&gt;&lt;/dream&gt;&lt;/dream&gt;&lt;/date,&gt;&lt;/dream&gt;&lt;/dream&gt;&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/8427897640915593317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/8427897640915593317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/8427897640915593317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/8427897640915593317'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2010/02/jaxb-marshalling-and-unmarshalling-non.html' title='JAXB: Marshalling and Unmarshalling a non-trivial java.util.Map'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-1905053092479534710</id><published>2009-06-17T21:24:00.000-07:00</published><updated>2010-10-27T09:48:55.805-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SOAP"/><category scheme="http://www.blogger.com/atom/ns#" term="SOAPUI"/><category scheme="http://www.blogger.com/atom/ns#" term="Webservice"/><title type='text'>Using soapUI to test a webservice</title><content type='html'>soapUI is a very handy tool to test or talk to a webservice. It is based on the &quot;contract first&quot; webservice client approach. It needs a wsdl contract in order to generate required artifacts(jaxb beans and service stubs) to talk to the service.&lt;br /&gt;
&lt;br /&gt;
I will discuss how to use soapUI to test a service developed in the blog &lt;a href=&quot;http://10-99.blogspot.com/2009/05/java-webservice-using-jaxws-ri-and.html&quot;&gt;http://10-99.blogspot.com/2009/05/java-webservice-using-jaxws-ri-and.html&lt;/a&gt;&lt;br /&gt;
assuming that this service is deployed locally at &quot;http://localhost:8080/SunRIService/GameService&quot;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Download soapUI from &lt;a href=&quot;http://www.soapui.org/&quot;&gt;http://www.soapui.org/&lt;/a&gt; and install and launch it.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;File -&amp;gt; &quot;New soapUI Project&quot; will launch a dialog asking for inputs to create the client.&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;Enter:&lt;br /&gt;
Project Name: GameServiceClient&lt;br /&gt;
Initial WSDL/WADL : &lt;a href=&quot;http://localhost:8080/SunRIService/GameService?wsdl&quot;&gt;http://localhost:8080/SunRIService/GameService?wsdl&lt;/a&gt;&lt;br /&gt;
Keep the defaults for other inputs and press &quot;Ok&quot; . Thats all !! you are ready to call the service.&lt;br /&gt;
This will look something like the picture below. Ofcourse I have clicked &quot;Request1&quot; on &quot;GetCricketGameOperation&quot; and pressed the little green button to the top right of the JInternal Pane.&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6LkTAZ3xitzu3c1tUMjN_h7OMPiwXwqy7OueJXsXnh4Jc72QX0Vjd6qjP86PxRbb6Adz088cFghItEtvgRzQkpbZ5SIqScvgITBtekMJgw2r1DBt1Ly_96lmv1WNz1rNTrRvp0cpklF8/s1600-h/GameServiceClient1.jpg&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5348522928506162690&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6LkTAZ3xitzu3c1tUMjN_h7OMPiwXwqy7OueJXsXnh4Jc72QX0Vjd6qjP86PxRbb6Adz088cFghItEtvgRzQkpbZ5SIqScvgITBtekMJgw2r1DBt1Ly_96lmv1WNz1rNTrRvp0cpklF8/s400/GameServiceClient1.jpg&quot; style=&quot;cursor: pointer; display: block; height: 240px; margin: 0px auto 10px; text-align: center; width: 400px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;What about service calls that require parameters? well everything on a service call is plain old SOAP XML. Hence you just have to enter text values in the sample requests and call the service by pressing the little green button.&lt;/li&gt;
&lt;/ul&gt;The second web method in GameService - &quot;GetGameWithTeamsOp&quot; takes in two teams and returns back a Game object. Expand this tree node and you can see a &quot;Request1&quot; which is a sample request created for you by soapUI. Just fill in with some text for &#39;?&#39; in the xml and press the little green button to see the response in xml on the right hand side JInternal pane. This looks something like the following pic:&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimHzklJUOoT4b31Tjktn792syPxQd0jOrTZvkfmeC_tjE1gMHcZRwpnXosuTyUnOO3KPPlLoduzbwFUlZ5cTMlZnoEJxE06kBg2sTqA6O_qFSJFm-2KOAUw0AVp6LChtfNAz56TYMwve4/s1600-h/GameServiceClient2.jpg&quot; onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; id=&quot;BLOGGER_PHOTO_ID_5348895362031831890&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimHzklJUOoT4b31Tjktn792syPxQd0jOrTZvkfmeC_tjE1gMHcZRwpnXosuTyUnOO3KPPlLoduzbwFUlZ5cTMlZnoEJxE06kBg2sTqA6O_qFSJFm-2KOAUw0AVp6LChtfNAz56TYMwve4/s400/GameServiceClient2.jpg&quot; style=&quot;cursor: pointer; display: block; height: 241px; margin: 0px auto 10px; text-align: center; width: 400px;&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
In summary all you need to test call a web service is its wsdl. You could get this wsdl by calling &lt;service&gt; ?wsdl  using your web browser. Using this wsdl you can generate a soapUI project and make calls to any web service.&lt;/service&gt;</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/1905053092479534710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/1905053092479534710' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/1905053092479534710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/1905053092479534710'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2009/06/using-soapui-to-test-webservice.html' title='Using soapUI to test a webservice'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6LkTAZ3xitzu3c1tUMjN_h7OMPiwXwqy7OueJXsXnh4Jc72QX0Vjd6qjP86PxRbb6Adz088cFghItEtvgRzQkpbZ5SIqScvgITBtekMJgw2r1DBt1Ly_96lmv1WNz1rNTrRvp0cpklF8/s72-c/GameServiceClient1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3936546507981722114.post-8958699737192767349</id><published>2009-05-30T20:42:00.000-07:00</published><updated>2010-10-27T09:49:26.675-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JAXWS"/><category scheme="http://www.blogger.com/atom/ns#" term="JAXWS RI"/><title type='text'>Java Web Service using JAXWS-RI and Tomcat 6 (no editors and no funky tools)</title><content type='html'>&lt;ul&gt;&lt;li&gt;war file for this service can be downloaded from &lt;a href=&quot;http://rockycodes.googlepages.com/SunRIService.war&quot;&gt;http://rockycodes.googlepages.com/SunRIService.war&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Files involved in this Service: &lt;/li&gt;
&lt;/ul&gt;POJOs in this service are: Game.java, Team.java and Player.java&lt;br /&gt;
Service interface is GameService.java&lt;br /&gt;
Service implementation is GameServiceImpl.java&lt;br /&gt;
&lt;br /&gt;
GameService has two web methods-&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;@WebMethod(operationName=&quot;GetCricketGameOperation&quot;)
Game getCricketGame();
&lt;/code&gt;&lt;/pre&gt;This method has not input parameters but returns back a Game instance.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;@WebMethod(operationName=&quot;GetGameWithTeamsOp&quot;)
Game getGameWithTeams(@WebParam(name=&quot;gameName&quot;)String name,@WebParam(name=&quot;homeTeam&quot;)Team homeTeam, @WebParam(name=&quot;visitorsTeam&quot;) Team visitors);
&lt;/code&gt;&lt;/pre&gt;This method takes in two Team instances and composes them into a Game instance with gameName.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;create the following directory structure with source listings at the end of this blog&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;JaxwsRiSvc\&lt;br /&gt;
JaxwsRiSvc\build&lt;br /&gt;
JaxwsRiSvc\src&lt;br /&gt;
JaxwsRiSvc\src\blog10_99\game\Game.java&lt;br /&gt;
JaxwsRiSvc\src\blog10_99\game\Team.java&lt;br /&gt;
JaxwsRiSvc\src\blog10_99\game\Player.java&lt;br /&gt;
JaxwsRiSvc\src\blog10_99\sunri\service\GameService.java&lt;br /&gt;
JaxwsRiSvc\src\blog10_99\sunri\service\GameServiceImpl.java&lt;br /&gt;
JaxwsRiSvc\build\WEB-INF\&lt;br /&gt;
JaxwsRiSvc\build\WEB-INF\sun-jaxws.xml&lt;br /&gt;
JaxwsRiSvc\build\WEB-INF\web.xml&lt;br /&gt;
JaxwsRiSvc\build\WEB-INF\classes&lt;br /&gt;
JaxwsRiSvc\build\WEB-INF\lib&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;download JAXWS-RI 2.1.7 from jax-ws.dev.java.net&lt;/li&gt;
&lt;/ul&gt;&lt;a href=&quot;https://jax-ws.dev.java.net/2.1.7/JAXWS2.1.7-20090419.jar&quot;&gt;https://jax-ws.dev.java.net/2.1.7/JAXWS2.1.7-20090419.jar&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
run the following on the downloaded jar to extract the files:&lt;br /&gt;
&lt;br /&gt;
java -jar JAXWS2.1.7-20090419.jar&lt;br /&gt;
&lt;br /&gt;
copy the files from the extracted folder &quot;jaxws-ri\lib&quot; to project folder &quot;JaxwsRiSvc\build\WEB-INF\lib&quot;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;compile the project files:&lt;/li&gt;
&lt;/ul&gt;JaxwsRiSvc\src &amp;gt; javac -d &quot;..\build\WEB-INF\classes&quot; -cp .;../ blog10_99/game/*.java&lt;br /&gt;
JaxwsRiSvc\src &amp;gt; javac -d &quot;..\build\WEB-INF\classes&quot; -cp .;../ blog10_99/sunri/service/*.java&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;create sun-jaxws.xml to define the service endpoints for the webapp&lt;/li&gt;
&lt;/ul&gt;&lt;span style=&quot;color: #3333ff;&quot;&gt;sun-jaxws.xml&lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;endpoints xmlns=&quot;http://java.sun.com/xml/ns/jax-ws/ri/runtime&quot; version=&#39;2.0&#39;&amp;gt;
&amp;lt;endpoint
name=&quot;GameService&quot;
implementation=&quot;blog10_99.sunri.service.GameServiceImpl&quot;
url-pattern=&quot;/GameService&quot;/&amp;gt;
&amp;lt;/endpoints&amp;gt;

&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;define deployment descriptor web.xml&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
web.xml defines a WS Listener that configures services at deployment. It also defines a WSServlet for a url pattern that points to our service. All requests to a webservice is routed through this JAX WS Servlet.&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;web-app version=&quot;2.4&quot;
   xmlns=&quot;http://java.sun.com/xml/ns/j2ee&quot;
   xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
   xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot;&amp;gt;
   &amp;lt;listener&amp;gt;
      &amp;lt;listener-class&amp;gt;
        com.sun.xml.ws.transport.http.servlet.WSServletContextListener
      &amp;lt;/listener-class&amp;gt;
   &amp;lt;/listener&amp;gt;
   &amp;lt;servlet&amp;gt;
      &amp;lt;servlet-name&amp;gt;GameService&amp;lt;/servlet-name&amp;gt;
      &amp;lt;servlet-class&amp;gt;
        com.sun.xml.ws.transport.http.servlet.WSServlet
      &amp;lt;/servlet-class&amp;gt;
      &amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;
   &amp;lt;/servlet&amp;gt;
   &amp;lt;servlet-mapping&amp;gt;
      &amp;lt;servlet-name&amp;gt;GameService&amp;lt;/servlet-name&amp;gt;
      &amp;lt;url-pattern&amp;gt;/GameService&amp;lt;/url-pattern&amp;gt;
   &amp;lt;/servlet-mapping&amp;gt;
   &amp;lt;session-config&amp;gt;
      &amp;lt;session-timeout&amp;gt;
         30
      &amp;lt;/session-timeout&amp;gt;
   &amp;lt;/session-config&amp;gt;
   &amp;lt;welcome-file-list&amp;gt;
      &amp;lt;welcome-file&amp;gt;
      index.jsp
      &amp;lt;/welcome-file&amp;gt;
   &amp;lt;/welcome-file-list&amp;gt;
&amp;lt;/web-app&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;package the files into a war file&lt;/li&gt;
&lt;/ul&gt;JaxwsRiSvc\build &amp;gt; jar -cvf ../SunRIService.war *&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;download tomcat6.0 and copy SunRIService.war to the webapps folder.&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;start tomcat and at stratup you can see that WSServletContextListener defined in web.xml loads up and does some initialization.&lt;/li&gt;
&lt;li&gt;The service is now up and running and the following url should get you the service wsdl&lt;/li&gt;
&lt;/ul&gt;&lt;a href=&quot;http://localhost:8080/SunRIService/GameService?wsdl&quot;&gt;http://localhost:8080/SunRIService/GameService?wsdl&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Sources for the above service:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Service Interface definition GameService.java:&lt;/li&gt;
&lt;/ul&gt;&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;package blog10_99.sunri.service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

import blog10_99.game.Game;
import blog10_99.game.Team;

@WebService(name = &quot;GameService&quot;)
public interface GameService {
    @WebMethod(operationName = &quot;GetCricketGameOperation&quot;)
    Game getCricketGame();

    @WebMethod(operationName = &quot;GetGameWithTeamsOp&quot;)
    Game getGameWithTeams(@WebParam(name = &quot;gameName&quot;) String name,
            @WebParam(name = &quot;homeTeam&quot;) Team homeTeam,
            @WebParam(name = &quot;visitorsTeam&quot;) Team visitors);
}

&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Service implementation GameServiceImpl.java&lt;/li&gt;
&lt;/ul&gt;&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;package blog10_99.sunri.service;

import java.util.Arrays;

import javax.jws.WebService;

import blog10_99.game.Game;
import blog10_99.game.Player;
import blog10_99.game.Team;

@WebService(endpointInterface = &quot;blog10_99.sunri.service.GameService&quot;)
public class GameServiceImpl implements GameService{

    public Game getCricketGame() {
        Game game = new Game();
        game.setTeams(Arrays.asList(getTeamIndia(), getTeamAustralia()));
        game.setName(&quot;Cricket&quot;);
        return game;
    }

    public Game getGameWithTeams(String name, Team homeTeam, Team visitors) {
        Game game = new Game();
        game.setName(name);
        game.setTeams(Arrays.asList(homeTeam, visitors));
        return game;
    }

    private Team getTeamIndia() {
        Player sehwag = getPlayer(&quot;Sehwag&quot;, 25);
        Player yuvi = getPlayer(&quot;Yuvraj&quot;, 24);
        Team team1 = new Team();
        team1.setPlayers(Arrays.asList(sehwag, yuvi));
        team1.setName(&quot;India&quot;);
        return team1;
    }

    private Team getTeamAustralia() {
        Player ponting = getPlayer(&quot;Ricky Ponting&quot;, 25);
        Player lee = getPlayer(&quot;Bret Lee&quot;, 24);
        Team team1 = new Team();
        team1.setPlayers(Arrays.asList(ponting, lee));
        team1.setName(&quot;Australia&quot;);
        return team1;
    }

    private Player getPlayer(String name, int age) {
        Player player = new Player();
        player.setName(name);
        player.setAge(age);
        return player;
    }
}

&lt;/code&gt;&lt;/pre&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;POJOs&lt;/li&gt;
&lt;/ul&gt;&lt;span style=&quot;color: #3333ff;&quot;&gt;Game.java&lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;package blog10_99.game;

import java.util.List;
public class Game {
    private List&amp;lt;Team&amp;gt; teams;
    private String name;

    public void setTeams(List&amp;lt;Team&amp;gt; teams) {
        this.teams = teams;
    }

    public List&amp;lt;Team&amp;gt; getTeams() {
        return teams;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;Team.java&lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;package blog10_99.game;

import java.util.List;

public class Team {
    private String name;
    private List&amp;lt;Player&amp;gt; players;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List&amp;lt;Player&amp;gt; getPlayers() {
        return this.players;
    }

    public void setPlayers(List&amp;lt;Player&amp;gt; players) {
        this.players = players;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;span style=&quot;color: #3366ff;&quot;&gt;Player.java&lt;/span&gt;&lt;br /&gt;
&lt;pre style=&quot;background-color: #eeeeee; border: 1px dashed rgb(153, 153, 153); color: black; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;&quot;&gt;&lt;code&gt;package blog10_99.game;

public class Player {
    private String name;
    private Integer age;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return this.age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://10-99.blogspot.com/feeds/8958699737192767349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/3936546507981722114/8958699737192767349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/8958699737192767349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3936546507981722114/posts/default/8958699737192767349'/><link rel='alternate' type='text/html' href='http://10-99.blogspot.com/2009/05/java-webservice-using-jaxws-ri-and.html' title='Java Web Service using JAXWS-RI and Tomcat 6 (no editors and no funky tools)'/><author><name>Rakesh</name><uri>http://www.blogger.com/profile/10306870482649442093</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_x1UlXqK30_6Dodzcei6_qGbshjqy8WH10ZAhqF-nRJrUjWH8yQ-KdCMM5Mgs6007-Jqkw-NVAEzs5foVCtxiMPhx3KismBNEjbgwwox9f3KKAQGzsaj2vrP0-iAbP6M/s1600/*'/></author><thr:total>0</thr:total></entry></feed>