<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5949896138631643846</id><updated>2012-02-02T20:18:51.862-08:00</updated><category term='clustering'/><category term='PaaS'/><category term='Jconsole'/><category term='Selenium'/><category term='Jmeter'/><category term='Test Coverage'/><category term='SOAPUI'/><category term='Emma'/><category term='Apache tcpmon'/><category term='JAX-RS'/><category term='WSO2 Stratos'/><category term='OSGI'/><category term='SOA'/><category term='General Quality Assurance'/><category term='Test Automation'/><category term='WSO2'/><category term='Testing'/><category term='HTTP'/><category term='WSDL'/><category term='API management'/><category term='General'/><category term='WSO2 Carbon'/><category term='AXIOM'/><category term='Stateful web services'/><category term='WSO2 Governance Registry'/><category term='Equinox P2'/><category term='Apache Ant'/><category term='Axis1'/><category term='JMS'/><category term='Resin'/><category term='JSON'/><category term='ws-MetaDataExchange'/><category term='Cloud'/><category term='transports'/><category term='WS-Discovery'/><category term='WS-Addressing'/><category term='JBoss'/><category term='Static Analyzers'/><category term='personal'/><category term='REST'/><category term='Cloud Computing'/><category term='QA'/><category term='Apache Synapse'/><category term='WSO2 ESB'/><category term='GlassFish'/><category term='WS-Security'/><category term='Maven2'/><category term='Web services'/><category term='BAM'/><category term='session management'/><category term='WSAS'/><category term='Reliable Messaging'/><category term='WebSphere'/><category term='WSO2 Application Server'/><category term='BPEL'/><category term='oracle'/><category term='SOAP'/><category term='Data services'/><category term='JMX'/><category term='Apache Derby'/><category term='Apache Tomcat'/><category term='WSO2 BPS'/><category term='Java Security'/><category term='FindBugs'/><category term='Eclipse'/><category term='WS-MEX'/><category term='weblogic'/><category term='Tools'/><category term='wso2con'/><category term='apache wink'/><category term='Axis2'/><category term='ApachCon'/><title type='text'>Charitha Kankanamge's blog</title><subtitle type='html'>Thoughts on QA and Service Oriented Architecture (SOA)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default?start-index=101&amp;max-results=100'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>161</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-7909131294527824644</id><published>2012-01-27T19:20:00.000-08:00</published><updated>2012-01-28T06:33:39.467-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jmeter'/><title type='text'>SOAP message correlation with JMeter Beanshell pre-processor</title><content type='html'>When testing service oriented solutions, it is often required to  correlate SOAP or POX messages with each other. For example, first you  may need to talk to one particular web service and get the response  back. Then you will need to extract some properties from the response  and include them in subsequent requests. In these situations, you cannot  just send the SOAP messages to the web service. In other words, you  should do some preprocessing before doing the second service call.&lt;br /&gt;&lt;br /&gt;Apache  Jmeter provides you with  Pre-Processor elements to handle these types  of requirements. In this post, we will look into one of the useful  pre-processor element, &lt;span style="font-weight: bold;"&gt;Bean Shell PreProcessor&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We will do a simple echo web service call first and extract the response value to a user defined variable. Then, we will use &lt;span style="font-weight: bold;"&gt;Bean Shell PreProcessor &lt;/span&gt;to modify the second SOAP request&lt;span style="font-weight: bold;"&gt;.&lt;br /&gt;&lt;br /&gt;Step 1&lt;br /&gt;&lt;/span&gt;Start Jmeter and create a new test plan.&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;Add two SOAP/XML-RPC request samplers. Add the following request for one sampler. Name the sampler as "echoStringRequest"&lt;br /&gt;&lt;br /&gt;&amp;lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.carbon.wso2.org"&amp;gt;&lt;br /&gt;&amp;lt;soapenv:Body&amp;gt;   &lt;br /&gt;   &amp;lt;ser:echoString&amp;gt;  &lt;br /&gt;       &amp;lt;ser:s&amp;gt;MSFT&amp;lt;/ser:s&amp;gt;   &lt;br /&gt;      &amp;lt;/ser:echoString&amp;gt;&lt;br /&gt;  &amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;&lt;br /&gt;For the second SOAP/XML-RPC request sampler, add the following request. Name it as "StockQuoteRequest"&lt;br /&gt;&lt;br /&gt;&amp;lt;s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"&amp;gt;&lt;br /&gt;&amp;lt;s:Body&amp;gt;&lt;br /&gt;&amp;lt;p:getQuote xmlns:p="http://services.samples/xsd"&amp;gt;&lt;br /&gt;&amp;lt;p:request&amp;gt;&lt;br /&gt;&amp;lt;p:symbol&amp;gt;&amp;amp;lt/p:symbol&amp;gt;&lt;br /&gt;&amp;lt;/p:request&amp;gt;&lt;br /&gt;&amp;lt;/p:getQuote&amp;gt;&lt;br /&gt;&amp;lt;/s:Body&amp;gt;&lt;br /&gt;&amp;lt;/s:Envelope&amp;gt;&lt;br /&gt;&lt;br /&gt;Note that there is no relationship between these two web service calls. I use these just for the demonstration purposes only.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Step 2:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;The above two requests will be sent to two web services hosted in Apache Axis2 (or WSO2 Application Server). Therefore, download&lt;span style="font-weight: bold;"&gt; &lt;a href="https://wso2.org/repos/wso2/trunk/commons/qa/qa-artifacts/app-server/Axis2Service.aar"&gt;Axis2Service.aar &lt;/a&gt;&lt;/span&gt;and&lt;span style="font-weight: bold;"&gt; &lt;a href="https://wso2.org/repos/wso2/trunk/commons/qa/qa-artifacts/app-server/SimpleStockQuoteService.aar"&gt;SimpleStockQuoteService.aar&lt;/a&gt; &lt;/span&gt; deploy the services.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;Step 3:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Now, Send the above echoStringRequest to Axis2Service and check the response.&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;You will see something like below.&lt;br /&gt;&lt;br /&gt;&amp;lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"&amp;gt;&lt;br /&gt;&amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;&amp;lt;ns:echoStringResponse   xmlns:ns="http://service.carbon.wso2.org"&amp;gt;&amp;lt;ns:return&amp;gt;MSFT&amp;lt;/ns:return&amp;gt;&lt;br /&gt;&amp;lt;/ns:echoStringResponse&amp;gt;&lt;br /&gt;&amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We are going to extract the value of &lt;span style="font-weight: bold;"&gt;&amp;lt;echoStringResponse&amp;gt; &lt;/span&gt;element and assign it to a variable so that we can use the value later. For that, we need to add the &lt;span style="font-weight: bold;"&gt;User Defined Variables&lt;/span&gt; config element to the thread group. Right click on thread group and select &lt;span style="font-weight: bold;"&gt;Add --&amp;gt; Config Elements ---&amp;gt; User Defined Variables&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Name: echoResponse&lt;br /&gt;Value: empty&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-u5ZelJrQJfE/TyPYqV5rqYI/AAAAAAAAAmk/SCUY37upzEI/s1600/jmeter1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 58px;" src="http://2.bp.blogspot.com/-u5ZelJrQJfE/TyPYqV5rqYI/AAAAAAAAAmk/SCUY37upzEI/s320/jmeter1.png" alt="" id="BLOGGER_PHOTO_ID_5702639775126366594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;We  need to extract the echoStringResponse from the above SOAP response.  For that, we will use XPAth extractor post-processor element.&lt;br /&gt;&lt;br /&gt;Right click on the echoStringRequest SOAP/XML-RPC sampler and add XPath Extractor.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-8UX2zU9BA9c/TyPZdQ0SUvI/AAAAAAAAAmw/CGbN2VpCMP4/s1600/jmeter2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 102px;" src="http://1.bp.blogspot.com/-8UX2zU9BA9c/TyPZdQ0SUvI/AAAAAAAAAmw/CGbN2VpCMP4/s320/jmeter2.png" alt="" id="BLOGGER_PHOTO_ID_5702640649934885618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Specify "//echoStringResponse/return" as the Xpath query and "echoResponse" (the user defined variable) as the reference name.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In the previous two steps, we extracted echoStringResponse value from  the SOAP response message and assign it to a user defined variable. Now,  we need to insert the extracted string into the second SOAP request.&lt;br /&gt;As I mentioned at the beginning, we use BeanShell preprocessor to modify the SOAP request before submission.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.beanshell.org/intro.html"&gt;BeanShell&lt;/a&gt; is a simple scripting language which dynamically executes standard java syntax.&lt;br /&gt;&lt;br /&gt;Lets add the beanshell preprocessor as a child of our second SOAP sampler, StockQuoteRequest.&lt;br /&gt;Right click on StockQuoteRequest SOAP/XML-RPC sampler and select &lt;span style="font-weight: bold;"&gt;Add --&amp;gt; Pre Processors --&amp;gt; BeanShell Pre Processor&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can include the processing script inside script pane. Here, first we read the StockQuoteRequest to a String and replace the &amp;lt;symbol&amp;gt; element with the echoResponse value which has been placed under the user defined variable.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;import org.apache.jmeter.protocol.http.sampler.SoapSampler;&lt;br /&gt;SoapSampler soapSampler = (SoapSampler) sampler;&lt;br /&gt;String stockRequest = soapSampler.getXmlData().replaceFirst("#symbol#", vars.get("echoResponse"));&lt;br /&gt;soapSampler.setXmlData(stockRequest);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;a href="http://jmeter.apache.org/api/org/apache/jmeter/protocol/http/sampler/SoapSampler.html"&gt;SoapSampler&lt;/a&gt; class can be used to manipulate a lot of operations of SOAP/XML-RPC request such as read XML data, modify data and set SOAPAction etc..&lt;br /&gt;&lt;br /&gt;Here, sampler is a variable provided by jmeter which refers to the parent SOAP request.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-QVgkjl940qE/TyQGPc7MOEI/AAAAAAAAAm8/sLvkJCcllxM/s1600/jmeter3.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 113px;" src="http://4.bp.blogspot.com/-QVgkjl940qE/TyQGPc7MOEI/AAAAAAAAAm8/sLvkJCcllxM/s320/jmeter3.png" alt="" id="BLOGGER_PHOTO_ID_5702689890690152514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 6&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We have completed adding all the necessary elements to our Jmeter test plan. Now, add a listener to visualize the results and run the test.&lt;br /&gt;&lt;br /&gt;You will see that the response of the echoStringRequest will be used for the StockQuoteRequest by extracting the echoStringResponse value from the first request.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-7909131294527824644?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/7909131294527824644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=7909131294527824644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7909131294527824644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7909131294527824644'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2012/01/soap-message-correlation-with-jmeter.html' title='SOAP message correlation with JMeter Beanshell pre-processor'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-u5ZelJrQJfE/TyPYqV5rqYI/AAAAAAAAAmk/SCUY37upzEI/s72-c/jmeter1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-4941855280807344013</id><published>2012-01-26T14:43:00.000-08:00</published><updated>2012-01-26T16:11:47.700-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='API management'/><title type='text'>Testing Perspective of API management</title><content type='html'>API(Application programming interface) is not new, it has been a commonly used term in computing for decades. But what is &lt;span style="font-weight: bold;"&gt;management&lt;/span&gt; of APIs?&lt;br /&gt;&lt;br /&gt;When a set of entities become larger and grow in exponential manner, there is alway a need of management. You can have your own shop and you are able to look after each and every aspect of its operations till it grows to some level. Once, you have a chain of shops, you, by your own cannot do the same which you did with one shop. You should have some kind of management to govern and control your business operations.&lt;br /&gt;Similarly, management is a common requirement for most of the entities around us. DBMS systems were built to manage pools of data.&lt;br /&gt;If you expose the computing assets of your organization to external parties so that they can build applications to integrate with your systems, it can be considered as an &lt;span style="font-weight: bold;"&gt;API offering&lt;/span&gt;. With the widespread adoption of mobile devices and service oriented computing, business organizations began to open application and services to external developers. These third party developers built applications to integrate with the systems of API provider allowing the provider to extend the capabilities of their business as well as helping the third party developers to earn by their own.&lt;br /&gt;Today, there is a enormous set of applications build by third party developers based on the APIs exposed by large vendors. For example, how many new android, iPad, iPhone apps out there for download? how many facebook, twitter apps?&lt;br /&gt;&lt;br /&gt;With this demand of APIs, there is a necessity of adopting a proper &lt;span style="font-weight: bold;"&gt;API management &lt;/span&gt;if you are a Internet application vendor who expose the business APIs for third party developers. Similar to database management software, API management software is used primarily to help API publishers to expose the APIs and  third party developers to build applications in simple and efficient manner. &lt;a href="http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CDYQFjAA&amp;amp;url=http%3A%2F%2Fmashery.com%2F&amp;amp;ei=mt8hT-LtIpDOrQf916m8CA&amp;amp;usg=AFQjCNEPczioG0ugpAGKl5gGF2KsvoV-VQ&amp;amp;sig2=_sTUjiuymHQ6MVV_0tChSw"&gt;Mashery&lt;/a&gt; is considered as the first known API management solution. An API management software should be capable of governing and controlling access to the APIs, securing APIs, metering and monitoring usage of APIs etc..&lt;br /&gt;&lt;br /&gt;With large amount of APIs offered by many vendors as well as the adoption of API management solutions, should we expect a radical change in software testing space? Should there be a totally different approach for API testing?&lt;br /&gt;&lt;br /&gt;Since there is a close relationship with services in service oriented architecture (SOA) and web APIs, I believe &lt;a href="http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=20&amp;amp;ved=0CF4QtwIwCTgK&amp;amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DphrcSGFPb0E&amp;amp;ei=IeIhT7mGKITXrQevw_yzCA&amp;amp;usg=AFQjCNFKFN2OQ35jPyHT8XdLkpVV_Vying&amp;amp;sig2=KnvvmqkkfXj0Ak88cRDxWQ"&gt;the approach which I suggested for SOA testing&lt;/a&gt; will still be applicable for APIs.&lt;br /&gt;Similar to web services, the APIs which are exposed to outside, for various application development and integration efforts, must be tested end-to-end to verify both functional and non-functional needs. In API development, everyone (both QA and Development) should equally be responsible for quality. &lt;span style="font-weight: bold; font-style: italic;"&gt;You should not even think of exposing your APIs for public use if you do not have automated tests to verify regressions.&lt;/span&gt; Think about the performance impacts, think about security concerns, think about usage patterns of your APIs and derive a comprehensive test plan.&lt;br /&gt;&lt;br /&gt;Open source tools such as &lt;a href="http://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CC4QFjAA&amp;amp;url=http%3A%2F%2Fwww.soapui.org%2F&amp;amp;ei=vOohT-SlKsfLrQeL1KieCA&amp;amp;usg=AFQjCNE0DhyxZHa40M-2y2xo7zFzQJHB0A&amp;amp;sig2=nug-v_KJGvCCQTgmIcKijw"&gt;soapUI&lt;/a&gt; which we use for web services testing can also be used for API testing out of the box. Specially, soapUI can easily be used for REST API testing.&lt;br /&gt;&lt;br /&gt;I do not think there will be a completely different set of tools for API  testing since API testing has been there for years and most of the  tools as well as the constructs provided by programming languages such  as Junit, Nunit etc.. have been used in API testing in all these years.&lt;br /&gt;&lt;br /&gt;However, I believe, the API management vendors should think more about the testing and quality assurance aspects. Quality is as important as the govern, control, monitoring aspects of web APIs. Therefore, it will be important for API management solutions, at least to include a set of tools for testing the APIs managed by them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-4941855280807344013?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/4941855280807344013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=4941855280807344013' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4941855280807344013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4941855280807344013'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2012/01/testing-perspective-of-api-management.html' title='Testing Perspective of API management'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-673050298343397859</id><published>2012-01-21T20:44:00.000-08:00</published><updated>2012-01-22T02:40:38.297-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apache wink'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Application Server'/><category scheme='http://www.blogger.com/atom/ns#' term='JAX-RS'/><title type='text'>Truly RESTful Services using Apache Wink and WSO2 Application Server</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-OJYI_5hp_YQ/TxuWpa2537I/AAAAAAAAAmE/3BURXXFhvAk/s1600/wink2-s.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 209px; height: 80px;" src="http://4.bp.blogspot.com/-OJYI_5hp_YQ/TxuWpa2537I/AAAAAAAAAmE/3BURXXFhvAk/s320/wink2-s.png" alt="" id="BLOGGER_PHOTO_ID_5700315391695904690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-S84aFEcQA4I/TxuW31ZB5BI/AAAAAAAAAmQ/WWUT2cstiP8/s1600/product-as-banner.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 68px;" src="http://2.bp.blogspot.com/-S84aFEcQA4I/TxuW31ZB5BI/AAAAAAAAAmQ/WWUT2cstiP8/s320/product-as-banner.gif" alt="" id="BLOGGER_PHOTO_ID_5700315639336526866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://incubator.apache.org/wink/"&gt;Apache Wink&lt;/a&gt; is a complete implementation of &lt;a href="http://en.wikipedia.org/wiki/Java_API_for_RESTful_Web_Services"&gt;JAX-RS&lt;/a&gt; v-1.1 specification. JAX-RS is a java API which supports creating web services in RESTful manner.&lt;br /&gt;&lt;a href="http://wso2.com/products/application-server/"&gt;WSO2 Application Server&lt;/a&gt; is the enterprise-ready, scalable web services and web app hosting platform powered by Apache Axis2 and Apache Tomcat.&lt;br /&gt;In this post, we are going to create a RESTful web service using Apache wink libraries and deploy it in WSO2 Application Server. If we summarize the steps that we are going to do in this example;&lt;br /&gt;1. Create a JDBC data source (mySQL)&lt;br /&gt;2. Create the web service with JAX-RS annotations which makes use of the above database&lt;br /&gt;3. Create a web application (war) with apache wink libraries&lt;br /&gt;4. Deploy the web app in WSO2 Application Server&lt;br /&gt;&lt;br /&gt;WSO2 provides application developers with a complete middleware platform in cloud. Therefore, we makes use of&lt;a href="http://wso2.com/stratos"&gt; WSO2 StratosLive PaaS&lt;/a&gt; (Platform as a Service) as our development platform. In other words, we are NOT even going to install mySQL or WSO2 Application server in our machines to try this sample out. We will create the database in cloud and host web application in the cloud.&lt;br /&gt;&lt;br /&gt;Without discussing further. lets start our journey.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We are going to create a primitive customer registration application which consists of a mySQL database with one table called &lt;span style="font-weight: bold;"&gt;customer&lt;/span&gt;. We need to create the DB schema.&lt;br /&gt;WSO2 Stratos middleware platform in cloud allows us to have our own data storage in cloud within seconds. As I explained in &lt;a href="http://charithaka.blogspot.com/2011/08/wso2-data-as-service-have-your-own-data.html"&gt;this&lt;/a&gt; post, all we have to do is;&lt;br /&gt;- Register a new tenant&lt;br /&gt;- Log into https://stratoslive.wso2.com&lt;br /&gt;- Access DataServices Server&lt;br /&gt;- Create a database and a table&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;CREATE TABLE CUSTOMER_T(customerID int, customerName varchar(100), customerAge int, customerAddress varchar(200));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once the database and table is created, note the DB connection URL. In my case, it is,&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;jdbc:mysql://rss1.stratoslive.wso2.com/wink_superqa_com&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, our application data source is ready for use. As I have explained before, we are going to create a customer registration web service which includes all CRUD operations associated with above DB schema. In other words, we can add, delete, read and update customers using the web service. We will implement our webservice in completely RESTful manner so that we makes use of HTTP verbs to invoke service.&lt;br /&gt;Therefore, lets create the Customer bean first. Open your favorite Java IDE and add Customer class with the following properties and associated getters and setters. The complete class can be found at &lt;a href="https://wso2.org/repos/wso2/trunk/commons/qa/qa-artifacts/app-server/rest/jaxrs-sample/src/com/beans/Customer.java"&gt;https://wso2.org/repos/wso2/trunk/commons/qa/qa-artifacts/app-server/rest/jaxrs-sample/src/com/beans/Customer.java&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;public class Customer {&lt;br /&gt;private int customerID;&lt;br /&gt;private String customerName;&lt;br /&gt;private String customerAddress;&lt;br /&gt;private int customerAge;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We will use a separate class to handle all communication with the database which we created above. Lets name the class as &lt;span style="font-weight: bold;"&gt;Storage.java&lt;/span&gt; and implement all CRUD operations.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;public class Storage {&lt;br /&gt;&lt;br /&gt;Connection connection = null;&lt;br /&gt;Statement statement = null;&lt;br /&gt;ResultSet rs = null;&lt;br /&gt;&lt;br /&gt;private Connection getConnection() {&lt;br /&gt;String driverName = "com.mysql.jdbc.Driver";&lt;br /&gt;String conectionURI = "jdbc:mysql://rss1.stratoslive.wso2.com/wink_superqa_com";&lt;br /&gt;String userName = "ck_l96225fe";&lt;br /&gt;String password = "ck";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;Class.forName(driverName);&lt;br /&gt;try {&lt;br /&gt;connection = DriverManager.getConnection(conectionURI, userName, password);&lt;br /&gt;} catch (SQLException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;try {&lt;br /&gt;connection.setAutoCommit(true);&lt;br /&gt;} catch (SQLException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;} catch (ClassNotFoundException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return connection;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//CREATE operation&lt;br /&gt;public void addCustomer(Customer customer) {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;connection = getConnection();&lt;br /&gt;statement = connection.createStatement();&lt;br /&gt;&lt;br /&gt;String sqlStatement = "INSERT INTO CUSTOMER_T VALUES (" + customer.getCustomerID()&lt;br /&gt;+ ",'" + customer.getCustomerName() + "', " + customer.getCustomerAge() + ",'" + customer.getCustomerAddress() + "')";&lt;br /&gt;statement.execute(sqlStatement);&lt;br /&gt;&lt;br /&gt;} catch (SQLException e) {&lt;br /&gt;&lt;br /&gt;} finally {&lt;br /&gt;if (statement != null) {&lt;br /&gt;try {&lt;br /&gt;statement.close();&lt;br /&gt;} catch (SQLException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (connection != null) {&lt;br /&gt;try {&lt;br /&gt;connection.close();&lt;br /&gt;} catch (SQLException e) {&lt;br /&gt;&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Similarly, add the other methods to UPDATE, DELETE and READ operations. The complete Storage.java class can be found &lt;a href="https://wso2.org/repos/wso2/trunk/commons/qa/qa-artifacts/app-server/rest/jaxrs-sample/src/com/db/Storage.java"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, we can implement our web service. We are going to use JAX-RS annotations to make our web service completely RESTful. Download Apache wink distribution from &lt;a href="http://incubator.apache.org/wink/downloads.html"&gt;here &lt;/a&gt;and add WINK_HOME/dist and WINK_HOME/lib to class path of your IDE.&lt;br /&gt;We will have four methods to demonstrate the basic HTTP methods.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;addCustomer() method is used to add a new customer to the system. We use a HTTP POST request to send the customer details to the web service method.&lt;/li&gt;&lt;li&gt;getCustomerName() is just a HTTP GET operation which reads the CUSTOMER_T table and send back the name of the customer associated with given customer ID.&lt;/li&gt;&lt;li&gt;updateCustomer() method updates the customer address of the given customer&lt;/li&gt;&lt;li&gt;deleteCustomer() method removes a customer record from the table&lt;/li&gt;&lt;/ul&gt;In JAX-RS, we can define the root resource with &lt;span style="font-weight: bold;"&gt;@Path&lt;/span&gt; annotation as shown below. So, when you send a HTTP request to /qa, it will be directed to the associated class.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;@Path("/qa")&lt;br /&gt;public class CustomerService {}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Now, we need to implement the methods associated with CRUD operations. First lets look at addCustomer method. As we defined the root resource at the class declaration level, we can define subresource methods to handle the common HTTP methods. Here, addCustomer is a subresource method and we annotate it with  &lt;span style="font-weight: bold;"&gt;@POST&lt;/span&gt; to direct POST requests which are targeted to '/qa' root resource. @Path annotation at the sub resource level resolves the URL path which is targeted to the method. In otherwords, if the request URL is, &lt;span style="font-weight: bold;"&gt;/qa/customer&lt;/span&gt; and the HTTP method is POST, the request is dispatched to addCustomer() method.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;@POST&lt;br /&gt;@Consumes("application/x-www-form-urlencoded")&lt;br /&gt;@Path("/customer")&lt;br /&gt;public void addCustomer(@FormParam("customerid") int customerID, @FormParam("customername") String customerName, @FormParam("customerage") int customerAge, @FormParam("customeraddress") String customerAddress){&lt;br /&gt;&lt;br /&gt;    Storage storage = new Storage();&lt;br /&gt;    Customer customer = new Customer();&lt;br /&gt;    customer.setCustomerID(customerID);&lt;br /&gt;    customer.setCustomerName(customerName);&lt;br /&gt;    customer.setCustomerAge(customerAge);&lt;br /&gt;    customer.setCustomerAddress(customerAddress);&lt;br /&gt;    storage.addCustomer(customer);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Also, make a note of the @Consumes annotation, here we define the Content-Type which must be included in the HTTP POST request. In our example, if a POST request to '/qa/customer' is issued with "application/x-www-form-urlencoded" Content-Type, the addCustomer() method will be invoked. If we send any other content in the POST request, this method will not get invoked.&lt;br /&gt;&lt;br /&gt;We also use annotated parameters to pass some additional information with a request. For example we can use query parameters, path parameters etc and process them accordingly. In our example, we use &lt;span style="font-weight: bold;"&gt;@FormParm&lt;/span&gt; parameter to extract parameter values from the form posts.&lt;br /&gt;&lt;br /&gt;Similarly, we can implement the other methods in our service implementation class.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;@GET&lt;br /&gt;@Path("/customer/{customerid}")&lt;br /&gt;@Produces("text/plain")&lt;br /&gt;public String getCustomerName(@PathParam("customerid") int customerID) {&lt;br /&gt;Storage storage = new Storage();&lt;br /&gt;Customer customer = null;&lt;br /&gt;try {&lt;br /&gt;customer = storage.getCustomerDetails(customerID);&lt;br /&gt;} catch (SQLException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;return customer.getCustomerName();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@PUT&lt;br /&gt;@Consumes("application/x-www-form-urlencoded")&lt;br /&gt;@Path("/customer")&lt;br /&gt;public void updateCustomer(@FormParam("customername") String customerName, @FormParam("customeraddress") String customerAddress){&lt;br /&gt;&lt;br /&gt;Storage storage = new Storage();&lt;br /&gt;storage.updateCustomer(customerName, customerAddress);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@DELETE&lt;br /&gt;@Path("/customer/{customerid}")&lt;br /&gt;&lt;br /&gt;public void deleteUser(@PathParam("customerid") int customerID) {&lt;br /&gt;&lt;br /&gt;Storage storage = new Storage();&lt;br /&gt;storage.deleteCustomer(customerID);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We have completed the implementation of our web service class with JAX-RS annotations. Apache wink needs us to create a sub-class of &lt;span style="font-weight: bold;"&gt; javax.ws.rs.core.Application&lt;/span&gt; if we deploy deploy our application on non-JAX-RS aware containers. At the time of writing, WSO2 Application Server is not JAX-RS aware hence we need to create this particular subclass. This class basically returns the root resource(s).&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;public class CustomerResourceApplication extends Application {&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;public Set&amp;gt; getClasses() {&lt;br /&gt;Set&amp;gt; classes = new HashSet&amp;gt;();&lt;br /&gt;classes.add(CustomerService.class);&lt;br /&gt;&lt;br /&gt;return classes;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 6&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Next, we need to create the web.xml file for our web application. In addition to the standard constructs in web.xml, we should define that the Apache wink JAX-RS servlet should be initialized with an instance of the above CustomerResourceApplication.&lt;br /&gt;&lt;br /&gt;&lt;!--?xml version="1.0" encoding="UTF-8"?--&gt;We also define that the requests begin with '/rest/' will be handled by Apache Wink JAX-RS servlet.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE web-app PUBLIC&lt;br /&gt;"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"&lt;br /&gt;"http://java.sun.com/dtd/web-app_2_3.dtd" &amp;gt;&lt;br /&gt;&amp;lt;web-app&amp;gt;&lt;br /&gt;&amp;lt;display-name&amp;gt;Restful service Test Web Application&amp;lt;/display-name&amp;gt;&lt;br /&gt;&amp;lt;servlet&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;CustomerServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;servlet-class&amp;gt;org.apache.wink.server.internal.servlet.RestServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&amp;lt;init-param&amp;gt;&lt;br /&gt;&amp;lt;param-name&amp;gt;javax.ws.rs.Application&amp;lt;/param-name&amp;gt;&lt;br /&gt;&amp;lt;param-value&amp;gt;com.sample.CustomerResourceApplication&amp;lt;/param-value&amp;gt;&lt;br /&gt;&amp;lt;/init-param&amp;gt;&lt;br /&gt;&amp;lt;load-on-startup&amp;gt;1&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;&amp;lt;/servlet&amp;gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;CustomerServlet&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;url-pattern&amp;gt;/rest/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&amp;lt;/web-app&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 7&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;We are done with our web application now. Create a war with the above classes as well as apache wink libraries. Make sure to place all jars included in WINK_HOME/dist and WINK_HOME/lib in WEB-INF/lib of the web application. You can use the ant build script given &lt;a href="https://wso2.org/repos/wso2/trunk/commons/qa/qa-artifacts/app-server/rest/jaxrs-sample/build/"&gt;here&lt;/a&gt; to do all these stuff.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 8&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once the web application (CustomerService.war) is ready,  log in to https://appserver.stratoslive.wso2.com with your tenant credentials and upload the web application. (Please read my blog post on &lt;a href="http://charithaka.blogspot.com/2011/08/wso2-stratos-application-server-apache.html"&gt;Apache Tomcat As a Service&lt;/a&gt; if you want to know how WSO2 application Server can be used in web app deployment)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 9&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Finally, we can invoke each of the operations of our web service in truly RESTful manner using a client application such as curl.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HTTP POST:&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;curl --data "customerid=1&amp;amp;amp;customername=charitha&amp;amp;amp;customerage=33&amp;amp;amp;customeraddress=piliyandala" -X POST -H "Content-Type: application/x-www-form-urlencoded"http://appserver.stratoslive.wso2.com/t/superqa.com/webapps/CustomerService/rest/qa/customer&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HTTP GET:&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;curl -X GET http://appserver.stratoslive.wso2.com/t/superqa.com/webapps/CustomerService/rest/qa/customer/1&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HTTP PUT:&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;curl --data "customername=charitha&amp;amp;amp;customeraddress=colombo" -X PUT -H "Content-Type: application/x-www-form-urlencoded" http://appserver.stratoslive.wso2.com/t/superqa.com/webapps/CustomerService/rest/qa/customer&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HTTP DELETE:&lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;curl -X DELETE http://appserver.stratoslive.wso2.com/t/superqa.com/webapps/CustomerService/rest/qa/customer/1&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-673050298343397859?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/673050298343397859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=673050298343397859' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/673050298343397859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/673050298343397859'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2012/01/truly-restful-services-using-apache.html' title='Truly RESTful Services using Apache Wink and WSO2 Application Server'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-OJYI_5hp_YQ/TxuWpa2537I/AAAAAAAAAmE/3BURXXFhvAk/s72-c/wink2-s.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-2036530337819386048</id><published>2012-01-21T20:07:00.000-08:00</published><updated>2012-01-21T20:39:37.129-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><category scheme='http://www.blogger.com/atom/ns#' term='Jmeter'/><title type='text'>SOAP with HTTP basic auth using Apache JMeter</title><content type='html'>SOAP/XML-RPC request sampler of &lt;a href="http://jmeter.apache.org"&gt;Apache Jmeter&lt;/a&gt; can be used to send SOAP requests to a web service. We looked into the details of SOAP/XML-RPC sampler in a previous &lt;a href="http://charithaka.blogspot.com/2011/02/data-driven-web-service-testing-with.html"&gt;blog post&lt;/a&gt;.&lt;br /&gt;If the web service is secured, we cannot directly send messages using the above sampler. This post will help you to use Jmeter in web service testing if the service is secured using HTTP basic authorization.&lt;br /&gt;&lt;br /&gt;If a web service is secured using HTTP basic authorization, the authorization credentials are carried over HTTP headers of the message. The security information is not coupled with the SOAP envelope. Therefore,  the same procedure which we are going to discuss below can be applied to any other sampler in Jmeter.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Have a web service secured with HTTP basic authentication. I use Apache Axis2 as the web service container and deploy it on Apache Tomcat. Then use the tomcat authorization to secure any service hosted in Axis2 As explained by &lt;a href="http://blog.facilelogin.com/"&gt;Prabath&lt;/a&gt; in &lt;a href="http://blog.facilelogin.com/2008/11/secure-your-service-with-http-basic.html"&gt;here&lt;/a&gt;.&lt;br /&gt;If the service is secured with HTTP basic auth, the service can only be invoked if you send the request with Authorization header as follows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Authorization: Basic Y2hhcml0aGE6Y2hhcml0aGE=&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We need to insert this header into SOAP messages which transmits over HTTP channel. In other words, we need Jmeter to add this header for all requests which are sent to the above web service. Lets see how we can do this.&lt;br /&gt;&lt;br /&gt;Start to create a new Jmeter test plan. Add a thread group and add SOAP/XML-RPC request sampler. Add SOAP envelope and specify the endpoint URL.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-FQhVtvrCrOU/TxuPWvQEFHI/AAAAAAAAAls/lDs6RL-q7FA/s1600/jmeter1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 102px;" src="http://4.bp.blogspot.com/-FQhVtvrCrOU/TxuPWvQEFHI/AAAAAAAAAls/lDs6RL-q7FA/s320/jmeter1.png" alt="" id="BLOGGER_PHOTO_ID_5700307374171231346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We need to insert authorization HTTP header to each SOAP request. Therefore, we need to use one of the &lt;span style="font-weight: bold;"&gt;Config Elements&lt;/span&gt; included in Jmeter. &lt;span style="font-weight: bold;"&gt;HTTP Authorization Manager&lt;/span&gt; config element comes in handy in this situation. Authorization manager can be used to specify  login information when you access websites, web services or any other HTTP accessible resource which secured with basic authorization.&lt;br /&gt;&lt;br /&gt;Select the thread group and select &lt;span style="font-weight: bold;"&gt;Config Element --&amp;gt; Authorization Manager&lt;/span&gt;&lt;br /&gt;HTTP authorization manager config element will be added to your thread group as shown below.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-Smd1XSbjxi0/TxuRjdxKTKI/AAAAAAAAAl4/MopW4p7CUWc/s1600/jmeter2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 132px;" src="http://1.bp.blogspot.com/-Smd1XSbjxi0/TxuRjdxKTKI/AAAAAAAAAl4/MopW4p7CUWc/s320/jmeter2.png" alt="" id="BLOGGER_PHOTO_ID_5700309791839767714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Specify the following properties in HTTP Authorization manager.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Base URL = http://localhost:8080/axis2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;username = charitha&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;password = charitha&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here, Base URL is a part or complete URL of the web service you are going to access.&lt;br /&gt;User name and password are the credentials which we specified in tomcat-users.xml file&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Add a listener and run the test. You will see the SOAP request with the following HTTP headers.&lt;br /&gt;&lt;br /&gt;Content-Type: text/xml&lt;br /&gt;SOAPAction: "urn:echoString"&lt;br /&gt;Connection: close&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Authorization: Basic Y2hhcml0aGE6Y2hhcml0aGE=&lt;/span&gt;&lt;br /&gt;User-Agent: Jakarta Commons-HttpClient/3.1&lt;br /&gt;Host: localhost:8080&lt;br /&gt;Content-Length: 268&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-2036530337819386048?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/2036530337819386048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=2036530337819386048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2036530337819386048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2036530337819386048'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2012/01/soap-with-http-basic-auth-using-apache.html' title='SOAP with HTTP basic auth using Apache JMeter'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-FQhVtvrCrOU/TxuPWvQEFHI/AAAAAAAAAls/lDs6RL-q7FA/s72-c/jmeter1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-4049750541651818777</id><published>2011-11-21T13:23:00.000-08:00</published><updated>2011-11-29T16:17:38.816-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 ESB'/><title type='text'>WSO2 Deployment Synchronizer - Sharing deployment artifacts across a product cluster</title><content type='html'>This post is about a new feature in WSO2 Carbon product platform. I will use the latest versions of WSO2 Governance Registry(WSO2-G-reg-4.1.0) and WSO2 Enterprise Service Bus (ESB-4.0.2) for the demonstration. &lt;div&gt;Before going through the configuration steps, lets look at the problem which is going to be addressed using Deployment Synchronizer. &lt;/div&gt;&lt;div&gt;Suppose we have a WSO2 ESB product cluster with a single READ-WRITE node and a several READ-ONLY nodes which shares a common configuration registry. When we deploy a proxy service from READ-WRITE node, in order for other nodes to be synced with that new service deployment, all READ-ONLY nodes have to be restarted. This is a painful concern in a large product cluster. &lt;/div&gt;&lt;div&gt;WSO2 Deployment Synchronizer feature has been implemented to resolve that concern. With that, once you deploy a service (or any deployable artifact such as ESB sequence, scheduled task etc..) from one node in a product cluster, the other nodes automatically get the changes and sync up with the master (or READ-WRITE) node. &lt;/div&gt;&lt;div&gt;The Deployment Synchronizer makes use of two different approaches for deployment artifact synchronization.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. SVN based synchronizer&lt;/div&gt;&lt;div&gt;2. Registry based synchronizer&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lets look at each of these in detail.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Pre-Requisites:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Download WSO2 ESB-4.0.2 and WSO2 Governance Registry-4.1.0 binary distributions from &lt;a href="http://wso2.org/downloads"&gt;wso2 oxygen tank&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Product Clustering Setup&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/-eze4TNBAaCQ/TsrRkgCtXbI/AAAAAAAAAlM/bJ81nypKhQo/s1600/Dep-Sync.png"&gt;&lt;img style="cursor: pointer; width: 536px; height: 271px;" src="http://4.bp.blogspot.com/-eze4TNBAaCQ/TsrRkgCtXbI/AAAAAAAAAlM/bJ81nypKhQo/s320/Dep-Sync.png" alt="" id="BLOGGER_PHOTO_ID_5677580705260723634" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Lets proceed through setting up &lt;span style="font-weight: bold;"&gt;a two node WSO2 Carbon&lt;/span&gt; product cluster as shown above.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Extract the downloaded WSO2ESB-4.0.2.zip and make two copies of it as wso2esb-rw and wso2esb-ro&lt;br /&gt;wso2esb-rw directory is used as the master node of the cluster and wso2esb-ro node will be used as the slave node.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Extract the downloaded WSO2greg-4.1.0.zip into a new directory. This will be used as the central governance and configuration registry in our ESB cluster.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3:&lt;/span&gt;&lt;br /&gt;The above WSO2 G-reg instance will run on a mysql DB instead of the default H2 database. Therefore, lets create a mysql DB first.&lt;br /&gt;Open a mysql prompt in your server. Type the following commands to create a database and assign user privileges.&lt;br /&gt;&lt;br /&gt;mysql&amp;gt;create database reg_db;&lt;br /&gt;mysql&amp;gt;use reg_db;&lt;br /&gt;mysql&amp;gt;grant all on reg_db.* TO regadmin@localhost identified by "regadmin";&lt;br /&gt;&lt;br /&gt;Edit the CARBON_HOME/repository/conf/registry.xml of the WSO2 G-reg server as follows.&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;currentDBConfig&amp;gt;mysql-reg&amp;lt;/currentDBConfig&amp;gt;&lt;br /&gt;&amp;lt;readOnly&amp;gt;false&amp;lt;/readOnly&amp;gt;&lt;br /&gt;&amp;lt;enableCache&amp;gt;true&amp;lt;/enableCache&amp;gt;&lt;br /&gt;&amp;lt;registryRoot&amp;gt;/&amp;lt;/registryRoot&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;dbConfig name="mysql-reg"&amp;gt;&lt;br /&gt;&amp;lt;url&amp;gt;jdbc:mysql://localhost:3306/reg_db&amp;lt;/url&amp;gt;&lt;br /&gt;&amp;lt;userName&amp;gt;regadmin&amp;lt;/userName&amp;gt;&lt;br /&gt;&amp;lt;password&amp;gt;regadmin&amp;lt;/password&amp;gt;&lt;br /&gt;&amp;lt;driverName&amp;gt;com.mysql.jdbc.Driver&amp;lt;/driverName&amp;gt;&lt;br /&gt;&amp;lt;maxActive&amp;gt;5&amp;lt;/maxActive&amp;gt;&lt;br /&gt;&amp;lt;maxWait&amp;gt;60000&amp;lt;/maxWait&amp;gt;&lt;br /&gt;&amp;lt;minIdle&amp;gt;50&amp;lt;/minIdle&amp;gt;&lt;br /&gt;&amp;lt;validationQuery&amp;gt;SELECT 1&amp;lt;/validationQuery&amp;gt;&amp;lt;/dbConfig&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now, copy mysql jdbc driver (mysql-connector-java-5.1.7-bin.jar or later) to CARBON_HOME/repository/component/lib directory of WSO2Greg server and start the server with -Dsetup switch.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;sh wso2server.sh -Dsetup&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will start WSO2-Greg server on mysql.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, we have started central governance and configuration registry instance of our WSO2 ESB product cluster. Now, lets proceed with configuring WSO2 ESB nodes.&lt;br /&gt;Lets configure read-write node first.&lt;br /&gt;&lt;br /&gt;We are going to run 3 carbon servers in the same machine. Therefore, we need to change the port index in CARBON_HOME/repository/conf/carbon.xml so that each of the WSO2 ESB nodes will run on their own ports without conflicting with each other.&lt;br /&gt;In carbon.xml, change the following element in order to run the ESB read-write node in HTTP port 9764 and HTTPS port 9444.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&amp;lt;Offset&amp;gt;1&amp;lt;/Offset&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We are going to store the configuration data of ESB nodes in the cluster in /_system/esbnodes space of the above registry. Also, the governance data will be stored in /_system/governance directory. Therefore, lets add the following registry mounts through CARBON_HOME/repository/conf/registry.xml.&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;dbConfig name="mysql-reg"&amp;gt;&lt;br /&gt;&amp;lt;url&amp;gt;jdbc:mysql://localhost:3306/reg_db&amp;lt;/url&amp;gt;&lt;br /&gt;&amp;lt;userName&amp;gt;regadmin&amp;lt;/userName&amp;gt;&lt;br /&gt;&amp;lt;password&amp;gt;regadmin&amp;lt;/password&amp;gt;&lt;br /&gt;&amp;lt;driverName&amp;gt;com.mysql.jdbc.Driver&amp;lt;/driverName&amp;gt;&lt;br /&gt;&amp;lt;maxActive&amp;gt;5&amp;lt;/maxActive&amp;gt;&lt;br /&gt;&amp;lt;maxWait&amp;gt;60000&amp;lt;/maxWait&amp;gt;&lt;br /&gt;&amp;lt;minIdle&amp;gt;50&amp;lt;/minIdle&amp;gt;&lt;br /&gt;&amp;lt;validationQuery&amp;gt;SELECT 1&amp;lt;/validationQuery&amp;gt;&amp;lt;/dbConfig&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;remoteInstance url="https://localhost:9443/registry"&amp;gt;&lt;br /&gt;&amp;lt;id&amp;gt;conf-gov-registry&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;lt;dbConfig&amp;gt;mysql-reg&amp;lt;/dbConfig&amp;gt;&lt;br /&gt;&amp;lt;readOnly&amp;gt;false&amp;lt;/readOnly&amp;gt;&lt;br /&gt;&amp;lt;enableCache&amp;gt;true&amp;lt;/enableCache&amp;gt;&lt;br /&gt;&amp;lt;registryRoot&amp;gt;/&amp;lt;/registryRoot&amp;gt;&lt;br /&gt;&amp;lt;/remoteInstance&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;!-- Governance data will be stored in /_system/governance collection of central registry instance --&amp;gt; &lt;/span&gt;&lt;br /&gt;&amp;lt;mount overwrite="true" path="/_system/governance"&amp;gt;&lt;br /&gt;&amp;lt;instanceId&amp;gt;conf-gov-registry&amp;lt;/instanceId&amp;gt;&lt;br /&gt;&amp;lt;targetPath&amp;gt;/_system/governance&amp;lt;/targetPath&amp;gt;&lt;br /&gt;&amp;lt;/mount&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;!-- Configuration data will be stored in /_system/esbnodes collection of central registry instance --&amp;gt;  &lt;/span&gt;&lt;br /&gt;&amp;lt;mount overwrite="true" path="/_system/config"&amp;gt;&lt;br /&gt;&amp;lt;instanceId&amp;gt;conf-gov-registry&amp;lt;/instanceId&amp;gt;&lt;br /&gt;&amp;lt;targetPath&amp;gt;/_system/esbnodes&amp;lt;/targetPath&amp;gt;&lt;br /&gt;&amp;lt;/mount&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Copy mysql jdbc driver (mysql-connector-java-5.1.7-bin.jar or later) to  CARBON_HOME/repository/component/lib directory of WSO2 ESB read-write node and  start the server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;sh wso2server.sh&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We have configured and started the READ-WRITE node of ESB cluster. Now, we can configure the READ-ONLY node. The configuration is almost same as READ-WRITE node except the highlighted elements given below.&lt;br /&gt;&lt;br /&gt;First, change the port offset to 2 so that the ports will not be conflicted with the other server ports.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&amp;lt;Offset&amp;gt;2&amp;lt;/Offset&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;Change the default NIO HTTP and HTTPS ports in CARBON_HOME/repository/conf/axis2.xml as follows.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-style: italic; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;pre class="prettyprint" style="font-style: italic; font-weight: bold; "&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&amp;lt;transportReceiver class="org.apache.synapse.transport.nhttp.HttpCoreNIOListener" name="http"&amp;gt;&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;br /&gt;&amp;lt;parameter locked="false" name="port"&amp;gt;8281&amp;lt;/parameter&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;transportReceiver class="org.apache.synapse.transport.nhttp.HttpCoreNIOSSLListener" name="https"&amp;gt;&lt;br /&gt;&amp;lt;parameter locked="false" name="port"&amp;gt;8244&amp;lt;/parameter&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Add the following registry mounts through CARBON_HOME/repository/conf/registry.xml of ESB READ-ONLY node.&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;dbConfig name="mysql-reg"&amp;gt;&lt;br /&gt;&amp;lt;url&amp;gt;jdbc:mysql://localhost:3306/reg_db&amp;lt;/url&amp;gt;&lt;br /&gt;&amp;lt;userName&amp;gt;regadmin&amp;lt;/userName&amp;gt;&lt;br /&gt;&amp;lt;password&amp;gt;regadmin&amp;lt;/password&amp;gt;&lt;br /&gt;&amp;lt;driverName&amp;gt;com.mysql.jdbc.Driver&amp;lt;/driverName&amp;gt;&lt;br /&gt;&amp;lt;maxActive&amp;gt;5&amp;lt;/maxActive&amp;gt;&lt;br /&gt;&amp;lt;maxWait&amp;gt;60000&amp;lt;/maxWait&amp;gt;&lt;br /&gt;&amp;lt;minIdle&amp;gt;50&amp;lt;/minIdle&amp;gt;&lt;br /&gt;&amp;lt;validationQuery&amp;gt;SELECT 1&amp;lt;/validationQuery&amp;gt;&amp;lt;/dbConfig&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;remoteInstance url="https://localhost:9443/registry"&amp;gt;&lt;br /&gt;&amp;lt;id&amp;gt;conf-gov-registry&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;lt;dbConfig&amp;gt;mysql-reg&amp;lt;/dbConfig&amp;gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;readOnly&amp;gt;true&amp;lt;/readOnly&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;enableCache&amp;gt;true&amp;lt;/enableCache&amp;gt;&lt;br /&gt;&amp;lt;registryRoot&amp;gt;/&amp;lt;/registryRoot&amp;gt;&lt;br /&gt;&amp;lt;/remoteInstance&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;!-- Governance data will be stored in /_system/governance collection of central registry instance --&amp;gt; &lt;/span&gt;&lt;br /&gt;&amp;lt;mount overwrite="true" path="/_system/governance"&amp;gt;&lt;br /&gt;&amp;lt;instanceId&amp;gt;conf-gov-registry&amp;lt;/instanceId&amp;gt;&lt;br /&gt;&amp;lt;targetPath&amp;gt;/_system/governance&amp;lt;/targetPath&amp;gt;&lt;br /&gt;&amp;lt;/mount&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;!-- Configuration data will be stored in /_system/esbnodes collection of central registry instance --&amp;gt;  &lt;/span&gt;&lt;br /&gt;&amp;lt;mount overwrite="true" path="/_system/config"&amp;gt;&lt;br /&gt;&amp;lt;instanceId&amp;gt;conf-gov-registry&amp;lt;/instanceId&amp;gt;&lt;br /&gt;&amp;lt;targetPath&amp;gt;/_system/esbnodes&amp;lt;/targetPath&amp;gt;&lt;br /&gt;&amp;lt;/mount&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Copy  mysql jdbc driver (mysql-connector-java-5.1.7-bin.jar or later) to   CARBON_HOME/repository/component/lib directory of WSO2 ESB read-only  node and  start the server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;sh wso2server.sh&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now we are done with the clustering setup but we have not done any configurations related to the deployment synchronizer yet.&lt;br /&gt;We will look in to the registry based deployment synchronization first.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 6 - Registry based deployment synchronizer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In this mode, once you deploy an artifact from the READ-WRITE node, the artifacts will be stored in the relevant collection in the configuration registry. The other nodes of the cluster will use the registry checkin-checkout client and checkout the deployment artifacts to their file system. Then with the hot deployment functionality, the artifacts will get deployed in the cluster nodes.&lt;br /&gt;&lt;br /&gt;Lets look at how we can use the registry based deployment synchronizer.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Log in to management console of ESB READ-WRITE node (https://localhost:9444/carbon)&lt;/li&gt;&lt;li&gt;Navigate to Configure --&amp;gt; Deployment Synchronizer UI&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://3.bp.blogspot.com/-F6CcyzuIvFg/Tsr0OWe5EOI/AAAAAAAAAlY/NiTjOHdluhY/s1600/dep-sync1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://3.bp.blogspot.com/-F6CcyzuIvFg/Tsr0OWe5EOI/AAAAAAAAAlY/NiTjOHdluhY/s320/dep-sync1.png" alt="" id="BLOGGER_PHOTO_ID_5677618807644426466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Select &lt;span style="font-weight: bold;"&gt;Auto Commit&lt;/span&gt; option and click on &lt;span style="font-weight: bold;"&gt;Enable&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Log in to management console of ESB READ-ONLY node (https://localhost:5/carbon)&lt;/li&gt;&lt;li&gt;Access Configure --&amp;gt; Deployment Synchronizer UI&lt;/li&gt;&lt;li&gt;Select &lt;span style="font-weight: bold;"&gt;Auto Checkout&lt;/span&gt; option and click on &lt;span style="font-weight: bold;"&gt;Enable&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Create a proxy service (eg:-proxy1) in READ-WRITE node&lt;/li&gt;&lt;li&gt;After 60 seconds (the default synchronization period), log in to the management console of the READ-ONLY node of the cluster. &lt;/li&gt;&lt;li&gt;You will notice that the proxy1 is listed in the services list of READ-ONLY node&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 7&lt;/span&gt; - &lt;span style="font-weight: bold;"&gt;SVN based deployment synchronizer&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Deployment synchronization can be achieved using a SVN repository as well. Lets look at SVN based deployment synchronizer.&lt;br /&gt;&lt;br /&gt;In this mode, instead of a registry, we use a subversion repository as the deployment artifact store. As we check-in files to SVN, the synchronizer use a SVN client API and commit and update deployment artifacts periodically by using a SVN location.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;First, revert the registry based deployment synchronizer settings which we did above. (Disable deployment synchronizer in &lt;span style="font-weight: bold;"&gt;Configure --&amp;gt; Deployment Synchronizer&lt;/span&gt; UI)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Have a proper SVN location. You can use an existing SVN location or create a new one.&lt;/li&gt;&lt;li&gt;Add the following configuration in CARBON_HOME/repository/conf/carbon.xml of both ESB nodes. Make sure to specify correct SVN credentials and location URL according to your environment.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;&amp;lt;DeploymentSynchronizer&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;&lt;br /&gt;              &lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;Enabled&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;true&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;/Enabled&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;                  &lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;AutoCommit&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;true&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;/AutoCommit&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;                  &lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;AutoCheckout&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;true&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;/AutoCheckout&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;                  &lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;RepositoryType&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;svn&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;/RepositoryType&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;                  &lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;SvnUrl&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;https://svn.wso2.com/wso2/custom/projects/projects/qa/deployment-synchronizer/esb&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;/SvnUrl&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;                  &lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;SvnUser&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;qasvn&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;/SvnUser&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;                  &lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;SvnPassword&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;test&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;/SvnPassword&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;                  &lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;SvnUrlAppendTenantId&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;false&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;/SvnUrlAppendTenantId&lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;deploymentsynchronizer style="font-weight: bold;"&gt;&lt;svnurlappendtenantid&gt;               &lt;/svnurlappendtenantid&gt;&lt;/deploymentsynchronizer&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt;&lt;deploymentsynchronizer&gt;&lt;svnurlappendtenantid style="font-weight: bold;"&gt;/DeploymentSynchronizer&amp;gt;&lt;/svnurlappendtenantid&gt;&lt;br /&gt;       &lt;/deploymentsynchronizer&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Restart both ESB nodes.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Deploy a proxy service from either one of the nodes&lt;/li&gt;&lt;li&gt;Changes will get reflected into other nodes after 60 seconds (default synchronization period)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;We looked at two different ways of sharing deployment artifacts among cluster nodes. If you come across any issues when configuring either one of the above approaches, please drop me a mail.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-4049750541651818777?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/4049750541651818777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=4049750541651818777' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4049750541651818777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4049750541651818777'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/11/wso2-deployment-synchronizer-sharing.html' title='WSO2 Deployment Synchronizer - Sharing deployment artifacts across a product cluster'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-eze4TNBAaCQ/TsrRkgCtXbI/AAAAAAAAAlM/bJ81nypKhQo/s72-c/Dep-Sync.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-6306233065795207543</id><published>2011-11-15T15:39:00.001-08:00</published><updated>2011-11-15T15:46:50.145-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><title type='text'>How to pass system properties when WSO2 Carbon server is running in daemon mode</title><content type='html'>When you start wso2 carbon server using a startup script such as wso2server.sh, you can simply pass system properties such as -DosgiConsole, just by passing system property in command line.  &lt;div&gt;e.g:- sh wso2server.sh -DosgiConsole&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, if you start the server as a System process (daemon), how should you send those parameters?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lets look at how we can start OsgiConsole, if we start server in daemon mode.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Open CARBON_HOME/repository/conf/wrapper.conf&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; 2. Add the following parameter under &lt;b&gt;Java additional properties&lt;/b&gt; section&lt;br /&gt;&lt;b&gt;&lt;i&gt; wrapper.java.additional.11=-DosgiConsole=1234 &lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; 3. Start the server as "&lt;b&gt;&lt;i&gt;sh wso2server.sh -start&lt;/i&gt;&lt;/b&gt;"&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; 4. Open a new shell and "&lt;b&gt;telnet localhost 1234&lt;/b&gt;" &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-6306233065795207543?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/6306233065795207543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=6306233065795207543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6306233065795207543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6306233065795207543'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/11/how-to-pass-system-properties-when-wso2.html' title='How to pass system properties when WSO2 Carbon server is running in daemon mode'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-4184451078097084413</id><published>2011-11-06T21:11:00.000-08:00</published><updated>2011-11-06T22:44:47.773-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ApachCon'/><title type='text'>ApacheCon NA 2011 - a week full of Apache community gathering</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/-l1pPSomB5os/Trd5z93abBI/AAAAAAAAAk4/JGWmKky8g0s/s1600/logo-940w.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 41px;" src="http://3.bp.blogspot.com/-l1pPSomB5os/Trd5z93abBI/AAAAAAAAAk4/JGWmKky8g0s/s320/logo-940w.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5672136189383699474" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://na11.apachecon.com/"&gt;ApacheCon&lt;/a&gt; is the official event of Apache Software Foundation which brings together the global Apache community in a week full of trainings, live demos, hands-on sessions and various other meet ups.&lt;/div&gt;&lt;div&gt;&lt;div&gt;The event will be commenced tomorrow, 7th of November 2011 in the &lt;a href="http://www.westinbayshore.com/"&gt;Westin Bayshore Vancouver Canada&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;I'm witnessing a lot of technology enthusiasts from diverse parts of the world are checking-in at Westin Bayshore hotel at the moment predicting a successful function.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With the tightly-coupled relationship of &lt;a href="http://wso2.com/apache/"&gt;WSO2 and various Apache projects&lt;/a&gt;, WSO2 is playing a key role in ApacheCon 2011 as well. WSO2 is presenting 3 talks and is an exhibitor Sponsor too. &lt;/div&gt;&lt;div&gt;&lt;a href="http://blog.afkham.org"&gt;Afkham Azeez&lt;/a&gt; speaks about &lt;a href="http://na11.apachecon.com/talks/19481"&gt;building scalable multi-tenant application server on cloud using Tomcat, Axis2 and Synapse&lt;/a&gt; on Wednesday, November 9th. &lt;/div&gt;&lt;div&gt;He is also talking about &lt;a href="http://na11.apachecon.com/talks/19481"&gt;an architecture for enabling multi-tenancy for Apache Axis2&lt;/a&gt; on Thursday, November 10th. &lt;/div&gt;&lt;div&gt;Prabath Siriwardhana will also do a &lt;a href="http://na11.apachecon.com/talks/18504"&gt;half-day training on web services security&lt;/a&gt; on Monday, November 7th.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Come and meet us at WSO2 booth at ApacheCon. You will find how WSO2 built world's first free and open source PaaS and renowned SOA platform using various Apache project components and how we adhered to the Apache process in project releases. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-4184451078097084413?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/4184451078097084413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=4184451078097084413' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4184451078097084413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4184451078097084413'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/11/apachecon-na-2011-week-full-of-apache.html' title='ApacheCon NA 2011 - a week full of Apache community gathering'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-l1pPSomB5os/Trd5z93abBI/AAAAAAAAAk4/JGWmKky8g0s/s72-c/logo-940w.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-8684949730851485563</id><published>2011-10-28T20:04:00.000-07:00</published><updated>2011-10-28T20:25:04.941-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='General Quality Assurance'/><title type='text'>Why is testing taking so long?</title><content type='html'>When you are involved in software testing, you may have heard the following  3 common questions at the end, beginning or middle of any testing cycle.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. Why did not you find that bug during testing cycle?&lt;/div&gt;&lt;div&gt;2. Why is testing taking so long?&lt;/div&gt;&lt;div&gt;3. Why did not you automate the damn thing?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have answers for all three questions but &lt;a href="http://www.developsense.com/"&gt;Michael Boloton&lt;/a&gt;, the testing genius in our era, explained the answer for question 2 with some great examples. I would recommend this to be a must read for anyone work in software engineering.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[1]&lt;a href="http://www.developsense.com/blog/2009/11/why-is-testing-taking-so-long-part-1/"&gt;http://www.developsense.com/blog/2009/11/why-is-testing-taking-so-long-part-1/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;[2]&lt;a href="http://www.developsense.com/blog/2009/11/what-does-testing-take-so-long-part-2/"&gt;http://www.developsense.com/blog/2009/11/what-does-testing-take-so-long-part-2/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Study the facts given by Michael. You will realize the truth of test estimation and traditional way of managing test processes.   &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-8684949730851485563?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/8684949730851485563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=8684949730851485563' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8684949730851485563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8684949730851485563'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/10/why-is-testing-taking-so-long.html' title='Why is testing taking so long?'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-2283141322806924812</id><published>2011-09-17T18:31:00.000-07:00</published><updated>2011-09-17T19:55:00.819-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><title type='text'>Was I able to do that?</title><content type='html'>For the last 2-3 months, the readers of my blog may have seen a small icon at the top of the pages giving you a hint that I'm presenting at &lt;a href="http://wso2.com/events/wso2con-2011-colombo/"&gt;WSO2Con 2011&lt;/a&gt;, the technology conference of the year. A few months back, &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CCYQFjAA&amp;amp;url=http%3A%2F%2Fsamisa-abeysinghe.blogspot.com%2F&amp;amp;rct=j&amp;amp;q=samisa&amp;amp;ei=Q1p1TrXXN8iHrAeMwanAAw&amp;amp;usg=AFQjCNH0Jd3ybffJTarobCe8D9GkXFO3gQ&amp;amp;sig2=OsUtGXvcIf4WaZaDjS0GLg&amp;amp;cad=rja"&gt;Samisa&lt;/a&gt;, the engineering head of WSO2, forced me to submit a talk for this conference. Hesitating, I prepared an abstract of a talk about &lt;span style="font-weight: bold;"&gt;SOA and quality&lt;/span&gt; and sent my proposal. After a few weeks, I was informed that my proposal had been accepted and that I would speak at the third day of the conference. First, I was shocked. Why? I always thought negatively about presentations and public speaking. As my batch mates at university of Colombo knows, I myself and a lot of others had a bad experience w.r.t presentations during campus era :). Worst, I had not given a public speech for a time that I remember. In summary, it had been kind of a nightmare to me. &lt;div&gt;I did not have any other option, but do this speech at an level that I can watch it later without cursing me at least :) Therefore, I started preparation. The subject and topic is not a surprise for me. It is the subject that I live in and spent 8 years of my career, testing and QA. SOA is also not new to me, I have been working with SOA for 5 years out of 8 years. Therefore, I knew that I have a LOT to talk.  But just talking non-sense was not required. SOA testing is a relatively new topic and there is not universally agreed methodology for testing service oriented solutions. I thought to put together my experience into a methodology and present. &lt;/div&gt;&lt;div&gt;I borrowed &lt;a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.amazon.com%2FService-Oriented-Architecture-SOA-Concepts-Technology%2Fdp%2F0131858580&amp;amp;h=uAQCxLGPzAQBhD8WOsjDOh56ECSngSx2YbMmdI06ozPNIRA"&gt;SOA design, concepts and principles book written by Thomas Erl&lt;/a&gt; from WSO2 library and read it completely. It was a great reference and I was able to clarify a lot of concerns that I had about some SOA concepts. &lt;/div&gt;&lt;div&gt;Then, I started to prepare slides. When the days of WSO2con were coming closer, the nervousness and stress going up straightly. One day I met with my close friend and the presentation and public speaking master blaster at WSO2, &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CB0QFjAA&amp;amp;url=http%3A%2F%2Fblog.facilelogin.com%2F&amp;amp;rct=j&amp;amp;q=prabath&amp;amp;ei=ZFp1TpXRLYbtrAf-vfC_Aw&amp;amp;usg=AFQjCNFY0PzK9_I3Tl6cShCpMsjYklrIjA&amp;amp;sig2=7rB0IkIQanfM2uFZItFyRQ&amp;amp;cad=rja"&gt;Prabath Siriwardhana&lt;/a&gt;. He nicely explained some of the tips that he followed during presentations and he mentioned that practicing a speak is the best way to do it nicely. So, I practiced. I practiced a lot everyday. I learned a lot. I explored everything related to SOA testing. I my self came into a position that I was able to answer very complicated questions related to SOA testing. The confidence started to build. BUT, nervousness and negative mind set still did not disappear. &lt;/div&gt;&lt;div&gt;As usual, I'm not a closed person. Hence, I openly talked with colleagues at WSO2 and my friends about my nervousness and possible failure cases. Fortunately, I live in a world where 90% of my friends, WSO2 colleagues are truely friends. They listened to me and helped me a lot.  The senior wso2 folks such as &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CB0QFjAA&amp;amp;url=http%3A%2F%2Fblog.afkham.org%2F&amp;amp;rct=j&amp;amp;q=afkham%20azeez&amp;amp;ei=f1p1TvL9NMTprQepoJzAAw&amp;amp;usg=AFQjCNHjx4m7qvnsmkW96fOUBxUCRbAtSg&amp;amp;sig2=MwUSSfUakuEs9B8ymmA0Fg&amp;amp;cad=rja"&gt;Afkham Azeez&lt;/a&gt;, Selvarathnam Uthaiyashankar, Samisa, Prabath, reviewed my slide deck and helped me to correct some errors. Then, most of the folks listened to my boring rehearsal sessions at office premises :) &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CBgQFjAA&amp;amp;url=http%3A%2F%2Flk.linkedin.com%2Fpub%2Firanga-muthuthanthri%2F20%2F4b2%2Fa14&amp;amp;rct=j&amp;amp;q=Iranga%20Muthuthanthri&amp;amp;ei=lFp1Tu2RKsTJrAe-pdXAAw&amp;amp;usg=AFQjCNGyAdU-UL_Z2bppSKMQ1RokoQlCgA&amp;amp;sig2=390xTxuo5ySgj7msMjSpNQ&amp;amp;cad=rja"&gt;Iranga&lt;/a&gt;, one of my closest friends, visited me all the way from his office and went through the slides and speech. His input was also invaluable because of his experience on QA. &lt;/div&gt;&lt;div&gt;Finally, on 15th of Thursday, September 2011, I delivered my first public speech at WSO2Con in front of a large gathering including a lot of folks from various companies all over the world. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;div style="width:425px" id="__ss_9297503"&gt; &lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/charithak/quality-key-to-successful-soa" title="Quality, key to successful SOA" target="_blank"&gt;Quality, key to successful SOA&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/9297503" marginwidth="0" marginheight="0" frameborder="0" height="355" scrolling="no" width="425"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt; View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/charithak" target="_blank"&gt;Charitha Kankanamge&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As the presenter, I'm not sure whether it is a success or failure, but everyone came into me and congratulated that it was a nice talk. I still cannot believe! I'm very lucky to see the tweets as below as the response to my speech!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-M3f8_3ACrFQ/TnVVYq_s6nI/AAAAAAAAAjs/7HXs-cCEJdI/s1600/twitter1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 95px;" src="http://2.bp.blogspot.com/-M3f8_3ACrFQ/TnVVYq_s6nI/AAAAAAAAAjs/7HXs-cCEJdI/s320/twitter1.png" alt="" id="BLOGGER_PHOTO_ID_5653518789580221042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-DVY_0kXtvyM/TnVXvMgBE2I/AAAAAAAAAj0/fZBb7v_fTus/s1600/twitter2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 54px;" src="http://1.bp.blogspot.com/-DVY_0kXtvyM/TnVXvMgBE2I/AAAAAAAAAj0/fZBb7v_fTus/s320/twitter2.png" alt="" id="BLOGGER_PHOTO_ID_5653521375554507618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-xrP8sjGFDGg/TnVYAQnPibI/AAAAAAAAAj8/dkIQUGsIfJc/s1600/twitter3.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 85px;" src="http://4.bp.blogspot.com/-xrP8sjGFDGg/TnVYAQnPibI/AAAAAAAAAj8/dkIQUGsIfJc/s320/twitter3.png" alt="" id="BLOGGER_PHOTO_ID_5653521668716333490" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/-bGmrijNS80k/TnVY5GCBKjI/AAAAAAAAAkM/Hwsm4_XrUhs/s1600/twitter4.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 163px;" src="http://1.bp.blogspot.com/-bGmrijNS80k/TnVY5GCBKjI/AAAAAAAAAkM/Hwsm4_XrUhs/s320/twitter4.png" alt="" id="BLOGGER_PHOTO_ID_5653522645128391218" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-n8MP8QF_GSU/TnVZpnip-FI/AAAAAAAAAkU/zWgTSa97TP8/s1600/twitter5.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 190px; height: 320px;" src="http://3.bp.blogspot.com/-n8MP8QF_GSU/TnVZpnip-FI/AAAAAAAAAkU/zWgTSa97TP8/s320/twitter5.png" alt="" id="BLOGGER_PHOTO_ID_5653523478757374034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-2283141322806924812?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/2283141322806924812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=2283141322806924812' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2283141322806924812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2283141322806924812'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/09/was-i-able-to-do-that.html' title='Was I able to do that?'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-M3f8_3ACrFQ/TnVVYq_s6nI/AAAAAAAAAjs/7HXs-cCEJdI/s72-c/twitter1.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-6090603766177123564</id><published>2011-09-12T18:51:00.000-07:00</published><updated>2011-09-12T19:08:44.942-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wso2con'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2'/><title type='text'>Must attend talk in WSO2Con2011 - Engineering to take over the world by Samisa Abeysinghe</title><content type='html'>&lt;a href="http://wso2.com/events/wso2con-2011-colombo/"&gt;WSO2Con 2011&lt;/a&gt;, a week full of tutorials, tech talks, networking events will be commenced shortly at WatersEdge, Colombo, Sri Lanka. If you are attending the conference, I'm sure you will look for a session which gives you an overall picture about how WSO2 has become a leading technology provider and what are the secret ingredients of the process that has been followed.   &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is no other individual than &lt;a href="http://www.google.lk/url?sa=t&amp;amp;source=web&amp;amp;cd=2&amp;amp;ved=0CB0QFjAB&amp;amp;url=http%3A%2F%2Fwso2.com%2Fabout%2Fleadership%2Fsamisa-abeysinghe%2F&amp;amp;ei=uLpuTqCrLcOzhAeGxoXJCQ&amp;amp;usg=AFQjCNGX-0jCwzc64EQgD1tgtzqOD9WQpA"&gt;Samisa Abeysinghe&lt;/a&gt;, VP of Engineering at WSO2, who knows top to bottom of WSO2 engineering process as well as lead the engineering team for the last five years to become where we are now. If you are bored with listening to traditional process sermons which are usually heard in conferences, this will be a totally different session for you. We are at WSO2, while redefining the middleware space, reinventing the software development process too. We have our own way of designing, developing and testing products. Wanna know more about how we do that? then do not forget to attend the session by Samisa which will be held on 15th of September 2011 at 15.30 PM!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-6090603766177123564?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/6090603766177123564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=6090603766177123564' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6090603766177123564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6090603766177123564'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/09/must-attend-talk-in-wso2con2011_12.html' title='Must attend talk in WSO2Con2011 - Engineering to take over the world by Samisa Abeysinghe'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-6824085511033831965</id><published>2011-09-11T22:26:00.000-07:00</published><updated>2011-09-12T01:34:31.154-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wso2con'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2'/><title type='text'>Must attend talk in WSO2Con2011 - Security in practice by Prabath Siriwardhana</title><content type='html'>Time flew in light speed and finally the days have arrived! &lt;a href="http://wso2.com/events/wso2con-2011-colombo/"&gt;WSO2Con 2011&lt;/a&gt;,  a conference which you should not miss. Though you are a seasoned IT professional or a student keen in learning latest technologies, it is the event of the year. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Out of more than 25 sessions which are planned to be held, my attention goes to one particular session first. It is "Security in Practice" by &lt;a href="http://wso2.com/events/wso2con-2011-colombo/speakers/#prabath"&gt;Prabath Siriwardhana&lt;/a&gt; which will be held on 14th of September, 2011 at 3.30 PM. Why do I like it than any other session?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Prabath is a brilliant speaker. I like the way he presenting. He has his own style which attract anyone in the audience. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Prabath is the expert of the most complex and hard-to-understand aspect of Service Oriented Architecture, Security.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can imagine the complexity of delivering a presentation in such a tough, complicated subject matter&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But, Prabath has the ability to inject complex subject matters into your head in very nice manner. You should not miss this great session of Prabath if you are attending WSO2Con 2011!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-6824085511033831965?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/6824085511033831965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=6824085511033831965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6824085511033831965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6824085511033831965'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/09/must-attend-talk-in-wso2con2011.html' title='Must attend talk in WSO2Con2011 - Security in practice by Prabath Siriwardhana'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-3015586032902997384</id><published>2011-08-23T07:01:00.000-07:00</published><updated>2011-08-23T08:10:48.585-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Stratos'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache Tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='Cloud Computing'/><title type='text'>WSO2 Stratos Application Server - Apache Tomcat As a Service</title><content type='html'>Few days back, one of my friends developed a new web application and he wanted to try it out by deploying on a J2EE server. I was at his place and was observing the steps he followed to deploy the web app.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Downloaded the latest version of &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CCcQFjAA&amp;amp;url=http%3A%2F%2Ftomcat.apache.org%2F&amp;amp;rct=j&amp;amp;q=apache%20tomcat&amp;amp;ei=dL9TTuqNIaTE4gSqhs2iBw&amp;amp;usg=AFQjCNGNDNjXeRgE3wbwAp7qKd_whu88YQ&amp;amp;sig2=WO9HJMj-7g2fhLjp8O2_dg&amp;amp;cad=rja"&gt;Apache Tomcat Server&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Extracted and installed it on a local server&lt;/li&gt;&lt;li&gt;Ran the startup script and started the server&lt;/li&gt;&lt;/ul&gt;This took considerable amount of time. In the world of everything offered as services, my friend was not aware of the free service of hosting web applications in cloud. In other words, my friend has not known of &lt;span style="font-weight: bold;"&gt;"Apache Tomcat As a Service"&lt;/span&gt;.&lt;br /&gt;If I was him, I would have tried out my web applications with Apache Tomcat by following the three simple steps given below.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1 - Create a demo user account at &lt;a href="http://stratoslive.wso2.com"&gt;WSO2 StratosLive&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a simple registration procedure and follow the steps given in my &lt;a href="http://charithaka.blogspot.com/2011/08/wso2-data-as-service-have-your-own-data.html"&gt;previous blog post&lt;/a&gt; to create a demo account.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2 - Access WSO2 Stratos Application Server&lt;/span&gt;&lt;br /&gt;You can access Application Server from WSO2 Stratos Manager home page or just type &lt;a href="https://appserver.stratoslive.wso2.com/"&gt;https://appserver.stratoslive.wso2.com&lt;/a&gt; in your favorite browser.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-DS4TMquXpHo/TlO52_xlDyI/AAAAAAAAAjU/OuYMAPDrUzU/s1600/appserver1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://2.bp.blogspot.com/-DS4TMquXpHo/TlO52_xlDyI/AAAAAAAAAjU/OuYMAPDrUzU/s320/appserver1.png" alt="" id="BLOGGER_PHOTO_ID_5644059112508821282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3 - Upload web application&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Click on Manage --&amp;gt; Web Applications --&amp;gt; Add in the left navigation menu. You will be directed to the following screen.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-d7fqEgGxTQ0/TlO60WKAspI/AAAAAAAAAjc/f8JOntkLb3o/s1600/appserver2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://3.bp.blogspot.com/-d7fqEgGxTQ0/TlO60WKAspI/AAAAAAAAAjc/f8JOntkLb3o/s320/appserver2.png" alt="" id="BLOGGER_PHOTO_ID_5644060166488896146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Browse the webapp (*.war) in your local machine and click on upload. I downloaded a sample calendar.war webapp from &lt;a href="http://code.google.com/p/gwt-examples/downloads/detail?name=Calendar.wa"&gt;here&lt;/a&gt; for demonstration purposes. Once the file upload is done, the deployed calendar.war will be listed in  &lt;span style="font-weight: bold;"&gt;Running Web Applications&lt;/span&gt;&lt;span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "&gt;&lt;span class="Apple-style-span" style="color: rgb(17, 17, 17); font-family: 'Lucida Grande', 'Lucida Sans', 'Microsoft Sans Serif', 'Lucida Sans Unicode', Verdana, Sans-serif, 'trebuchet ms'; font-size: 12px; line-height: 15px; text-align: left; "&gt;&lt;/span&gt;&lt;/span&gt;  page where you can do all web app management tasks such as session handling, reloading webapps, deleting etc..&lt;br /&gt;&lt;br /&gt;Isn't this the simplest way to run your web applications? You will not be charged a cent for the steps which I demonstrated above. Once you are satisfied with testing your web apps on Stratos Application Server, you can upgrade your usage plan as needed and have an enterprise ready web application running on cloud!&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-3015586032902997384?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/3015586032902997384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=3015586032902997384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/3015586032902997384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/3015586032902997384'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/08/wso2-stratos-application-server-apache.html' title='WSO2 Stratos Application Server - Apache Tomcat As a Service'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-DS4TMquXpHo/TlO52_xlDyI/AAAAAAAAAjU/OuYMAPDrUzU/s72-c/appserver1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-2123087952707534620</id><published>2011-08-16T01:57:00.000-07:00</published><updated>2011-08-16T03:14:58.323-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Stratos'/><category scheme='http://www.blogger.com/atom/ns#' term='Data services'/><category scheme='http://www.blogger.com/atom/ns#' term='Cloud Computing'/><title type='text'>WSO2 Data As a Service - Have your own data storage in cloud!</title><content type='html'>&lt;span style="font-weight: bold;"&gt;WSO2 &lt;a href="https://stratoslive.wso2.com"&gt;StratosLive&lt;/a&gt;&lt;/span&gt;, the most complete open PaaS (platform-as-a-service), includes multiple types of SOA middleware services which can be used to build and host your SOA based solution. One of the newest additions to WSO2 middleware platform is, the functionality which enables you to have your own database in cloud for free!&lt;div&gt;This post guides you through the steps of creating your own data storage in cloud using WSO2 StratosLive. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 1&lt;/b&gt;&lt;/div&gt;&lt;div&gt;First, we need to create an account in stratoslive. You can have a demo account free of charge. &lt;/div&gt;&lt;div&gt;Open a browser and access &lt;a href="https://stratoslive.wso2.com/"&gt;WSO2 StratosLive landing page&lt;/a&gt;. Click on &lt;b&gt;Get Started Now for Free&lt;/b&gt;&lt;/div&gt;&lt;div&gt;You will be directed to domain registration page. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-UzJmO_QuAjg/Tko0zAniPEI/AAAAAAAAAiE/qhPwGIlT2xM/s1600/stratos1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://3.bp.blogspot.com/-UzJmO_QuAjg/Tko0zAniPEI/AAAAAAAAAiE/qhPwGIlT2xM/s320/stratos1.png" alt="" id="BLOGGER_PHOTO_ID_5641379534178761794" border="0" /&gt;&lt;/a&gt;&lt;br /&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;Fill the form and follow the instructions in registration email to activate the account.&lt;br /&gt;Once you logged into WSO2 StratosLive, you will be shown all of the cloud services which are available for use. Out of those services, click on &lt;span style="font-weight: bold;"&gt;Data Services Server&lt;/span&gt; link.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-BJjHoL6wzCg/Tko2JQy9qzI/AAAAAAAAAiM/HXDvsIEQY94/s1600/stratos2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://3.bp.blogspot.com/-BJjHoL6wzCg/Tko2JQy9qzI/AAAAAAAAAiM/HXDvsIEQY94/s320/stratos2.png" alt="" id="BLOGGER_PHOTO_ID_5641381015990414130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You will be directed to the home page of WSO2 Data Service Server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/b&gt;Now, we have accessed the home page WSO2 Data service server in cloud. You will notice &lt;span style="font-weight: bold;"&gt;Databases&lt;/span&gt; menu item in the left navigation pane as shown below.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;a href="http://4.bp.blogspot.com/-opQAeswJeyM/Tko3muhxzaI/AAAAAAAAAiU/X33psqd3bFw/s1600/stratos3.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://4.bp.blogspot.com/-opQAeswJeyM/Tko3muhxzaI/AAAAAAAAAiU/X33psqd3bFw/s320/stratos3.png" alt="" id="BLOGGER_PHOTO_ID_5641382621699231138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click on &lt;span style="font-weight: bold;"&gt;Databases --&amp;gt; Add&lt;/span&gt; option in the above screen. You will be directed to the &lt;span style="font-weight: bold;"&gt;New Database&lt;/span&gt; page. In this page, you will be asked to provide Database Server Instance Name and a name for the database which you are going to add. By default, WSO2 Data Services Server provides you with a pre-configured &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CB0QFjAA&amp;amp;url=http%3A%2F%2Faws.amazon.com%2Frds%2F&amp;amp;rct=j&amp;amp;q=Amazon%20RDS&amp;amp;ei=jzhKTsDwL8PxrQeWs726Bw&amp;amp;usg=AFQjCNGoqFB5H26HZikrT6ZFufGFIEUCKg&amp;amp;sig2=vvnWSlH00bPyPm7eUy1yEg&amp;amp;cad=rja"&gt;Amazon RDS&lt;/a&gt; instance, in which you can create your database. You also add your own database server instance and use that instead as you preferred. But in this example, we will use the default database server instance. Lets select the default DB server instance and enter "qa" as the name of the database.&lt;br /&gt;Once you click on create, you will be prompted a confirmation dialog, "Database has been successfully created".&lt;br /&gt;&lt;br /&gt;Your newly created database will be listed in database list as shown below. Note that, the name of the database is suffixed with tenant domain name.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-HtacQd-BG1g/Tko56uW93AI/AAAAAAAAAic/sFyw91LOfH8/s1600/stratos4.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://4.bp.blogspot.com/-HtacQd-BG1g/Tko56uW93AI/AAAAAAAAAic/sFyw91LOfH8/s320/stratos4.png" alt="" id="BLOGGER_PHOTO_ID_5641385164274523138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We have created our first database successfully in cloud using WSO2 Data Service Server. Lets, add a new user to the database and create table so that we can use the database for any DB related operation.&lt;br /&gt;&lt;br /&gt;Click on &lt;span style="font-weight: bold;"&gt;Manage&lt;/span&gt; icon in the above table. &lt;span style="font-weight: bold;"&gt;Database User Management&lt;/span&gt; page will be shown.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-E1la3puZw00/TkpAechkllI/AAAAAAAAAjE/C-n5h8vsSG0/s1600/stratos5.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://2.bp.blogspot.com/-E1la3puZw00/TkpAechkllI/AAAAAAAAAjE/C-n5h8vsSG0/s320/stratos5.png" alt="" id="BLOGGER_PHOTO_ID_5641392375032223314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Before adding any user, you should add a database user privilege group. Click on &lt;span style="font-weight: bold;"&gt;Add Privilege Group&lt;/span&gt; and add a new privilege group. Specify select, insert, update, delete and create privileges for the group as shown below.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-LxiZbydqcVM/Tko75fNjQFI/AAAAAAAAAik/lvnakrXyFcY/s1600/stratos7.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://1.bp.blogspot.com/-LxiZbydqcVM/Tko75fNjQFI/AAAAAAAAAik/lvnakrXyFcY/s320/stratos7.png" alt="" id="BLOGGER_PHOTO_ID_5641387342051885138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The newly created privilege group will be shown in &lt;span style="font-weight: bold;"&gt;Database User Privilege Groups&lt;/span&gt; page as follows.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-XKprm8VuHxQ/Tko8dpcrFPI/AAAAAAAAAis/TJskZEmbItE/s1600/stratos8.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://2.bp.blogspot.com/-XKprm8VuHxQ/Tko8dpcrFPI/AAAAAAAAAis/TJskZEmbItE/s320/stratos8.png" alt="" id="BLOGGER_PHOTO_ID_5641387963274958066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, go back to the previous page and click on add new database users icon to access &lt;span style="font-weight: bold;"&gt;Database Users&lt;/span&gt; screen where you can add DB users. Click on add new user.&lt;br /&gt;Specify "test" as username and password and select "group1" as the privilege group.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-NzrEkdISXMI/Tko9OVjuTjI/AAAAAAAAAi0/jh4ZqJzNzrM/s1600/stratos9.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://4.bp.blogspot.com/-NzrEkdISXMI/Tko9OVjuTjI/AAAAAAAAAi0/jh4ZqJzNzrM/s320/stratos9.png" alt="" id="BLOGGER_PHOTO_ID_5641388799749410354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once you create a new DB user, it will be listed in Database Users page with the options to explore database using the given user credentials, edit, drop and create carbon datasource.&lt;br /&gt;Click on &lt;span style="font-weight: bold;"&gt;explore database&lt;/span&gt;. Database console screen will be displayed as follows. This console allows you to issue any SQL statement and act as an SQL editor for your database.&lt;br /&gt;You may type any SQL statement and hit run button so that the query will be executed on the database which has been created in the default amazon RDS instance provided by WSO2.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-Sii79XQ482M/Tko-7UFq-TI/AAAAAAAAAi8/tYcpulg8P00/s1600/stratos11.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://4.bp.blogspot.com/-Sii79XQ482M/Tko-7UFq-TI/AAAAAAAAAi8/tYcpulg8P00/s320/stratos11.png" alt="" id="BLOGGER_PHOTO_ID_5641390671960668466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, you can use this DB as your storage media in your SOA platform in cloud. For example, you may deploy a webapp in &lt;a href="https://appserver.stratoslive.wso2.com/"&gt;WSO2 Stratos AppServer&lt;/a&gt; which talks to this particular DB. Or you may simply create a data service using this database.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-2123087952707534620?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/2123087952707534620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=2123087952707534620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2123087952707534620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2123087952707534620'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/08/wso2-data-as-service-have-your-own-data.html' title='WSO2 Data As a Service - Have your own data storage in cloud!'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-UzJmO_QuAjg/Tko0zAniPEI/AAAAAAAAAiE/qhPwGIlT2xM/s72-c/stratos1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-2964965292416923433</id><published>2011-07-22T11:13:00.000-07:00</published><updated>2011-07-22T20:05:28.897-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Stratos'/><category scheme='http://www.blogger.com/atom/ns#' term='PaaS'/><category scheme='http://www.blogger.com/atom/ns#' term='Cloud Computing'/><title type='text'>PaaS testing</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Platform_as_a_service"&gt;PaaS&lt;/a&gt;  (Platform as a Service) is an application delivery model which provides  services to design, develop, test, deploy and host applications. It  plays a key role in cloud computing space similar to the other services,  IaaS (infrastructure as a service) and SaaS (software as a service). &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CC0QFjAA&amp;amp;url=http%3A%2F%2Fcode.google.com%2Fappengine%2F&amp;amp;rct=j&amp;amp;q=Google%20app%20engine&amp;amp;ei=_cEpTtXGK4fm-ga-uvjkBg&amp;amp;usg=AFQjCNF5QhCnECRmMCs_sNhPDj5bJE-WTg&amp;amp;sig2=57T6umQv5jq7NB42fvBphw&amp;amp;cad=rja"&gt;Google App engine&lt;/a&gt;, &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CBQQFjAA&amp;amp;url=http%3A%2F%2Fwww.vmforce.com%2F&amp;amp;rct=j&amp;amp;q=vmForce&amp;amp;ei=FcIpTuvuDMXm-gbV5cjsBg&amp;amp;usg=AFQjCNEiUkboVUPQAhvqDYxGOmTXwzq6aQ&amp;amp;sig2=0-iB-GM_d4JuvMwOAW-GwA&amp;amp;cad=rja"&gt;vmForce&lt;/a&gt; and &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CB0QFjAA&amp;amp;url=http%3A%2F%2Fwso2.com%2Fcloud%2Fstratos%2F&amp;amp;rct=j&amp;amp;q=WSO2%20Stratos&amp;amp;ei=L8IpTsyfKYm8-QaWhY3LBg&amp;amp;usg=AFQjCNGWs5pzdOztdomtzJPMyeIhLa8D3Q&amp;amp;sig2=aXFteHc0mp97bcO6MMse2Q&amp;amp;cad=rja"&gt;WSO2 Stratos&lt;/a&gt; are some of the popular PaaS offerings.&lt;br /&gt;This  post is not about detailed concepts of PaaS or cloud computing. Rather,  I'm going to look at the testing and quality assurance aspects of PaaS.  PaaS testing is not a widely discussed topic. There is no pre-defined  model for PaaS testing. We need to explore the features of PaaS and  derive an approach for testing PaaS apps. I will go through some basic  components based on my experience of testing &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CB0QFjAA&amp;amp;url=http%3A%2F%2Fwso2.com%2Fcloud%2Fstratos%2F&amp;amp;rct=j&amp;amp;q=WSO2%20stratos&amp;amp;ei=CjkqTvuJF8Ga-gbL9anqBg&amp;amp;usg=AFQjCNGWs5pzdOztdomtzJPMyeIhLa8D3Q&amp;amp;cad=rja"&gt;WSO2 Stratos opensource cloud platform&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Hosted services testing&lt;/span&gt; - &lt;span style="font-weight: bold;"&gt;Minimized deployment overhead&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In  simplest terms, PaaS testing is about testing a hosted platform. So,  there is no deployment and configuration overhead for the test team.  Testers are expected to access the hosted services remotely using web  browser and carry out functional and non-functional testing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lesser test platform combinations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When  you test a standalone product or a combination of products, you should  try out the possible platform combinations such as different types of  clustering setups, multiple DBMSs, Application Servers or various  operating systems. However, when you test the same product suite or  platform on cloud (PaaS), you are bound to one optimum configuration  stack. You have one or two choices. There is no requirement to try all  possible platform setups.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Multi-tenancy aspects&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Multi-tenancy  allows a single application to emulate multiple application instances.  With multi-tenancy, a single application can be shared across many  organizations. Therefore, series of tests should be carried out  carefully to verify the multi-tenant aspects. For example, if company A  logs in to a web application hosting service in your PaaS offering and  deploy a web app, then the users of company B should not be able to  locate it unless company A made it public. In other words, the  configurations done by one tenant should not be exposed to other  tenants.&lt;br /&gt;These mission-critical aspects are some of the key requirements which should be taken into account in any PaaS testing model.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Performance&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;and scalability&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Any hosted service should conform with the SLAs.&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;Similar  to a website, services included in a PaaS can be accessed by multiple  users concurrently. Therefore, sufficient amount of performance testing  must be carried out. The usual usage pattern of standalone technology  platform can be dramaticallty changed when it is hosted as a service in  cloud. For example, the general use cases of &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CBwQFjAA&amp;amp;url=http%3A%2F%2Fwso2.com%2Fproducts%2Fcarbon%2F&amp;amp;rct=j&amp;amp;q=WSO2%20Carbon&amp;amp;ei=xDgqTr6GIJCd-waPzujOBg&amp;amp;usg=AFQjCNEIkiGu6KAdUBp4jC5LrjtVBQuVEA&amp;amp;cad=rja"&gt;WSO2 Carbon SOA middleware&lt;/a&gt;  platform are different from the standalone version when the platform is  exposed as a service. WSO2 SOA middleware platform consists of 12  different products and all of them includes a management UI for  administration purposes. In non-cloud based deployment, the multiple,  concurrent users access to the management UIs are minimum since it is  very rare that hundred of administrators accessing management console at  once.&lt;br /&gt;However, if this platform is hosted as a service in cloud  (PaaS), then the concurrent user access to the management UIs are a  highly desirable scenario.&lt;br /&gt;&lt;br /&gt;It is a requirement that the hosted  platform should be able to handle load seamlessly without affecting  consumers. Auto-scaling is a key feature of WSO2 Stratos cloud platform.  When new  resources are needed, WSO2 Stratos transparently adds  services and when  load goes down, WSO2 Stratos automatically brings  services down. Testers should ensure, with the load, the new EC2  instances spawning up and down correctly. The tools like &lt;a href="http://www.google.com/url?sa=t&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CB0QFjAA&amp;amp;url=http%3A%2F%2Fcode.google.com%2Fp%2Fhybridfox%2F&amp;amp;rct=j&amp;amp;q=hybridfox&amp;amp;ei=KTUqTpipOs-6-AbX5JzdBg&amp;amp;usg=AFQjCNHr8iBRb6skP-ctRSik0Iomrgwxtw&amp;amp;cad=rja"&gt;hybridfox&lt;/a&gt; are very useful in these situations.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Data&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If  your PaaS provides users with the ability to store their data in cloud  and various database centric operations, then the testing will be much  complicated. As a tester, you must ensure the availability of data  sources, accessibility and provisioning aspects. You must also take  extra care that, if the data are geographically distributed in cloud,  then it adheres to the legal requirements of the users of your PaaS.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Security&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Security  is the utmost important aspect of any cloud offering. It is recommended  to have a separate group of security testers who do penetration testing  and ethical hacking in order to ensure secure infrastructure of your  PaaS. WSO2 Stratos cloud platform allows users to deploy their webapps,  web services and various custom code. Therefore we must ensure that no  vulnerable code are deployed and a code deployed by one tenant does not  affect the operations of others or whole platform.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Virtualization&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Public  PaaS offerings are usually based on virtualized infrastructure such as  Amazon EC2. Therefore, a full functional test cycle should be carried  out on EC2 VMs inorder to make sure that there are no regressions due to  virtual servers.&lt;br /&gt;&lt;br /&gt;In addition to the above key areas, PaaS  testing model should consists of the general web application testing  aspects such as cross browser testing, accessibility testing,  localization testing etc..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-2964965292416923433?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/2964965292416923433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=2964965292416923433' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2964965292416923433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2964965292416923433'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/07/paas-testing.html' title='PaaS testing'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-176142219311601590</id><published>2011-07-18T09:42:00.000-07:00</published><updated>2011-07-18T09:48:52.711-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jmeter'/><title type='text'>Data driven testing with Jmeter user parameters</title><content type='html'>&lt;span class="Apple-style-span" style="border-collapse: separate; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-family: 'Times New Roman'; font-size: 100%; "&gt;&lt;span class="Apple-style-span" style="text-align: left; font-family: Georgia, serif; "&gt;&lt;span class="Apple-style-span" &gt;This is a follow up to one of my previous posts which explained&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://charithaka.blogspot.com/2011/02/data-driven-web-service-testing-with.html"&gt;data driven web service testing using CSV config element in Jmeter&lt;/a&gt;. There, we used CSV file to read input data for SOAP/XML-RPC sampler.&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;In this post, we will look in to using&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;b&gt;User Parameters pre-processor element&lt;/b&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;as the data source instead of a CSV file.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;Step 1&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;We are going to use the same web service which we used in my&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://charithaka.blogspot.com/2011/02/data-driven-web-service-testing-with.html"&gt;previous post&lt;/a&gt;,&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://www.xmethods.net/ve2/ViewListing.po?key=uuid:7EB41E38-599C-30A8-9A69-03C8E4640281"&gt;temperature conversion service&lt;/a&gt;. Please add the SOA/XML-RPC sampler, the SOAP request and the necessary thread group as described in step 1 and 2 of that&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://charithaka.blogspot.com/2011/02/data-driven-web-service-testing-with.html"&gt;post&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;Step 2&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;Lets parameterize the payload of SOAP message so that different requests will be sent to the service with each test run. Instead of reading data from a CSV file, we can add a User Parameter pre processor element in Jmeter test plan.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;Right click on the thread group of your jmeter test plan and select&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;b&gt;Add --&amp;gt; Pre Processors ---&amp;gt; User Parameters&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;Click on&lt;b&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;Add Variable&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;/b&gt;and specify&lt;b&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;celcius&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;/b&gt;as the name of variable. Add few users and enter celcius values for each user as shown below.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-BMi0LDhEYJw/TiRirAjz1VI/AAAAAAAAAhY/VAZMF2GpKUU/s1600/user-param.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 188px;" src="http://2.bp.blogspot.com/-BMi0LDhEYJw/TiRirAjz1VI/AAAAAAAAAhY/VAZMF2GpKUU/s320/user-param.png" alt="" id="BLOGGER_PHOTO_ID_5630733925144057170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;Step 3&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;Now, parameterize the payload of SOAP as follows.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&amp;lt;tem:nCelcius&amp;gt;${celcius}&amp;lt;/tem:nCelcius&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;Step 4&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;Increase the thread count corresponding to the user count in your user parameters pre-processor element and run the test. You will notice that the Celcius figure will be varied in each request.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;Based on your requirements, you can select either CSV config element or User Parameter pre-processor element for data driven testing. If you have large number of variables to be parameterized, CSV config is the best option.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-176142219311601590?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/176142219311601590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=176142219311601590' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/176142219311601590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/176142219311601590'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/07/data-driven-testing-with-jmeter-user.html' title='Data driven testing with Jmeter user parameters'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-BMi0LDhEYJw/TiRirAjz1VI/AAAAAAAAAhY/VAZMF2GpKUU/s72-c/user-param.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-5319614772172614119</id><published>2011-06-15T06:34:00.000-07:00</published><updated>2011-06-15T08:26:11.457-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><title type='text'>WSO2 Carbon-3.2.0 - The latest with many new features and a release to remember</title><content type='html'>On 12th of June 2011, the latest version of WSO2 SOA middleware platform, WSO2 Carbon-3.2.0 has been released. Since 2009 January, WSO2 SOA middleware platform has been grown and matured and now it consists of 12 different products.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.com/products/application-server/"&gt;WSO2 Application Server&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.com/products/enterprise-service-bus/"&gt;WSO2 Enterprise Service Bus&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.com/products/mashup-server/"&gt;WSO2 Mashup Server&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.com/products/identity-server/"&gt;WSO2 Identity Server&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.com/products/governance-registry/"&gt;WSO2 Governance Registry&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.com/products/data-services-server/"&gt;WSO2 Data Services Server&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.com/products/business-process-server/"&gt;WSO2 Business Process Server&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.com/products/business-activity-monitor/"&gt;WSO2 Business Activity Monitor&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.com/products/gadget-server/"&gt;WSO2 Gadget Server&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.com/products/business-rules-server/"&gt;WSO2 Business Rules Server&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.com/products/complex-event-processing-server/"&gt;WSO2 Complex Event Processing Server&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.com/products/message-broker/"&gt;WSO2 Message Broker&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this latest version, two new members joined into WSO2 Carbon product family. Those are &lt;b&gt;WSO2 Complex Event Processing Server&lt;/b&gt; and &lt;b&gt;WSO2 Message Broker&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this post, I'm not going to explain the new features and enhancements included in each of these products. You can find them out in the respective product pages in &lt;b&gt;wso2.com&lt;/b&gt;. &lt;/div&gt;&lt;div&gt;But, I would like to share how we evolve in terms of features, process and release methodology during the last couple of years.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In late 2008, we started the implementation of WSO2 Carbon platform. Before that, we had four isolated products (WSO2 ESB, WSO2 WSAS, WSO2 IS and WSO2 Registry) but those had limitations to work as a platform. The major objective of WSO2 Carbon platform was to build a suite of products which can be integrated easily and run together with minimum configuration overhead. At the end of the first WSO2 Carbon platform release (version 1.5.0), we were able to achieve that objective to some extent. The first release was a VERY different experience for us since we used to do releases with one product at a time so that the test team had sufficient time and resources to try out various scenarios. Because of that, we had to move in to a totally different testing paradigm. &lt;/div&gt;&lt;div&gt;In early 2009, we had to do a patch release of WSO2 Carbon platform (version 1.5.1) because we uncovered some critical issues after the first Carbon release. With this, we badly felt the need of adjusting our testing methodology to align with WSO2 platform vision. We spent hours in each build to test management console UIs manually and our first objective was to cut down that time and effort. In order to do that, we started developing a &lt;b&gt;&lt;a href="http://seleniumhq.org/"&gt;selenium&lt;/a&gt;&lt;/b&gt; based test automation framework. In 2009, we did 3 WSO2 Carbon platform releases (version 2.0.0, 2.0.1, 2.0.2) and we were able to make use of selenium tests heavily in all those release cycles. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In 2010, we went through a major UI refactoring process across the whole WSO2 Carbon platform. Unfortunately, we could not keep maintaining selenium tests with the pace of UI changes. Therefore, we wanted to have a test framework with minimum maintenance overhead. We wanted to call methods of various features bypassing UI elements so that the frequent UI changes do not break the tests. We started admin services based test automation framework, which used to call the operations of administration services associated with each of the features programmatically (Java/Junit). &lt;/div&gt;&lt;div&gt;2010 was an extremely busy year for most of us since we did a lot of frequent releases, but there were very limited automated tests. At the end of 2010, WSO2 Carbon became a fully componentized, modular SOA middleware platform which consisted of multi-tenancy and a lot of usability enhancements. As the testing team, we kept on observing the growth of WSO2 Carbon platform more than anyone else since we deal with almost all aspects of each and every product. As I said at the beginning, one of the objectives of WSO2 product platform was to provide users with ease of integration. By end of 2010, we realized how far we achieved that. Installing a new feature on any of the WSO2 Carbon based product became a simple click'n'click process. Most features worked out-of-the-box. &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Now, after 2.5 years of the first Carbon release, our product platform has been improved in various aspects with 12 different products. Our development and testing methodology has been changing with each release to accommodate the pace of growth and objectives in WSO2 SOA platform. In the latest 3.2.0 release, our focus shifted towards more platform level testing, which required us to learn and familiar with each product. With the platform aspect, we cannot do individual product releases. We do all 12 products at once, which demands huge work load on both development and testing teams. At WSO2, we do not trust or rely on the number of testers in the team but their individual capabilities. We realize the need of having 80% of test coverage through some kind of automation in order to sustain with the pace.  For all these years, we do not adopt or follow any specific process blindly because that works for some other organization so that we do. Instead, we are following a context-driven testing approach. We learn and enhance our processes with our own mistakes and experiences. While WSO2 is revolutionizing the world of enterprise middleware, testing and development methodology of middleware will also be redefined.  &lt;/div&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;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-5319614772172614119?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/5319614772172614119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=5319614772172614119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5319614772172614119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5319614772172614119'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/06/wso2-carbon-320-latest-with-many-new.html' title='WSO2 Carbon-3.2.0 - The latest with many new features and a release to remember'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-2227754152966991171</id><published>2011-05-17T18:59:00.000-07:00</published><updated>2011-05-17T19:40:19.874-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><title type='text'>WSO2 SOA middleware Deployment Tips - 1 - validationQuery to avoid broken DB connections</title><content type='html'>I thought to put together some best practices, guidelines on deploying WSO2 SOA middleware platform. This post will remind you a well-known best practice used in most of the product deployments. &lt;br /&gt;When you are maintaining DB connections, it is always recommended to use a validationQuery to check the health of the TCP connection of the connections stay in DB connection pool.&lt;br /&gt;Because the connection opening is an expensive and time consuming operation, after a connection is created, it will be kept open for a specific time in the pool. When re-using these connections from the pool, there can be situations that the TCP connection to the DB is interrupted and the connection consumer gets errors such as communication link failures etc..&lt;br /&gt;In order to avoid that, a validationQuery, an SQL statement specific to DBMS type, can be used which runs before using the connection.&lt;br /&gt;&lt;br /&gt;In WSO2 middleware platform, you usually use central governance/configuration registry to store SOA metadata and various governance tasks. Governance registry supports multiple DBs as underlying data stores. You establish the connection to DB in CARBON_HOME/repository/conf/registry.xml as follows.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;dbConfig name="wso2registry"&amp;gt;&lt;/div&gt;&lt;div&gt;        &lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;url&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;gt;jdbc:mysql://localhost:3306/config_db&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;/url&amp;gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;        &lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;userName&amp;gt;&amp;gt;regadmin&amp;lt;/userName&amp;gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;        &lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;password&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;gt;regadmin&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;/password&amp;gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;        &lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;driverName&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;gt;com.mysql.jdbc.Driver&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;/driverName&amp;gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;        &lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;maxActive&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;gt;50&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;/maxActive&amp;gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;        &lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;maxWait&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;gt;60000&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;/maxWait&amp;gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;        &lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;minIdle&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;gt;5&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;/minIdle&amp;gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;    &lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;/dbConfig&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is one of the places where you may experience DB connection issues as I explained above. Therefore, it is always a best practice to use a validationQuery. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If your DBMSs is MySQL or MSSQL, then use the following.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&amp;lt;&lt;span class="il"&gt;validationQuery&lt;/span&gt;&amp;gt;SELECT 1&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;/&lt;span class="il"&gt;validationQuery&lt;/span&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In Oracle;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;b&gt;&lt;i&gt;&amp;lt;&lt;span class="il"&gt;validationQuery&lt;/span&gt;&amp;gt;SELECT 1 FROM DUAL&amp;lt;/&lt;span class="il"&gt;validationQuery&lt;/span&gt;&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In Postgres,&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;b&gt;&lt;i&gt;&amp;lt;&lt;span class="il"&gt;validationQuery&lt;/span&gt;&amp;gt;SELECT version(); &amp;lt;/&lt;span class="il"&gt;validationQuery&lt;/span&gt;&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Similarly, when you make DB connections in WSO2 Data Services Server, make sure to use validationQuery in data source definition section as follows. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&amp;lt;property name="org.wso2.ws.dataservice.&lt;wbr&gt;&lt;span class="il"&gt;validationquery&lt;/span&gt;"&amp;gt;SELECT 1&amp;lt;/property&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-2227754152966991171?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/2227754152966991171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=2227754152966991171' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2227754152966991171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2227754152966991171'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/05/wso2-soa-middleware-deployment-tips-1.html' title='WSO2 SOA middleware Deployment Tips - 1 - validationQuery to avoid broken DB connections'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-7776110504571079178</id><published>2011-04-20T01:10:00.000-07:00</published><updated>2011-04-20T01:12:56.408-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='Jconsole'/><category scheme='http://www.blogger.com/atom/ns#' term='JMX'/><title type='text'>Monitoring WSO2 ESB using JConsole</title><content type='html'>My latest tutorial on &lt;a href="http://wso2.org/library/knowledge-base/2011/04/monitoring-wso2-esb-using-jconsole"&gt;how to monitor WSO2 ESB using JConsole&lt;/a&gt; is now published on &lt;a href="http://wso2.org"&gt;WSO2 Oxygen Tank&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-7776110504571079178?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/7776110504571079178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=7776110504571079178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7776110504571079178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7776110504571079178'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/04/monitoring-wso2-esb-using-jconsole.html' title='Monitoring WSO2 ESB using JConsole'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-7936450195067482771</id><published>2011-04-12T12:07:00.000-07:00</published><updated>2011-12-11T05:36:47.853-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSON'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Application Server'/><title type='text'>How to send JSON messages to web services deployed on WSO2 Application Server</title><content type='html'>JSON (JavaScript Object Notation) is an open and text-based data exchange format, that provides a standardized data exchange format better suited for Ajax style web applications. You can find more information about JSON from &lt;a href="http://www.json.org/"&gt;www.json.org&lt;/a&gt;&lt;div&gt;&lt;a href="http://wso2.com/products/"&gt;WSO2 SOA middleware platform&lt;/a&gt; supports sending and receiving JSON messages.&lt;br /&gt;&lt;div&gt;This post takes you through the steps to deploy a simple web service in &lt;a href="http://wso2.com/products/application-server/"&gt;WSO2 Application Server&lt;/a&gt; and write a client using Axis2 ServiceClient API to invoke the service by sending JSON message.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Pre-requisites:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.org/downloads/appserver/"&gt;Download&lt;/a&gt; and install WSO2 Application Server 4.0.0 or later&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 1&lt;/b&gt;&lt;/div&gt;&lt;div&gt;We are using a simple web service, which echo's user input as follows. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;&lt;div&gt;&lt;div&gt;public class EchoService {&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; public OMElement echo(OMElement element) {&lt;/div&gt;&lt;div&gt;           return element;&lt;/div&gt;&lt;div&gt;    }&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can download the service archive (EchoService.aar) from &lt;a href="http://ww2.wso2.org/~charitha/EchoService.aar"&gt;here&lt;/a&gt; and deploy on WSO2 Application Server.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 2&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Have a look at CARBON_HOME/repository/conf/axis2.xml (CARBON_HOME is the root directory of WSO2 Application Server). You will notice that the JSON specific message builders and formatters are enabled by default. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&amp;lt;!--JSON Message Formatters--&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;        &amp;lt;messageFormatter contentType="application/json"&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;                          class="org.apache.axis2.json.JSONMessageFormatter"/&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;        &amp;lt;messageFormatter contentType="application/json/badgerfish"&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;                          class="org.apache.axis2.json.JSONBadgerfishMessageFormatter"/&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;        &amp;lt;messageFormatter contentType="text/javascript"&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;                          class="org.apache.axis2.json.JSONMessageFormatter"/&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt; &lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;b&gt;&amp;lt;!--JSON Message Builders--&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;        &lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;b&gt; &amp;lt;messageBuilder contentType="application/json"&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;                        class="org.apache.axis2.json.JSONOMBuilder"/&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;        &lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;b&gt; &amp;lt;messageBuilder contentType="application/json/badgerfish"&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;                        class="org.apache.axis2.json.JSONBadgerfishOMBuilder"/&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;        &lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;b&gt; &amp;lt;messageBuilder contentType="text/javascript"&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;                        class="org.apache.axis2.json.JSONOMBuilder"/&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;WSO2 Application Server accepts any JSON message with the content type application/json, application/json/badgerfish or text/javascript. In this example, we will use a message with the content-type, application/json&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 3&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Now, If you invoke the service using the Tryit utility associated with EchoService and trace the message, you will notice the payload of the SOAP message as follows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt; &amp;lt;p:echo xmlns:p="http://service.carbon.wso2.org"&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;            &amp;lt;echo xmlns="http://service.carbon.wso2.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string"&amp;gt;charitha&amp;lt;/echo&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;         &amp;lt;/p:echo&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Basically, the message payload will be similar to the following.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;lt;echo&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;b&gt;&amp;lt;value&amp;gt;charitha&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&amp;lt;/value&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;b&gt;&amp;lt;/echo&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 4&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, we are going to send the above payload as a JSON message. The JSON format of the above message payload will be as follows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;{"echo":{"value":"charitha"}}&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Add the following class to your java project. Compile it using the libraries included in CARBON_HOME/repository/component/plugins directory. You may also need to add  CARBON_HOME/lib/endorsed into your class path. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;&lt;div&gt;&lt;div&gt;package org.wso2.carbon.service;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.RequestEntity; import org.apache.commons.httpclient.methods.StringRequestEntity;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;public class JSONClient {&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    public static void main(String[] args) throws Exception {&lt;/div&gt;          String strURL = "http://localhost:8281/services/JSONProxy/";                  PostMethod post = new PostMethod(strURL);                RequestEntity entity = new StringRequestEntity("{\"echo\":{\"value\":\"charitha\"}}","application/json", "UTF-8");         post.setRequestEntity(entity);         HttpClient httpclient = new HttpClient();         try {             int result = httpclient.executeMethod(post);             System.out.println("Response status code: " + result);             System.out.println("Response body: ");             System.out.println(post.getResponseBodyAsString());         } finally {             post.releaseConnection();        }    } &lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You could use the same axis2.xml located at CARBON_HOME/repository/conf as the client axis2.xml when creating ConfigurationContext&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you forward the message to tcpmon and trace it, you will see the request as follows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;POST /services/EchoService HTTP/1.1&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Content-Type: application/json; charset=UTF-8&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;User-Agent: WSO2 WSAS-3.2.0&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Host: 127.0.0.1:9764&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Transfer-Encoding: chunked&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1d&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;{"echo":{"value":"charitha"}}&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;0&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-7936450195067482771?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/7936450195067482771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=7936450195067482771' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7936450195067482771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7936450195067482771'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/04/how-to-send-json-messages-to-web.html' title='How to send JSON messages to web services deployed on WSO2 Application Server'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-4648453169682053186</id><published>2011-02-27T08:21:00.000-08:00</published><updated>2011-02-27T09:25:25.333-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web services'/><category scheme='http://www.blogger.com/atom/ns#' term='Jmeter'/><title type='text'>Data driven web service testing with Apache Jmeter</title><content type='html'>You will not get enough coverage in your web service testing, if you repeatedly send the same request to the webservice under testing. You must read data from a data source and parameterize each request. If you are dealing with SOAP messages, you should parameterize SOAP message payload.&lt;br /&gt;This post guides you how to do data driven web service testing using &lt;a href="http://jakarta.apache.org/jmeter/"&gt;Apache Jmeter&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pre-requisites:&lt;/span&gt;&lt;br /&gt;Install Apache Jmeter 2.3.4 or later&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We are going to invoke a publicly available web service, &lt;a href="http://www.xmethods.net/ve2/ViewListing.po?key=uuid:7EB41E38-599C-30A8-9A69-03C8E4640281"&gt;Temerature Conversion service&lt;/a&gt; . The WSDL of this web service can be accessible through http://webservices.daehosting.com/services/TemperatureConversions.wso?WSDL&lt;br /&gt;You can invoke the CelciusToFahrenheit operation of this webservice using SOAPUI and capture the request message. It will be similar to the below.&lt;br /&gt;&lt;br /&gt;&amp;lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://webservices.daehosting.com/temperature"&amp;gt;&lt;br /&gt;&amp;lt;soapenv:Header/&amp;gt;&lt;br /&gt;&amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;   &amp;lt;tem:CelciusToFahrenheit&amp;gt;&lt;br /&gt;      &amp;lt;tem:nCelcius&amp;gt;37&amp;lt;/tem:nCelcius&amp;gt;&lt;br /&gt;   &amp;lt;/tem:CelciusToFahrenheit&amp;gt;&lt;br /&gt;&amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lets create a new JMeter test plan and add a thread group. Then, add SOAP/XML-RPC sampler into the thread group and copy and paste the above SOAP request into the SOAP/XML-RPC data section of the sampler.&lt;br /&gt;Enter the URL of the service as http://webservices.daehosting.com/services/TemperatureConversions.wso (You can capture this from the location attribute of the address element in the WSDL)&lt;br /&gt;Now add a listener to view the result.&lt;br /&gt;Save your test plan. Your test plan will be similar to the below.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-yJCUWZ44uCs/TWqBwUm4lcI/AAAAAAAAAgU/s66rPLa5i88/s1600/jmeter1.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 187px;" src="http://2.bp.blogspot.com/-yJCUWZ44uCs/TWqBwUm4lcI/AAAAAAAAAgU/s66rPLa5i88/s320/jmeter1.png" alt="" id="BLOGGER_PHOTO_ID_5578413755617285570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Run the test and check the results. You will get the Fahrenheit value of the provided Celsius figure.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, you can increase the thread count and extend this test into a performance test. However, in that case you will be sending the same request again and again. It will not be a good simulation of a real-world scenario. You should be able to alter the payload (in our example, Celsius value) of the SOAP request with each thread.&lt;br /&gt;In order to do so, you should read Celsius data from a data source. In Jmeter, you can easily read data from a csv file.&lt;br /&gt;Lets create a csv file, temperature.csv and save it in the location where you saved the above JMeter test plan.&lt;br /&gt;Enter a set of values row-by-row in the temperature.csv&lt;br /&gt;eg:-&lt;br /&gt;10&lt;br /&gt;20&lt;br /&gt;30&lt;br /&gt;40&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Next, we will add CSV Data Set Config element which will read data from the csv file.&lt;br /&gt;Right click on Thread Group and select &lt;span style="font-weight: bold;"&gt;Add --&gt; Config Element ---&gt; CSV Data Set Config&lt;/span&gt;&lt;br /&gt;Now you can configure your CSV data source as follows.&lt;br /&gt;&lt;br /&gt;Filename:  &lt;give&gt;&amp;lt;Give the full path of temperature.csv&amp;gt;&lt;br /&gt;Variable Names: celcius&lt;br /&gt;&lt;br /&gt;Keep the other values intact.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now access the SOAP/XML-RPC Data section of the request and replace the hard-coded celcius figure with the variable name we have configured in CSV Data Set Config element (i.e:- ${celcius})&lt;br /&gt;After parameterizing, your SOAP request will be as follows.&lt;br /&gt;&lt;br /&gt;&amp;lt;soapenv:Envelope  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"  xmlns:tem="http://webservices.daehosting.com/temperature"&amp;gt;&lt;br /&gt;&amp;lt;soapenv:Header/&amp;gt;&lt;br /&gt;&amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;   &amp;lt;tem:CelciusToFahrenheit&amp;gt;&lt;br /&gt;      &lt;span style="font-weight: bold;"&gt;&amp;lt;tem:nCelcius&amp;gt;${celcius}&amp;lt;/tem:nCelcius&amp;gt;&lt;/span&gt;&lt;br /&gt;   &amp;lt;/tem:CelciusToFahrenheit&amp;gt;&lt;br /&gt;&amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;&lt;br /&gt;Increase the thread count corresponding to the row count in your csv file and run the test. You will notice that the Celcius figure will be varied in each request by reading data from CSV data source.&lt;br /&gt;&lt;br /&gt;In this way, you can easily do data driven web service testing using Jmeter.&lt;/give&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-4648453169682053186?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/4648453169682053186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=4648453169682053186' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4648453169682053186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4648453169682053186'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/02/data-driven-web-service-testing-with.html' title='Data driven web service testing with Apache Jmeter'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-yJCUWZ44uCs/TWqBwUm4lcI/AAAAAAAAAgU/s66rPLa5i88/s72-c/jmeter1.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-1325318817348862614</id><published>2011-01-29T07:09:00.000-08:00</published><updated>2011-01-29T07:47:35.787-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='General Quality Assurance'/><title type='text'>Test Reviews - An efficient way to validate test coverage</title><content type='html'>When the complexity of testing increases, deriving test scenarios becomes extremely hard. Individual testers are not always capable of thinking all aspects of the products and finding out test cases. In agile processes which demands frequent releases, this becomes much harder since individual testers do not get sufficient time to learn and explore products.  &lt;div&gt;At WSO2, code reviews have been an integral part of engineering process. Code review groups get together and go through different code segments in weekly basis. &lt;/div&gt;&lt;div&gt;Similar to code reviews, WSO2 QA team conducts weekly test reviews. The primary objective of reviewing tests is to finding out gaps in a particular product's testing methodology.&lt;/div&gt;&lt;div&gt;Usually there are 2 main actors take part in a test review meeting.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;- Tester(s) who test a particular feature &lt;/div&gt;&lt;div&gt;- Developer (s) who implemented the feature&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; Tester goes through the existing test scenarios and developer provides his or her feedback on the tests. Specially when a particular use case is not clear enough, tester can clarify it during reviews very effective manner. &lt;/div&gt;&lt;div&gt;It is the testers responsibility to try out the new test scenarios which have been captured during the review in next release cycles.  &lt;/div&gt;&lt;div&gt;Test review will not take more than 1 hour and testers should be prepared properly to get the maximum out of this short time and capture more and more test scenarios. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;Similar to the manual test scenarios, all automated tests can also be reviewed during test reviews. &lt;/div&gt;&lt;div&gt;In agile processes where you do not have detailed system specs to derive tests, test reviews are one of the most useful mechanisms to validate your test coverage. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-1325318817348862614?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/1325318817348862614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=1325318817348862614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/1325318817348862614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/1325318817348862614'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/01/test-reviews-efficient-way-to-validate.html' title='Test Reviews - An efficient way to validate test coverage'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-6889593826379704812</id><published>2011-01-25T09:41:00.000-08:00</published><updated>2011-01-25T10:03:32.428-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Application Server'/><title type='text'>How to enable child-first class loading in WSO2 Application Server or Axis2</title><content type='html'>&lt;div&gt;By default, &lt;a href="http://wso2.com/products/application-server/"&gt;WSO2 Application Server&lt;/a&gt; (or Axis2) uses &lt;b&gt;parent-first&lt;/b&gt; class loading mechanism.&lt;/div&gt;&lt;div&gt;If you deploy an AAR service, which can load classes from the following locations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;CARBON_HOME/lib (CARBON_HOME is the location where you installed WSO2 Application Server)&lt;/li&gt;&lt;li&gt;CARBON_HOME/repository/deployment/server/axis2services/lib&lt;/li&gt;&lt;li&gt;AAR service/lib (lib directory under your service archive)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If your service implementation class has a package import for a class, which is available in both  CARBON_HOME/repository/deployment/server/axis2services/lib and the lib directory under service archive, the class placed under CARBON_HOME/repository/deployment/server/axis2services/lib will get loaded. &lt;/div&gt;&lt;div&gt;Which means, the parent class always get loaded first. &lt;/div&gt;&lt;div&gt;The class loading sequence is &lt;b&gt;CARBON_HOME/lib ---&gt; CARBON_HOME/repository/deployment/server/axis2services/lib -----&gt; AAR service/lib&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sometimes, we want to load the class from service archive lib first without loading the class which is available either one of above parent locations. In other words, child-first class loading will be required for some instances. &lt;/div&gt;&lt;div&gt;child-first class loading can be enabled simply by adding the following parameter in to services.xml in your service archive.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;lt;parameter name="EnableChildFirstClassLoading"&amp;gt;true&amp;lt;/parameter&amp;gt; &lt;/b&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you set this parameter in axis2.xml of your WSO2 Application Server (or Axis2) instance, all services will use child-first class loading mechanism. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-6889593826379704812?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/6889593826379704812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=6889593826379704812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6889593826379704812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6889593826379704812'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/01/how-to-enable-child-first-class-loading.html' title='How to enable child-first class loading in WSO2 Application Server or Axis2'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-6982239881682202337</id><published>2011-01-19T05:41:00.000-08:00</published><updated>2011-01-19T07:23:52.521-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WS-Addressing'/><category scheme='http://www.blogger.com/atom/ns#' term='SOAPUI'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Application Server'/><title type='text'>WS-Addressing with SOAPUI</title><content type='html'>&lt;a href="http://www.w3.org/Submission/ws-addressing/"&gt;WS-Addressing&lt;/a&gt; is a standard way of including message routing data within SOAP headers without relying on transport specific routing properties. If you are talking to a web service which expects WS-Addressing information in request SOAP messages, you could either follow a programmatic approach to write a client and insert WS-A headers manually or use a commercial or free web service client tool. SOAPUI is the simplest tool which can be used to insert WS-Addressing headers in to request SOAP messages.&lt;br /&gt;In this blog post, we will;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Talk to a WS-Addressing enabled service which is hosted in WSO2 Application Server using SOAPUI&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Assert response SOAP message to validate WS-A headers&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Pre-requisites:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.soapui.org/"&gt;Download&lt;/a&gt; and install the free version of SOAPUI 3.0.1 or later&lt;br /&gt;2. &lt;a href="http://wso2.org/downloads/appserver/"&gt;Download&lt;/a&gt; and install WSO2 Application Server 4.0&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We are going to invoke the default HelloService which is shipped with WSO2 Application Server. Go to WSO2_APPSERVER/home/bin and start the server by running wso2server.sh{bat}&lt;br /&gt;Access management console with https://localhost:9443/carbon and log in using the default administrator credentials (username=admin, password=admin)&lt;br /&gt;Navigate to Manage --&gt; Services --&gt; List in the left menu and select "HelloService"&lt;br /&gt;You will be directed to the dashboard of HelloService. Click on &lt;span style="font-weight: bold;"&gt;Modules&lt;/span&gt; link.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_S93Ac0EllBE/TTbz9gtKPjI/AAAAAAAAAfg/uTqVfpM1yGw/s1600/addressing1.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 187px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/TTbz9gtKPjI/AAAAAAAAAfg/uTqVfpM1yGw/s320/addressing1.png" alt="" id="BLOGGER_PHOTO_ID_5563902627739745842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You will notice that "addressing-3.1.0" is listed under "Globel Level". By default WS-Addressing is enabled for all the services hosted in WSO2 Application Server. Therefore, you do not have to configure anything at the server side to enable WS-Addressing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, we will create a new SOAPUI project referring to http://localhost:9763/services/HelloService?wsdl as follows. Make sure to select "Create Test Suite" check box as well.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_S93Ac0EllBE/TTb1dqlMzLI/AAAAAAAAAfo/Ns9APQ5mm5o/s1600/SoapUI1.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 158px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/TTb1dqlMzLI/AAAAAAAAAfo/Ns9APQ5mm5o/s320/SoapUI1.png" alt="" id="BLOGGER_PHOTO_ID_5563904279658155186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After creating the project, select &lt;span style="font-weight: bold;"&gt;greet &lt;/span&gt;request under &lt;span style="font-weight: bold;"&gt;HelloServiceSoap11Binding TestSuite&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_S93Ac0EllBE/TTb38Vuq-JI/AAAAAAAAAfw/kI5CEElsk8o/s1600/soapui2.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 187px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/TTb38Vuq-JI/AAAAAAAAAfw/kI5CEElsk8o/s320/soapui2.png" alt="" id="BLOGGER_PHOTO_ID_5563907005659936914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you click on run just by providing input string, you will notice that WS-A headers will not be included in the request SOAP message which can be observed if you toggle "Raw" option.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lets add WS-A headers in to the request SOAP message. Select greet request and click on WS-A option and select the following properties.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Enable WS-A addressing&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;Add default wsa:Action&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;Add default wsa:To&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Randomly generated message ID&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_S93Ac0EllBE/TTb5ivLITAI/AAAAAAAAAf4/fHhmIPfFe1Q/s1600/soapui3.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 187px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/TTb5ivLITAI/AAAAAAAAAf4/fHhmIPfFe1Q/s320/soapui3.png" alt="" id="BLOGGER_PHOTO_ID_5563908764836842498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Keep the rest of the default values and click on run. You will notice the following WS-A headers in the request message if you look at the raw message in SOAPUI.&lt;br /&gt;&lt;br /&gt;&amp;lt;soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"&amp;gt;&lt;br /&gt;&amp;lt;wsa:Action&amp;gt;urn:greet&amp;lt;/wsa:Action&amp;gt;&lt;br /&gt;&amp;lt;wsa:MessageID&amp;gt;uuid:1fa996ca-755b-486c-a2ed-aa14bbf663a3&amp;lt;/wsa:MessageID&amp;gt;&lt;br /&gt;&amp;lt;wsa:To&amp;gt;http://localhost:9763/services/HelloService.HelloServiceHttpSoap11Endpoint/&amp;lt;/wsa:To&amp;gt;&lt;br /&gt;&amp;lt;/soapenv:Header&amp;gt;&lt;br /&gt;&lt;br /&gt;Also, the response headers will be similar to the following.&lt;br /&gt;&lt;br /&gt;&amp;lt;soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"&amp;gt;&lt;br /&gt;   &amp;lt;wsa:Action&amp;gt;urn:greetResponse&amp;lt;/wsa:Action&amp;gt;&lt;br /&gt;   &amp;lt;wsa:RelatesTo&amp;gt;uuid:1fa996ca-755b-486c-a2ed-aa14bbf663a3&amp;lt;/wsa:RelatesTo&amp;gt;&lt;br /&gt;&amp;lt;/soapenv:Header&amp;gt;&lt;br /&gt;&lt;br /&gt;Simple.. isn't it? we just invoked a service with WS-Addressing headers using SOAPUI.&lt;br /&gt;&lt;br /&gt;Here, we manually verified that the response message includes the correct WS-A headers. We looked at the response message and verified each header. If you maintain an automated test suite to verify your web service interactions, the above procedure cannot not be considered as over until you add an assertion so that the test automatically reports the correctness or failures of response/request messages.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, we will add an assertion to validate response headers. In this example, we are going to add&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;an&lt;span style="font-weight: bold;"&gt; XPath match&lt;/span&gt; assertion to check whether the &lt;span style="font-weight: bold;"&gt;wsa:Action&lt;/span&gt; header of the response equals to &lt;span style="font-weight: bold;"&gt;urn:greetResponse&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Click on &lt;span style="font-weight: bold;"&gt;Assertions&lt;/span&gt; option and select "Add an assertion to this item" icon. Then select, XPAth Match as the assertion.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_S93Ac0EllBE/TTb_xPYIqPI/AAAAAAAAAgA/CbvqLZxRNIc/s1600/soapui4.png"&gt;&lt;img style="cursor: pointer; width: 264px; height: 123px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/TTb_xPYIqPI/AAAAAAAAAgA/CbvqLZxRNIc/s320/soapui4.png" alt="" id="BLOGGER_PHOTO_ID_5563915611069262066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next, you should specify the XPath expression and expected result as follows. First, click on &lt;span style="font-weight: bold;"&gt;Declare&lt;/span&gt; button which will automatically define the namespaces. Specify //wsa:Action as the xpath. Also, specify urn:greetResponse as the expected result.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_S93Ac0EllBE/TTcA8UVgJgI/AAAAAAAAAgI/xSEr1g-sKqg/s1600/soapui5.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 266px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/TTcA8UVgJgI/AAAAAAAAAgI/xSEr1g-sKqg/s320/soapui5.png" alt="" id="BLOGGER_PHOTO_ID_5563916900890584578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Run the test again. You will notice that the test will be marked in green denoting that the test is successful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-6982239881682202337?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/6982239881682202337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=6982239881682202337' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6982239881682202337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6982239881682202337'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/01/ws-addressing-with-soapui.html' title='WS-Addressing with SOAPUI'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_S93Ac0EllBE/TTbz9gtKPjI/AAAAAAAAAfg/uTqVfpM1yGw/s72-c/addressing1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-8016314976534625233</id><published>2011-01-15T04:52:00.000-08:00</published><updated>2011-01-15T07:20:19.543-08:00</updated><title type='text'>We are honored - Hats off to WSO2 QA team!!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/TTG3EVgMR5I/AAAAAAAAAfY/y6XRdzjhgXQ/s1600/_MG_9363.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/TTG3EVgMR5I/AAAAAAAAAfY/y6XRdzjhgXQ/s320/_MG_9363.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5562428299898800018" /&gt;&lt;/a&gt;&lt;br /&gt;When I joined WSO2 back in 2006 October, I always had a doubt whether I could survive in a world full of various technologies. Before joining WSO2, I used to work under well defined processes, managed by various policies, tests were driven by comprehensive requirements specs, Spent time with the QA teams writing detailed test cases etc.. But I was challenged to test Apache Axis2 at WSO2 as my first duty without having any of those materials. Apache Axis2 is a web service engine, middleware used by developers. So, ideally, I had to look at it through middleware user's in other words web service developer's perspective. It was a great challenge for a person who was new to web services and it was indeed a different experience for a QA engineer. &lt;div&gt;At the same time, &lt;a href="http://evanthika.blogspot.com/"&gt;Evanthika&lt;/a&gt;, who joined WSO2 one month before me,  and myself started testing the first WSO2 middleware product, &lt;a href="http://wso2.com/products/application-server/"&gt;WSO2 WSAS.&lt;/a&gt;  First, we started to write comprehensive test cases as we do in traditional QA processes. Later on, we understood that our methodology did not go along with WSO2's vision. We thought to adopt to a completely different agile testing mechanism and started to act fast without being an overhead for a fast-moving organization. We learned everyday, talked to developers and clarified doubts, lived with the product and uncovered a lot of critical bugs. We tried every attempt to report the real bugs and improve quality of the products with each releases. &lt;/div&gt;&lt;div&gt;In early 2007, Evanthika and myself were allocated to test Apache Synapse and WSO2 ESB which demanded us to explore different methods for testing because it was a completely different experience for us. Eventually, we defined our own testing methodology which nicely moved along with WSO2's release processes. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After 4 years, our team grew up and became highly effective with a lot of hard work done by our great team, &lt;a href="http://opensource-soa.blogspot.com/"&gt;Krishantha&lt;/a&gt;, &lt;a href="http://yumani.blogspot.com/"&gt;Yumani&lt;/a&gt;, &lt;a href="http://chamaras.blogspot.com/"&gt;Chamara&lt;/a&gt;, &lt;a href="http://ishanir.blogspot.com/"&gt;Ishani&lt;/a&gt;, Pavithra, Nirodha, Thilini, Chamara Anuradha. Now I'm confident that we are in a position to accept testing of any product with very short ramp-up period. Our lightweight process helps everyone to focus on uncovering bugs fast as well as move forward with various different technologies used by WSO2. It is not an easy task to test complex middleware products as I explained in a &lt;a href="http://charithaka.blogspot.com/2009/07/complexity-of-middleware-testing.html"&gt;previous blog post&lt;/a&gt;. We have built the foundation for the new testers to join our team and move along with the world of complex middleware testing. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With all these efforts during past few years, we have been awarded as &lt;b&gt;the outstanding team in 2010&lt;/b&gt; at the WSO2 awards ceremony which was held yesterday at Cinnamon lakeside, Colombo. As &lt;a href="http://pzf.fremantle.org/"&gt;Paul Fremantle&lt;/a&gt; mentioned during the ceremony, QA teams are kept aside and do not appreciate their work much in most organizations. But WSO2 believes the values of each team and always respect the hard work performed by our QA team.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I agree that we are not yet perfect and there are situations some bugs slipped through our test cycles. But we always try our best to maintain an acceptable quality with all releases. It is evident by the usage of our products in large organizations such as eBay, Deutche Bank etc..&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-8016314976534625233?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/8016314976534625233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=8016314976534625233' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8016314976534625233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8016314976534625233'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2011/01/we-are-honored-hats-off-to-wso2-qa-team.html' title='We are honored - Hats off to WSO2 QA team!!'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_S93Ac0EllBE/TTG3EVgMR5I/AAAAAAAAAfY/y6XRdzjhgXQ/s72-c/_MG_9363.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-3846225055108227091</id><published>2010-12-30T07:54:00.000-08:00</published><updated>2010-12-30T09:16:34.115-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='General Quality Assurance'/><title type='text'>Are you doing software testing or quality assurance?</title><content type='html'>&lt;div&gt;While going through some of the software QA related stuff, I found a very nice presentation done by &lt;a href="http://www.developsense.com/"&gt;Michael Bolton&lt;/a&gt;. There, he challenged the traditional way of defining software quality assurance teams. While agreeing with his insight on QA, I thought to highlight the contents included in one slide of his presentation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you are involved in software quality assurance (or if you think that you are a software QA person) then the following will be able to help you to get yourself categorized into the correct role that you are playing in your organization.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Do you&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;design the product?&lt;/li&gt;&lt;li&gt;hire programmers?&lt;/li&gt;&lt;li&gt;decide which bugs to fix?&lt;/li&gt;&lt;li&gt;allocate staff?&lt;/li&gt;&lt;li&gt;set the schedule?&lt;/li&gt;&lt;li&gt;fix problems in code?&lt;/li&gt;&lt;li&gt;decide on raises?&lt;/li&gt;&lt;li&gt;allocate training budgets?&lt;/li&gt;&lt;li&gt;produce manuals?&lt;/li&gt;&lt;li&gt;choose the development model?&lt;/li&gt;&lt;li&gt;fire some programmers?&lt;/li&gt;&lt;li&gt;control the budget?&lt;/li&gt;&lt;li&gt;set the company's strategic direction?&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;If the answer for all of the above questions is , YES, then you assure the quality of the products produced by your organization. So you are doing software QA!&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have never found a QA/testing team who performs all of the above activities in their job. But most of us test the products. We explore the products in order to reveal the issues and provide feedback to the stakeholders of the product under development. Therefore our role is Software testing NOT quality assurance. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.satisfice.com/blog/"&gt;James Bach&lt;/a&gt; defines software testing as &lt;i&gt;&lt;b&gt;questioning the product in order to evaluate it&lt;/b&gt;&lt;/i&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://kaner.com/"&gt;Cem Kaner&lt;/a&gt; says  &lt;i&gt;&lt;b&gt;software testing is a technical, empirical investigation of a product, done &lt;/b&gt;&lt;/i&gt;&lt;i&gt;&lt;b&gt;on behalf of stakeholders, with the intention of revealing quality-related information of the kind that they seek.&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, there is no assurance!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-3846225055108227091?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/3846225055108227091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=3846225055108227091' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/3846225055108227091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/3846225055108227091'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/12/are-you-doing-software-testing-or.html' title='Are you doing software testing or quality assurance?'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-4202585840352888726</id><published>2010-12-27T02:19:00.000-08:00</published><updated>2010-12-27T02:27:04.775-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='General Quality Assurance'/><title type='text'>Are you testing or checking?</title><content type='html'>Just found a &lt;a href="http://www.developsense.com/blog/2009/08/testing-vs-checking/"&gt;nice post&lt;/a&gt; from &lt;a href="http://www.developsense.com/blog.html"&gt;Micheal Bolton&lt;/a&gt; who expressed his opinions about the difference between Testing and Checking. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Extracted from the post;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: rgb(51, 51, 51); line-height: 17px; "&gt;&lt;h3 style="font-family: Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); margin-right: 0px; margin-bottom: 0px; margin-left: 0px; margin-top: 5px; padding-top: 5px; padding-left: 0px; "&gt;&lt;span style="font-style: italic; "&gt;Checking&lt;/span&gt; Is Confirmation&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Checking&lt;/strong&gt; is something that we do with the motivation of &lt;em&gt;confirming existing beliefs&lt;/em&gt;. &lt;span style="font-weight: bold; "&gt;Checking &lt;/span&gt;is a process of&lt;em&gt;confirmation, verification, and validation&lt;/em&gt;. When we already believe something to be true, we verify our belief by&lt;strong&gt;checking&lt;/strong&gt;. We &lt;strong&gt;check&lt;/strong&gt; when we’ve made a change to the code and we want to make sure that everything that worked before still works. When we have an assumption that’s important, we &lt;strong&gt;check&lt;/strong&gt; to make sure the assumption holds. Excellent programmers do a lot of &lt;strong&gt;checking&lt;/strong&gt; as they write and modify their code, creating automated routines that they run frequently to check to make sure that the code hasn’t broken. &lt;strong&gt;Checking&lt;/strong&gt; is focused on &lt;em&gt;making sure that the program doesn’t fail&lt;/em&gt;.&lt;/p&gt;&lt;h3 style="font-family: Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); margin-right: 0px; margin-bottom: 0px; margin-left: 0px; margin-top: 5px; padding-top: 5px; padding-left: 0px; "&gt;&lt;span style="font-style: italic; "&gt;Testing&lt;/span&gt; Is Exploration and Learning&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Testing&lt;/strong&gt; is something that we do with the motivation of &lt;em&gt;finding new information&lt;/em&gt;. &lt;strong&gt;Testing&lt;/strong&gt; is a process of &lt;span style="font-style: italic; "&gt;exploration, discovery, investigation, and learning&lt;/span&gt;. When we configure, operate, and observe a product with the intention of evaluating it, or with the intention of recognizing a problem that we hadn’t anticipated, we’re &lt;strong&gt;testing&lt;/strong&gt;. We’re &lt;strong&gt;testing&lt;/strong&gt; when we’re trying to find out about the extents and limitations of the product and its design, and when we’re largely driven by questions that haven’t been answered or even asked before. As James Bach and I say in our &lt;a href="http://www.developsense.com/courses.html" style="color: rgb(0, 0, 204); text-decoration: none; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; "&gt;Rapid Software Testing classes,&lt;/a&gt; &lt;strong&gt;testing&lt;/strong&gt; is focused on “learning sufficiently everything that matters about how the program works and about how it &lt;em&gt;might not&lt;/em&gt; work.”&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-4202585840352888726?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/4202585840352888726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=4202585840352888726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4202585840352888726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4202585840352888726'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/12/are-you-testing-or-checking.html' title='Are you testing or checking?'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-2773114678464120192</id><published>2010-12-14T06:04:00.000-08:00</published><updated>2010-12-14T06:59:57.315-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Application Server'/><title type='text'>WSO2 Application Server - Run web applications and web services on the same server</title><content type='html'>Today WSO2 released its newest product (rather a renamed version of WSO2 web services application server - WSAS, with a lot of improvements), &lt;b&gt;&lt;a href="http://wso2.com/products/application-server/"&gt;WSO2 Application Server - 4.0.0&lt;/a&gt;&lt;/b&gt;&lt;div&gt;WSO2 Application server is an unified platform to host web services and web applications together. This completely open-source product is based on world's most popular web application server, Apache Tomcat and No:1 web service engine, Apache Axis2. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.com/products/application-server/"&gt;WSO2 Application Server&lt;/a&gt; is part of WSO2 Carbon platform hence it brings the power of highly flexible component model hence your web applications can utilize the features provided by carbon platform. For example, web applications can be authorized using WSO2 identity and user management components. As the other WSO2 products, WSO2 application server comes with a rich graphical management console which allows you to manage your web applications very easy and effective manner. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lets have a glance at WSO2 Application Server......&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 1&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Download WSO2 Application Server-4.0.0 binary distribution from &lt;a href="http://wso2.org/downloads/appserver"&gt;wso2 oxygen tank&lt;/a&gt;&lt;/div&gt;&lt;div&gt;Extract the downloaded binary. We will refer to the downloaded directory as CARBON_HOME&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 2&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Go to CARBON_HOME/bin directory and run wso2server.sh {bat}&lt;/div&gt;&lt;div&gt;Once the server is started, access management console using https://localhost:9443/carbon&lt;/div&gt;&lt;div&gt;Log in to management console using the admin credentials (username= admin, password=admin)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_S93Ac0EllBE/TQd_JNnQVxI/AAAAAAAAAes/9vTsXK-8er8/s1600/Screenshot-WSO2%2BManagement%2BConsole%2B-%2BMozilla%2BFirefox.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 182px;" src="http://2.bp.blogspot.com/_S93Ac0EllBE/TQd_JNnQVxI/AAAAAAAAAes/9vTsXK-8er8/s320/Screenshot-WSO2%2BManagement%2BConsole%2B-%2BMozilla%2BFirefox.png" alt="" id="BLOGGER_PHOTO_ID_5550544862007285522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/b&gt;At the main menu, you will find, Manage --&gt; Web Application option. You can upload new web apps or view the existing web applications in there.&lt;br /&gt;Click on Manage --&gt; Web Applications --&gt; Add&lt;br /&gt;You will be directed to web app uploading screen where you can upload any war file.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_S93Ac0EllBE/TQeAsy16yrI/AAAAAAAAAe0/zIhGYJ6C2CQ/s1600/Screenshot-WSO2%2BManagement%2BConsole%2B-%2BMozilla%2BFirefox-1.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 182px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/TQeAsy16yrI/AAAAAAAAAe0/zIhGYJ6C2CQ/s320/Screenshot-WSO2%2BManagement%2BConsole%2B-%2BMozilla%2BFirefox-1.png" alt="" id="BLOGGER_PHOTO_ID_5550546572807948978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Browse for a web application archive (war) in your file system and click on upload. You will be prompted with the confirmation message if the deployment is successful.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once the web app deployment is done, it will be listed in &lt;span style="font-weight: bold;"&gt;Running Web Applications&lt;/span&gt; page as shown below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/TQeCYLZLFJI/AAAAAAAAAe8/d34EE1r3_Tw/s1600/Screenshot-WSO2%2BManagement%2BConsole%2B-%2BMozilla%2BFirefox-2.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 182px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/TQeCYLZLFJI/AAAAAAAAAe8/d34EE1r3_Tw/s320/Screenshot-WSO2%2BManagement%2BConsole%2B-%2BMozilla%2BFirefox-2.png" alt="" id="BLOGGER_PHOTO_ID_5550548417644270738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you click on web application context in the web app list, you will be directed to web app dashboard as follows. You can carry out multiple operations on the deployed web app within this dashboard. For example, you can reload web app, expire all sessions etc..&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_S93Ac0EllBE/TQeDVQ93c1I/AAAAAAAAAfE/SamkOzms9YU/s1600/Screenshot-WSO2%2BManagement%2BConsole%2B-%2BMozilla%2BFirefox-3.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 182px;" src="http://2.bp.blogspot.com/_S93Ac0EllBE/TQeDVQ93c1I/AAAAAAAAAfE/SamkOzms9YU/s320/Screenshot-WSO2%2BManagement%2BConsole%2B-%2BMozilla%2BFirefox-3.png" alt="" id="BLOGGER_PHOTO_ID_5550549467112371026" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As I described at the beginning, you can deploy various kind of web services together with web applications using WSO2 Application Server. You will find &lt;span style="font-weight: bold;"&gt;Manage --&gt; Services &lt;/span&gt;menu option at the left navigation pane in management console, there you will see Axis2 Servces, Jar Services, Spring Services and JAX-WS service deployment options as shown below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_S93Ac0EllBE/TQeGUOyMWFI/AAAAAAAAAfM/4V4B2-AYBqc/s1600/Screenshot-WSO2%2BManagement%2BConsole%2B-%2BMozilla%2BFirefox-4.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 182px;" src="http://2.bp.blogspot.com/_S93Ac0EllBE/TQeGUOyMWFI/AAAAAAAAAfM/4V4B2-AYBqc/s320/Screenshot-WSO2%2BManagement%2BConsole%2B-%2BMozilla%2BFirefox-4.png" alt="" id="BLOGGER_PHOTO_ID_5550552747881551954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Download WSO2 Application Server-4.0.0 today and try this out your self.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-2773114678464120192?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/2773114678464120192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=2773114678464120192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2773114678464120192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2773114678464120192'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/12/wso2-application-server-run-web.html' title='WSO2 Application Server - Run web applications and web services on the same server'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_S93Ac0EllBE/TQd_JNnQVxI/AAAAAAAAAes/9vTsXK-8er8/s72-c/Screenshot-WSO2%2BManagement%2BConsole%2B-%2BMozilla%2BFirefox.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-5706535341891673656</id><published>2010-11-28T08:52:00.000-08:00</published><updated>2010-11-28T09:05:54.452-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='General Quality Assurance'/><title type='text'>QA testing in agile world - Attitude matters most!</title><content type='html'>Few short tips about a viable approach for testing in agile world. May be valid for most organizations.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Understand your development team first. Study each engineer and adjust your way of acting (communication, management etc..) according to the team you are working on &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Do not act as a quality police. Everyone is responsible for quality. It is your task to guide the others NOT finding faults and complain&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Be as flexible as you can in all situations &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Be quick on everything - learn, design, implement, configure, deploy quickly and test fast&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Be innovative&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Identify highly risked features first and start hunting bugs&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Finally;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;CREATE A VALUE as a tester for your organization and BUILD the CONFIDENCE among the team!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-5706535341891673656?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/5706535341891673656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=5706535341891673656' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5706535341891673656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5706535341891673656'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/11/qa-testing-in-agile-world-attitude.html' title='QA testing in agile world - Attitude matters most!'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-6896730870072965120</id><published>2010-11-25T10:23:00.000-08:00</published><updated>2010-11-25T11:44:01.349-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SOAPUI'/><category scheme='http://www.blogger.com/atom/ns#' term='WS-Security'/><category scheme='http://www.blogger.com/atom/ns#' term='WSAS'/><title type='text'>Invoking secure web services using SOAPUI - part1</title><content type='html'>&lt;a href="http://www.soapui.org/"&gt;SOAPUI&lt;/a&gt; is a very useful free tool which can be used in SOA testing. Service invocation using SOAPUI is straight forward and you can find a lot of references by surfing web. However, there are limited information about invoking services with various QOS (Quality of Service) features such as WS-Security, WS-Addressing etc.&lt;div&gt;This post takes you through the simplest QOS scenario, a web service is secured with UserName token policy and how SOAPUI is used to invoke such a service. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I will use the default HelloService hosted in WSO2 WSAS in this demonstration but the service invocation approach is similar with any service provider.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Pre-requisites:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;1. Download and install &lt;a href="http://www.soapui.org/"&gt;SOAPUI-3.6.1&lt;/a&gt; or later (free version)&lt;/div&gt;&lt;div&gt;2. Download and install &lt;a href="http://wso2.com/products/web-services-application-server/"&gt;WSO2 WSAS-3.*&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 1&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First, we need to secure a web service hosted in WSAS. We will configure HelloService so that only the users in admin group will be allowed to invoke the service. In order to do that, start WSO2 WSAS and log in to management console. Then, select HelloService from &lt;b&gt;Deployed Services&lt;/b&gt; page.&lt;/div&gt;&lt;div&gt;You will be directed to the service dashboard of HelloService as follows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/TO6vIEh4e6I/AAAAAAAAAeM/6g17NQ5DcOU/s1600/blog1.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/TO6vIEh4e6I/AAAAAAAAAeM/6g17NQ5DcOU/s320/blog1.png" alt="" id="BLOGGER_PHOTO_ID_5543560744529329058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click on &lt;span style="font-weight: bold;"&gt;Security&lt;/span&gt; link and Select "Enable Security" option. Then select, UserNameToken security scenario.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_S93Ac0EllBE/TO6wPyUEe0I/AAAAAAAAAeU/pnr3AepR3X4/s1600/blog2.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 182px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/TO6wPyUEe0I/AAAAAAAAAeU/pnr3AepR3X4/s320/blog2.png" alt="" id="BLOGGER_PHOTO_ID_5543561976590138178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the next screen, select admin user group and click on finish to apply the security policy for HelloService.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;We have configured server side security policy. If you look at the WSDL of HelloService (http://localhost:9763/services/HelloService?wsdl), you will notice that UserNameToken security policy is added to the service.&lt;br /&gt;Now, we need to configure SOAPUI project to talk to HelloService with the required user credentials.&lt;br /&gt;&lt;br /&gt;First, start SOAPUI and create a new project. Specify https://localhost:9443/services/HelloService?wsdl as the initial WSDL. Keep the other default settings.&lt;br /&gt;You will see the following project structure.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_S93Ac0EllBE/TO61ZpbQbgI/AAAAAAAAAec/miaSts6tDnE/s1600/blog3.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/TO61ZpbQbgI/AAAAAAAAAec/miaSts6tDnE/s320/blog3.png" alt="" id="BLOGGER_PHOTO_ID_5543567643561192962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Replace ? with an input value in the request editor and run the test. You will encounter a SOAPFault, Missing wsse:Security header in request, since we did not send security headers with the request.&lt;br /&gt;Lets configure client side security now. In the &lt;span style="font-weight: bold;"&gt;Request Properties &lt;/span&gt;pane of SOAPUI project, you will find the following properties.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Username&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Password&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WSS-Password Type&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WSS TimeToLive&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Specify the following values for the above properties.&lt;br /&gt;&lt;br /&gt;Username = admin&lt;br /&gt;Password = admin&lt;br /&gt;WSS-Password Type = PasswordText&lt;br /&gt;WSS TimeToLive = 2000&lt;br /&gt;&lt;br /&gt;Run the test. Have a look at the raw request view. You will see security header is added to the request.&lt;br /&gt;Thats all! We will look at more advanced scenarios such as signing and encrypting messages with SOAPUI in future posts.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_S93Ac0EllBE/TO67Dwe8ipI/AAAAAAAAAek/fVy0zRwzVBY/s1600/blog4.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 182px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/TO67Dwe8ipI/AAAAAAAAAek/fVy0zRwzVBY/s320/blog4.png" alt="" id="BLOGGER_PHOTO_ID_5543573864568359570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-6896730870072965120?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/6896730870072965120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=6896730870072965120' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6896730870072965120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6896730870072965120'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/11/invoking-secure-web-services-using.html' title='Invoking secure web services using SOAPUI - part1'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_S93Ac0EllBE/TO6vIEh4e6I/AAAAAAAAAeM/6g17NQ5DcOU/s72-c/blog1.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-5215784019004308622</id><published>2010-11-13T20:28:00.000-08:00</published><updated>2010-11-14T06:39:13.632-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>Java bench - Simple and lightweight service load testing tool</title><content type='html'>At WSO2, we use various types of tools and programmatic approaches to load, stress and performance test SOA middleware products. Out of them, one particular tool is part of almost all engineers workspaces. It is &lt;b&gt;Java bench&lt;/b&gt; (or java-ab). &lt;div&gt;Java bench is the java clone of the popular &lt;a href="http://httpd.apache.org/docs/2.0/programs/ab.html"&gt;ApacheBench&lt;/a&gt; load generator customized for better HTTP1.1 support. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Java bench is a very simple and easy to use utility. One of the greatest advantages of using it for performance testing is, its lesser overhead on load generation machines. Most of the load generators consist of rich UIs and reporting utilities hence the load generator it self consumes considerable amount of CPU and memory when you run performance testing in single server. It is always not practical to run load generators in separate machines. Sometimes we need to run load/performance tests against a server running on a local machine in order to provide quick feedback about the product under test or reproduce perf/memory issues. In these situations, Java-bench is the ideal solution.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lets see how we can run a basic performance test using java bench.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Pre-requisites:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Linux or windows OS&lt;/div&gt;&lt;div&gt;jdk1.5 or higher &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 1&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Download Java bench from &lt;a href="http://ww2.wso2.org/~charitha/java-bench/java-ab.tar.gz"&gt;here&lt;/a&gt; and extract the downloaded zip file.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 2&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Go to the root of the extracted directory and run 'java -jar benchmark.jar' to see the available options. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="border: 1px solid rgb(192, 192, 192); padding: 5px; display: block;font-size:100%;"&gt;&lt;div&gt;usage: HttpBenchmark [options] [http://]hostname[:port]/path&lt;/div&gt;&lt;div&gt; -v &lt;verbosity&gt;       Set verbosity level - 4 and above prints response&lt;/verbosity&gt;&lt;/div&gt;&lt;div&gt;                      content, 3 and above prints information on headers, 2 and above prints&lt;/div&gt;&lt;div&gt;                      response codes (404, 200, etc.), 1 and above prints warnings and info.&lt;/div&gt;&lt;div&gt; -H &lt;header&gt;          Add arbitrary header line, eg. 'Accept-Encoding:&lt;/header&gt;&lt;/div&gt;&lt;div&gt;                      gzip' inserted after all normal header lines. (repeatable)&lt;/div&gt;&lt;div&gt; -n &lt;requests&gt;        Number of requests to perform for the benchmarking&lt;/requests&gt;&lt;/div&gt;&lt;div&gt;                      session. The default is to just perform a single request which usually&lt;/div&gt;&lt;div&gt;                      leads to non-representative benchmarking results.&lt;/div&gt;&lt;div&gt; -T &lt;content-type&gt;    Content-type header to use for POST data.&lt;/content-type&gt;&lt;/div&gt;&lt;div&gt; -c &lt;concurrency&gt;     Concurrency while performing the benchmarking&lt;/concurrency&gt;&lt;/div&gt;&lt;div&gt;                      session. The default is to just use a single thread/client.&lt;/div&gt;&lt;div&gt; -h                   Display usage information.&lt;/div&gt;&lt;div&gt; -i                   Do HEAD requests instead of GET.&lt;/div&gt;&lt;div&gt; -k                   Enable the HTTP KeepAlive feature, i.e., perform&lt;/div&gt;&lt;div&gt;                      multiple requests within one HTTP session. Default is no KeepAlive&lt;/div&gt;&lt;div&gt; -p &lt;post-postfile&gt;   File containing data to POST.&lt;/post-postfile&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 3&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We will run a load test against one of the publicly available web services. I use a &lt;a href="http://www50.brinkster.com/vbfacileinpt/np.asmx?wsdl"&gt;simple web service&lt;/a&gt; hosted in &lt;a href="http://www.xmethods.com/"&gt;xmethods&lt;/a&gt; which generates a list of prime numbers that are less than a specified max value. &lt;/div&gt;&lt;div&gt;First you need to invoke this service using SOAPUI or some other client and capture the SOAP request message. Then save it as a xml in your file system. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sample request:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&amp;lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://microsoft.com/webservices/"&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;   &amp;lt;soapenv:Header/&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;   &amp;lt;soapenv:Body&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;      &amp;lt;web:GetPrimeNumbers&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;         &amp;lt;web:max&amp;gt;56 &amp;lt;/web:max&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;      &amp;lt;/web:GetPrimeNumbers&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;   &amp;lt;/soapenv:Body&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 4&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Now, we can use java bench to send series of requests to the above web service as follows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;java -jar benchmark.jar -p SoapRequest.xml -n 100 -c 10 -k -H "SOAPAction: http://microsoft.com/webservices/GetPrimeNumbers" -T "text/xml; charset=UTF-8" http://www50.brinkster.com/vbfacileinpt/np.asmx&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As you can see, we specify the soap request xml with -p parameter. -c specifies the no.of concurrent threads/clients used in the test. -n is used to specify the no.of requests transmitted per a keep-alive connection. In our example, each client carries 100 requests therefore 1000 total requests will be sent to the service. -k enables HTTP keep-alive so that multiple requests share the same HTTP session. -H is used to specify the HTTP headers. In our example, SOAPAction HTTP header is appended to the message. You can find the relevant SOAPAction from the WSDL of the service. -T is used to specify the Content-Type header of the request. The last parameter is the endpoint of target service. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After the test is completed, you will see the result as shown below.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="border: 1px solid rgb(192, 192, 192); padding: 5px; display: block;font-size:100%;"&gt;&lt;div&gt;Server Software:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;Microsoft-IIS/6.0&lt;/div&gt;&lt;div&gt;Server Hostname:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;www50.brinkster.com&lt;/div&gt;&lt;div&gt;Server Port:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;80&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Document Path:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;http://www50.brinkster.com/vbfacileinpt/np.asmx&lt;/div&gt;&lt;div&gt;Document Length:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;429 bytes&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Concurrency Level:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;10&lt;/div&gt;&lt;div&gt;Time taken for tests:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;59.378401 seconds&lt;/div&gt;&lt;div&gt;Complete requests:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;1000&lt;/div&gt;&lt;div&gt;Failed requests:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;0&lt;/div&gt;&lt;div&gt;Write errors:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;0&lt;/div&gt;&lt;div&gt;Total transferred:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;756000 bytes&lt;/div&gt;&lt;div&gt;Requests per second:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;16.84 [#/sec] (mean)&lt;/div&gt;&lt;div&gt;Time per request:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;593.784 [ms] (mean)&lt;/div&gt;&lt;div&gt;Time per request:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;59.378 [ms] (mean, across all concurrent requests)&lt;/div&gt;&lt;div&gt;Transfer rate:&lt;span class="Apple-tab-span" style="white-space:pre"&gt;   &lt;/span&gt;7.22 [Kbytes/sec] received&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;5.51 kb/s sent&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;    &lt;/span&gt;12.73 kb/s total&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Simple. Isn't it? We will look in to more interesting tests with java-bench in future posts. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-5215784019004308622?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/5215784019004308622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=5215784019004308622' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5215784019004308622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5215784019004308622'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/11/java-bench-simple-and-lightweight.html' title='Java bench - Simple and lightweight service load testing tool'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-3133696168120478068</id><published>2010-09-24T03:59:00.000-07:00</published><updated>2010-09-24T05:20:06.042-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data services'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>How to call Oracle Stored Procedures from data services</title><content type='html'>An Oracle stored procedure is a program stored in an Oracle database which allows business logic to be embedded inside database as an API. You can expose the stored procedures as web services using &lt;a href="http://wso2.com/products/data-services-server/"&gt;wso2 data services server&lt;/a&gt;. This example takes you through creating a simple stored procedure in an Oracle DB and expose it as a data service using &lt;b&gt;WSO2 Data Services Server&lt;/b&gt;. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Pre-requisites:&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Download wso2 data services server from &lt;a href="http://wso2.com/products/data-services-server/"&gt;here&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-weight: bold;"&gt;Oracle 10g&lt;/span&gt; or later &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;Step 1:  Create and Populate sample database&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;First, open sqlplus shell and log in to DB as follows.&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;div style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;sqlplus /nolog&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;SQL*Plus: Release 10.2.0.1.0 - Production on Wed Sep 23 22:52:01 2009&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Copyright (c) 1982, 2005, Oracle.  All rights reserved.&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;SQL&gt; connect sys as sysdba;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Enter password:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Connected.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;We should create a user and grant him the necessary privileges as follows.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;SQL&gt; create user sample identified by sample account unlock;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;User created.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;SQL&gt; grant connect to sample;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Grant succeeded.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;SQL&gt; grant create session, dba to sample;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Grant succeeded.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;SQL&gt; exit;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Now logged in as the new schema user as follows.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;sqlplus sample/sample@orcl&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;SQL*Plus: Release 10.2.0.1.0 - Production on Wed Sep 23 22:52:01 2009&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;Copyright (c) 1982, 2005, Oracle.  All rights reserved.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;SQL&gt; connect sys as sysdba;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;Enter password:&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;Connected.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;SQL&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Create a table and insert data as follows.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;SQL&gt; create table employee (id number primary key, name varchar(100), address varchar(100));&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;SQL&gt; insert into employee(id, name, address) values (1, 'charitha', 'colombo');&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;SQL&gt; insert into employee(id, name, address) values (2, 'john', 'galle');&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;SQL&gt; insert into employee(id, name, address) values (3, 'michel', 'otawa');&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;SQL&gt; insert into employee(id, name, address) values (4, 'carl', 'dallas');&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;SQL&gt; insert into employee(id, name, address) values (5, 'chanmira', 'colombo');&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;SQL&gt; commit;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Now we are ready with oracle database and schema. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;b&gt;&lt;div style="display: inline ! important;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;div style="display: inline ! important;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;&lt;div style="display: inline ! important;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;Lets write a simple stored procedure to insert more data to employee table.&lt;/span&gt;&lt;/div&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;b&gt;&lt;div style="display: inline ! important;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;div style="display: inline ! important;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;&lt;div style="display: inline ! important;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;b&gt;Step 2:  Writing a simple stored procedure&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;div style="display: inline ! important;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;&lt;div style="display: inline ! important;"&gt;SQL&gt; create or replace procedure addEmployeeSP(id number, name varchar, address varchar) is&lt;/div&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;     2 begin&lt;/div&gt;&lt;div&gt;     3 insert into employee (id, name, address) values (id, name, address);&lt;/div&gt;&lt;div&gt;     4 end;&lt;/div&gt;&lt;div&gt;     5 /&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;b&gt;Step 3: Copy oracle jdbc driver&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;In order for wso2 data services server to communicate to oracle DB, we should download oracle jdbc driver (ojdbc14.jar) and copy in to DS_HOME/repository/components/lib directory.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;div&gt;&lt;b&gt;Step 4: Create the data service through UI wizard&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First, start wso2 data services server by running wso2server.sh {bat} which can be found at DS_HOME/bin&lt;/div&gt;&lt;div&gt;Then access management console through https://localhost:9443/carbon and log in using default admin credentials (admin/admin)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Click on &lt;b&gt;Data Service --&gt; Create&lt;/b&gt; in the left menu which will bring up data service creation wizard. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Enter a name for the data service and click on next. (For this example, I have specified "BlogExampleDataService" as the service name)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_S93Ac0EllBE/TJyNJOSgOPI/AAAAAAAAAc4/RV7mcn9dT5I/s1600/blog1.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/TJyNJOSgOPI/AAAAAAAAAc4/RV7mcn9dT5I/s320/blog1.png" alt="" id="BLOGGER_PHOTO_ID_5520442432843430130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;In Data Sources screen, click on Add new data source link and specify a data source ID and select RDBMS as the data source type. Then select Oracle as the Database engine and enter the db info as follows.&lt;br /&gt;&lt;br /&gt;Driver Class = oracle.jdbc.driver.OracleDriver&lt;br /&gt;JDBC URL = jdbc:oracle:thin:sample/sample@10.100.1.10:1521/orcl&lt;br /&gt;User Name = sample&lt;br /&gt;Password = sample&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/TJyPoMTiwvI/AAAAAAAAAdA/l9lFNBU5So0/s1600/blog2.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/TJyPoMTiwvI/AAAAAAAAAdA/l9lFNBU5So0/s320/blog2.png" alt="" id="BLOGGER_PHOTO_ID_5520445163910120178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click on "Test Connection" to see whether you can connect to oracle server correctly. Then click on save. Now we have created a data source hence we can proceed through the wizard.&lt;br /&gt;&lt;br /&gt;Click on Next to move to query definition page. Select &lt;span style="font-weight: bold;"&gt;Add New Query&lt;/span&gt; to create a new query for our data service.&lt;br /&gt;&lt;br /&gt;Enter a query ID (ex:- employees) and select the data source we just created from the Data Source drop down.&lt;br /&gt;&lt;br /&gt;We can specify our SQL statement in the SQL text area. We need to call the oracle stored procedure which has been created earlier. You can enter "call addEmployeeSP(?,?,?)" as the query to call oracle stored procedure. ? denotes the input parameters which should be passed to the stored procedure.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/TJyQkdux4fI/AAAAAAAAAdQ/mKW6xoTBKH8/s1600/blog3.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/TJyQkdux4fI/AAAAAAAAAdQ/mKW6xoTBKH8/s320/blog3.png" alt="" id="BLOGGER_PHOTO_ID_5520446199379911154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Next, click on &lt;span style="font-weight: bold;"&gt;Add new input mapping&lt;/span&gt; and add three new input parameters since our query accepts 3 different parameters.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_S93Ac0EllBE/TJyQWgXxzmI/AAAAAAAAAdI/tc0WLS3wY_0/s1600/blog4.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_S93Ac0EllBE/TJyQWgXxzmI/AAAAAAAAAdI/tc0WLS3wY_0/s320/blog4.png" alt="" id="BLOGGER_PHOTO_ID_5520445959570574946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After adding all 3 input parameters, the query will be looked as follows.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/TJyREdpVhqI/AAAAAAAAAdY/kCkimCmwe6U/s1600/blog5.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/TJyREdpVhqI/AAAAAAAAAdY/kCkimCmwe6U/s320/blog5.png" alt="" id="BLOGGER_PHOTO_ID_5520446749112895138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We can save the query now. Our stored procedure inserts employee records in to the table therefore it does not return anything.&lt;br /&gt;Because of that, the output mappings are not required for the query.&lt;br /&gt;&lt;br /&gt;In order to check whether the records are correctly added to the database, lets create another query, selectEmployees as shown in the following screen.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_S93Ac0EllBE/TJyRq7TizVI/AAAAAAAAAdg/H1tYVqnM2qw/s1600/blog6.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/TJyRq7TizVI/AAAAAAAAAdg/H1tYVqnM2qw/s320/blog6.png" alt="" id="BLOGGER_PHOTO_ID_5520447409909583186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, we have created both queries. Lets add operations which are necessary to run these queries.&lt;br /&gt;&lt;br /&gt;Click Next in the Queries screen to proceed through the wizard which will bring up Operations page. Click on &lt;span style="font-weight: bold;"&gt;Add New Operation&lt;/span&gt; link. Specify operation name, &lt;span style="font-weight: bold;"&gt;addEmployee&lt;/span&gt; and select Query ID, &lt;span style="font-weight: bold;"&gt;employees&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_S93Ac0EllBE/TJySDtpbO1I/AAAAAAAAAdo/6sUpNncTRf8/s1600/blog7.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/TJySDtpbO1I/AAAAAAAAAdo/6sUpNncTRf8/s320/blog7.png" alt="" id="BLOGGER_PHOTO_ID_5520447835739994962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Similarly, add an operation for &lt;span style="font-weight: bold;"&gt;selectEmployee&lt;/span&gt; query and name it as &lt;span style="font-weight: bold;"&gt;selectAllEmployees&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Click on Finish to deploy the data service. Once it is deployed, the service will be shown in the service list. Click on Try this service link to test the service.&lt;br /&gt;In there, you will find two operations, &lt;span style="font-weight: bold;"&gt;addEmployee&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;selectAllEmployees&lt;/span&gt;. First invoke addEmployee operation by specifying id, name and address.&lt;br /&gt;id=6&lt;br /&gt;name=bloguser&lt;br /&gt;address=notown&lt;br /&gt;&lt;br /&gt;Now, if you invoke selectAllEmployees operation, you will see that the employee table has been updated with a new record.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/TJySmOJ6zPI/AAAAAAAAAdw/Qo7_jmil3DU/s1600/blog8.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/TJySmOJ6zPI/AAAAAAAAAdw/Qo7_jmil3DU/s320/blog8.png" alt="" id="BLOGGER_PHOTO_ID_5520448428581768434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thats all! Drop me a mail or post your question at wso2.org &lt;a href="http://wso2.org/forum/404"&gt;forum&lt;/a&gt; if you have any questions about WSO2 Data Services Server.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-3133696168120478068?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/3133696168120478068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=3133696168120478068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/3133696168120478068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/3133696168120478068'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/09/how-to-call-oracle-stored-procedures.html' title='How to call Oracle Stored Procedures from data services'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_S93Ac0EllBE/TJyNJOSgOPI/AAAAAAAAAc4/RV7mcn9dT5I/s72-c/blog1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-4034632851162502749</id><published>2010-09-22T00:25:00.000-07:00</published><updated>2010-09-22T00:33:57.523-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='Data services'/><title type='text'>Input validation of data services</title><content type='html'>&lt;div&gt;Input validation is a new feature included in the &lt;a href="http://wso2.org/downloads/data-services-server"&gt;latest&lt;/a&gt; version of &lt;a href="http://wso2.com/products/data-services-server/"&gt;WSO2 Data Services Server&lt;/a&gt; (WSO2 DSS). With this, the further processing of a data service request message can be stopped at the service layer without reaching the backend data source based on a pre-defined input validation logic. &lt;/div&gt;&lt;div&gt;This is achieved either using a set of built in validators or custom validator implemented by the service author.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are four different built-in validators.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1. Long range validator&lt;/b&gt;&lt;/div&gt;&lt;div&gt;This can be used to validate an integer input parameter value as follows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;param name="id" paramType="SCALAR" sqlType="INTEGER" type="IN" ordinal="1"&amp;gt;&lt;/div&gt;&lt;div&gt;         &amp;lt;validateLongRange minimum="1" maximum="40" /&amp;gt;&lt;/div&gt;&lt;div&gt;      &amp;lt;/param&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;2. Double range validator&lt;/b&gt;&lt;/div&gt;&lt;div&gt;This is useful when a validity of a float value has to be checked.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;param name="distance" paramType="SCALAR" sqlType="DOUBLE" type="IN" ordinal="2"&amp;gt;&lt;/div&gt;&lt;div&gt;         &amp;lt;validateDoubleRange minimum="1.5" maximum="850.45" /&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/param&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;3. Length validator&lt;/b&gt;&lt;/div&gt;&lt;div&gt;This can be used to check whether the input parameter value conform to the speficied string length.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &amp;lt;param name="name" paramType="SCALAR" sqlType="STRING" type="IN" ordinal="3"&amp;gt;&lt;/div&gt;&lt;div&gt;          &amp;lt;validateLength minimum="2" maximum="20" /&amp;gt;&lt;/div&gt;&lt;div&gt;  &amp;lt;/param&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;4. Pattern validator&lt;/b&gt;&lt;/div&gt;&lt;div&gt;This validates the string value of the input parameter against a given regular expression.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &amp;lt;param name="indexno" paramType="SCALAR" sqlType="STRING" type="IN" ordinal="4"&amp;gt;                           &lt;/div&gt;&lt;div&gt;         &amp;lt;validatePattern pattern="(?:[a-z0-9]" /&amp;gt;                  &lt;/div&gt;&lt;div&gt;      &amp;lt;/param&amp;gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally, you can write your own validator based on your requirements and use it in the data service query definition. In order to do that, you must implement &lt;b&gt;org.wso2.carbon.dataservices.core.validation.Validator&lt;/b&gt; interface in your custom validator class as follows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="border: 1px solid rgb(192, 192, 192); padding: 5px; display: block;font-size:100%;"&gt;&lt;div&gt;&lt;br /&gt;import org.wso2.carbon.dataservices.core.validation.Validator;&lt;/div&gt;&lt;div&gt;import org.wso2.carbon.dataservices.core.validation.ValidationContext;&lt;/div&gt;&lt;div&gt;import org.wso2.carbon.dataservices.core.validation.ValidationException;&lt;/div&gt;&lt;div&gt;import org.wso2.carbon.dataservices.core.engine.ParamValue;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;public class MyCustomValidator implements Validator {&lt;/div&gt;&lt;div&gt;    public void validate(ValidationContext validationContext, String s, ParamValue paramValue)&lt;/div&gt;&lt;div&gt;            throws ValidationException {&lt;/div&gt;&lt;div&gt;        &lt;/div&gt;&lt;div&gt;        if (!paramValue.getScalarValue().startsWith("2")) {&lt;/div&gt;&lt;div&gt;         throw new ValidationException("Not starting with 2!!",s,paramValue);    &lt;/div&gt;&lt;div&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;    }&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;Then, you can build a jar with the custom validator class and place it in CARBON_HOME/repository/components/lib directory. After restarting the server, you can use it inside query definition as follows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;param name="id" paramType="SCALAR" sqlType="STRING" type="IN" ordinal="1"&amp;gt;&lt;/div&gt;&lt;div&gt;         &amp;lt;validateCustom class="org.test.MyCustomValidator" /&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/param&amp;gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-4034632851162502749?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/4034632851162502749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=4034632851162502749' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4034632851162502749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4034632851162502749'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/09/input-validation-of-data-services.html' title='Input validation of data services'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-45172854696229315</id><published>2010-09-13T05:47:00.000-07:00</published><updated>2010-09-13T05:59:16.780-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General Quality Assurance'/><title type='text'>Creating value with testing</title><content type='html'>&lt;a href="http://www.kohl.ca"&gt;Jonathan Kohl&lt;/a&gt; discusses about creating value with software testing. You will find very important set of points which we must follow in daily QA/testing activities.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Helvetica, sans-serif; font-size: 12px; color: rgb(85, 85, 85); line-height: 18px; "&gt;&lt;i&gt;Is my testing work defensible? (Cem Kaner talks a lot about this.) Think of a court case. What would a jury think if you testified and described what you did as a tester and why. How did you determine priority? Why did you test some things and not test others? (100% complete testing is impossible, so you have to make decisions to optimize your work. Are those decisions well thought out, or more subconscious? What sorts of things might you be missing that you haven't thought of?)&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Helvetica, sans-serif; font-size: 12px; color: rgb(85, 85, 85); line-height: 18px; "&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Helvetica, sans-serif; font-size: 12px; color: rgb(85, 85, 85); line-height: 18px; "&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Georgia, serif; font-style: normal; line-height: normal; font-size: 16px; "&gt;Read the full article from &lt;a href="http://www.kohl.ca/blog/"&gt;here&lt;/a&gt; &lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(85, 85, 85); font-family: Verdana, Helvetica, sans-serif; font-size: 12px; line-height: 18px; "&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"    style="font-family:Verdana, Helvetica, sans-serif;font-size:100%;color:#555555;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px; line-height: 18px;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-45172854696229315?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/45172854696229315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=45172854696229315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/45172854696229315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/45172854696229315'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/09/creating-value-with-testing.html' title='Creating value with testing'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-7394504527688507693</id><published>2010-09-12T19:19:00.000-07:00</published><updated>2010-09-12T19:31:58.531-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><title type='text'>How to start multiple WSO2 Carbon server instances as windows services</title><content type='html'>We can start more than one WSO2 Carbon (WSO2 ESB, WSAS, G-reg, GS, Mashup, IS, BPS, BRS, BAM, DS) instance by updating the transport configuration given in mgt-transport.xml (or transports.xml in 2.X series) as explained in &lt;a href="http://wso2.org/library/knowledge-base/run-multiple-wso2-wsas-instances-single-jvm"&gt;here&lt;/a&gt;.&lt;div&gt;Suppose, you need to start multiple carbon server instances as windows services instead of regular wso2server.sh executable. &lt;/div&gt;&lt;div&gt;Then, there is an additional setting which has to be configured. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Find &lt;b&gt;wrapper.conf&lt;/b&gt; file inside CARBON_HOME/repository/conf&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Locate "Wrapper Windows NT/2000/XP Service Properties" section&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Update the &lt;b&gt;Name of the service&lt;/b&gt; and &lt;b&gt;Display name of the service&lt;/b&gt; in each instance as follows&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;# Name of the service&lt;/div&gt;&lt;div&gt;wrapper.ntservice.name=WSO2Carbon&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# Display name of the service&lt;/div&gt;&lt;div&gt;wrapper.ntservice.displayname=WSO2 Carbon&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-7394504527688507693?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/7394504527688507693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=7394504527688507693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7394504527688507693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7394504527688507693'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/09/how-to-start-multiple-wso2-carbon.html' title='How to start multiple WSO2 Carbon server instances as windows services'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-4477793734905669905</id><published>2010-08-18T17:46:00.000-07:00</published><updated>2010-08-18T19:17:34.151-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General Quality Assurance'/><title type='text'>Process vs Tools and Technologies - What should Sri lankan QA community be concerned with?</title><content type='html'>I have been thinking about discussing the matters related to local QA community in Sri lanka but never got a chance. Recently I was able to meet a lot of folks who are engaged in software quality assurance in various sri lankan organizations in one place at a quality summit. By listening to the presentations and talking with people, I came out with a few basic questions.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Some of them were; &lt;/div&gt;&lt;div&gt;what the biggest concern of software quality assurance in our country? are those processes or tools/technologies? Do we have the necessary trainings or knowledge sharing mechanism to overcome the issues which we face during daily QA tasks? &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my view, the biggest concern of QA in our country is, &lt;b&gt;not having people with enough technical skills&lt;/b&gt;. By interviewing a lot of QA folks for the past few years, I personally have a good experience about the way people are approaching QA. Most fresh graduates believe that QA as a first step towards entering in to software industry! Some people joins QA merely to get some understanding about the product/project then move in to business analysis or sales. &lt;/div&gt;&lt;div&gt;Why is this? IMO, it is totally due to the perception of software QA in sri lanka. We, sri lankan QA community, must be responsible for drawing that image on people's minds about QA.&lt;/div&gt;&lt;div&gt;For the past few years, I never noticed any training (were there any?) for educating QA community about the usage of tools in daily QA tasks to be more productive or technical aspects such as performance/automation testing tools. Instead, whenever there is something about QA, it is about CMMI or process frameworks. &lt;/div&gt;&lt;div&gt;I'm not going to say that those are not important. BUT those are not what our teams need at the moment. &lt;/div&gt;&lt;div&gt;People struggle with configuring application server X on operating system Z. QA folks face in to difficulties when automating AJAX based UIs. How QA should be dealt with the frequent UI changes during UI based test automation? How can we be more productive using linux? Do we use any scripting language for automate repetitive configuration tasks? Are we doing continuous integration? Are QA people familiar with build tools such as Maven or Ant? Do we know about exploratory testing? Do we know how to use test coverage tools? Do we report bugs with the adequate logs and find the root cause of them?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I think these are the questions that most of the QA teams have. We should try to be more productive and be experts as a community. We should try to change the perceptive about QA by empowering everyone with the right set of skills. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If people are comfortable with the tools and technology they are handling in daily work life, educating them about processes and process improvements is not a big thing!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-4477793734905669905?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/4477793734905669905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=4477793734905669905' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4477793734905669905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4477793734905669905'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/08/process-vs-tools-and-technologies-what.html' title='Process vs Tools and Technologies - What should Sri lankan QA community be concerned with?'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-5543941634880163720</id><published>2010-08-14T09:19:00.000-07:00</published><updated>2010-08-14T18:47:30.874-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 ESB'/><title type='text'>How to deploy WSO2 ESB-3.X on Apache Tomcat</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span"   style="  color: rgb(51, 51, 51); line-height: 19px; font-family:Verdana, sans-serif;font-size:13px;"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;div&gt;I have noticed a lot of different articles, blog posts with instructions on deploying &lt;a href="http://wso2.org/projects/esb"&gt;WSO2 ESB&lt;/a&gt; on Apache tomcat. But I observed that most of them are obsolete and the guidelines are not applicable for the latest ESB versions. Therefore, I thought to put together the steps of setting up &lt;b&gt;WSO2 ESB-3.X&lt;/b&gt; versions on &lt;b&gt;Apache Tomcat-6.X&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 1:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Download &lt;a href="http://wso2.org/downloads/esb"&gt;WSO2 ESB-3.X&lt;/a&gt;. Extract the downloaded zip and copy repository and resources directories in to a new folder. Say it is esb-repo (i.e:- /home/user/esb-repo)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 2:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Lets refer to your tomcat installation directory, CATALINA_HOME. Go to CATALINA_HOME\webapps directory and create a new directory, esb.&lt;/div&gt;&lt;div&gt;Now, copy wso2esb-3.0.0\webapps\ROOT\WEB-INF to CATALINA_HOME\webapps\esb&lt;/div&gt;&lt;div&gt;Also, copy wso2esb-3.0.0\lib\log4.properties file to CATALINA_HOME\webapps\esb\WEB-INF\classes&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 3&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;Next, we need to enable https in tomcat. Therefore, edit CATALINA_HOME\conf\server.xml by adding the following entry.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="border: 1px solid rgb(192, 192, 192); padding: 5px; display: block;font-size:100%;"&gt;&lt;div&gt;&lt;b&gt;&amp;lt;Connector port="8443" maxHttpHeaderSize="8192"&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;maxThreads="150" minSpareThreads="25" maxSpareThreads="75"&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;enableLookups="false" disableUploadTimeout="true"&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;acceptCount="100" scheme="https" secure="true" SSLEnabled="true"&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;clientAuth="false" sslProtocol="TLS"&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;keystoreFile = "/home/user/esb-repo/resources/security/wso2carbon.jks"&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;keystorePass="wso2carbon"/&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Make sure to give the exact location of wso2carbon.jks as highlighted above.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 4&lt;/b&gt;&lt;/div&gt;&lt;div&gt;We have done the configurations required in tomcat. Now, we must do the necessary configurations in a set of config files shipped with WSO2 ESB. We will update &lt;b&gt;carbon.xml, axis2.xml, registry.xml&lt;/b&gt; and &lt;b&gt;user-mgt.xml&lt;/b&gt; which can be found at &lt;b&gt;esb-repo/repository/conf&lt;/b&gt; directory.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First, open &lt;b&gt;carbon.xml&lt;/b&gt; and update the ServerURL element as follows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="border: 1px solid rgb(192, 192, 192); padding: 5px; display: block;font-size:100%;"&gt;&lt;div&gt;&lt;b&gt;&amp;lt;ServerURL&amp;gt;https://localhost:8443/esb/services/&amp;lt;/ServerURL&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Note that we have configured tomcat to run on 8443 port.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When we deploy ESB on an application server, it uses the http/https transport provided by the servlet container when communicating with registry. Therefore, we must update the registry HTTP port in carbon.xml. In order to do that, uncomment and update the following element in carbon.xml.&lt;/div&gt;&lt;span style="border: 1px solid rgb(192, 192, 192); padding: 5px; display: block;font-size:100%;"&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;lt;RegistryHttpPort&amp;gt;8080&amp;lt;/RegistryHttpPort&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thats all we need to update in carbon.xml, save and close the file.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next, open &lt;b&gt;registry.xml&lt;/b&gt; and update DB URL as follows.&lt;/div&gt;&lt;span style="border: 1px solid rgb(192, 192, 192); padding: 5px; display: block;font-size:100%;"&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;lt;url&amp;gt;jdbc:h2:/home/user/esb-repo/repository/database/WSO2CARBON_DB&amp;lt;/url&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, open &lt;b&gt;user-mgt.xml&lt;/b&gt; and update user management database URL as follows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="border: 1px solid rgb(192, 192, 192); padding: 5px; display: block;font-size:100%;"&gt;&lt;div&gt;&lt;b&gt;&amp;lt;Property name='url'&amp;gt;jdbc:h2:/home/user/esb-repo/repository/database/WSO2CARBON_DB&amp;lt;/Property&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Make sure to specify the absolute path of the WSO2CARBON_DB in both of the above elements.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next, we need to configure a few elements in &lt;b&gt;esb-repo/repository/conf/axis2.xml&lt;/b&gt; file.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Locate NIO HTTPS transport listener (HttpCoreNIOSSLListener) element and specify the absolute path of keystore and truststore locations as follows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="border: 1px solid rgb(192, 192, 192); padding: 5px; display: block;font-size:100%;"&gt;&lt;div&gt;&lt;b&gt;&amp;lt;KeyStore&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;lt;Location&amp;gt;/home/user/esb-repo/resources/security/wso2carbon.jks&amp;lt;/Location&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;span style="border: 1px solid rgb(192, 192, 192); padding: 5px; display: block;font-size:100%;"&gt;&lt;div&gt;&lt;b&gt;&amp;lt;TrustStore&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&amp;lt;Location&amp;gt;/home/user/esb-repo/resources/security/client-truststore.jks&amp;lt;/Location&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Similarly update the keystore and trustore paths of NIO HTTPS transport sender (HttpCoreNIOSSLSender)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We should also specify the absolute path of synapse-config directory as follows.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="border: 1px solid rgb(192, 192, 192); padding: 5px; display: block;font-size:100%;"&gt;&lt;div&gt;&lt;b&gt;&amp;lt;parameter name='SynapseConfig.ConfigurationFile' locked='false'&amp;gt;/home/charitha/products/esb/esb-repo/repository/conf/synapse-config&amp;lt;/parameter&amp;gt;&lt;/b&gt;&lt;/div&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 5&lt;/b&gt;&lt;/div&gt;&lt;div&gt;We have almost completed the required configurations. Now, open a new shell and change the directory to CATALINA_HOME/bin.&lt;/div&gt;&lt;div&gt;Define an environment variable called CARBON_HOME and set the path to your esb-repo directory.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In windows; set CARBON_HOME=C:\esbs\esb-repo&lt;/div&gt;&lt;div&gt;In linux; export CARBON_HOME=\home\user\esb-repo&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Start tomcat from the same command window/shell.&lt;/div&gt;&lt;div&gt;catalina.sh run&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;WSO2 ESB will be started successfully. You can access the management console using https:\\localhost:8443\esb\carbon &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thats all! You could follow the above steps and deploy WSO2 ESB-3.X on Tomcat successfully. If you do not like to follow each of the above steps manually, I have written a ruby script to automate the above procedure and install ESB on tomcat. You can download it from &lt;a href="https://wso2.org/repos/wso2/trunk/commons/qa/esb/scripts/esb3.X_tomcat_install_linux.rb"&gt;here&lt;/a&gt; &lt;/div&gt;&lt;div&gt;You just need to specify three directory paths there in esb3.X_tomcat_install_linux.rb and rest of the installation steps will be done automatically by the script.&lt;/div&gt;&lt;div&gt;esb_repo = Any directory in the local file system&lt;/div&gt;&lt;div&gt;CARBON_BIN_HOME= Home directory of ESB binary distribution&lt;/div&gt;&lt;div&gt;CATALINA_HOME= Home directory of the tomcat binary&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-5543941634880163720?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/5543941634880163720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=5543941634880163720' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5543941634880163720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5543941634880163720'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/08/how-to-deploy-wso2-esb-3x-on-apache.html' title='How to deploy WSO2 ESB-3.X on Apache Tomcat'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-3521880523019074580</id><published>2010-07-28T06:01:00.000-07:00</published><updated>2010-07-28T09:55:46.706-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 ESB'/><title type='text'>Message format transformations with WSO2 ESB</title><content type='html'>With &lt;b&gt;&lt;a href="http://wso2.com/products/enterprise-service-bus/"&gt;WSO2 ESB&lt;/a&gt;&lt;/b&gt;, you can easily convert the format of the messages which passes through. There are situations in which you get SOAP requests but the back end server accepts XML. In these situations, you should convert the SOAP request to XML (POX) before forwarding to the endpoint. This post explains how you can change the format of a SOAP request goes through WSO2 ESB.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Pre-requisites:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://wso2.org/downloads/esb"&gt;Download&lt;/a&gt; and install WSO2 ESB-3.X &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 1&lt;/b&gt;&lt;/div&gt;&lt;div&gt;I use WSO2 WSAS as the backend, but you could use any server as you preferred. Start WSO2 WSAS and deploy &lt;a href="https://wso2.org/repos/wso2/trunk/commons/qa/web-test-framework/wsas/lib/Axis2Service.aar"&gt;Axis2Service&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 2&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Start WSO2 ESB and add the following configuration. Here, we specify the message format as POX in the endpoint configuration since we need to convert SOAP message to XML when forwarding it to the endpoint.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;lt;sequence xmlns="http://ws.apache.org/ns/synapse" name="main"&amp;gt;&lt;/div&gt;&lt;div&gt;  &amp;lt;in&amp;gt;&lt;/div&gt;&lt;div&gt;      &amp;lt;send&amp;gt;&lt;/div&gt;&lt;div&gt;         &amp;lt;endpoint name="axis2service-epr"&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;            &amp;lt;address uri="http://localhost:9763/services/Axis2Service" format="pox" /&amp;gt;&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;         &amp;lt;/endpoint&amp;gt;&lt;/div&gt;&lt;div&gt;      &amp;lt;/send&amp;gt;&lt;/div&gt;&lt;div&gt;   &lt;&amp;lt;/in&amp;gt;&lt;/div&gt;&lt;div&gt;   &amp;lt;out&amp;gt;&lt;/div&gt;&lt;div&gt;       &amp;lt;send /&amp;gt;&lt;/div&gt;&lt;div&gt;    &amp;lt;/out&amp;gt;&lt;/div&gt;&lt;div&gt; &amp;lt;/sequence&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 3&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Send a SOAP1.1 message using a tool (SOAPUI, Jmeter, AB etc). If you look at the message transmission between ESB and the endpoint, you will notice the following messages&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Request SOAP message:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;POST / HTTP/1.1&lt;/div&gt;&lt;div&gt;SOAPAction:  urn:echoString&lt;/div&gt;&lt;div&gt;Content-Length: 307&lt;/div&gt;&lt;div&gt;Content-Type: text/xml; charset=UTF-8&lt;/div&gt;&lt;div&gt;Host: 127.0.0.1:8281&lt;/div&gt;&lt;div&gt;Connection: Keep-Alive&lt;/div&gt;&lt;div&gt;User-Agent: Jakarta-HttpComponents-Bench/1.1&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &amp;lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.carbon.wso2.org"&amp;gt;          &lt;/div&gt;&lt;div&gt;   &amp;lt;soapenv:Body&amp;gt;                &lt;/div&gt;&lt;div&gt;      &amp;lt;ser:echoString&amp;gt;                    &lt;/div&gt;&lt;div&gt;         &amp;lt;ser:s&gt;test&amp;lt;/ser:s&amp;gt;                   &lt;/div&gt;&lt;div&gt;      &amp;lt;/ser:echoString&amp;gt;             &lt;/div&gt;&lt;div&gt;   &amp;lt;/soapenv:Body&amp;gt;     &amp;lt;/soapenv:Envelope&amp;gt;   &lt;/div&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;&lt;b&gt;Message delivered to the endpoint:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;POST /services/Axis2Service HTTP/1.1&lt;/div&gt;&lt;div&gt;Content-Type: application/xml; charset=UTF-8&lt;/div&gt;&lt;div&gt;SOAPAction: urn:echoString&lt;/div&gt;&lt;div&gt;Transfer-Encoding: chunked&lt;/div&gt;&lt;div&gt;Host: 127.0.0.1:9765&lt;/div&gt;&lt;div&gt;Connection: Keep-Alive&lt;/div&gt;&lt;div&gt;User-Agent: Synapse-HttpComponents-NIO&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;86&lt;/div&gt;&lt;div&gt;&amp;lt;ser:echoString xmlns:ser="http://service.carbon.wso2.org"&amp;gt;                   &lt;/div&gt;&lt;div&gt;   &amp;lt;ser:s&gt;test&amp;lt;/ser:s&amp;gt;                  &amp;lt;/ser:echoString&amp;gt;0&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Similarly, you can convert the message to SOAP1.2 or HTTP GET just by specifying the endpoint format. &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-3521880523019074580?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/3521880523019074580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=3521880523019074580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/3521880523019074580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/3521880523019074580'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/07/message-format-transformations-with.html' title='Message format transformations with WSO2 ESB'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-324760558118630075</id><published>2010-07-19T01:50:00.000-07:00</published><updated>2010-07-19T02:33:01.419-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 ESB'/><title type='text'>How to use POST_TO_URI property in WSO2 ESB</title><content type='html'>Until recently I had some doubts about using POST_TO_URI property within WSO2 ESB configuration. Finally, I think I understood the true purpose of it and used it correctly.&lt;br /&gt;&lt;br /&gt;According to &lt;a href="http://wso2.org/project/esb/java/3.0.0/docs/properties_guide.html"&gt;WSO2 ESB parameters catelog&lt;/a&gt;, POST_TO_URI property makes the outgoing URL of the ESB a complete URL and it is important when sending the messages through a proxy server.&lt;br /&gt;Lets see how this property can be used in message mediation when a HTTP proxy server is used.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As I explained in a &lt;a href="http://charithaka.blogspot.com/2010/07/how-to-configure-wso2-esb-to-route.html"&gt;previous post&lt;/a&gt;, you are supposed to configure WSO2 ESB to forward messages through a HTTP proxy server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, add the following sequence (or any message pass through sequence). (I used a service called "Axis2Sesrvice" which is deployed on WSO2 WSAS as the endpoint and I used Apache server as the proxy)&lt;br /&gt;&lt;br /&gt;&amp;lt;sequence xmlns="http://ws.apache.org/ns/synapse" name="main"&amp;gt;&lt;br /&gt;   &amp;lt;in&amp;gt;&lt;br /&gt;      &amp;lt;send&amp;gt;&lt;br /&gt;         &amp;lt;endpoint name="endpoint_urn_uuid_1286CEB97BC8A170468445150995919829308689"&amp;gt;&lt;br /&gt;            &amp;lt;address uri="http://localhost:9764/services/Axis2Service/" /&amp;gt;&lt;br /&gt;         &amp;lt;/endpoint&amp;gt;&lt;br /&gt;      &amp;lt;/send&amp;gt;&lt;br /&gt;   &amp;lt;/in&amp;gt;&lt;br /&gt;   &amp;lt;out&amp;gt;&lt;br /&gt;     &amp;lt;send /&amp;gt;&lt;br /&gt;   &amp;lt;/out&amp;gt;&lt;br /&gt;&amp;lt;/sequence&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Send a message to ESB using a client. You will notice that the message transmission is failed. If you look at the apache server log,  you will notice something similar to the below.&lt;br /&gt;&lt;br /&gt;127.0.0.1 - - [19/Jul/2010:14:19:30 +0530] "POST /services/Axis2Service/ HTTP/1.1" 404 220&lt;br /&gt;&lt;br /&gt;Here, you can see that, POST message does not contain the full service URL hence the proxy server is unable to forward the message to the endpoint.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now update the above sequence with including POST_TO_URI property as follows.&lt;br /&gt;&lt;br /&gt;&amp;lt;sequence xmlns="http://ws.apache.org/ns/synapse" name="main"&amp;gt;&lt;br /&gt;   &amp;lt;in&amp;gt;&lt;br /&gt;&amp;lt;property name="POST_TO_URI" value="true" scope="axis2" type="STRING" /&amp;gt;&lt;br /&gt;      &amp;lt;send&amp;gt;&lt;br /&gt;         &amp;lt;endpoint name="endpoint_urn_uuid_1286CEB97BC8A170468445150995919829308689"&amp;gt;&lt;br /&gt;            &amp;lt;address uri="http://localhost:9764/services/Axis2Service/" /&amp;gt;&lt;br /&gt;         &amp;lt;/endpoint&amp;gt;&lt;br /&gt;      &amp;lt;/send&amp;gt;&lt;br /&gt;   &amp;lt;/in&amp;gt;&lt;br /&gt;   &amp;lt;out&amp;gt;&lt;br /&gt;     &amp;lt;send /&amp;gt;&lt;br /&gt;   &amp;lt;/out&amp;gt;&lt;br /&gt;&amp;lt;/sequence&amp;gt;&lt;br /&gt;&lt;br /&gt;Send a message again. This time, the message transmission will be successful. You will find the following entry in apache log. This proves that the message is correctly forwarded to the endpoint through the proxy server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;127.0.0.1 - - [19/Jul/2010:14:57:25 +0530] "POST http://localhost:9764/services/Axis2Service/ HTTP/1.1" 200 278&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-324760558118630075?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/324760558118630075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=324760558118630075' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/324760558118630075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/324760558118630075'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/07/how-to-use-posttouri-property-in-wso2.html' title='How to use POST_TO_URI property in WSO2 ESB'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-6213812208231116119</id><published>2010-07-11T09:42:00.000-07:00</published><updated>2010-07-11T09:55:08.449-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 ESB'/><title type='text'>How to configure WSO2 ESB to route messages through a proxy server</title><content type='html'>When using &lt;a href="http://wso2.org/projects/esb"&gt;WSO2 ESB&lt;/a&gt;, there are situations in which you need to talk to an endpoint which sits behind a proxy. In such cases, you should configure the ESB transport sender to forward the messages to the proxy server.&lt;br /&gt;In order to do so, you just need to add the following two parameters as child elements of &amp;lt;transportSender name="http" class="org.apache.synapse.transport.nhttp.HttpCoreNIOSender"&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&amp;lt;parameter name="http.proxyHost" locked="false"&amp;gt;localhost&amp;lt;/parameter&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; &amp;lt;parameter name="http.proxyPort" locked="false"&amp;gt;8090&amp;lt;/parameter&amp;gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Note:- Change the proxy port and host according to your environment&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-6213812208231116119?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/6213812208231116119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=6213812208231116119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6213812208231116119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6213812208231116119'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/07/how-to-configure-wso2-esb-to-route.html' title='How to configure WSO2 ESB to route messages through a proxy server'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-7695315422886768281</id><published>2010-06-01T19:10:00.000-07:00</published><updated>2010-06-01T23:21:34.535-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Stratos'/><title type='text'>WSO2 Stratos - Introducing WSO2 middleware Platform as a Service (PaaS)</title><content type='html'>Yesterday we released our newest integrated cloud middleware platform, &lt;a href="http://wso2.com/cloud/stratos/"&gt;&lt;span style="font-weight: bold;"&gt;WSO2 Stratos&lt;/span&gt;&lt;/a&gt;. It is now online and ready for use!&lt;br /&gt;&lt;br /&gt;For the past few years, WSO2 has been doing many releases based on revolutionary &lt;a href="http://wso2.com/products/carbon/"&gt;&lt;span style="font-weight: bold;"&gt;Carbon platform&lt;/span&gt;&lt;/a&gt;, which helped to consistently improve the platform with introducing latest state-of-art technologies. The initial releases of Carbon product platform intended to improve the features of the individual products. For example, a lot of core features were introduced to WSO2 ESB, WSAS, Governance Registry etc.. Then we focused on ease of integration and more component based model. We introduced Equinox based provisioning model to build your SOA platform by picking and choosing the components as and when you need.&lt;br /&gt;Then, the core product platform has been enhanced to support multi-tenancy. With the multi-tenant supported architecture at hand, our brilliant development team was able to introduce the first ever comprehensive middleware PaaS. Why is this so important?&lt;br /&gt;Now, WSO2 Carbon middleware platform is available on Cloud. Anybody can try out it online by accessing http://cloud.wso2.com&lt;br /&gt;Not only that, the code is 100% opensource! As far as I know, this is the first ever opensource cloud PaaS offering.&lt;br /&gt;&lt;br /&gt;Without digging in to more details, lets try WSO2 Stratos out.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As most of you are familiar with Google Apps, without any guidance you will be able to start using WSO2 Stratos. However, I will start from the scratch. Access http://cloud.wso2.com. This will bring up&lt;span style="font-weight: bold;"&gt; WSO2 Stratos Manager&lt;/span&gt;, which is the is the point of entry for all WSO2 Cloud Services such as Application Server, Business Activity Monitor, Gadget Server, Governance, Identity and Mashup Server.  Click on "Register" in order to create an account for you (your organization).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/TAXDdfOkgqI/AAAAAAAAAbU/OqxdXbSDwPM/s1600/blog1.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/TAXDdfOkgqI/AAAAAAAAAbU/OqxdXbSDwPM/s320/blog1.png" alt="" id="BLOGGER_PHOTO_ID_5477999433132311202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This will direct you to "Select a domain for your organization" page. Specify the domain for your organization and check its availability by clicking on "Check Availability". Select "Next" to sign up your organization.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_S93Ac0EllBE/TAXEfqGyhjI/AAAAAAAAAbc/RaqbpV9LNNE/s1600/blog2.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/TAXEfqGyhjI/AAAAAAAAAbc/RaqbpV9LNNE/s320/blog2.png" alt="" id="BLOGGER_PHOTO_ID_5478000569923831346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enter the required information in "sign up your organization" page. If your registration is successful, you will see a confirmation message. With this, you just created the administration account for your organization. You will receive an email to validate Email instructions specified by you. Click on the link given in the email to access the Stratos Manager login page.&lt;br /&gt;Now, you can log in to the Stratos Manager, by giving the admin credentials you have just specified during the registration process.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After log in to Stratos Manager, you will see the cloud services list offered by WSO2 Cloud service platform.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_S93Ac0EllBE/TAXG5HTodfI/AAAAAAAAAbk/JBwJPsxQa8Q/s1600/blog3.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/TAXG5HTodfI/AAAAAAAAAbk/JBwJPsxQa8Q/s320/blog3.png" alt="" id="BLOGGER_PHOTO_ID_5478003206282311154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In addition to the cloud services, you can configure a new theme for your account or you can manage new user accounts (add new users, grant necessary permissions to them etc..) through the Stratos Manager.&lt;br /&gt;&lt;br /&gt;Suppose, you need to use cloud application server out of the seven cloud services enabled by default. Click on "Cloud Application Server" link. This will bring up "WSO2 Stratos Application Server" login page as follows.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/TAXIdOyhjRI/AAAAAAAAAbs/-jABjyNeMCk/s1600/blog4.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/TAXIdOyhjRI/AAAAAAAAAbs/-jABjyNeMCk/s320/blog4.png" alt="" id="BLOGGER_PHOTO_ID_5478004926277848338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Log in to app server by providing the same admin credentials given above. (You may question why a separate login is required. We have not provided Single Sign On support between Stratos Manager and Cloud services in the alpha1 version. This will be available soon)&lt;br /&gt;The Cloud application server Home page will be shown as follows after you log in to the application server.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_S93Ac0EllBE/TAXJ6-5v8JI/AAAAAAAAAb0/LZJNCg2Jse4/s1600/blog5.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_S93Ac0EllBE/TAXJ6-5v8JI/AAAAAAAAAb0/LZJNCg2Jse4/s320/blog5.png" alt="" id="BLOGGER_PHOTO_ID_5478006536920887442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you are already familiar with WSO2 WSAS, this will not make you feel strange. You could either deploy services, secure them, monitor and do a lot of tasks. In addition to that, WSO2 Cloud Application Server, is now provides with web application deployment support. You could use this as your servlet container!&lt;br /&gt;&lt;br /&gt;Similarly, you can try out the rest of the cloud services.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-7695315422886768281?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/7695315422886768281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=7695315422886768281' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7695315422886768281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7695315422886768281'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/06/wso2-stratos-introducing-wso2.html' title='WSO2 Stratos - Introducing WSO2 middleware Platform as a Service (PaaS)'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_S93Ac0EllBE/TAXDdfOkgqI/AAAAAAAAAbU/OqxdXbSDwPM/s72-c/blog1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-6217930979661725098</id><published>2010-05-08T08:40:00.000-07:00</published><updated>2010-05-08T09:02:38.746-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='WS-Discovery'/><category scheme='http://www.blogger.com/atom/ns#' term='WSAS'/><title type='text'>How to specify a custom scope for WS-Discovery target service</title><content type='html'>As I explained in a previous &lt;a href="http://charithaka.blogspot.com/2010/04/ws-discovery-with-wso2-carbon.html"&gt;blog post&lt;/a&gt;, WS-Discovery support is included in the latest &lt;a href="http://wso2.com/products/carbon/"&gt;WSO2 carbon&lt;/a&gt; release (3.0.0).&lt;br /&gt;WSO2 WSAS can be considered as a target service hosting provider.  A default &lt;span style="font-weight: bold;"&gt;scope&lt;/span&gt; is assigned to all the target services discovered by a Discovery Proxy.&lt;br /&gt;If a discovery client looks for a service based on the service type, or some scopes, the client sends probe message to the DiscoveryProxy. Then the proxy responds back to the client with the appropriate service metadata.&lt;br /&gt;Suppose we need to specify a scope for the services deployed on WSAS (target services). How can we do that?&lt;br /&gt;&lt;br /&gt;You can specify the service scope(s), by adding a parameter in the services.xml of the Axis2 Service archive (*.aar) as follows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&amp;lt;parameter name="wsDiscoveryParams"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;               &amp;lt;Scopes&amp;gt;http://wso2.org/engineering&amp;lt;/Scopes&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; &amp;lt;/parameter&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then, you can probe the services either through WS-Discovery Control Panel in WSO2 ESB management console as shown &lt;a href="http://3.bp.blogspot.com/_S93Ac0EllBE/S9hxgkqaHsI/AAAAAAAAAao/0vNWJyZBEcc/s1600/blog3.png"&gt;here&lt;/a&gt; or using WS-Discovery Client API as follows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;" class="il"&gt;DiscoveryClient&lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt; client = new &lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;" class="il"&gt;DiscoveryClient&lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;(cfgCtx, discoveryProxyURL);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt; TargetService[] services = client.probe(types, scopes, matchingCriteria);&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-6217930979661725098?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/6217930979661725098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=6217930979661725098' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6217930979661725098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6217930979661725098'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/05/how-to-specify-custom-scope-for-ws.html' title='How to specify a custom scope for WS-Discovery target service'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-1971959182584835680</id><published>2010-05-08T06:37:00.000-07:00</published><updated>2010-05-08T08:02:13.638-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSAS'/><title type='text'>Hierarchical service deployment support in WSO2 WSAS-3.2.0</title><content type='html'>&lt;a href="http://wso2.com/products/web-services-application-server/"&gt;WSO2 WSAS-3.2.0&lt;/a&gt; is the latest version of WSO2 Web Services Application Server which consists of some new features as well as a lot of bug fixes. &lt;span style="font-weight: bold;"&gt;Hierarchical service deployment&lt;/span&gt; is one of the new features included in the latest WSAS.&lt;br /&gt;Hierarchical service deployment model allows you to deploy two (or more) different versions of the same service in a very easy manner.&lt;br /&gt;Lets see how multiple versions of the same services can be deployed on WSAS-3.2.0&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pre-requisites:&lt;/span&gt;&lt;br /&gt;Download WSO2 WSAS-3.2.0 from &lt;a href="http://wso2.org/downloads/wsas"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Start WSO2 WSAS by running wso2server.sh{bat} from WSAS_HOME/bin&lt;br /&gt;Access management console using https://localhost:9443/carbon and log in with the default credentials(admin/admin)&lt;br /&gt;&lt;br /&gt;Select &lt;span style="font-weight: bold;"&gt;Axis2 Service&lt;/span&gt; from the left navigation menu.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_S93Ac0EllBE/S-VutQJGzBI/AAAAAAAAAa0/jZxbtf5SsTU/s1600/blog1.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/S-VutQJGzBI/AAAAAAAAAa0/jZxbtf5SsTU/s320/blog1.png" alt="" id="BLOGGER_PHOTO_ID_5468899046217665554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You will notice there is an input text box, &lt;span style="font-weight: bold;"&gt;Service Hierarchy&lt;/span&gt;. Here you can specify a service path. eg:- /marketing/test&lt;br /&gt;Browse a service archive (eg:- Axis2Service.aar) in your local file system and click on Upload.&lt;br /&gt;The service will be deployed successfully, go to the service list page and you will the service is listed there as follows. The service name is prefixed with the hierarchy path you have given when deploying the service (marketing/test/Axis2Service)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_S93Ac0EllBE/S-V14IpEXuI/AAAAAAAAAa8/ac7trd800Gk/s1600/blog2.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/S-V14IpEXuI/AAAAAAAAAa8/ac7trd800Gk/s320/blog2.png" alt="" id="BLOGGER_PHOTO_ID_5468906929764196066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Now&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;, &lt;/span&gt;&lt;span&gt;we are going to&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span&gt;deploy a different version of the same Axis2Service&lt;/span&gt;&lt;span&gt;. Access the &lt;/span&gt;&lt;span&gt;Manage --&gt; Services --&gt; Add --&gt; Axis2 Service page and specify a new service hierarchy (eg:- /sales/test)&lt;br /&gt;Browse the same service archive which have deployed in the previous step (Axis2Service.aar) and click on upload.&lt;br /&gt;&lt;br /&gt;Now, you will notice a different version of the same service, sales/test/Axis2Service listed in the service management page.&lt;br /&gt;&lt;br /&gt;Likewise, you can deploy many versions of the same service and make use them in your SOA infrastructure. Hierarchical service deployment facility can be used in Spring, Jax-WS and Jar services as well. &lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-1971959182584835680?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/1971959182584835680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=1971959182584835680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/1971959182584835680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/1971959182584835680'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/05/hierarchical-service-deployment-support.html' title='Hierarchical service deployment support in WSO2 WSAS-3.2.0'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_S93Ac0EllBE/S-VutQJGzBI/AAAAAAAAAa0/jZxbtf5SsTU/s72-c/blog1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-1074835084063312926</id><published>2010-04-28T09:01:00.000-07:00</published><updated>2010-04-28T10:41:21.644-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Governance Registry'/><category scheme='http://www.blogger.com/atom/ns#' term='WS-Discovery'/><category scheme='http://www.blogger.com/atom/ns#' term='WSAS'/><title type='text'>WS-Discovery with WSO2 Carbon</title><content type='html'>&lt;a href="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01"&gt;WS-Discovery&lt;/a&gt; defines a protocol to locate web services on a network, more specifically in a SOA.&lt;div&gt;The newest release of &lt;b&gt;WSO2 Carbon&lt;/b&gt; platform (version 3.0.0) provides a complete implementation of the WS-Discovery &lt;a href="http://docs.oasis-open.org/ws-dd/discovery/1.1/pr-01/wsdd-discovery-1.1-spec-pr-01.html#_Toc220989774"&gt;managed mode&lt;/a&gt;.  &lt;/div&gt;&lt;div&gt;This post demonstrates an end-to-end workflow of WS-Discovery support in WSO2 Carbon. With WS-Discovery             components for WSO2 Carbon, any Carbon server can act as a WS-Discovery client, a WS-Discovery proxy             or a WS-Discovery target service. We will use three products from WSO2 Carbon product suite, namely WSO2 Governance Registry (G-reg), WSO2 ESB and WSO2 WSAS. &lt;/div&gt;&lt;div&gt;WSO2 G-reg acts as the central repository in which the discovered services and the related meta data are stored. WSO2 WSAS is used to host the target services. WSO2 ESB participates in the scenario as a discovery client which looks for services and endpoints. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lets start with setting up the environment. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Pre-requistes:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Download &lt;b&gt;&lt;a href="http://wso2.org/downloads/governance-registry"&gt;WSO2 Governance Registry-3.5.0&lt;/a&gt;, &lt;a href="http://wso2.org/downloads/wsas"&gt;WSO2 WSAS-3.2.0&lt;/a&gt; and &lt;a href="http://wso2.org/downloads/esb"&gt;WSO2 ESB-3.0.0&lt;/a&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Install and run each product. In this demonstration, I will run G-reg in http port 9763 and https port 9443. WSAS on http port 9764 and https port 9444. ESB on http port 9765 and https port 9445. In this way, I can run all three products in single machine. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 1&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;As I explained initially, WSO2 Governance Registry acts as the discovery proxy. If you access the https://localhost:9443/services/DiscoveryProxy?wsdl, you will find out the wsdl of the discovery proxy service. Make a note of the DiscoveryProxy service endpoint (https://localhost:9443/services/DiscoveryProxy)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 2&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Now, we need to configure WSAS instance, so that it takes part in service discovery scenario. WSAS is used to host target services. Therefore, it sends a unicast Hello messages to a Discovery Proxy when the services join a network. So, we must configure the Discovey Proxy service endpoint in WSAS.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Open WSAS_HOME/repository/conf/axis2.xml and add the following parameter.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;parameter name="DiscoveryProxy"&amp;gt;https://localhost:9443/services/DiscoveryProxy&amp;lt;/parameter&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Save the file and restart WSAS. This will enable WSAS to send unicast hello messages when the services are deployed. &lt;/div&gt;&lt;div&gt;Now, access the management console of WSO2 Governance Registry instance and go to Metadata--&gt;List--&gt;Services page. You will see that 3 discovered services are listed there. &lt;/div&gt;&lt;div&gt;These are the three default services included in WSAS. When starting WSAS, those three services have sent the hello messages to the discovery proxy and register them in G-reg. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/S9hsAFpixOI/AAAAAAAAAaY/9EjovVqnID4/s1600/blog1.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/S9hsAFpixOI/AAAAAAAAAaY/9EjovVqnID4/s320/blog1.png" alt="" id="BLOGGER_PHOTO_ID_5465236896586319074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Image:- Discovered services in G-reg&lt;br /&gt;&lt;br /&gt;Now, log in to WSAS management console and deploy a new service. If you refresh the above service list page, you will see a new service is discovered by G-reg and it is assigned a unique service name.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The third member participates in our scenario is WSO2 ESB, which acts as a discovery client. WSO2 ESB provides you with a user interface to mange the client aspects of WS-Discovery. Using that, you can connect to remote WS-Discovery proxies and probe them for any             services and service endpoints which have been already discovered.&lt;br /&gt;&lt;br /&gt;Log in to ESB management console and select &lt;span style="font-weight: bold;"&gt;Configure &gt; WS-Discovery&lt;/span&gt; from the left navigation menu to access WS-Discovery Control panel.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_S93Ac0EllBE/S9hvexL4R2I/AAAAAAAAAag/UZDz3lPnRao/s1600/blog2.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://2.bp.blogspot.com/_S93Ac0EllBE/S9hvexL4R2I/AAAAAAAAAag/UZDz3lPnRao/s320/blog2.png" alt="" id="BLOGGER_PHOTO_ID_5465240722204018530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Image:- WS-Discovery Control Panel in ESB&lt;br /&gt;&lt;br /&gt;In order to connect to the remote DiscoveryProxy (in G-reg) and make use of the discovered services, we should configure a discovery proxy in ESB. Click on "Add Discovery Proxy" link to add a new proxy. You will be directed to discovery proxy settings screen in which you can give a name for the proxy and the remote DiscoveryProxy URL (In our case https://localhost:9443/services/DiscoveryProxy). You will be redirected to the home page of WS-Discovey Control Panel once the proxy is created. The created proxy will be listed in the control panel home page. Click on "View" to find the target services and endpoints discovered by the proxy. You will be directed to a page as shown below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_S93Ac0EllBE/S9hxgkqaHsI/AAAAAAAAAao/0vNWJyZBEcc/s1600/blog3.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/S9hxgkqaHsI/AAAAAAAAAao/0vNWJyZBEcc/s320/blog3.png" alt="" id="BLOGGER_PHOTO_ID_5465242952225398466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here, you will see that 4 service are discovered and shown with a UUID and associated endpoints of each discovered service.&lt;br /&gt;Click on a discovered service UUID. You will be directed to a new page with more information about the service. Using this page, either you can create an ESB endpoint or directly create an ESB proxy service referring to the discovered service.&lt;br /&gt;&lt;br /&gt;We have seen the basic workflow of WS-Discovey implementation of WSO2 Carbon platform. If you have any issues with the above steps, drop me a mail or contact WSO2 ESB forum at www.wso2.org&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-1074835084063312926?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/1074835084063312926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=1074835084063312926' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/1074835084063312926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/1074835084063312926'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/04/ws-discovery-with-wso2-carbon.html' title='WS-Discovery with WSO2 Carbon'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_S93Ac0EllBE/S9hsAFpixOI/AAAAAAAAAaY/9EjovVqnID4/s72-c/blog1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-8923072566895398340</id><published>2010-04-25T08:07:00.000-07:00</published><updated>2010-04-25T09:26:01.340-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 ESB'/><title type='text'>How to setup binary relay in WSO2 ESB-3.0.0</title><content type='html'>The latest version of &lt;b&gt;WSO2 ESB&lt;/b&gt; will be out by few days and the final set of release candidate builds are currently going through the test process. WSO2 ESB-3.0.0 consists of a set of new features as well as enhancements to the existing features. Binary relay feature has been included since the previous ESB release (WSO2 ESB-2.1.3) however many bug fixes and enhancements are included in the new release.&lt;br /&gt;Binary relay allow users to send messages to a different party efficiently at byte level while making decisions using transport headers. It enables ESB to pass through SOAP messages without performing heavy XML parsing. You can find more information about the architectural details of binary relay in &lt;a href="http://wso2.org/library/articles/binary-relay-efficient-way-pass-both-xml-non-xml-content-through-apache-synapse"&gt;this&lt;/a&gt; article written by Dr. Srinath Perera. &lt;div&gt;&lt;br /&gt;I'm going to demonstrate the steps to configure binary relay in WSO2 ESB-3.0 &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Pre-requisites:&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Download WSO2 ESB-3.0.0 from &lt;a href="http://wso2.com/products/enterprise-service-bus/"&gt;here&lt;/a&gt; (I'm using the latest release candidate which can be downloaded from &lt;a href="http://builder.wso2.org/~carbon/releases/carbon/3.0.0/4RC8/"&gt;here&lt;/a&gt;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 1&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;First we must enable the &lt;b&gt;relay &lt;/b&gt;module in the ESB management console so that it unwraps the messages received by the admin services. &lt;/div&gt;&lt;div&gt;Log in to management console and go to Manage --&gt; Modules --&gt; List and click on &lt;b&gt;engage&lt;/b&gt; icon associated with relay module to engage the module globally.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 2&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, we should configure the necessary message formatters and builders in axis2.xml configuration file. &lt;/div&gt;&lt;div&gt;Go to ESB_HOME/repository/conf/axis2.xml and locate the messageFormatters and messageBuilders section. &lt;/div&gt;&lt;div&gt;Uncomment the relay message formatters and builders as follows. Also, comment out the other (default) formatters and builders.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;i&gt; &lt;/i&gt;&lt;i&gt;&amp;lt;messageFormatters&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;i&gt;    &amp;lt;!--&lt;/i&gt;&lt;i&gt;&amp;lt;messageFormatter contentType="application/x-www-form-urlencoded"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                          class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt;&amp;lt;messageFormatter contentType="multipart/form-data"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                          class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt;&amp;lt;messageFormatter contentType="application/xml"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                          class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt;&amp;lt;messageFormatter contentType="text/xml"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt;&amp;lt;messageFormatter contentType="application/soap+xml"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                         class="org.apache.axis2.transport.http.SOAPMessageFormatter"/&lt;/i&gt;&lt;i&gt;&amp;gt;--&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt;&amp;lt;messageFormatter contentType="application/x-www-form-urlencoded"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                        class="org.wso2.carbon.relay.ExpandingMessageFormatter"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt;&amp;lt;messageFormatter contentType="multipart/form-data"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                        class="org.wso2.carbon.relay.ExpandingMessageFormatter"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt;&amp;lt;messageFormatter contentType="application/xml"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                        class="org.wso2.carbon.relay.ExpandingMessageFormatter"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt;&amp;lt;messageFormatter contentType="text/html"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                        class="org.wso2.carbon.relay.ExpandingMessageFormatter"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt;&amp;lt;messageFormatter contentType="application/soap+xml"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                        class="org.wso2.carbon.relay.ExpandingMessageFormatter"/&lt;/i&gt;&lt;i&gt;&amp;gt; &lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt;&amp;lt;messageFormatter contentType="text/xml"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                        class="org.wso2.carbon.relay.ExpandingMessageFormatter"/&lt;/i&gt;&lt;i&gt;&amp;gt;       &lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;i&gt;	&lt;/i&gt;&lt;/span&gt;&lt;i&gt;    &lt;/i&gt;&lt;i&gt;&amp;lt;!--messageFormatter contentType="x-application/hessian"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                         class="org.apache.synapse.format.hessian.HessianMessageFormatter"/--&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt;&amp;lt;!--messageFormatter contentType=""&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                         class="org.apache.synapse.format.hessian.HessianMessageFormatter"/--&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt;&amp;lt;!--&lt;messageformatter contenttype="text/plain"&gt;&lt;/messageformatter&gt;&lt;/i&gt;&lt;/div&gt;&lt;i&gt;&lt;div&gt;&lt;i&gt;                                 class="org.apache.axis2.format.PlainTextFormatter"/&gt;--&lt;/i&gt;&lt;i&gt;&amp;gt; &lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;    &lt;/i&gt;&lt;i&gt;&amp;lt;/messageFormatters&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt; &amp;lt;messageBuilders&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt; &amp;lt;!--&lt;/i&gt;&lt;i&gt; &amp;lt;messageBuilder contentType="application/xml"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                        class="org.apache.axis2.builder.ApplicationXMLBuilder"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt; &amp;lt;messageBuilder contentType="application/x-www-form-urlencoded"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                        class="org.apache.axis2.builder.XFormURLEncodedBuilder"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt; &amp;lt;messageBuilder contentType="multipart/form-data"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                        class="org.apache.axis2.builder.MultipartFormDataBuilder"/&lt;/i&gt;&lt;i&gt;&amp;gt;--&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt; &amp;lt;messageBuilder contentType="application/xml"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                        class="org.wso2.carbon.relay.BinaryRelayBuilder"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt; &amp;lt;messageBuilder contentType="application/x-www-form-urlencoded"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                        class="org.wso2.carbon.relay.BinaryRelayBuilder"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt; &amp;lt;messageBuilder contentType="multipart/form-data"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                        class="org.wso2.carbon.relay.BinaryRelayBuilder"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt; &amp;lt;messageBuilder contentType="application/soap+xml"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                       class="org.wso2.carbon.relay.BinaryRelayBuilder"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt; &amp;lt;messageBuilder contentType="text/plain"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                       class="org.wso2.carbon.relay.BinaryRelayBuilder"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt; &amp;lt;messageBuilder contentType="text/xml"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                       class="org.wso2.carbon.relay.BinaryRelayBuilder"/&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt; &amp;lt;!--messageBuilder contentType="x-application/hessian"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                        class="org.apache.synapse.format.hessian.HessianMessageBuilder"/--&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt; &amp;lt;!--messageBuilder contentType=""&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                         class="org.apache.synapse.format.hessian.HessianMessageBuilder"/--&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;        &lt;/i&gt;&lt;i&gt; &amp;lt;!--&lt;/i&gt;&lt;i&gt; &amp;lt;messageBuilder contentType="text/plain"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;                                 class="org.apache.axis2.format.PlainTextBuilder"/&lt;/i&gt;&lt;i&gt;&amp;gt;--&lt;/i&gt;&lt;i&gt;&amp;gt;        &lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;    &lt;/i&gt;&lt;i&gt; &amp;lt;/messageBuilders&amp;gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt; &lt;/i&gt;&lt;/div&gt;&lt;div&gt;Save axis2.xml file and restart the server. Now, the server will be running with binary relay enabled. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 3&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In order to verify how message mediation happens with binary relay, create a simple pass through sequence and send few SOAP requests. If you enable DEBUG level logging for org.apache.synapse, you will notice the message with binary content as follows.&lt;/div&gt;&lt;div&gt;&amp;lt;ns:binary xmlns:ns="http://ws.apache.org/commons/ns/payload"&amp;gt;PD94bWwgdmVyc2lvbj0nMS4wJyB&lt;/div&gt;&lt;div&gt;lbmNvZGluZz0nVVRGLTgnPz48c29hc&amp;lt;/ns:binary&amp;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;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-8923072566895398340?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/8923072566895398340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=8923072566895398340' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8923072566895398340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8923072566895398340'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/04/how-to-setup-binary-relay-in-wso2-esb.html' title='How to setup binary relay in WSO2 ESB-3.0.0'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-2917936807305977265</id><published>2010-02-14T04:32:00.000-08:00</published><updated>2010-02-14T05:17:09.229-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><category scheme='http://www.blogger.com/atom/ns#' term='WSAS'/><title type='text'>How to invoke a secured web service without maintaining a policy at the client side</title><content type='html'>When we call a secure web service, the most common way of invocation is to use a policy which is compliant with the service policy at the client side. Usually, the client side policy is placed at the client file system. We have observed how this is done in &lt;a href="http://charithaka.blogspot.com/2008/03/secure-web-services-signing-soap.html"&gt;few&lt;/a&gt; posts which published earlier.&lt;br /&gt;However, there is a major drawback in this method, user has to change the client policy whenever the service policy is changed.&lt;br /&gt;In order to overcome this limitation, we can use Axis2 &lt;span style="font-weight: bold;"&gt;DynamicClient&lt;/span&gt; to derive client policy by referring to the service WSDL which essentially keeps the service policy.&lt;br /&gt;&lt;br /&gt;Lets see how this can be done using WSO2 WSAS-3.1.*&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pre-requisite:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Download and install &lt;a href="http://wso2.org/downloads/wsas"&gt;&lt;span style="font-weight: bold;"&gt;WSO2 WSAS-3.1.*&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We are going to secure the default HelloService shipped with WSAS. We configure HelloService with "Sign and Encrypt - X509 Authentication" policy. In order to do that, first start WSO2 WSAS server by running wso2server.sh which is located at WSO2WSAS_HOME/bin directory.&lt;br /&gt;Then, log in to the management console by accessing https://localhost:9443/carbon&lt;br /&gt;&lt;br /&gt;Select the default HelloService and navigate to the service dashboard. Click on Security and configure &lt;span style="font-weight: bold;"&gt;Sign and Encrypt - X509 Authentication&lt;/span&gt; security scenario as shown below. Make sure to use wso2carbon.jks as trusted key store and private key store.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_S93Ac0EllBE/S3fw9bCFg7I/AAAAAAAAAZ0/eUKRqQV0oAE/s1600-h/wsas1.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/S3fw9bCFg7I/AAAAAAAAAZ0/eUKRqQV0oAE/s320/wsas1.png" alt="" id="BLOGGER_PHOTO_ID_5438080013092357042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thats all we have to do at the server side. Lets write a client to invoke the service.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here we are going to use Axis2 Dynamic Client which is an extension of the ServiceClient class.&lt;br /&gt;First, instantiate a dynamicClient object using RPCServiceClient by passing ConfigurationContext, WSDL Url of the service, the QName of the service and the port name as parameters.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;RPCServiceClient dynamicClient = new RPCServiceClient(null, new URL("http://localhost:9763/services/HelloService?wsdl"),&lt;br /&gt;           new QName("http://www.wso2.org/types", "HelloService"), "HelloServiceHttpSoap12Endpoint"); &lt;/pre&gt;&lt;br /&gt;Then, we can engage rampart module as follows.&lt;br /&gt;&lt;pre&gt;dynamicClient.engageModule("rampart");&lt;br /&gt;&lt;/pre&gt;Now we should update the client side policy with the rampart-config programatically.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;      RampartConfig rc = new RampartConfig();&lt;br /&gt;&lt;br /&gt;      rc.setUserCertAlias("wso2carbon");&lt;br /&gt;      rc.setEncryptionUser("wso2carbon");&lt;br /&gt;      rc.setPwCbClass(SecureClient.class.getName());&lt;br /&gt;&lt;br /&gt;      CryptoConfig sigCryptoConfig = new CryptoConfig();&lt;br /&gt;&lt;br /&gt;      sigCryptoConfig.setProvider("org.apache.ws.security.components.crypto.Merlin");&lt;br /&gt;&lt;br /&gt;      Properties prop1 = new Properties();&lt;br /&gt;      prop1.put("org.apache.ws.security.crypto.merlin.keystore.type", "JKS");&lt;br /&gt;      prop1.put("org.apache.ws.security.crypto.merlin.file", "/home/charitha/products/wsas/wso2wsas-3.1.3/resources/security/wso2carbon.jks");&lt;br /&gt;      prop1.put("org.apache.ws.security.crypto.merlin.keystore.password", "wso2carbon");&lt;br /&gt;      sigCryptoConfig.setProp(prop1);&lt;br /&gt;&lt;br /&gt;      CryptoConfig encrCryptoConfig = new CryptoConfig();&lt;br /&gt;      encrCryptoConfig.setProvider("org.apache.ws.security.components.crypto.Merlin");&lt;br /&gt;&lt;br /&gt;      Properties prop2 = new Properties();&lt;br /&gt;&lt;br /&gt;      prop2.put("org.apache.ws.security.crypto.merlin.keystore.type", "JKS");&lt;br /&gt;      prop2.put("org.apache.ws.security.crypto.merlin.file", "/home/charitha/products/wsas/wso2wsas-3.1.3/resources/security/wso2carbon.jks");&lt;br /&gt;      prop2.put("org.apache.ws.security.crypto.merlin.keystore.password", "wso2carbon");&lt;br /&gt;      encrCryptoConfig.setProp(prop2);&lt;br /&gt;&lt;br /&gt;      rc.setSigCryptoConfig(sigCryptoConfig);&lt;br /&gt;      rc.setEncrCryptoConfig(encrCryptoConfig); &lt;/pre&gt;&lt;br /&gt;Next, we can add the above rampartConfig to the service policy derived from the wsdl as follows.&lt;br /&gt;&lt;br /&gt;       &lt;pre&gt;&lt;br /&gt;       Map endPoints = dynamicClient.getAxisService().getEndpoints();&lt;br /&gt;       AxisBinding axisBinding = ((AxisEndpoint) endPoints.values().iterator().next()).getBinding();&lt;br /&gt;       Policy policy = axisBinding.getEffectivePolicy();&lt;br /&gt;       policy.addAssertion(rc);&lt;br /&gt;       axisBinding.applyPolicy(policy); &lt;/pre&gt;Now, we can invoke the service using dynamicClient by passing the &lt;span&gt;&lt;span class="comment"&gt;parameters as an object array and return types as an class array&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Object[] returnArray = dynamicClient.invokeBlocking(new QName("http://www.wso2.org/types", "greet"),&lt;br /&gt;                new Object[]{"hello"}, new Class[]{String.class});&lt;br /&gt;&lt;br /&gt;        System.out.println(returnArray[0]); &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Thats all! To complete our scenario, make sure to have callback handler method similar to the one below.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {&lt;br /&gt;&lt;br /&gt;        WSPasswordCallback pwcb = (WSPasswordCallback) callbacks[0];&lt;br /&gt;        String id = pwcb.getIdentifer();&lt;br /&gt;        if ("wso2carbon".equals(id)) {&lt;br /&gt;            pwcb.setPassword("wso2carbon");&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-2917936807305977265?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/2917936807305977265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=2917936807305977265' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2917936807305977265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2917936807305977265'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/02/how-to-invoke-secured-web-service.html' title='How to invoke a secured web service without maintaining a policy at the client side'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_S93Ac0EllBE/S3fw9bCFg7I/AAAAAAAAAZ0/eUKRqQV0oAE/s72-c/wsas1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-2516211308066280865</id><published>2010-02-07T08:11:00.000-08:00</published><updated>2010-02-07T08:44:54.625-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Visits to this blog - 2009 (significant increase of visitors)</title><content type='html'>I published a &lt;a href="http://charithaka.blogspot.com/2009/02/visits-to-this-blog.html"&gt;stat report&lt;/a&gt; about this blog in February 2009, which showed 30037 unique visitors during 2008-2009. Here is the StatCounter report for 2009-2010.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/S27sKVwPMaI/AAAAAAAAAZs/Ct4AyMofkA8/s1600-h/blog.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/S27sKVwPMaI/AAAAAAAAAZs/Ct4AyMofkA8/s320/blog.png" alt="" id="BLOGGER_PHOTO_ID_5435541462665081250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There were &lt;b&gt;55,839&lt;/b&gt; &lt;span style="font-weight: bold;"&gt;unique visitors, 25000 increase &lt;/span&gt;&lt;span&gt;compared to last year&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;I could not write much blog posts during the last year due to frequent project releases. However which did not seem to affect my user community. &lt;span style="font-weight: bold;"&gt; &lt;/span&gt;This blog was started to help novice users in SOA/Web Service space and Software Quality Assurance community to share my ideas, tips and specially How-Tos. I always refrained from posting any non-technical subject matter in here. I was able to reply most of the questions raised in blog posts, however there were situations that I could not follow the comments and reply. I will try my best to continue writing much more useful blog posts and help users.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-2516211308066280865?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/2516211308066280865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=2516211308066280865' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2516211308066280865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2516211308066280865'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/02/visits-to-this-blog-2009-significant.html' title='Visits to this blog - 2009 (significant increase of visitors)'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_S93Ac0EllBE/S27sKVwPMaI/AAAAAAAAAZs/Ct4AyMofkA8/s72-c/blog.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-6674177075286648260</id><published>2010-02-06T21:12:00.000-08:00</published><updated>2010-02-07T00:55:29.951-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='Test Automation'/><title type='text'>WSO2 QA Test Framework - Fundamentals</title><content type='html'>&lt;span style="font-weight: bold;"&gt;WSO2 QA Test framework&lt;/span&gt; has been developed to replace repetitive manual test procedures followed during the release cycles. We identified the tests which provide much ROI with automation and used them for phase1 of the test framework development project.&lt;br /&gt;With the introduction of &lt;a href="http://wso2.org/projects/carbon"&gt;WSO2 Carbon&lt;/a&gt; product platform in late 2008, all java based products are implemented using the base carbon platform. All products (9 all together) are released at the same day which is a very different experience specially for a QA team. All products are supposed to go through a set of common tests and a set of product specific tests. All are supposed to work on multiple application servers, multiple JVMs, multiple browsers, multiple operating systems, multiple DBMSs etc.. hell a lot of test combinations! The product count exceeded the number of people in test team. More products are expected to be introduced in near future. Therefore, the only viable solution to manage the QA process is to automating as more tests as possible.&lt;br /&gt;So, we started implementing our automated test framework in 2009 March.&lt;br /&gt;As I discussed in some previous posts, we chose &lt;a href="http://seleniumhq.org/"&gt;selenium&lt;/a&gt; for automation. We used Selenium Remote Control Java client driver to drive selenium tests with Junit.  However our tests were not restricted to web based selenium scripts. We have written numerous tests which used Axis2 ServiceClient API and some other API methods to invoke web services, sending messages via secure channels, reliable messaging, message mediation etc.&lt;br /&gt;We derived our project structure which adheres to maven as given below. You can get a SVN checkout of 2.0.3 branch of the test framework (which is the most stable version at the moment) from &lt;span style="font-weight: bold;"&gt;https://wso2.org/repos/wso2/branches/commons/qa/web-test-framework/2.0.3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;common&lt;br /&gt;bps&lt;br /&gt;registry&lt;br /&gt;wsas&lt;br /&gt;esb&lt;br /&gt;gs&lt;br /&gt;mashup&lt;br /&gt;is&lt;br /&gt;ds&lt;br /&gt;&lt;br /&gt;Each project is built using its pom.xml at the root of the project directory. We used &lt;a href="http://mojo.codehaus.org/selenium-maven-plugin/"&gt;selenium maven plugin&lt;/a&gt; and &lt;a href="http://maven.apache.org/plugins/maven-surefire-plugin/"&gt;surefire plugin&lt;/a&gt; to start selenium RC server and launch Junit tests respectively.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;commons&lt;/span&gt; project is used to maintain tests which are used in all products. For example, org.wso2.carbon.web.test.common.RegistryBrowser is common for all products since all products have a common registry browser. We used &lt;span style="font-weight: bold;"&gt;svn:externals&lt;/span&gt; to link the common classes to relevant projects.&lt;br /&gt;You can find all common classes at &lt;a href="https://wso2.org/repos/wso2/branches/commons/qa/web-test-framework/2.0.3/commons/src/test/java/org/wso2/carbon/web/test/common/"&gt;https://wso2.org/repos/wso2/branches/commons/qa/web-test-framework/2.0.3/commons/src/test/java/org/wso2/carbon/web/test/common/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In addition to that, commons project is used to store the test artifacts which are shared among multiple products. For example JDBC connector jars and keystores are used in all products and those are stored in commons/lib directory.&lt;br /&gt;&lt;br /&gt;The other most important resource included in commons project is framework.properties configuration file. It is used to configure the test framework according to the test environment. Under the "global properties" section of the framework.properties file, you could find the following properties.&lt;br /&gt;&lt;br /&gt;host.name=172.16.37.1&lt;br /&gt;http.port=9763&lt;br /&gt;https.port=9443&lt;br /&gt;carbon.home=/home/charitha/products/wsas/wso2wsas-3.1.3&lt;br /&gt;context.root=/wsas&lt;br /&gt;browser.version=firefox&lt;br /&gt;admin.username=admin&lt;br /&gt;admin.password=admin&lt;br /&gt;module.version=2.03&lt;br /&gt;&lt;br /&gt;You must change these properties as per your test environment settings. http.port and https.port are the embedded tomcat servlet transport ports used in WSO2 Carbon products. (full explanation of these properties will be included in a future post)&lt;br /&gt;&lt;br /&gt;Lets look at a product specific test suite. Go to &lt;span style="font-weight: bold;"&gt;wsas &lt;/span&gt;directory in your test framework checkout. This is the project used to run WSO2 WSAS specific tests. You will find the following files and directories at the root of this project.&lt;br /&gt;&lt;br /&gt;lib&lt;br /&gt;src&lt;br /&gt;pom.xml&lt;br /&gt;runAll.sh&lt;br /&gt;runAll.rb&lt;br /&gt;wsas_test_suites.txt&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;lib&lt;/span&gt; directory is used to store the test artifacts specific to WSAS such as axis2 services, jaxws services etc.&lt;br /&gt;You can invoke tests using two different ways.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Direct maven invocation - you can run tests individually by passing a system property as follows&lt;/li&gt;&lt;/ul&gt;          mvn clean install -Dtest.suite=usermanagement&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Run tests through a shell script - You can run tests individually or as a whole suite or few tests at once using this way. Here, it is required to uncomment the selected tests in wsas_test_suites.txt. The runAll.sh shell script read the test names from wsas_test_suites.txt and invoke each test.&lt;/li&gt;&lt;/ul&gt;         sh runAll.sh&lt;br /&gt;&lt;br /&gt;In any of the above mechanisms, we call a central test suite class which takes care of calling the individual tests. For each project we have a separate AllTests.java class which extends junit.framework.TestSuite parent. In our example, org.wso2.carbon.web.test.wsas.AllTests.java is the TestSuite.&lt;br /&gt;&lt;br /&gt;See https://wso2.org/repos/wso2/branches/commons/qa/web-test-framework/2.0.3/wsas/src/test/java/org/wso2/carbon/web/test/wsas/AllTests.java for more details about this class.&lt;br /&gt;&lt;br /&gt;You will also notice in AllTests class that initBrowser() method of the &lt;span style="font-weight: bold;"&gt;BrowserInitializer&lt;/span&gt; class is called to launch the browser instance for a particular test as follows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;public synchronized static void initBrowser()throws Exception{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        if (browser == null) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            browser = new DefaultSelenium("localhost", 4444, "*"+property.getProperty("browser.version"), "https://" + property.getProperty("host.name") + ":" + property.getProperty("https.port"));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            browser.start();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;            browser.setSpeed("200");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can easily try out WSO2 QA test framework once you download and start using any of WSO2 Carbon based product. This is not a detailed explanation of the all features available in our test framework. I will guide you through more information in future posts. If you encounter any issues while using the test framework, please drop us a mail - architecture@wso2.org&lt;br /&gt;&lt;br /&gt;Stay tuned.. will post more on automation soon!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-6674177075286648260?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/6674177075286648260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=6674177075286648260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6674177075286648260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6674177075286648260'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/02/wso2-qa-test-framework-fundamentals.html' title='WSO2 QA Test Framework - Fundamentals'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-9031197379665912436</id><published>2010-02-04T07:25:00.000-08:00</published><updated>2010-02-04T07:30:22.389-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='Test Automation'/><title type='text'>Google Automation - Automated testing search engine</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_S93Ac0EllBE/S2rn7KaLTII/AAAAAAAAAZk/3c1nHgkzL0I/s1600-h/logo_small.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 74px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/S2rn7KaLTII/AAAAAAAAAZk/3c1nHgkzL0I/s320/logo_small.png" alt="" id="BLOGGER_PHOTO_ID_5434410903968369794" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you are looking for software test automation information, you will get the best results by using &lt;a href="http://www.googleautomation.com/"&gt;Google Automation&lt;/a&gt; search engine. It only searches the sites that matter most to automators.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-9031197379665912436?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/9031197379665912436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=9031197379665912436' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/9031197379665912436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/9031197379665912436'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/02/google-automation-automated-testing.html' title='Google Automation - Automated testing search engine'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_S93Ac0EllBE/S2rn7KaLTII/AAAAAAAAAZk/3c1nHgkzL0I/s72-c/logo_small.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-627002304984157672</id><published>2010-02-03T21:20:00.000-08:00</published><updated>2010-02-03T22:10:07.217-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><title type='text'>How to start WSO2 Carbon AMIs</title><content type='html'>The latest product versions of &lt;a href="http://wso2.org/"&gt;WSO2 SOA platform&lt;/a&gt; are available for download now. This release addresses various bug fixes and enhancements. In addition to the usual binary, source and document distributions, WSO2 products are now available as &lt;a href="http://http://wso2.com/cloud/virtual-machines/"&gt;cloud virtual machines&lt;/a&gt;.&lt;br /&gt;WSO2 cloud virtual machines provides you with the ability to implement your SOA infrastructure in private or public cloud. In this post, we will look at how AMIs of WSO2 Carbon family of products can be used.&lt;br /&gt;I will use WSO2 ESB AMI for the demonstration, however you can follow the same steps to start any of the WSO2 Carbon AMI.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pre-requisite:&lt;/span&gt;&lt;br /&gt;You should have the necessary &lt;a href="http://aws.amazon.com/ec2/"&gt;Amazon EC2&lt;/a&gt; account ready for AMI administration. AMI EC2 API tools should be installed in your computer. You may refer to &lt;a href="http://wso2.org/node/9089/print"&gt;this&lt;/a&gt; tutorial in order to set up the infrastructure.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;Go to &lt;a href="http://wso2.org/projects/esb/java"&gt;WSO2 ESB home page&lt;/a&gt; in Oxygen Tank. Click on &lt;span style="font-weight: bold;"&gt;WSO2 Cloud Service&lt;/span&gt; under the Download icon.&lt;br /&gt;You will find WSO2 ESB cloud virtual machines in that page. Take a note of AMI ID given there (&lt;span class="AMI"&gt;ami-878569ee)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step2&lt;br /&gt;&lt;/span&gt;Open a shell and issue the following command to start 64bit WSO2 ESB AMI instance.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ec2-run-instances &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;" class="AMI"&gt;ami-878569ee&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; -k &lt;keypair&gt; --instance-type m1.large&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Replace &lt;keypair&gt; with the name of your public/private keypair. Read &lt;a href="http://docs.amazonwebservices.com/AmazonEC2/gsg/2006-06-26/running-an-instance.html"&gt;http://docs.amazonwebservices.com/AmazonEC2/gsg/2006-06-26/running-an-instance.html&lt;/a&gt; if you do not know hot to generate a keypair.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The above command starts up an AMI instance with a pre-configured WSO2 ESB server. Also, the above will return the ID of the started instance (instance-id).&lt;br /&gt;&lt;br /&gt;e.g:-&lt;br /&gt;&lt;br /&gt;INSTANCE    i-c28093aa    ami-878569ee            pending    charithakankanamgewso2-keypair    0        m1.large    2010-02-04T06:03:25+0000    us-east-1c    aki-a3d737ca    ari-7cb95a&lt;br /&gt;&lt;br /&gt;After a few seconds, issue the following command to get the public DNS name of WSO2 ESB so that we can access ESB management console.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;ec2-describe-instances &lt;instance-id&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;e.g:- &lt;span style="font-style: italic;"&gt;ec2-describe-instances i-c28093aa&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will return the public DNS name as follows.&lt;br /&gt;&lt;br /&gt;INSTANCE    i-c28093aa    ami-878569ee    &lt;span style="font-weight: bold;"&gt;ec2-174-129-86-140.compute-1.amazonaws.com&lt;/span&gt;    domU-12-31-39-0C-21-B2.compute-1.internal&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Open a browser and access URL, &lt;span style="font-weight: bold;"&gt;https://ec2-174-129-86-140.compute-1.amazonaws.com&lt;/span&gt;. You will be able to log in to WSO2 ESB management console.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="AMI"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-627002304984157672?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/627002304984157672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=627002304984157672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/627002304984157672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/627002304984157672'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/02/how-to-start-wso2-carbon-amis.html' title='How to start WSO2 Carbon AMIs'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-6884853384114124956</id><published>2010-02-02T03:25:00.000-08:00</published><updated>2010-02-02T04:04:06.024-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General Quality Assurance'/><title type='text'>Importance of logging in QA testing</title><content type='html'>Recently &lt;a href="http://www.satisfice.com/blog/"&gt;James Bach&lt;/a&gt; posted a nice &lt;a href="http://www.satisfice.com/blog/archives/401"&gt;blog entry&lt;/a&gt; in which he identified &lt;span style="font-weight: bold;"&gt;logging&lt;/span&gt; as a good friend of an exploratory test team. I believe the comprehensive logging of AUT (application under test) is an extremely valuable asset to any tester regardless of the context of exploratory testing.&lt;br /&gt;A detailed log will surely help to minimize the effort required to reproduction of issues. There are intermittent failures, random application crashes which are extermely hard to regenerate in successive attempts. If the AUT is written in a way in which all the major user events are logged, then the root causes of such random failures can be traced easily.&lt;br /&gt;A comprehensive log is a useful test report. After a test run, you can store the log somewhere safely and use it as the test report. Specially, in agile test processes, test teams do not find sufficient time to record test results and maintain detailed test reports due to the short release cycles. If the AUT provides good set of logs, it will help testers to use them instead of maintaining separate test logs.&lt;br /&gt;&lt;br /&gt;IMHO, comprehensive logging is a must have feature of any of the enterprise-scale application. At WSO2, this has been identified as a extremely important tool and the necessary modifications are in-progress to improve logging in WSO2 Carbon SOA middleware suite.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-6884853384114124956?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/6884853384114124956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=6884853384114124956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6884853384114124956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6884853384114124956'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/02/importance-of-logging-in-qa-testing.html' title='Importance of logging in QA testing'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-2420915146305303521</id><published>2010-01-03T07:17:00.000-08:00</published><updated>2010-01-03T07:33:25.288-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><title type='text'>Enabling hotupdate in Apache Axis2</title><content type='html'>This is for some of the readers of this blog who requested me numerous times a simple post on how to enable hotupdate in Axis2.&lt;br /&gt;Hot Update refers to the ability to make changes to an existing Web Service without even shutting down the system. This is very important when you test your web services. However, it is not advisable to use hot update in production servers, because it may lead a system into an unknown state. Because of that, Axis2 comes with the hot update parameter set to FALSE by default.&lt;br /&gt;In order to enable hotupdate, you could simple edit the following parameter in AXIS2_HOME/conf/axis2.xml&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;parameter name="hotupdate"&amp;gt;true&amp;lt;/parameter&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you use WSO2 Carbon based product such as &lt;a href="http://wso2.org/projects/wsas/java"&gt;WSO2 WSAS&lt;/a&gt;, &lt;a href="http://wso2.org/projects/esb/java"&gt;WSO2 ESB&lt;/a&gt; or &lt;a href="http://wso2.org/projects/bps"&gt;WSO2 BPS&lt;/a&gt;, you can follow the same procedure.&lt;br /&gt;&lt;style type="text/css"&gt;&lt;!-- 		@page { margin: 0.79in } 		P { margin-bottom: 0.08in } 	--   &lt;/style&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-2420915146305303521?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/2420915146305303521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=2420915146305303521' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2420915146305303521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/2420915146305303521'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2010/01/enabling-hotupdate-in-apache-axis2.html' title='Enabling hotupdate in Apache Axis2'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-7564294117548462865</id><published>2009-12-23T09:01:00.000-08:00</published><updated>2009-12-23T09:06:40.576-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='clustering'/><title type='text'>How to install WSO2 Carbon cluster management feature</title><content type='html'>I have written and published a &lt;a href="http://http://wso2.org/library/tutorials/install-wso2-carbon-cluster-management-feature"&gt;tutorial&lt;/a&gt; on &lt;a href="http://wso2.org"&gt;wso2.org&lt;/a&gt; which guides you through the steps of installing WSO2 Carbon cluster management feature.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-7564294117548462865?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/7564294117548462865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=7564294117548462865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7564294117548462865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7564294117548462865'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/12/how-to-install-wso2-carbon-cluster.html' title='How to install WSO2 Carbon cluster management feature'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-5499838926462530365</id><published>2009-11-28T03:38:00.000-08:00</published><updated>2009-11-28T05:22:13.101-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven2'/><category scheme='http://www.blogger.com/atom/ns#' term='Selenium'/><title type='text'>Selenium test reporting with maven surefire report plugin</title><content type='html'>If you are familiar with Junit, you may have already known the &lt;span style="font-weight: bold;"&gt;maven surefire plugin&lt;/span&gt; which enables running unit test inside maven build cycles. Normally, surefire plugin generates the XML test reports at /target/surefire-reports directory. If you use &lt;span style="font-weight: bold;"&gt;selenium RC&lt;/span&gt; integrated with your build system or as a separate test framework, you may use &lt;span style="font-weight: bold;"&gt;maven-selenium-plugin&lt;/span&gt; coupled with the surefire plugin to launch your tests.&lt;br /&gt;As far as I know, there are two ways to generate test reports when selenium is coupled with maven.&lt;br /&gt;&lt;br /&gt;1. Use &lt;a href="http://loggingselenium.sourceforge.net/"&gt;LoggingSelenium&lt;/a&gt; java library to generate HTML test reports with screenshots&lt;br /&gt;&lt;br /&gt;2. Use maven-surefire-report plugin&lt;br /&gt;&lt;br /&gt;This post is about the latter one, maven-surefire-report plugin.&lt;br /&gt;&lt;br /&gt;The default configuration of surefire-report-plugin is trivial. You just need to add a &amp;lt;reporting&amp;gt; element to projects' pom.xml as follows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; &amp;lt;reporting&amp;gt;&lt;br /&gt;&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;&amp;lt;plugins&amp;gt;&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;       &lt;br /&gt;&amp;lt;plugin&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;&amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;           &amp;lt;&lt;version&amp;~~special_remove!#~~gt;2.4.2&amp;~~special_remove!#~~lt;&gt;&lt;/version&amp;~~special_remove!#~~gt;2.4.2&amp;~~special_remove!#~~lt;&gt;&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;          &lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;             &lt;br /&gt;&amp;lt;outputDirectory&amp;gt;${basedir}/target/wso2qa&amp;lt;/outputDirectory&amp;gt;&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;          &lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;         &amp;lt;/plugin&amp;gt;&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;      &lt;br /&gt;&amp;lt;/plugins&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;     &amp;lt;/reporting&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;When you run &lt;span style="font-weight: bold;"&gt;mvn surefire-report:report&lt;/span&gt; goal after running the tests, HTML based descriptive report will be created at the specified output directory. In this mechanism, you do not use anything specific to selenium,but get the advantage of surefire report plugin in test reporting.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/SxEU-raL-zI/AAAAAAAAAXo/VYW5lvcIMbY/s1600/Screenshot.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/SxEU-raL-zI/AAAAAAAAAXo/VYW5lvcIMbY/s320/Screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5409127694485682994" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-5499838926462530365?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/5499838926462530365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=5499838926462530365' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5499838926462530365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5499838926462530365'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/11/selenium-test-reporting-with-maven.html' title='Selenium test reporting with maven surefire report plugin'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_S93Ac0EllBE/SxEU-raL-zI/AAAAAAAAAXo/VYW5lvcIMbY/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-4725283543073756934</id><published>2009-11-13T08:08:00.000-08:00</published><updated>2009-11-13T08:19:08.478-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><title type='text'>Running WSO2 Carbon based products on IBM JDK</title><content type='html'>The next minor release of WSO2 Carbon product platform (2.0.2) will be fully compatible with IBM JDK (IBM J9 VM 2.4). You simply need to update transports.xml as follows in order to run any of the WSO2 carbon based product on IBM JDK.&lt;br /&gt;&lt;br /&gt;Open CARBON_HOME/transports.xml&lt;br /&gt;&lt;br /&gt;Add the following parameter to HTTPS transport configuration&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;parameter name="algorithm"&amp;gt;IBMX509&amp;lt;/parameter&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, restart carbon. Server will be started successfully on IBM JDK.&lt;br /&gt;&lt;br /&gt;Carbon-2.0.2 product platform will be released within next week. Stay tuned..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-4725283543073756934?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/4725283543073756934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=4725283543073756934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4725283543073756934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4725283543073756934'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/11/running-wso2-carbon-based-products-on.html' title='Running WSO2 Carbon based products on IBM JDK'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-6625018366134959096</id><published>2009-10-29T10:26:00.000-07:00</published><updated>2010-08-10T22:53:26.548-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reliable Messaging'/><category scheme='http://www.blogger.com/atom/ns#' term='WSAS'/><title type='text'>How to configure persistent RM in WSO2 WSAS</title><content type='html'>WSO2 Web Services Application Server (WSAS) provides with a storage manager in which you can persist messages transmitted between RMS (reliable messaging source) and RMD (reliable messaging destination). By configuring persistent RM, you can prevent messages loses even if the server is down. This post guides you through the steps to configure persistent RM in the latest versions of WSO2 WSAS (WSAS-3.*). I assume you have a basic understanding about WS-RM, if not, please read &lt;a href="http://www.infoq.com/articles/fremantle-wsrm-introduction"&gt;http://www.infoq.com/articles/fremantle-wsrm-introduction&lt;/a&gt; first.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pre-requisites&lt;/span&gt;&lt;br /&gt;Download and install &lt;a href="http://wso2.org/downloads/wsas"&gt;WSO2 WSAS-3.1.1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Persistent implementation of WS-RM will be supported in most of the popular DBMSs. However, I will use MySQL server 5.* in this demonstration. Therefore, install and configure MySQL.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;As the first step, we need to create the persistent storage which is going to be used in reliable message transmission. Lets create a data base and the necessary table as follows.&lt;br /&gt;&lt;br /&gt;mysql&gt;create database SANDESHA_DB;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;mysql&gt;use SANDESHA_DB;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;mysql&gt;create table wsrm_sender (&lt;br /&gt;  message_id varchar(255) not null,&lt;br /&gt;  message_context_ref_key varchar(255),&lt;br /&gt;  internal_sequence_id varchar(255),&lt;br /&gt;  sequence_id varchar(255),&lt;br /&gt;  to_address varchar(255),&lt;br /&gt;  inbound_sequence_id varchar(255),&lt;br /&gt;  send smallint,&lt;br /&gt;  sent_count integer,&lt;br /&gt;  message_number bigint,&lt;br /&gt;  resend smallint,&lt;br /&gt;  time_to_send bigint,&lt;br /&gt;  message_type integer,&lt;br /&gt;  last_message smallint,&lt;br /&gt;  inbound_message_number bigint,&lt;br /&gt;  transport_available smallint,&lt;br /&gt;  flags integer,&lt;br /&gt;  primary key (message_id)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;mysql&gt;create table wsrm_rmd (&lt;br /&gt;  sequence_id varchar(255) not null,&lt;br /&gt;  to_epr_addr varchar(255),&lt;br /&gt;  to_epr blob,&lt;br /&gt;  reply_to_epr_addr varchar(255),&lt;br /&gt;  reply_to_epr blob,&lt;br /&gt;  acks_to_epr_addr varchar(255),&lt;br /&gt;  acks_to_epr blob,&lt;br /&gt;  rm_version varchar(255),&lt;br /&gt;  security_token_data varchar(255),&lt;br /&gt;  last_activated_time bigint,&lt;br /&gt;  closed smallint,&lt;br /&gt;  terminated_flag smallint,&lt;br /&gt;  polling_mode smallint,&lt;br /&gt;  service_name varchar(255),&lt;br /&gt;  flags integer,&lt;br /&gt;  reference_message_key varchar(255),&lt;br /&gt;  highest_in_message_id varchar(255),&lt;br /&gt;  last_in_message_id varchar(255),&lt;br /&gt;  server_completed_messages blob,&lt;br /&gt;  outof_order_ranges blob,&lt;br /&gt;  to_address varchar(255),&lt;br /&gt;  outbound_internal_sequence varchar(255),&lt;br /&gt;  next_msgno_to_process bigint,&lt;br /&gt;  highest_in_message_number bigint,&lt;br /&gt;  rmd_flags integer,&lt;br /&gt;  primary key (sequence_id)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;mysql&gt;create table wsrm_rms (&lt;br /&gt;  create_seq_msg_id varchar(255) not null,&lt;br /&gt;  sequence_id varchar(255),&lt;br /&gt;  to_epr_addr varchar(255),&lt;br /&gt;  to_epr blob,&lt;br /&gt;  reply_to_epr_addr varchar(255),&lt;br /&gt;  reply_to_epr blob,&lt;br /&gt;  acks_to_epr_addr varchar(255),&lt;br /&gt;  acks_to_epr blob,&lt;br /&gt;  rm_version varchar(255),&lt;br /&gt;  security_token_data varchar(255),&lt;br /&gt;  last_activated_time BIGINT,&lt;br /&gt;  closed smallint,&lt;br /&gt;  terminated_flag smallint,&lt;br /&gt;  polling_mode smallint,&lt;br /&gt;  service_name varchar(255),&lt;br /&gt;  flags integer,&lt;br /&gt;  id bigint,&lt;br /&gt;  internal_sequence_id varchar(255),&lt;br /&gt;  create_sequence_msg_store_key varchar(255),&lt;br /&gt;  reference_msg_store_key varchar(255),&lt;br /&gt;  last_send_error blob,&lt;br /&gt;  highest_out_relates_to varchar(255),&lt;br /&gt;  client_completed_messages blob,&lt;br /&gt;  transport_to varchar(255),&lt;br /&gt;  offered_endpoint varchar(255),&lt;br /&gt;  offered_sequence varchar(255),&lt;br /&gt;  anonymous_uuid varchar(255),&lt;br /&gt;  last_send_error_timestamp bigint,&lt;br /&gt;  last_out_message bigint,&lt;br /&gt;  highest_out_message_number bigint,&lt;br /&gt;  next_message_number bigint,&lt;br /&gt;  terminate_added smallint,&lt;br /&gt;  timed_out smallint,&lt;br /&gt;  sequence_closed_client smallint,&lt;br /&gt;  expected_replies bigint,&lt;br /&gt;  soap_version integer,&lt;br /&gt;  termination_pauser_for_cs smallint,&lt;br /&gt;  avoid_auto_termination smallint,&lt;br /&gt;  rms_flags integer,&lt;br /&gt;  primary key (create_seq_msg_id)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;mysql&gt;create table wsrm_invoker (&lt;br /&gt;  message_context_ref_key varchar(255) not null,&lt;br /&gt;  sequence_id varchar(255),&lt;br /&gt;  context blob,&lt;br /&gt;  msg_no bigint,&lt;br /&gt;  flags integer,&lt;br /&gt;  PRIMARY KEY (message_context_ref_key)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;mysql&gt;create table wsrm_msgctx (&lt;br /&gt;  ctx_key varchar(255) not null,&lt;br /&gt;  ctx blob,&lt;br /&gt;  PRIMARY KEY (ctx_key)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note: From WSAS-3.2.0 onwards, the following columns must be added to the wsrm_rms table in addition to the columns specified above.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;offered_endpoint_epr_addr varchar(255),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;offered_endpoint_epr varchar(255),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;reallocated integer,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;internalSeqIDOfSeqUsedForReallocation varchar(255),&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since we are going to establish a JDBC connection to a MySQL DB, copy &lt;a href="http://dev.mysql.com/downloads/connector/j/5.1.html"&gt;mysql jdbc driver &lt;/a&gt;to WSAS_HOME/repository/components/lib and restart WSAS&lt;br /&gt;Log in to WSAS management console and click on modules --&gt;list. Click on configure link of the sandesha2 module.&lt;br /&gt;By default, WSO2 WSAS uses an inmemory implementation of WS-RM. You can change it to persistent by changing Storage Manager property. Configure the rest of the persistent storage details as follows.&lt;br /&gt;&lt;pre&gt;Connection String - &lt;strong&gt;jdbc:mysql://localhost:3306/SANDESHA_DB&lt;br /&gt;&lt;/strong&gt;Driver Name - &lt;strong&gt;&lt;strong&gt;com.mysql.jdbc.Driver&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Username - your mysql username &lt;your mysql="" server="" username=""&gt;&lt;/your&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Password -&lt;span style="font-weight: bold;"&gt; your mysql password&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;strong style="font-weight: normal;"&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;&lt;your mysql="" server="" password=""&gt;&lt;/your&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/SunaXRm4rOI/AAAAAAAAAXg/slhSO9G_1G8/s1600-h/persistent1.png"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/SunaXRm4rOI/AAAAAAAAAXg/slhSO9G_1G8/s320/persistent1.png" alt="" id="BLOGGER_PHOTO_ID_5398085721778597090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, you have enabled persistent RM in WSO2 WSAS. However, due to a bug in the latest WSAS releases, you should update the following property in WSAS_HOME/conf/axis2.xml&lt;br /&gt;&lt;br /&gt;&amp;lt;parameter name="Sandesha2StorageManager"&amp;gt;persistent&amp;lt;/parameter&amp;gt;&lt;br /&gt;&lt;br /&gt;Make sure to restart WSAS after configuring the above element in axis2.xml&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, you are ready to send requests to a service hosted in WSAS through RM and verify persistent RM. In order to do that, engage sandesha2 module in a service and send series of requests (say 100 requests) using a RM client (I assume you are familiar with sending soap messages with RM headers. I will publish a separate post on complete RM client-server invocation soon). After transmitting 30 requests, shutdown WSAS and restart. You will notice that after the server is restarted, the message transmission will be resumed from the message no: 31&lt;br /&gt;&lt;br /&gt;If you have any issues with the steps given above, please drop me a mail.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-6625018366134959096?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/6625018366134959096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=6625018366134959096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6625018366134959096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6625018366134959096'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/10/how-to-configure-persistent-rm-in-wso2.html' title='How to configure persistent RM in WSO2 WSAS'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_S93Ac0EllBE/SunaXRm4rOI/AAAAAAAAAXg/slhSO9G_1G8/s72-c/persistent1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-5701033985101884063</id><published>2009-10-24T10:52:00.000-07:00</published><updated>2009-10-24T11:10:16.407-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General Quality Assurance'/><category scheme='http://www.blogger.com/atom/ns#' term='Test Automation'/><title type='text'>Key factors for successful test automation</title><content type='html'>At &lt;a href="http://www.wso2.org"&gt;WSO2&lt;/a&gt;, we have been making considerable &lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;em&gt;&lt;/em&gt;progress in building a complete test automation solution. According to my experience on that effort, I think the followings are the key factors contributed to a successful test automation project.&lt;br /&gt;           &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dedication to automation (Instead of treating it as a spare-time activity)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Commitment by the entire team (rather than just one or two testers),&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Commitment to automation from the start (rather than trying to automate a manual process later)&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Making use of correct tools/frameworks/technology&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Allocating sufficient time and resources&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-5701033985101884063?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/5701033985101884063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=5701033985101884063' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5701033985101884063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5701033985101884063'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/10/key-factors-for-successful-test.html' title='Key factors for successful test automation'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-8602668911429215178</id><published>2009-10-16T10:27:00.000-07:00</published><updated>2009-10-16T10:45:02.765-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maven2'/><category scheme='http://www.blogger.com/atom/ns#' term='Selenium'/><title type='text'>How to pass system properties to maven surefire plugin test run</title><content type='html'>While developing WSO2 QA test framework (which is based on selenium RC), we wanted to give users the choice of selecting test cases without running whole suite at once. Our plan was to pass a system property during maven test run. However, passing a system property directly through command line does not work since the surefire plugin is run under a different JVM instance that is launched by Maven.&lt;br /&gt;In order to overcome this, maven surefire plugin can be configured as follows by specifying the required system property.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;systemProperties&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        &amp;lt;property&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;              &amp;lt;name&amp;gt;test.suite&amp;lt;/name&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                        &amp;lt;value&amp;gt;${test.suite}&amp;lt;/value&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;                    &amp;lt;/property&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;      &amp;lt;/systemProperties&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;According to this example configuration, we can run test suite with passing a system property as follows.&lt;br /&gt;&lt;br /&gt; 'mvn clean install -Dtest.suite=test-case'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-8602668911429215178?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/8602668911429215178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=8602668911429215178' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8602668911429215178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8602668911429215178'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/10/how-to-pass-system-properties-to-maven.html' title='How to pass system properties to maven surefire plugin test run'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-3147658659106580190</id><published>2009-10-10T06:22:00.000-07:00</published><updated>2009-10-10T06:29:15.146-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2'/><title type='text'>The newest version (2.0.1) of WSO2 carbon family of prodcuts released!!</title><content type='html'>The latest version of WSO2 carbon based products were released yesterday. More info can be found at &lt;a href="http://wso2.org/projects/carbon"&gt;http://wso2.org/projects/carbon&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;New Features in This Release&lt;br /&gt;----------------------------&lt;br /&gt;    * Improved transaction support.&lt;br /&gt;    * Improved Support for deploying on top of WebSphere, WebLogic, and&lt;br /&gt;JBoss.&lt;br /&gt;    * P2 based provisioning for WSO2 Carbon family of products.&lt;br /&gt;    * Numerous bug fixes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-3147658659106580190?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/3147658659106580190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=3147658659106580190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/3147658659106580190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/3147658659106580190'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/10/newest-version-201-of-wso2-carbon.html' title='The newest version (2.0.1) of WSO2 carbon family of prodcuts released!!'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-1745137068621820603</id><published>2009-09-30T09:44:00.000-07:00</published><updated>2009-09-30T09:48:46.671-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='WSAS'/><title type='text'>How to run multiple WSO2 WSAS instances in a single host</title><content type='html'>I have published a&lt;a href="http://wso2.org/library/knowledge-base/run-multiple-wso2-wsas-instances-single-jvm"&gt; simple three step tutorial&lt;/a&gt; on running multiple WSO2 WSAS instances in a single host in &lt;a href="http://www.wso2.org"&gt;WSO2 Oxygen Tank&lt;/a&gt;. Have a look!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-1745137068621820603?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/1745137068621820603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=1745137068621820603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/1745137068621820603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/1745137068621820603'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/09/how-to-run-multiple-wso2-wsas-instances.html' title='How to run multiple WSO2 WSAS instances in a single host'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-5133102486645787913</id><published>2009-09-16T23:04:00.000-07:00</published><updated>2009-09-16T23:41:24.168-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JMS'/><category scheme='http://www.blogger.com/atom/ns#' term='WSAS'/><title type='text'>How to enable JMS in WSO2 WSAS-3.*</title><content type='html'>&lt;a href="http://wso2.org/projects/wsas/java"&gt;&lt;span style="font-weight: bold;"&gt;WSO2 WSAS&lt;/span&gt;&lt;/a&gt; provides with a simple and easily configurable UI to enable transports. In this post, we are going to look at how JMS is enabled in WSAS-3.* versions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pre-requisites:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;----------------&lt;/span&gt;&lt;br /&gt;You can use any JMS provider as you preferred. I'm going to use &lt;a href="http://activemq.apache.org/activemq-500-release.html"&gt;Apache ActiveMQ-5.2.0&lt;/a&gt; for this example.&lt;br /&gt;Download the latest version of WSO2 WSAS from &lt;a href="http://wso2.org/projects/wsas/java"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-------&lt;/span&gt;&lt;br /&gt;Suppose you have downloaded WSO2 WSAS-3.* and extracted in to a directory in your file system. Let it be WSAS_HOME&lt;br /&gt;&lt;br /&gt;First, we need to start ActiveMQ message broker. Go to ActiveMQ_Install_dir/bin and run activemq.bat&lt;br /&gt;Also, the following ActiveMQ libraries must be copied to WSAS_HOME/repository/components/lib directory&lt;br /&gt;&lt;ul&gt;&lt;li&gt;activeio-core-3.1-SNAPSHOT.jar (ActiveMQ_Install_dir\lib\optional)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;activemq-core-5.0.0.jar (ActiveMQ_Install_dir\lib\)&lt;/li&gt;&lt;li&gt;geronimo-j2ee-management_1.0_spec-1.0.jar (ActiveMQ_Install_dir\lib\)&lt;/li&gt;&lt;li&gt;geronimo-jms_1.1_spec-1.0.jar (ActiveMQ_Install_dir\lib\)&lt;/li&gt;&lt;/ul&gt;Now, restart WSO2 WSAS&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-------&lt;/span&gt;&lt;br /&gt;Log in to WSAS management console (username=admin, password=admin) and click on &lt;span style="font-weight: bold;"&gt;Manage --&gt; Transports&lt;/span&gt; at the left navigation menu.&lt;br /&gt;You will be directed to the Transport Management page as follows.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_S93Ac0EllBE/SrHW51ZPqjI/AAAAAAAAAXA/RmucuVvnMVc/s1600-h/blog1.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 195px;" src="http://2.bp.blogspot.com/_S93Ac0EllBE/SrHW51ZPqjI/AAAAAAAAAXA/RmucuVvnMVc/s320/blog1.JPG" alt="" id="BLOGGER_PHOTO_ID_5382319318758304306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-------&lt;/span&gt;&lt;br /&gt;Locate JMS transport in the above Transport Management page and click on enable next to transportListener&lt;br /&gt;Following page will be shown where you can configure JMS listener according to your JMS provider.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_S93Ac0EllBE/SrHYWd_WA5I/AAAAAAAAAXI/xuxwPtqgY4c/s1600-h/blog2.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 195px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/SrHYWd_WA5I/AAAAAAAAAXI/xuxwPtqgY4c/s320/blog2.JPG" alt="" id="BLOGGER_PHOTO_ID_5382320910203487122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;similarly, you can enable JMSSender.&lt;br /&gt;&lt;br /&gt;If JMS is configured correctly as in the above steps, you will see the JMS endpoints of your service will be shown in the WSDLs or service dashboard as follows.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_S93Ac0EllBE/SrHZlzygkAI/AAAAAAAAAXQ/_IguL9eu_x8/s1600-h/blog3.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 195px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/SrHZlzygkAI/AAAAAAAAAXQ/_IguL9eu_x8/s320/blog3.JPG" alt="" id="BLOGGER_PHOTO_ID_5382322273264898050" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-5133102486645787913?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/5133102486645787913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=5133102486645787913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5133102486645787913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5133102486645787913'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/09/how-to-enable-jms-in-wso2-wsas-3.html' title='How to enable JMS in WSO2 WSAS-3.*'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_S93Ac0EllBE/SrHW51ZPqjI/AAAAAAAAAXA/RmucuVvnMVc/s72-c/blog1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-6133606556866536024</id><published>2009-09-07T09:15:00.000-07:00</published><updated>2009-09-07T09:28:31.970-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2'/><title type='text'>WSO2 Carbon is among InfoWorlds best open source software</title><content type='html'>&lt;span style="font-weight: bold;"&gt;WSO2&lt;/span&gt; has been named an InfoWorld 2009 Best of Open Source Software (Bossie) Award winner.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.infoworld.com/d/open-source/best-open-source-platforms-and-middleware-758?current=9&amp;amp;last=8?r=76"&gt;http://www.infoworld.com/d/open-source/best-open-source-platforms-and-middleware-758?current=9&amp;amp;last=8?r=76&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Proud to be a member of the award winning team :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-6133606556866536024?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/6133606556866536024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=6133606556866536024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6133606556866536024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/6133606556866536024'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/09/wso2-carbon-is-among-infoworlds-best.html' title='WSO2 Carbon is among InfoWorlds best open source software'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-8896480021465956696</id><published>2009-08-28T03:29:00.000-07:00</published><updated>2009-08-28T03:38:07.914-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSAS'/><title type='text'>Where to put third party jars in WSO2 WSAS?</title><content type='html'>In the pre-carbon versions of WSO2 WSAS (2.* and older), you may have used WSAS_HOME/lib/extensions directory to put third party jars such as jdbc drivers.&lt;br /&gt;&lt;br /&gt;After WSO2 WSAS became a part of WSO2 Carbon platform, a.k.a WSAS-3.* versions,  all third party jars should be placed inside &lt;span style="font-weight: bold;"&gt;WSAS_HOME/repostiroy/components/lib&lt;/span&gt; directory of your WSAS distribution.&lt;br /&gt;&lt;br /&gt;**This is applicable to all WSO2 Carbon products (WSAS, ESB, G-reg, IS, BPS)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-8896480021465956696?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/8896480021465956696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=8896480021465956696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8896480021465956696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8896480021465956696'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/08/where-to-put-third-party-jars-in-wso2.html' title='Where to put third party jars in WSO2 WSAS?'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-5006094646989428635</id><published>2009-08-28T03:09:00.000-07:00</published><updated>2009-08-28T03:27:43.049-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><title type='text'>Remotely starting OSGI console when WSO2 Carbon runs on an application server</title><content type='html'>When &lt;a href="http://wso2.org/projects/carbon"&gt;WSO2 Carbon&lt;/a&gt; based product (WSAS, ESB, G-reg, BPS, IS) runs in standalone mode, you can start server with equinox OSGI console just by issuing -DosgiConsole system property.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;wso2server.bat -DosgiConsole&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;How do you connect to OSGI console when you are running Carbon on an application server such as WebSphere or WebLogic (or tomcat, JBoss etc..)?&lt;br /&gt;&lt;br /&gt;1. Open WEB-INF/web.xml file of the carbon web application&lt;br /&gt;2. Uncomment the following element&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;init-param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;            &amp;lt;param-name&amp;gt;osgiConsole&amp;lt;/param-name&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;            &amp;lt;param-value&amp;gt;-console 19444&amp;lt;/param-value&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;/init-param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3. Now restart carbon with these settings.&lt;br /&gt;4. Open a new command window/shell and connect to osgiConsole using telnet as follows&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;telnet localhost 19444&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-5006094646989428635?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/5006094646989428635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=5006094646989428635' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5006094646989428635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5006094646989428635'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/08/remotely-starting-osgi-console-when.html' title='Remotely starting OSGI console when WSO2 Carbon runs on an application server'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-8349763181668292131</id><published>2009-08-15T20:24:00.000-07:00</published><updated>2010-02-02T00:57:26.207-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='weblogic'/><category scheme='http://www.blogger.com/atom/ns#' term='WSAS'/><title type='text'>How to deploy WSAS-3.X on Oracle WebLogic 10.3</title><content type='html'>Once &lt;a href="http://afkham.org/"&gt;Azeez&lt;/a&gt; has written a &lt;a href="http://wso2.org/library/880"&gt;10 minute guide to installing WSO2 WSAS on Weblogic server&lt;/a&gt;. That guide explains the steps to deploy 2.X family of WSAS on weblogic. With the introduction of &lt;a href="http://wso2.org/library/carbon"&gt;WSO2 Carbon&lt;/a&gt; platform in December 2008, WSO2 WSAS is no longer distributed as a separate war distribution. Hence, the instructions given in that document is not applicable when deploying WSO2  WSAS-3.X series on Oracle WebLogic server.&lt;br /&gt;Since all WSO2 java products are built on Carbon platform,  users can configure running WSO2 products on any application server using a set of components included in binary distributions. I have already explained the steps to deploy &lt;a href="http://charithaka.blogspot.com/2009/02/how-to-deploy-wso2-bps-on-apache-tomcat.html"&gt;WSO2 BPS on tomcat&lt;/a&gt; and &lt;a href="http://charithaka.blogspot.com/2009/04/how-to-deploy-wso2-wsas-3-on-jboss.html"&gt;WSO2 WSAS-3.X on Jboss&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;This post describes the steps to deploy WSO2 WSAS-3.X on &lt;span style="font-weight: bold;"&gt;WebLogic 10.3&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Step1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Create a new weblogic domain by running config.sh {bat} located at  WebLogic_HOME/wlserver_10.3/common/bin directory.&lt;br /&gt;Lets assume the new domain is wsas.&lt;br /&gt;&lt;br /&gt;Access your weblogic domain direcrtory and start weblogic (Go to WebLogic_HOME/user_projects/domains/wsas/bin and run startWebLogic.cmd)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;Download the latest version of WSO2 WSAS-3.X from &lt;a href="http://wso2.org/projects/wsas/java"&gt;here&lt;/a&gt;.&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt; Extract the downloaded zip into a directory. Copy &lt;span style="font-weight: bold;"&gt;conf, database, repository&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;resources&lt;/span&gt; directories in to a new folder.  Here after, we will refer it is wsas-repo (i.e:- C:\wsas\wsas-repo)&lt;br /&gt;&lt;br /&gt;Also, create a new directory, wso2wsas and copy the WEB-INF directory located at the webapps/ROOT directory of the downloaded WSO2 WSAS-3.X to wso2wsas directory. Now, your wsas-repo should have five sub directories - conf, database, repository, resources and wso2wsas.&lt;br /&gt;wso2wsas will be used as the webapp root directory.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We need to enable SSL in weblogic server. Log in to weblogic administration console (You should have configured username and password for admin console when creating your WebLogic domain) and go to &lt;span style="font-weight: bold;"&gt;Environment --&gt; servers&lt;/span&gt;.  Select &lt;span style="font-weight: bold;"&gt;AdminServer&lt;/span&gt;.&lt;br /&gt;Click on KeyStores tab. Configure keystores as shown below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_S93Ac0EllBE/SoeHjmXcAhI/AAAAAAAAAWI/6wxWy2zh1Bc/s1600-h/wl1.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 195px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/SoeHjmXcAhI/AAAAAAAAAWI/6wxWy2zh1Bc/s320/wl1.JPG" alt="" id="BLOGGER_PHOTO_ID_5370410126326628882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Keystore = Custom Identity &amp;amp; Custom Trust&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Custom Identity Keystore = C:\wsas\wsas-repo\resources\security\wso2carbon.jks&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Custom Identity Keystore Type = JKS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Custom Identity Keystore Passphrase = wso2carbon&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Confirm Custom Identity Keystore Passphrase = wso2carbon&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Custom Trust Keystore = C:\wsas\wsas-repo\resources\security\wso2carbon.jks&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Custom Trust Keystore Type = JKS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Custom Trust Keystore Passphrase = wso2carbon&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Confirm Custom Trust Keystore Passphrase = wso2carbon&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, select &lt;span style="font-weight: bold;"&gt;SSL&lt;/span&gt; tab and enter the following values.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Identity and trust locations = keystores&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Private Key Alias = wso2carbon&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Private Key Passphrase = wso2carbon&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Confirm Private Key Passphrase = wso2carbon&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Save the configuration and go to the &lt;span style="font-weight: bold;"&gt;General&lt;/span&gt; tab. Select the check box next to "SSL listen port enabled".&lt;br /&gt;&lt;br /&gt;Now we have configured the necessary changes to enable SSL on weblogic. Lets continue with deploying WSO2 WSAS on weblogic.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, we should update the set of config files shipped with WSO2 WSAS. We will update carbon.xml, axis2.xml, registry.xml and user-mgt.xml which can be found at the above wsas-repo\conf directory.&lt;br /&gt;First, open carbon.xml and update the &lt;span style="font-weight: bold;"&gt;ServerURL&lt;/span&gt; element as follows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;serverurl&gt;&amp;lt;ServerURL&amp;gt;https://localhost:7002/wso2wsas/services/&lt;/serverurl&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;/ServerURL&amp;gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;serverurl&gt;&lt;/serverurl&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Note that we have configured weblogic to run on &lt;span style="font-weight: bold;"&gt;7002&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;port&lt;span style="font-weight: bold;"&gt;.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;Update&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;WebContextRoot element as follows.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;WebContextRoot&amp;gt;/wso2wsas&amp;lt;/WebContextRoot&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Save and close carbon.xml.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Open &lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;registry.xml &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;and&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;update DB URL as follows.&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;url&gt;&lt;/url&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;url&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;url&gt;jdbc:h2:C:\wsas\wsas-repo\database\WSO2CARBON_DB;create=true&lt;/url&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;url&gt;&lt;/url&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Now&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;open&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;user-mgt.xml&lt;/span&gt; and update database URL as follows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;url&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;url&gt;jdbc:h2:&lt;/url&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;C:\wsas\wsas-repo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;url&gt;\database\WSO2CARBON_DB;create=true&lt;/url&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;url&gt;&lt;/url&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;Make sure to specify the absolute path of the WSO2CARBON_DB&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;in both of the above elements.&lt;br /&gt;&lt;br /&gt;We must change the http and https ports in &lt;span style="font-weight: bold;"&gt;In Transports&lt;/span&gt; section of axis2.xml as follows.&lt;br /&gt;&lt;br /&gt;&amp;lt;transportReceiver name="http"&lt;br /&gt;           class="org.wso2.carbon.core.transports.http.HttpTransportListener"&amp;gt;&lt;br /&gt;    &lt;span style="font-weight: bold;"&gt;&amp;lt;parameter name="port"&amp;gt;7001&amp;lt;/parameter&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/transportReceiver&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;transportReceiver name="https"&lt;br /&gt;           class="org.wso2.carbon.core.transports.http.HttpsTransportListener"&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; &amp;lt;parameter name="port"&amp;gt;7002&amp;lt;/parameter&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;/transportReceiver&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We have completed the required configurations and we can deploy WSO2 WSAS on weblogic now.&lt;br /&gt;First, shutdown the weblogic server instance if it is still running.&lt;br /&gt;open a new command window and change the directory to WebLogic_HOME/user_projects/domains/wsas/bin.&lt;br /&gt;Define an environment variable called &lt;span style="font-weight: bold;"&gt;CARBON_HOME&lt;/span&gt; and set the path to your wsas-repo directory.&lt;br /&gt;&lt;br /&gt;In windows; set CARBON_HOME=C:\wsas\wsas-repo&lt;br /&gt;In linux; export CARBON_HOME=\home\user\wsas\wsas-repo&lt;br /&gt;&lt;br /&gt;Run startWebLogic.cmd&lt;br /&gt;&lt;transportreceiver name="http" class="org.wso2.carbon.core.transports.http.HttpTransportListener"&gt;&lt;br /&gt;Once the server is started successfully, log in to weblogic administration console using https://localhost:7002/console&lt;br /&gt;Then, go to the &lt;span style="font-weight: bold;"&gt;Summary of Deployments&lt;/span&gt; page and select &lt;span style="font-weight: bold;"&gt;Install.&lt;br /&gt;&lt;/span&gt;Locate the deployment root by selecting C:\wsas\wsas-repo\wso2wsas directory. (web app root directory will be shown with a radio button option as follows.&lt;br /&gt;&lt;br /&gt;&lt;/transportreceiver&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_S93Ac0EllBE/SoeN3r2YYyI/AAAAAAAAAWQ/wo3vfh5eh7I/s1600-h/wl2.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 195px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/SoeN3r2YYyI/AAAAAAAAAWQ/wo3vfh5eh7I/s320/wl2.JPG" alt="" id="BLOGGER_PHOTO_ID_5370417068465742626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click on next to proceed through the wizard and continue with the default settings.&lt;br /&gt;Once the deployment is successful, save the configuration and select &lt;span style="font-weight: bold;"&gt;start --&gt; servicing all requests &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, we are done with the deployment. You could access the management console using https:\\localhost:7002\wso2wsas\carbon&lt;br /&gt;&lt;br /&gt;Note:-&lt;br /&gt;1. In order to set the log4j logs, you may copy log4j.properties file in the extracted WSO2WSAS-3.X directory to wsas-repo\wso2wsas\WEB-INF\classes&lt;br /&gt;&lt;br /&gt;2. If you want to deploy JaxWS services in WSAS/WebLogic platform, you should do the following configuration to avoid a class casting issue (&lt;a href="https://wso2.org/jira/browse/CARBON-4835"&gt;https://wso2.org/jira/browse/CARBON-4835&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;- Remove weblogic.jar/META-INF/services/com.sun.xml.ws.api.wsdl.writer.WSDLGeneratorExtension &amp;amp; restart Carbon&lt;br /&gt;&lt;br /&gt;3. Also, Make sure to copy xalan-*.jar, xercesImpl-*.jar and xml-apis-*.jar from the lib/endorsed directory of the extracted WSAS binary distribution to weblogic endorsed directory before you start WSAS.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;transportreceiver name="https" class="org.wso2.carbon.core.transports.http.HttpsTransportListener"&gt;&lt;span style="font-weight: bold;"&gt;&lt;parameter name="port"&gt;&lt;/parameter&gt;&lt;/span&gt;&lt;br /&gt;&lt;/transportreceiver&gt;&lt;br /&gt;&lt;div style="border: 1px solid rgb(204, 204, 204); padding: 10px; background-color: rgb(157, 166, 186);"&gt;&lt;br /&gt;&lt;a style="color: rgb(255, 255, 255) ! important;" href="http://www.netfirms.ca/"&gt;Domain hosting&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-8349763181668292131?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/8349763181668292131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=8349763181668292131' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8349763181668292131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8349763181668292131'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/08/how-to-deploy-wsas-3x-on-oracle.html' title='How to deploy WSAS-3.X on Oracle WebLogic 10.3'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_S93Ac0EllBE/SoeHjmXcAhI/AAAAAAAAAWI/6wxWy2zh1Bc/s72-c/wl1.JPG' height='72' width='72'/><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-4389968877836340644</id><published>2009-07-09T22:34:00.000-07:00</published><updated>2009-07-10T00:03:45.956-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='Equinox P2'/><category scheme='http://www.blogger.com/atom/ns#' term='OSGI'/><title type='text'>Build your own server using WSO2 Carbon components</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Building a customized server with a set of components downloading from a public repository&lt;/span&gt;...&lt;br /&gt;It is no longer a hard and complex task. Now you can build your own version of WSO2 carbon platform using its &lt;span style="font-weight: bold;"&gt;Equinox P2 based provisioning&lt;/span&gt; capabilities.&lt;br /&gt;This post guide you through the steps to build your own server platform using WSO2 carbon-2.0.0.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pre-requisites:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://wso2.org/downloads/carbon/core"&gt;Download&lt;/a&gt; the latest version of WSO2 Carbon server. &lt;span style="font-weight: bold;"&gt;WSO2 Carbon&lt;/span&gt; is the base platform on which we build our customized server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Start carbon server with osgiConsole so that we can issue commands to manage OSGI framework.&lt;br /&gt;&lt;br /&gt;cd CARBON_HOME/bin (CARBON_HOME is the location where you unzipped wso2carbon-2.0.0.zip)&lt;br /&gt;wso2server.bat -DosgiConsole&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Next, we need to specify artifact and metadata repositories from which we download several features and their metadata.&lt;br /&gt;&lt;br /&gt;In the osgi console, issue the following commands.&lt;br /&gt;&lt;br /&gt;osgi&gt;provaddrepo http://dist.wso2.org/p2/carbon/releases/2.0&lt;br /&gt;&lt;br /&gt;osgi&gt;provaddartifactrepo &lt;a href="http://dist.wso2.org/p2/carbon/releases/2.0" rel="nofollow"&gt;http://dist.wso2.org/p2/carbon/releases/2.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_S93Ac0EllBE/SlbZ5ziWP2I/AAAAAAAAAVA/cs8GoHcDAd8/s1600-h/p2-1.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 31px;" src="http://2.bp.blogspot.com/_S93Ac0EllBE/SlbZ5ziWP2I/AAAAAAAAAVA/cs8GoHcDAd8/s320/p2-1.JPG" alt="" id="BLOGGER_PHOTO_ID_5356708393913827170" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lets check the installable features included in the above artifact repository.&lt;br /&gt;&lt;br /&gt;osgi&gt;provlg&lt;br /&gt;&lt;br /&gt;This will list down all the features available in the specified artifact repository as follows.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_S93Ac0EllBE/SlbbQG1qDPI/AAAAAAAAAVI/jd0pZjopAoM/s1600-h/p2-2.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 198px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/SlbbQG1qDPI/AAAAAAAAAVI/jd0pZjopAoM/s320/p2-2.JPG" alt="" id="BLOGGER_PHOTO_ID_5356709876563840242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now we have connected to the artifcat and metadata repositories and looked at the installable features. Suppose we need to build our customized server with the following components out of the features included in the artifact repo.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;data services&lt;/li&gt;&lt;li&gt;service management&lt;/li&gt;&lt;li&gt;tools&lt;/li&gt;&lt;/ul&gt;We can install data service feature as follows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;osgi&gt;provinstall org.wso2.carbon.dataservices.feature.group 2.0.0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If the installation is successful, you will get "installation complete" message.&lt;br /&gt;&lt;br /&gt;Similarly, you can install service management and tools features.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;osgi&gt;provinstall org.wso2.carbon.tools.feature.group 2.0.0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;osgi&gt;provinstall org.wso2.carbon.tools.feature.group 2.0.0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_S93Ac0EllBE/SlbkqKoyELI/AAAAAAAAAVQ/M2jgmfWWDz8/s1600-h/p2-3.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 233px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/SlbkqKoyELI/AAAAAAAAAVQ/M2jgmfWWDz8/s320/p2-3.JPG" alt="" id="BLOGGER_PHOTO_ID_5356720219864830130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now you must restart carbon server to apply the changes you have done to the server.&lt;br /&gt;Issue the following command to shutdown the server.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;osgi&gt;shutdownCarbon&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Start the server again using wso2server.bat{sh}&lt;br /&gt;&lt;br /&gt;After server is started, access management console using http://localhost:9443/carbon&lt;br /&gt;&lt;br /&gt;Log in to management console using the default admin credentials (admin/admin)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/Slbm9wJtw2I/AAAAAAAAAVY/_bEhuiBBRAE/s1600-h/p2-4.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 195px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/Slbm9wJtw2I/AAAAAAAAAVY/_bEhuiBBRAE/s320/p2-4.JPG" alt="" id="BLOGGER_PHOTO_ID_5356722755375842146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You should notice that the data services, service management and tools features are added to the carbon core platform. In other words, we have built our own server on top of carbon-core server.&lt;br /&gt;Simple.. isn't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-4389968877836340644?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/4389968877836340644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=4389968877836340644' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4389968877836340644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4389968877836340644'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/07/build-your-own-server-using-wso2-carbon.html' title='Build your own server using WSO2 Carbon components'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_S93Ac0EllBE/SlbZ5ziWP2I/AAAAAAAAAVA/cs8GoHcDAd8/s72-c/p2-1.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-8510092050479580872</id><published>2009-07-08T22:13:00.000-07:00</published><updated>2009-07-08T22:32:51.219-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><title type='text'>How to deploy CARBON based WSO2 products on non-ROOT web context</title><content type='html'>The latest versions of WSO2 carbon product family is available for &lt;a href="http://wso2.org/projects/carbon"&gt;download&lt;/a&gt; now. This version consists of a lot of feature enhancements and bug fixes.  All products are free, no hidden costs!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WSO2 Carbon based products (WSO2 WSAS, WSO2 ESB, WSO2 IS, WSO2 Governance Registry)&lt;/span&gt; can be deployed on any application server with minimum configuration steps. When you are setting up a web application on an application server, you must change the web context of web app. Even if you use WSO2 carbon based product in standalone mode, you may need to change the default ROOT web context.&lt;br /&gt;&lt;br /&gt;You can change the web context easily with two steps.&lt;br /&gt;&lt;br /&gt;1. Open CARBON_HOME/conf/carbon.xml and change the following parameter.&lt;br /&gt;&lt;br /&gt;&amp;lt;WebContextRoot&amp;gt;/&amp;lt;/WebContextRoot&amp;gt;&lt;br /&gt;&lt;br /&gt;CARBON_HOME is the location where you extracted the binary distribution.&lt;br /&gt;&lt;br /&gt;Suppose you need to change the web context of WSO2 WSAS to wsas. Then simply edit it as follows.&lt;br /&gt;&lt;br /&gt;&amp;lt;WebContextRoot&amp;gt;/wsas&amp;lt;/WebContextRoot&amp;gt;&lt;br /&gt;&lt;br /&gt;2. Now you need to rename the carbon web app directory to match with the above web context.&lt;br /&gt;Go to CARBON_HOME/webapps directory and rename ROOT to wsas.&lt;br /&gt;&lt;br /&gt;Thats all! Start carbon server (i.e:  WSO2 WSAS) and access administration console using the following URL&lt;br /&gt;&lt;br /&gt;https://&amp;lt;hostname&amp;gt;:&amp;lt;port&amp;gt;/wsas/carbon&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-8510092050479580872?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/8510092050479580872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=8510092050479580872' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8510092050479580872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8510092050479580872'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/07/how-to-deploy-carbon-based-wso2.html' title='How to deploy CARBON based WSO2 products on non-ROOT web context'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-7259115151932086833</id><published>2009-07-05T20:51:00.000-07:00</published><updated>2009-07-05T21:51:00.118-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General Quality Assurance'/><title type='text'>Complexity of middleware testing</title><content type='html'>I have been testing SOA middleware applications for nearly 3 years. I also tested traditional CRM, Telco billing applications for more than 4 years. Quality assurance of middle ware is completely different from the traditional business application testing. It requires a lot of effort. I have observed following facts/concerns which related to middleware testing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Target audience/end users of middleware apps&lt;/span&gt;&lt;br /&gt;Most middleware products are developed for the use of highly technical tasks and they are used by programmers. When it comes to SOA middleware, product end-users are technically savy engineers. Therefore when testing them, QA/test teams should understand the purpose of it,  target audience and act accordingly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Complexity of applications&lt;/span&gt;&lt;br /&gt;The developers understand the use cases of middleware applications when implementing them. Obviously without knowing the requirements, they can't be implemented. Therefore the developers of middleware applications gets the knowledge of the application under development while it is being developed regardless of the complexity of it.&lt;br /&gt;This is not applicable for QA/testers. In agile like processes, due to the release crunch, QA gets no time to learn the use of middleware.  They do not even get time to derive test cases/scenarios. So, QA teams are forced to test applications with these limitations.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Test Automation&lt;/span&gt;&lt;br /&gt;Majority of the middle ware application tests can be automated. However, it cannot be done by overnight. Without having a better understanding of the applications, no body can automate them. Automation is highly effective for middleware testing.&lt;br /&gt;Having said that, I must emphasize that, automation is not the solution for everything. Specially in middleware testing, human intervention is critical. If you are a middleware tester, you must live with the application and its surrounding technologies. You must learn the use cases of middle ware app and apply them to derive more and more test scenarios.  In my career, 80% of highly severe bugs were uncovered by exploratory testing.&lt;br /&gt;&lt;br /&gt;It takes times to learn the technologies behind middleware apps. It takes time to understand the use of them. A content management system or a telco billing application can be learned and understand with considerably less time and effort. However, middleware applications are different and deriving use cases are not simple.&lt;br /&gt;&lt;br /&gt;If you have any doubts about the complexity of middleware testing, the best way to clarify them  is to involve in middleware testing for few days. Work with middleware test teams. Then you can understand the real situation and issues behind it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-7259115151932086833?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/7259115151932086833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=7259115151932086833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7259115151932086833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7259115151932086833'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/07/complexity-of-middleware-testing.html' title='Complexity of middleware testing'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-409466889748626524</id><published>2009-06-27T19:27:00.000-07:00</published><updated>2009-06-27T20:36:36.190-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BAM'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Governance Registry'/><title type='text'>Business activity monitoring (BAM) with WSO2 Governance Registry</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Business_activity_monitoring"&gt;BAM&lt;/a&gt; refers to the aggregation, analysis, and presentation of real time information about activities inside organizations and involving customers and partners. The main benefits of BAM are to enable an enterprise to make better informed business decisions, quickly address problem areas, and re-position organizations to take full advantage of emerging opportunities.&lt;br /&gt;BAM solutions often present information on dash boards using various graphs.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wso2.org/projects/governance-registry"&gt;&lt;span style="font-weight: bold;"&gt;WSO2 Governance Registry  &lt;/span&gt;&lt;/a&gt;provides with BAM functionality which enables users to aggregate various web services data and visualize them using dashboard gadgets. In this post, I'll describe how you can add a remote server for monitoring and generate graphs.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pre-requisites:&lt;/span&gt;&lt;br /&gt;Download and install (Unzip the binary) WSO2 Governance Registry-3.0.0-beta1 release from &lt;a href="http://wso2.org/downloads/governance-registry"&gt;here &lt;/a&gt;&lt;br /&gt;We will refer to the unzipped directory, Greg_Home&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;Start WSO2 Governance Registry server by running wso2server.bat{sh} from Greg_Home/bin&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;Access the management console of Governance Registry by using https://localhost:9443/carbon&lt;br /&gt;You can log in to the console with default administrator credentials (admin/admin).&lt;br /&gt;You will be landed in the Home page of WSO2 Governance Registry.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/SkbbGeS316I/AAAAAAAAAUY/6MLsVJZYCA4/s1600-h/blog-1.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 195px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/SkbbGeS316I/AAAAAAAAAUY/6MLsVJZYCA4/s320/blog-1.JPG" alt="" id="BLOGGER_PHOTO_ID_5352206111434332066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Step 3&lt;br /&gt;As the first step of activity monitoring,  we need to add a server from which the data can be collected. In this post, I'll use a &lt;span style="font-weight: bold;"&gt;WSO2 Web Services Application Server (WSAS) &lt;/span&gt;instance running on my local machine as the monitored server.&lt;br /&gt;&lt;br /&gt;Click on &lt;span style="font-weight: bold;"&gt;Monitoring servers&lt;/span&gt; at the left navigation of WSO2 Governance Registry console. You will be directed to the Monitored servers page. Click on &lt;span style="font-weight: bold;"&gt;Add server&lt;/span&gt; link to add an external server for monitoring.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_S93Ac0EllBE/SkbdD8wDHgI/AAAAAAAAAUg/z3n8MhI6Txo/s1600-h/blog-2.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 195px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/SkbdD8wDHgI/AAAAAAAAAUg/z3n8MhI6Txo/s320/blog-2.JPG" alt="" id="BLOGGER_PHOTO_ID_5352208267093417474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Suppose the WSAS server instance (the monitored server) is running on https port 9444 on my local machine.&lt;br /&gt;Enter the serverURL, https://localhost:9444&lt;br /&gt;Enter WSAS administrator credentials (username=admin, password=admin)&lt;br /&gt;Click on Add. You will get "Server successfully added" message.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now we have added a server instance to monitor. Lets gather the service statistics and configure dashboard gadgets to visualize data.&lt;br /&gt;Click on &lt;span style="font-weight: bold;"&gt;Main Dashboard&lt;/span&gt; in the left navigation menu of Governance Registry management console. You will see the Dashboard page as follows.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_S93Ac0EllBE/Skbe4ewNNNI/AAAAAAAAAUo/4Yr4tPaa7ls/s1600-h/blog-3.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 195px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/Skbe4ewNNNI/AAAAAAAAAUo/4Yr4tPaa7ls/s320/blog-3.JPG" alt="" id="BLOGGER_PHOTO_ID_5352210269085709522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 5&lt;/span&gt;&lt;br /&gt;Select the first gadget, &lt;span style="font-weight: bold;"&gt;Messages received in last minute&lt;/span&gt;, and click on configure tab. Select https://localhost:9444 from the server dropdown list.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_S93Ac0EllBE/SkbgEkkL9hI/AAAAAAAAAUw/htgqLufwUvs/s1600-h/blog-4.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 195px;" src="http://2.bp.blogspot.com/_S93Ac0EllBE/SkbgEkkL9hI/AAAAAAAAAUw/htgqLufwUvs/s320/blog-4.JPG" alt="" id="BLOGGER_PHOTO_ID_5352211576315966994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;When you select a server from the drop down list, the services list will also get populated, so that you can select one of the services hosted in your server. In this example, I'll use the default HelloService.&lt;br /&gt;Now click on &lt;span style="font-weight: bold;"&gt;Display&lt;/span&gt; tab. An empty graph will be shown as given below.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/SkbifXgXBhI/AAAAAAAAAU4/dQ_87gowxK4/s1600-h/blog-5.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 195px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/SkbifXgXBhI/AAAAAAAAAU4/dQ_87gowxK4/s320/blog-5.JPG" alt="" id="BLOGGER_PHOTO_ID_5352214235689977362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 6&lt;/span&gt;&lt;br /&gt;Now, invoke HelloService multiple times (you can use Tryit tool or SOAPUI) and refresh the dashboard.&lt;br /&gt;You will see that the Messages received in last minute graph is being populated.&lt;br /&gt;&lt;br /&gt;Similarly, you could try with the other graphs as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-409466889748626524?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/409466889748626524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=409466889748626524' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/409466889748626524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/409466889748626524'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/06/business-activity-monitoring-bam-with.html' title='Business activity monitoring (BAM) with WSO2 Governance Registry'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_S93Ac0EllBE/SkbbGeS316I/AAAAAAAAAUY/6MLsVJZYCA4/s72-c/blog-1.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-5941720144944750809</id><published>2009-06-27T18:47:00.000-07:00</published><updated>2009-06-27T18:52:56.650-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2'/><title type='text'>WSO2 SOA Summer School - Security in SOA</title><content type='html'>&lt;a href="http://www.linkedin.com/in/prabathsiriwardena"&gt;Prabath Siriwardana&lt;/a&gt;, a colleague at WSO2, doing a webinar on Security in SOA on 2nd of July 2009.&lt;br /&gt;You can register from &lt;a href="http://wso2.org/training/security_in_soa"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-5941720144944750809?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/5941720144944750809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=5941720144944750809' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5941720144944750809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/5941720144944750809'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/06/wso2-soa-summer-school-security-in-soa.html' title='WSO2 SOA Summer School - Security in SOA'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-725847090519964384</id><published>2009-06-14T03:58:00.000-07:00</published><updated>2009-06-14T04:27:02.986-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='General Quality Assurance'/><title type='text'>Importance of defect isolation</title><content type='html'>&lt;span style="font-style: italic; font-weight: bold; color: rgb(0, 0, 153);"&gt;A problem well stated is half solved&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;True! A good bug report should provide with the information to reproduce the issue. It is QA tester's responsibility to specify the exact steps of bug recreation. Isolating the environment and conditions at which the issue occurred are extremely important components of a defect report.&lt;br /&gt;&lt;br /&gt;Sadly I have seen some people ignore these important practices due to tight schedules and rush testing processes. No! In any case, even with management push towards quicker feedback of the products under test, ignoring these vital practices are totally unacceptable. Your bug report mirrors the professionalism of software QA testing job. Developers do not waste time or jump in to assumptions by reading your bug report. It provides all the necessary details. It consists of logs, screen shots when they are required.&lt;br /&gt;&lt;br /&gt;A good QA tester must isolate the issue first. He never reports bugs just by seeing an exception in server console. He attempts multiple instances to recreate and isolate the issue. Some failures can be repeated easily but some requires more effort. Then prepare a detailed defect report.&lt;br /&gt;&lt;br /&gt;As &lt;a href="http://www.kaner.com/"&gt;Cem Karner&lt;/a&gt; said, "there are no intermittent software errors. The problem may appear rarely but each time the exact conditions occur, the behavior will repeat&lt;span style="font-family:Times;font-size:100%;"&gt;&lt;span style="font-size: 13px; font-family: Times;"&gt;".&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;More to follow....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-725847090519964384?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/725847090519964384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=725847090519964384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/725847090519964384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/725847090519964384'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/06/importance-of-defect-isolation.html' title='Importance of defect isolation'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-223024472918755065</id><published>2009-05-01T08:35:00.001-07:00</published><updated>2009-05-01T09:14:42.287-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Emma'/><category scheme='http://www.blogger.com/atom/ns#' term='Test Coverage'/><title type='text'>Run time code coverage using Emma</title><content type='html'>&lt;a href="http://emma.sourceforge.net/"&gt;Emma &lt;/a&gt;is a free java code coverage tool which measures and reports code coverage of java based products. The most important and usable factor of Emma is, its ability to measure code coverage during the application runtime. At WSO2, we have been searching for a tool to get QA test coverage of our middleware products. Automated QA tests are executed against the binary products. Therefore, source level unit test coverage does not help to identify the figures of QA test coverage. Emma was the best tool which satisfied our requirements.&lt;br /&gt;&lt;br /&gt;The procedure is quite simple. Suppose you are going to get the coverage of a binary which obviously contains hundred of jars. First, you need to prepare a list of jars which requires to be instrumented. The list can be prepared easily in *nix environments as follows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;xargs -n 1 $JAVA_HOME/jre/bin/java -cp emma.jar emma instr -m overwrite -cp &lt; jarlist.txt&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;This inserts tracking code to the jars listed in jarlist.txt.&lt;br /&gt;&lt;br /&gt;Now, you should restart your application and Emma starts to gather coverage data. If you have an automated functional test suite, run it over the instrumented binary or test the product manually.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;After completing the testing, stop your application. Now, we need to generate the coverage report. Issue the following command.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;java -cp emma.jar emma report -r html -in coverage.em,coverage.ec&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;This generates an html report as shown below.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/SfseaTCipLI/AAAAAAAAATc/aUo8rk_XCRk/s1600-h/coverage1.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 195px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/SfseaTCipLI/AAAAAAAAATc/aUo8rk_XCRk/s320/coverage1.JPG" alt="" id="BLOGGER_PHOTO_ID_5330888021059478706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_S93Ac0EllBE/Sfsemmhv2-I/AAAAAAAAATk/XAyVqPqyiWg/s1600-h/coverage2.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 195px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/Sfsemmhv2-I/AAAAAAAAATk/XAyVqPqyiWg/s320/coverage2.JPG" alt="" id="BLOGGER_PHOTO_ID_5330888232449072098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Currently, we are in the process of developing a selenium based automation framework and we use this test coverage mechanism to find out the components which require more tests.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-223024472918755065?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/223024472918755065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=223024472918755065' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/223024472918755065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/223024472918755065'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/05/run-time-code-coverage-using-emma.html' title='Run time code coverage using Emma'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_S93Ac0EllBE/SfseaTCipLI/AAAAAAAAATc/aUo8rk_XCRk/s72-c/coverage1.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-1639012987702839485</id><published>2009-04-28T00:45:00.000-07:00</published><updated>2009-04-28T01:15:52.394-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='WSAS'/><title type='text'>How to deploy WSO2 WSAS-3.* on JBoss</title><content type='html'>&lt;span&gt;&lt;a href="http://wso2.org/projects/wsas/java"&gt;&lt;span style="font-weight: bold;"&gt;WSO2 WSAS&lt;/span&gt;&lt;/a&gt; can be deployed on most of the application servers with a simple set of configuration steps. This post describes the steps to deploy WSO2 WSAS-3.* on JBOSS 5.*&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Step 1&lt;/span&gt;&lt;br /&gt;Download WSO2 WSAS-3.0.1 from &lt;a href="http://wso2.org/projects/wsas/java"&gt;here&lt;/a&gt;. Extract the downloaded zip into a directory. Copy conf, database, repository and resources directories in to a new folder. Here after, we will refer it is wsas-repo (i.e:- C:\wsas\wsas-repo)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;Lets refer to your jboss installation directory, JBOSS_HOME. Go to JBOSS_HOME\server\default\deploy directory and create a new folder, wso2wsas.war.&lt;br /&gt;Now, copy wso2wsas-3.0.1\webapps\ROOT\WEB-INF to JBOSS_HOME\server\default\deploy\wso2wsas.war&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step3&lt;/span&gt;&lt;br /&gt;We need to enable https in JBOSS. Therefore, edit JBOSS_HOME\server\default\deploy\jbossweb.sar\server.xml by editing the following entry. (This entry is commented out by default)&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- SSL/TLS Connector configuration using the admin devl guide keystore--&amp;gt;&lt;br /&gt;      &amp;lt;Connector protocol="HTTP/1.1" SSLEnabled="true"&lt;br /&gt;           port="8443" address="${jboss.bind.address}"&lt;br /&gt;           scheme="https" secure="true" clientAuth="false"&lt;br /&gt;           keystoreFile="&lt;span style="font-weight: bold;"&gt;C:\wsas\wsas_repo\resources\security\wso2carbon.jks&lt;/span&gt;"&lt;br /&gt;           keystorePass="wso2carbon" sslProtocol = "TLS" /&amp;gt;&lt;br /&gt;&lt;br /&gt;Make sure to give the exact location of wso2carbon.jks as highlighted above.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We have done the configurations required inJBoss. Now, we must do the necessary configurations in a set of config files shipped with WSO2 WSAS. We will update carbon.xml, axis2.xml, registry.xml and user-mgt.xml which can be found at wsas-repo\conf directory.&lt;br /&gt;First, open carbon.xml and update the &lt;span style="font-weight: bold;"&gt;ServerURL&lt;/span&gt; element as follows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;ServerURL&amp;gt;https://localhost:8443/wso2wsas/services/&amp;lt;/ServerURL&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Note that we have configured tomcat to run on 8443&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;port&lt;span style="font-weight: bold;"&gt;.&lt;br /&gt;&lt;/span&gt;Save and close carbon.xml.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Open &lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;registry.xml &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;and&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;update DB URL as follows.&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&amp;lt;url&amp;gt;jdbc:derby:C:/wsas/wsas-repo/database/WSO2CARBON_DB;create=true&amp;lt;/url&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;Now, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;open&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;user-mgt.xml&lt;/span&gt; and update database URL as follows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;url&amp;gt;jdbc:derby:C:/wsas/wsas-repo/database/WSO2CARBON_DB;create=true&amp;lt;/url&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;Make sure to specify the absolute path of the WSO2CARBON_DB&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;in both of the above elements.&lt;br /&gt;&lt;br /&gt;It is required to change the contextRoot in the service path of axis2.xml. Change it to  &lt;span style="font-weight: bold;"&gt;wso2wsas&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;parameter name="contextRoot"&amp;gt;/wso2wsas&amp;lt;/parameter&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We must change the http and https ports in &lt;span style="font-weight: bold;"&gt;In Transports&lt;/span&gt; section of axis2.xml as follows.&lt;br /&gt;&lt;br /&gt;  &amp;lt;transportReceiver name="http"&lt;br /&gt;                     class="org.wso2.carbon.core.transports.http.HttpTransportListener"&amp;gt;&lt;br /&gt;              &lt;span style="font-weight: bold;"&gt;&amp;lt;parameter name="port"&amp;gt;8080&amp;lt;/parameter&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/transportReceiver&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;transportReceiver name="https"&lt;br /&gt;                     class="org.wso2.carbon.core.transports.http.HttpsTransportListener"&amp;gt;&lt;br /&gt;   &lt;br /&gt;     &lt;span style="font-weight: bold;"&gt; &amp;lt;parameter name="port"&amp;gt;8443&amp;lt;/parameter&amp;gt;&lt;/span&gt;&lt;br /&gt;  &amp;lt;/transportReceiver&amp;gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 6&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We have completed the required configurations. Now, open a new command window and change the directory to JBOSS_HOME/bin.&lt;br /&gt;Define an environment variable called &lt;span style="font-weight: bold;"&gt;CARBON_HOME&lt;/span&gt; and set the path to your wsas-repo directory.&lt;br /&gt;&lt;br /&gt;In windows; set CARBON_HOME=C:\wsas\wsas-repo&lt;br /&gt;In linux; export CARBON_HOME=\home\user\wsas\wsas-repo&lt;br /&gt;&lt;br /&gt;Start JBoss from the same command window/shell.&lt;br /&gt;&lt;br /&gt;WSO2 WSAS will be started successfully. You can access the management console using https:\\localhost:8443\wso2wsas\carbon&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-1639012987702839485?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/1639012987702839485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=1639012987702839485' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/1639012987702839485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/1639012987702839485'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/04/how-to-deploy-wso2-wsas-3-on-jboss.html' title='How to deploy WSO2 WSAS-3.* on JBoss'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-8986130869700894639</id><published>2009-04-24T03:17:00.000-07:00</published><updated>2009-04-24T03:21:45.622-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSAS'/><title type='text'>How to deploy a Java web service on WSO2 WSAS and secure it with Username token policy</title><content type='html'>I demonstrate how to deploy a java web service on WSAS and secure it with user name token policy.&lt;br /&gt;&lt;br /&gt;&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/d_VQrmXbOWk&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/d_VQrmXbOWk&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-8986130869700894639?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/8986130869700894639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=8986130869700894639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8986130869700894639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8986130869700894639'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/04/how-to-deploy-java-web-service-on-wso2.html' title='How to deploy a Java web service on WSO2 WSAS and secure it with Username token policy'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-871172634364411918</id><published>2009-04-23T08:22:00.000-07:00</published><updated>2009-04-23T08:57:40.468-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Axis2'/><title type='text'>How to preserve the original WSDL when requesting ?wsdl of an Axis2 web service</title><content type='html'>&lt;span style="font-size:100%;"&gt;I have noticed a lot of queries in Axis2 forums on keeping the WSDL unchanged when issuing ?wsdl of a particular Axis2 web service.  This can easily be achieved by setting &lt;span style="font-weight: bold;"&gt;useOriginalwsdl &lt;/span&gt;parameter to true in services.xml. Then Axis2 shows the wsdl file placed at the META-INF directory of service archive when requesting ?wsdl&lt;br /&gt;&lt;br /&gt;Suppose your Axis2 service archive (*.aar) includes a test.wsdl in the META-INF directory. Now, you deploy your Axis2 service and issue http://&amp;lt;host&amp;gt;:&amp;lt;port&amp;gt;/services/&lt;yourservice&gt;?wsdl.&lt;br /&gt;Then, Axis2 generates a wsdl instead of your own wsdl placed in your service archive. How do you avoid this behavior?&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;Open your services.xml and add the following parameter.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;&amp;lt;parameter  name="useOriginalwsdl"&amp;gt;true&amp;lt;/parameter&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Now you will get the original wsdl when requesting ?wsdl of your service.&lt;br /&gt;Simple.. isn't it?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-871172634364411918?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/871172634364411918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=871172634364411918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/871172634364411918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/871172634364411918'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/04/how-to-preserve-original-wsdl-when.html' title='How to preserve the original WSDL when requesting ?wsdl of an Axis2 web service'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-9002386609676996948</id><published>2009-04-04T17:41:00.000-07:00</published><updated>2009-04-04T18:09:58.004-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FindBugs'/><category scheme='http://www.blogger.com/atom/ns#' term='Static Analyzers'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven2'/><title type='text'>How to add FindBugs maven plugin to your project</title><content type='html'>&lt;a href="http://findbugs.sourceforge.net/factSheet.html"&gt;FindBugs&lt;/a&gt; is a very useful static analyzer which inspects java bytecode for bug patterns. Static code inspection is important element in a good continuous integration process.  Integrating FindBugs to your Maven build system is extremely simple as follows.&lt;br /&gt;&lt;br /&gt;1. Add FindBugs maven2 plugin to the root pom of your maven project. You can add the plugin configuration element as a child of &amp;lt;reporting&amp;gt; element.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; &amp;lt;reporting&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;     &amp;lt;plugins&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;         &amp;lt;plugin&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;        &amp;lt;groupId&amp;gt;org.codehaus.mojo&amp;lt;/groupId&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        &amp;lt;artifactId&amp;gt;findbugs-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        &amp;lt;version&amp;gt;2.0&amp;lt;/version&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        &amp;lt;configuration&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        &amp;lt;xmlOutput&amp;gt;true&amp;lt;/xmlOutput&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        &amp;lt;xmlOutputDirectory&amp;gt;C:\projects&amp;lt;/xmlOutputDirectory&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;        &amp;lt;/configuration&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;      &amp;lt;/plugin&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;     &amp;lt;/plugins&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; &amp;lt;/reporting&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Note: The xmlOutputDiectory is hard coded intentionally for demonstration purpose.&lt;br /&gt;&lt;br /&gt;2. Go to the directory where the above pom.xml is placed and issue the following command.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;mvn findbugs:findbugs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This will generate an XML report in the specified output directory. Here is an excerpt from such report.&lt;br /&gt;&lt;br /&gt;&amp;lt;file classname="org.test.ExampleService"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;BugInstance type="OBL_UNSATISFIED_OBLIGATION" priority="Normal" category="EXPERIMENTAL" message="OBL: Method org.test.ExampleService.archiveFile(String, String) may fail to clean up stream or resource of type java.io.InputStream" lineNumber="69" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;BugInstance type="OBL_UNSATISFIED_OBLIGATION" priority="Normal" category="EXPERIMENTAL" message="OBL: Method org.test.utils.ArchiveManipulator.extract(String, String) may fail to clean up stream or resource of type java.io.InputStream" lineNumber="114" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;BugInstance type="OS_OPEN_STREAM" priority="Normal" category="BAD_PRACTICE" message="OS: org.test.utils.ArchiveManipulator.extractFromStream(InputStream, String) may fail to close stream" lineNumber="148" /&amp;gt;&lt;br /&gt;&lt;br /&gt;-------&lt;br /&gt;&lt;br /&gt;&amp;lt;BugInstance type="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" priority="Normal" category="BAD_PRACTICE" message="RV: org.test.utils.ArchiveManipulator.extractFromStream(InputStream, String) ignores exceptional return value of java.io.File.mkdirs()" lineNumber="124" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/file&amp;gt;&lt;br /&gt;&lt;br /&gt;Thats all! For more information about plugin usage and configuration parameters, havea look at the &lt;a href="http://mojo.codehaus.org/findbugs-maven-plugin/plugin-info.html"&gt;plugin home page&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-9002386609676996948?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/9002386609676996948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=9002386609676996948' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/9002386609676996948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/9002386609676996948'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/04/how-to-add-findbugs-maven-plugin-to.html' title='How to add FindBugs maven plugin to your project'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-7777786770425382737</id><published>2009-03-26T18:22:00.000-07:00</published><updated>2009-03-26T19:08:54.225-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='Selenium'/><category scheme='http://www.blogger.com/atom/ns#' term='Test Automation'/><title type='text'>Automated testing of wso2 products using Selenium</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_S93Ac0EllBE/Scw0z_IOl_I/AAAAAAAAATU/rax3EGQDVTU/s1600-h/big-logo.png"&gt;&lt;img style="cursor: pointer; width: 200px; height: 181px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/Scw0z_IOl_I/AAAAAAAAATU/rax3EGQDVTU/s320/big-logo.png" alt="" id="BLOGGER_PHOTO_ID_5317683327741630450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I have never been a fan of open source UI test automation tools due to the annoying issues of majority of them. Most of the tools provides you with a good first user experience however fails when try to use in advanced use cases. At &lt;a href="http://www.wso2.com/"&gt;WSO2&lt;/a&gt;, we have been looking for a test automation tool during the last few years. Due to the tight release schedules, we were not able to focus much on researches.&lt;br /&gt;At the end of 2008, WSO2 started to build its SOA product suite based on revolutionary &lt;a href="http://wso2.org/projects/carbon"&gt;Carbon platform&lt;/a&gt; and a new JSP based UI framework has been designed. When I got the initial builds of new WSO2 carbon products, I was curious about the possibility of automating user interface. I tried with one of the tools which we have tried once but never got a chance to continue working on. That is, &lt;span style="font-weight: bold;"&gt;Selenium&lt;/span&gt;! For me, it is the best open source tool I have used so far in my career.&lt;br /&gt;After the releases of WSO2 carbon based products, we have started to automate UI and functional use cases using &lt;a href="http://seleniumhq.org/"&gt;Selenium&lt;/a&gt;. We are making a rapid and steady progress so far with this great tool.&lt;br /&gt;&lt;br /&gt;We use &lt;a href="http://seleniumhq.org/projects/remote-control/"&gt;Selenium RC&lt;/a&gt; with Junit. All the test are written using Junit. WSO2 products are built using maven2 and eventually our test framework will be integrated to build system. We have already used maven selenium plugin and surefire plugin to integrate our tests with maven. With the power and high flexibility of Selenium we are in a good position of cross browser testing.&lt;br /&gt;&lt;br /&gt;While automating the product UIs with selenium, we had to overcome some blocking issues but thanks for the materials available in openQA forums and some nice blogs, we were able to resolve most of them. I'd appreciate Selenium team for their great vision and innovativeness of developing such a helpful free web automation tool.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-7777786770425382737?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/7777786770425382737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=7777786770425382737' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7777786770425382737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/7777786770425382737'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/03/automated-testing-of-wso2-products.html' title='Automated testing of wso2 products using Selenium'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_S93Ac0EllBE/Scw0z_IOl_I/AAAAAAAAATU/rax3EGQDVTU/s72-c/big-logo.png' height='72' width='72'/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-4450793281141048765</id><published>2009-03-19T18:15:00.000-07:00</published><updated>2009-03-19T18:52:35.118-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 ESB'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 BPS'/><category scheme='http://www.blogger.com/atom/ns#' term='WSAS'/><title type='text'>Adding BPEL features to WSO2 WSAS/ESB</title><content type='html'>A few days back, WSO2 has released &lt;a href="http://wso2.org/downloads/carbon/feature_packs"&gt;carbon feature packs&lt;/a&gt; which allow users to integrate various functional components into their existing WSO2 products. I blogged about &lt;a href="http://charithaka.blogspot.com/2008/12/how-to-plug-service-hosting-components.html"&gt;plugging in service hosting components into ESB &lt;/a&gt;while we were preparing for carbon release. With the carbon feature packs, now it is much more easier to add the functionalities what you want.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wso2.org/projects/bps"&gt;WSO2 BPS&lt;/a&gt; provides the facilities to execute business processes written using     the WS-BPEL standard. BPEL feature pack enables the business process management inside your WSO2 WSAS or ESB instances.&lt;br /&gt;Let's see how BPEL features can be added to WSO2 WSAS or ESB.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pre-requisites:&lt;/span&gt;&lt;br /&gt;Install &lt;a href="http://wso2.org/projects/wsas/java"&gt;WSO2 WSAS-3.0.1&lt;/a&gt; or &lt;a href="http://wso2.org/projects/esb/java"&gt;WSO2 ESB-2.0.1&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;We are hoping to install BPEL features into WSAS or ESB. Therefore, download BPEL feature pack from &lt;a href="http://wso2.org/downloads/carbon/feature_packs"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;Unzip the downloaded feature pack into a directory in your file system (suppose it is $BPEL_feature_pack_home)&lt;br /&gt;You will see two sub directoris inside the extracted zip file, plugins and repository.&lt;br /&gt;&lt;br /&gt;Go to $BPEL_feature_pack_home/plugins/ directory and copy all the jars to WSAS_HOME/webapps/ROOT/WEB-INF/plugins/ directory. (WSAS_HOME is the root directory of your WSO2 WSAS instance)&lt;br /&gt;&lt;br /&gt;Then, go to $BPEL_feature_pack_home/repository directory and copy the contents to WSAS_HOME/repository.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;Restart WSO2 WSAS and access management console. You will see the BPEL features shown in the left menu as follows.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_S93Ac0EllBE/ScL2P1fUX8I/AAAAAAAAATM/Wse7pJ-LA-I/s1600-h/bps-fp.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 195px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/ScL2P1fUX8I/AAAAAAAAATM/Wse7pJ-LA-I/s320/bps-fp.JPG" alt="" id="BLOGGER_PHOTO_ID_5315081262167515074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thats it. We have installed BPEL features into WSAS. You could follow the same steps to install BPEL features into WSO2 ESB.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-4450793281141048765?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/4450793281141048765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=4450793281141048765' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4450793281141048765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/4450793281141048765'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/03/adding-bpel-features-to-wso2-wsasesb.html' title='Adding BPEL features to WSO2 WSAS/ESB'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_S93Ac0EllBE/ScL2P1fUX8I/AAAAAAAAATM/Wse7pJ-LA-I/s72-c/bps-fp.JPG' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-8097682179283383032</id><published>2009-02-19T20:59:00.000-08:00</published><updated>2009-02-19T21:44:35.266-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><title type='text'>Performing QA with last minute code changes</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_S93Ac0EllBE/SZ449B5S95I/AAAAAAAAAS0/aZb_7wwf8oI/s1600-h/monkeyblame-719639.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 288px;" src="http://3.bp.blogspot.com/_S93Ac0EllBE/SZ449B5S95I/AAAAAAAAAS0/aZb_7wwf8oI/s320/monkeyblame-719639.jpg" alt="" id="BLOGGER_PHOTO_ID_5304740032220952466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Changes are inevitable at the last moments of most projects. There are urgent requirements to do such changes and there will be situations where you&lt;br /&gt;must do some critical fixes before shipping the product. In any case, both development and QA teams must be in a common understanding on how such changes affect the stability of the AUT (Application under test).&lt;br /&gt;Sometimes, it will be required to repeat a complete functional test cycle after a significant change. In such cases, sufficient time must be allocated to do a full round of functional testing.&lt;br /&gt;Or else, everyone (both development and QA) should take the responsibility if something goes wrong.&lt;br /&gt;It is a common practice in most organizations to transfer responsibility to QA teams when clients find issues in a product after a release, which is not always valid in agile processes where everyone test and contribute to quality assurance regardless of their title/role playing in the project. &lt;br /&gt;After doing a significant change at the last moment without providing enough time to complete the testing on affected areas, there is no point to blame QA. Everyone should take the responsibility.&lt;br /&gt;This is one of the weird situations most QA teams come across regardless of the process being followed. With better understanding about the tasks and responsibilities of each other, project teams can avoid these concerns. Otherwise, rigid hard core processes must be followed although they are not always realistic.&lt;br /&gt;After all, each team member should understand that QA is not a trivial activity. It takes time and effort to setup and configure test environments, uncover bugs, reproduce them in different platforms, report through defect tracking systems, verify the reported bugs in new builds, ensure the issues are not regressed.&lt;br /&gt;A few months back,  &lt;a href="http://opensource-soa.blogspot.com/"&gt;Krishantha&lt;/a&gt; posted &lt;a href="http://softwareqaq.blogspot.com/2008/03/i-missed-bug.html"&gt;a nice blog entry&lt;/a&gt; about how last minute changes affect software QA testing which is a good reference for anyone interested in this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-8097682179283383032?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/8097682179283383032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=8097682179283383032' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8097682179283383032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/8097682179283383032'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/02/performing-qa-with-last-minute-code.html' title='Performing QA with last minute code changes'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_S93Ac0EllBE/SZ449B5S95I/AAAAAAAAAS0/aZb_7wwf8oI/s72-c/monkeyblame-719639.jpg' height='72' width='72'/><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-1871044175721706054</id><published>2009-02-19T03:43:00.000-08:00</published><updated>2009-02-19T05:13:23.541-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='JMX'/><title type='text'>Switching wso2 carbon server to maintenance mode</title><content type='html'>When wso2 &lt;a href="http://wso2.org/projects/carbon"&gt;carbon&lt;/a&gt; server (WSO2 WSAS, ESB, Registry and BPS) is running in production environments, it may be required to perform some essential upgrades without shutting down the server.&lt;br /&gt;[WSO2 Carbon is the base platform for all WSO2 Java products. wso2 carbon server refers to any of WSAS, ESB, Registry or BPS server]&lt;br /&gt;&lt;br /&gt;WSO2 Carbon based products are equipped with&lt;a href="http://charithaka.blogspot.com/2008/08/how-to-use-jconsole-to-monitor-and.html"&gt; JMX based monitoring&lt;/a&gt; and management facilities, through which you can switch to maintenance mode.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;In order to enable JMX management, you must uncomment  the JMX port element in CARBON_HOME/conf/carbon.xml&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;lt;Ports&amp;gt;&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;       &amp;lt;!--&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;           The JMX Port&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;        --&amp;gt;&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;       &lt;/span&gt; &lt;span style="font-weight: bold;"&gt;        &amp;lt;JMX&amp;gt;9999&amp;lt;/JMX&amp;gt;&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;        &lt;/span&gt; &lt;span style="font-weight: bold;"&gt;    &amp;lt;/Ports&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;CARBON_HOME is the directory where you extracted wso2wsas-3.0, wso2esb-2.0, wso2-registry-2.0 or wso2-bps-1.0 binary distributions.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Start your WSO2 carbon server (WSAS, ESB, Registry or BPS).&lt;br /&gt;You will notice that the JMX service URL will be printed in the startup console as follows.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_S93Ac0EllBE/SZ1LNgXuokI/AAAAAAAAASk/HTcdan23HIA/s1600-h/jmx1.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_S93Ac0EllBE/SZ1LNgXuokI/AAAAAAAAASk/HTcdan23HIA/s320/jmx1.JPG" alt="" id="BLOGGER_PHOTO_ID_5304478631512154690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can use JConsole as the client for JMX monitoring and management.  Start command prompt (or shell in linux), type Jconsole and hit enter. JConsole:Connect to Agent window will be popped up.&lt;br /&gt;Enter JMX url (&lt;span&gt;service:jmx:rmi:///jndi/rmi://YourHost:9999/server)&lt;br /&gt;Enter admin as user name and password. Note that, any user with admin privileges can log in to JMX.&lt;br /&gt;Click on Connect.&lt;/span&gt;&lt;br /&gt;Select MBeans--&gt;org.wso2.carbon--&gt;ServerAdmin--&gt;Operations&lt;br /&gt;You will see the following server admin operations.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_S93Ac0EllBE/SZ1MVWo8GvI/AAAAAAAAASs/W8Qo24tWK0I/s1600-h/jmx2.JPG"&gt;&lt;img style="cursor: pointer; width: 320px; height: 250px;" src="http://1.bp.blogspot.com/_S93Ac0EllBE/SZ1MVWo8GvI/AAAAAAAAASs/W8Qo24tWK0I/s320/jmx2.JPG" alt="" id="BLOGGER_PHOTO_ID_5304479865850567410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Suppose you have a web service which is in the process of responding to a client. Now, you may want to do some upgrades in the server without shutting it down.&lt;br /&gt;Click on &lt;span style="font-weight: bold;"&gt; startMaintenance()&lt;/span&gt; button in the jconsole.&lt;br /&gt;Now server is being running on maintenance mode. It does not accepts service requests  in this mode. Your client application may get "org.apache.axis2.AxisFault: Connection refused" error.&lt;br /&gt;&lt;br /&gt;After server upgrade is done, click on &lt;span style="font-weight: bold;"&gt;endMaintenance() &lt;/span&gt;button. Server will be switching back to normal mode. You will notice that the message transmission of your client will be resumed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5949896138631643846-1871044175721706054?l=charithaka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://charithaka.blogspot.com/feeds/1871044175721706054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5949896138631643846&amp;postID=1871044175721706054' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/1871044175721706054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5949896138631643846/posts/default/1871044175721706054'/><link rel='alternate' type='text/html' href='http://charithaka.blogspot.com/2009/02/switching-wso2-carbon-server-to.html' title='Switching wso2 carbon server to maintenance mode'/><author><name>Charitha</name><uri>http://www.blogger.com/profile/00209392844529688942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://bp2.blogger.com/_S93Ac0EllBE/R_BzL_atdlI/AAAAAAAAAFE/BK35nf_yoys/S220/P3300080.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_S93Ac0EllBE/SZ1LNgXuokI/AAAAAAAAASk/HTcdan23HIA/s72-c/jmx1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5949896138631643846.post-3273299408294610092</id><published>2009-02-17T00:44:00.000-08:00</published><updated>2009-02-17T01:56:47.344-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 Carbon'/><category scheme='http://www.blogger.com/atom/ns#' term='WSO2 BPS'/><title type='text'>How to deploy WSO2 BPS on Apache Tomcat</title><content type='html'>&lt;a href="http://wso2.org/projects/bps"&gt;&lt;span style="font-weight: bold;"&gt;WSO2 Business Process Server (BPS) -1.0&lt;/span&gt;&lt;/a&gt; is the latest member of WSO2 SOA platform. I have demonstrated a basic scenario using WSO2 BPS standalone distribution in a &lt;a href="http://charithaka.blogspot.com/2009/02/quick-look-at-wso2-business-process.html"&gt;previous blog post&lt;/a&gt;. WSO2 BPS (and all other carbon based products) can be deployed in most of the servlet containers with a few configuration steps. Lets deploy WSO2 BPS on Apache tomcat 6.*.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1&lt;/span&gt;&lt;br /&gt;Download WSO2 BPS-1.0 from &lt;a href="http://wso2.org/projects/bps"&gt;here&lt;/a&gt;. Extract the downloaded zip into a directory. Copy conf, database, repository and resources directories in to a new folder. Say it is carbon
