tag:blogger.com,1999:blog-121638472024-03-07T01:40:40.873-08:00Ravi's Musingsraviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.comBlogger118125tag:blogger.com,1999:blog-12163847.post-7485369912740691002015-10-19T21:28:00.001-07:002015-10-19T21:28:24.013-07:00HTTPS for route urls on Bluemix<div dir="ltr" style="text-align: left;" trbidi="on">
The displayed url of the routes of the apps on Bluemix start with http and did you know that the https is supported (implicitly), well, this had been my recent finding. The next question would be how to enforce routing via https only and not through http. I prefer to do it programmatically, nevertheless, am exploring more on the options offered by Bluemix. The idea is to get the scheme of the incoming request using request.getScheme(), check if it is equal to http then redirect to https url. For a traditional java web app this could be achieved by using a Servlet Filter and for spring based applications create a CustomHandler extending the HandlerInterceptorAdapter, override the preHandle() method. If you are using Spring Boot, the main class need to extend the WebMvcConfigurerAdapter and override the addInterceptor() method to add the CustomHandler to the registry. </div>
raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-14267220104907785862015-09-13T19:25:00.005-07:002015-09-13T19:25:48.571-07:00AWS in plain english<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
Came across <a href="https://www.expeditedssl.com/aws-in-plain-english" target="_blank">this site</a> via a friend, has info about various services and capabilities of Bluemix. Good One, nicely compiled and tabulated.</div>
raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-91124661381143308112015-09-07T03:56:00.002-07:002015-09-07T03:56:20.632-07:00Stackifier<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
I came across the <a href="http://www.stackifier.com/" target="_blank">Stackifier</a> today. You just need to paste the stack trace on the left side and it nicely categorizes [not sure if this is the right word here, ;) ] on the right side of your screen. Most of the libraries are already added and there is an option to add more. This tool comes handy if you are debugging a prod issue while listening to the proceedings of the SEV1 call. </div>
raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-69974871934263570822015-09-01T21:43:00.003-07:002015-09-01T21:43:44.186-07:00Calculating Cloud ROI<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
One of my colleagues pointed me to this very good article on <a href="http://www.isaca.org/knowledge-center/research/researchdeliverables/pages/calculating-cloud-roi-from-the-customer-perspective.aspx" target="_blank">calculating Cloud ROI from a customer perspective</a>, interesting read.</div>
raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-34705839761277405732015-08-31T23:08:00.003-07:002015-08-31T23:52:17.594-07:00NodeJS App running on IBM Container hosted on Bluemix<div dir="ltr" style="text-align: left;" trbidi="on">
In this post, I'll develop a simple nodejs app, that does no more than saying 'Hello World' and run this app from a IBM container on Bluemix. The purpose of this blog entry is to use the IBM Container Extension (ice, for short) to build a docker image and run it on Bluemix. I have attempted to make it step by step, do-it-yourself kind of a post with screenshots as applicable. If you have any questions, drop a comment and I'll answer it. Let's get started.<br />
<br />
Pre-req:<br />
<ol style="text-align: left;">
<li>Valid Bluemix account. In case you don't have it, sign up for a 30 day trial on http://bluemix.net. Create a namespace/private repo by clicking the containers icon on the dashboad, this is a one time activity and your images will be stored in registry.ng.bluemix.net/<your private="" repo=""><br /></your></li>
<li>Cloud Foundry command line installed. You can download the installer for your OS from https://github.com/cloudfoundry/cli#downloads.</li>
<li>Docker installed on your machine. I'd be using docker toolbox (Docker 1.8.1) but the commands would work fine with boot2docker (Docker 1.7) as well.</li>
<li>IBM Container extension. You'd need to install python and use pip to get the ice CLI. If you are using a Mac OS (like me) install Homebrew that'd take care of installing setuptools and pip. If you are using Windows, follow the instructions on this URL - https://developer.ibm.com/answers/questions/201614/how-to-install-the-ice-cli-to-manage-containers-on.html. Note: I prefer to use ice for all the container extension commands, you can use cf ic as well.</li>
</ol>
After installing the pre-reqs, check the installations using the docker -v and ice version commands from the terminal or command prompt, you should see something similar to the image below<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT8Xj-WqHEZ-m_kEJnMMP6DyyNk9ulSJrsgGZ0X78MoG2UkIHZAMgk2g2qNYgbyJWoPYzFJEK9VnCvee7qFW2rUV00AdwOsJSKrpcF_NKZEqWseO6rrjH4MHdVkt8f1B8WLX_iGA/s1600/Screen+Shot+2015-09-01+at+10.21.01+am.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="75" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT8Xj-WqHEZ-m_kEJnMMP6DyyNk9ulSJrsgGZ0X78MoG2UkIHZAMgk2g2qNYgbyJWoPYzFJEK9VnCvee7qFW2rUV00AdwOsJSKrpcF_NKZEqWseO6rrjH4MHdVkt8f1B8WLX_iGA/s320/Screen+Shot+2015-09-01+at+10.21.01+am.png" width="320" /></a></div>
<br />
Start the docker daemon using docker-machine start default, note that default is the name of my vm, it is the vm that is installed by docker toolbox. From the terminal set the required environment variables for the docker client on the terminal, using docker-machine env default command, alternately you can wrap it inside an eval on terminal if you are using Mac.<br />
<br />
After starting the docker daemon and having the docker client ready, issue the <b>ice login</b> command. This will prompt for the username and password, key in your Bluemix credentials and you should see that Login succeeded.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0pb8jOGuapSxd6msJE_xjKa6vdG84Ed5PZBG8wKb6H2GXS0P-yqk91hKTZH2yPkeG5qsWnbgeWzGEtElSHSVkG8Y7lL0yUQbfRw6jj93KU5CVgTTed4NlZwl51kSfova_rh-BUA/s1600/Screen+Shot+2015-09-01+at+10.42.32+am.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="77" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0pb8jOGuapSxd6msJE_xjKa6vdG84Ed5PZBG8wKb6H2GXS0P-yqk91hKTZH2yPkeG5qsWnbgeWzGEtElSHSVkG8Y7lL0yUQbfRw6jj93KU5CVgTTed4NlZwl51kSfova_rh-BUA/s320/Screen+Shot+2015-09-01+at+10.42.32+am.png" width="320" /></a></div>
<br />
Now, get the list of images available by issuing <b>ice images</b> command, this will bring up all the available images from the repository.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEkyg7e9SumLyjO0ZgO-rEFNfyEl7rjLBDwtT6shBP2ME2MA31WiqkqxLdanu2ZW2K0e59l-9CRE01ILCJyeZ99TbboNdVASdikALIgCENYzZ3K82LdlP92J2lkcYr1Gda4Lriew/s1600/Screen+Shot+2015-09-01+at+10.47.50+am.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="66" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEkyg7e9SumLyjO0ZgO-rEFNfyEl7rjLBDwtT6shBP2ME2MA31WiqkqxLdanu2ZW2K0e59l-9CRE01ILCJyeZ99TbboNdVASdikALIgCENYzZ3K82LdlP92J2lkcYr1Gda4Lriew/s400/Screen+Shot+2015-09-01+at+10.47.50+am.png" width="400" /></a></div>
Spend a moment going over the available list of images.<br />
Pull the ibmnode image, I'll be using this as the based image to create an image with my nodejs app.<br />
Type <b>ice --local pull registry.ng.bluemix.net/ibmnode:latest</b>. Note that --local flag will execute the commands using the docker client targeting the docker daemon. This might take sometime based on your network connection speed, wait till you see the message "status: Downloaded newer image for registry.ng.bluemix.net/ibmnode:latest".<br />
<br />
Run the image using either docker run or ice --local run, I'll use docker run and enter the root of the image to check the nodejs version. This image of IBM Container comes pre-installed with nodejs, otherwise, we need to install it using the apt-get commands on the base image. Type <b>docker run -i -t registry.ng.bluemix.net/ibmnode:latest /bin/bash</b>, this will take you the bash shell of the image and type node -v for the version of nodejs, you should see like the one below:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4DSrnDyXHPg8qithSGtyCWge-uPFYWNGJoHBxTQwhtc4VEbEPFpr2tOIpVNzB4B6EuEQ8OCcWpHumLWxNMBzxQ6qLJeZzKgnWloqU1kDhsuX7B26JXAG-5d_48obJspvSkKlO6w/s1600/Screen+Shot+2015-09-01+at+11.00.15+am.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="66" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4DSrnDyXHPg8qithSGtyCWge-uPFYWNGJoHBxTQwhtc4VEbEPFpr2tOIpVNzB4B6EuEQ8OCcWpHumLWxNMBzxQ6qLJeZzKgnWloqU1kDhsuX7B26JXAG-5d_48obJspvSkKlO6w/s400/Screen+Shot+2015-09-01+at+11.00.15+am.png" width="400" /></a></div>
You can exit the bash shell using exit command and for the house keeping, use <b>docker rm <containerid></containerid></b> to remove any unused containers, get a list of containers using <b>docker ps -a</b> to display all stopped containers.<br />
<br />
Lets build our nodejs app, for brevity, I have excluded the package.json file as this is a simple app, copy the following in to a file called hello.js, this is a simple script that starts the http server on port 9080 and print Hello World when invoked.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbiRDEKBTA7GPOLN8DE-veDKT_rVy4MM9yZFP-Xa85l58Od6g5J7jeLvDufJRFiIcvfToZ_7GlqnZZmDgWcswQPhnoOWFhdImg9Jn039lw6siBYgx6tb7InAwCrTmvDfTP4ON-oA/s1600/Screen+Shot+2015-09-01+at+11.07.44+am.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbiRDEKBTA7GPOLN8DE-veDKT_rVy4MM9yZFP-Xa85l58Od6g5J7jeLvDufJRFiIcvfToZ_7GlqnZZmDgWcswQPhnoOWFhdImg9Jn039lw6siBYgx6tb7InAwCrTmvDfTP4ON-oA/s400/Screen+Shot+2015-09-01+at+11.07.44+am.png" width="400" /></a></div>
<br />
Create the Dockerfile with the following content, will use the ibmnode as the base image and copy the hello.js file to it, the last line starts the node with hello.js.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHZ_sXQXNTrAMQiy5lxSGGtgmXtFfyzEe-u40tRtVvgMyp72BYsXHz3W6OYx85hCEAeWkd31rO-0LS5rlT6ve-W2hGok3fhP2MRw09N6XKBrXFkBpfLEms9-CC3gvkisT0cz_6mQ/s1600/Screen+Shot+2015-09-01+at+11.11.52+am.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="80" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHZ_sXQXNTrAMQiy5lxSGGtgmXtFfyzEe-u40tRtVvgMyp72BYsXHz3W6OYx85hCEAeWkd31rO-0LS5rlT6ve-W2hGok3fhP2MRw09N6XKBrXFkBpfLEms9-CC3gvkisT0cz_6mQ/s400/Screen+Shot+2015-09-01+at+11.11.52+am.png" width="400" /></a></div>
<br />
Now, lets build an image, open the terminal from the directory where the hello.js and Dockerfile are located and issue the command <b>ice --local build -t {image name}<your image="" name=""> .</your></b> , the trailing '.' denotes the current directory. This will build a local image and watch for the message 'Successfully built <containerid>'. Run the image locally with <b>ice --local run -p 9080:9080 -d {image name}</b>. The -p flag binds the port of the host with that of the container and -d runs the container in daemon mode. Get the ip of the docker machine and use the curl command to check the node app, all three are shown in the below image:</containerid><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0jMidNaDNv8sZ9ypumGzllp5PuVSF2v7FRV_w1zG2MA-yeONSq4A_KmfIpuCRSXhjSbNyGzR8OgDxJhyphenhyphenVb2fALSGY8dQJMTcLjc8XAGJSIgaIdkk3D0Swau3QXL1zYmSdHoKBLg/s1600/Screen+Shot+2015-09-01+at+11.23.40+am.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="72" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0jMidNaDNv8sZ9ypumGzllp5PuVSF2v7FRV_w1zG2MA-yeONSq4A_KmfIpuCRSXhjSbNyGzR8OgDxJhyphenhyphenVb2fALSGY8dQJMTcLjc8XAGJSIgaIdkk3D0Swau3QXL1zYmSdHoKBLg/s400/Screen+Shot+2015-09-01+at+11.23.40+am.png" width="400" /></a></div>
After confirming that the image is ready, it can be pushed to the registry on Bluemix. Before pushing the image needs to be tagged, type the command <b>ice --local tag -f registry.ng.bluemix.net/<your name="" space="">{your namespace}/{image name}</your></b>. Now push the image using <b>ice --local push registry.ng.bluemix.net/{your name space}<your name="" space="">/{image name}</your></b> and wait for the success message. Check that your image is pushed using the ice images command.<br />
Run your image on Bluemix using the run command (no local flag):<br />
<b>ice run -name <some name=""> -p 9080 registry.ng.bluemix.net/<your name="" space="">{name space}/{image name}</your></some></b>. This will print a container id, save it for further use. Optional: check your container running<br />
using the ice ps command.<br />
<br />
For any diagnostic purposes, you can use ice inspect <container id=""> that will print a JSON string with all the properties of the container. Support team usually asks for this log stack to troubleshoot.</container><br />
<a href="https://www.blogger.com/blogger.g?blogID=12163847" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=12163847" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=12163847" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=12163847" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://www.blogger.com/blogger.g?blogID=12163847" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br />
Now, lets bind our container to a public ip.<br />
Request a public ip using <b>ice ip request</b>, this will print an available floating ip. Bind the ip to the container using <b>ice bind {ip} {container id} <ip> <container id="">. </container></ip></b>Now, you access your nodejs page using the ip:9080 from the browser. That's it, you just deployed your nodejs app running from a container on Bluemix.<br />
<br />
Note: If you plan to release the floating ip, use <b>ice unbind {ip}<ip></ip></b> and <b>ice release {ip}<ip></ip></b> commands.</div>
raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-25861795651964574642015-01-22T18:44:00.000-08:002015-01-22T18:44:25.031-08:00New Cool features of Mule ESB 3.6<div dir="ltr" style="text-align: left;" trbidi="on">
The recently released Mule ESB 3.6 has some really cool features, though I chanced to try out features like Agents, REST consumer (similar to WSDL consumer) while it was in beta state, they had issues and I had to wait till the version is formally released. It is time to give these a spin again.<br />
The list of the features in 3.6 are mentioned pretty nicely in this <a href="http://blogs.mulesoft.org/release-studio-2015-01/" target="_blank">link</a>. Enjoy!</div>
raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-54837542156532895682015-01-05T19:50:00.003-08:002015-01-05T19:50:50.996-08:002014 Java Library and Tools<div dir="ltr" style="text-align: left;" trbidi="on">
Happy new year to you and your family!!<br />
I came across this <a href="http://www.marcobehler.com/2014/12/27/marco-behlers-2014-ultimate-java-developer-library-tool-people-list/" target="_blank">link</a> today that has good details and description of the various & popular, of course, java libraries and tools. Worth the read. </div>
raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-91109158235740343182014-12-19T01:18:00.000-08:002014-12-19T01:18:09.074-08:00An year with Mule ESB<div dir="ltr" style="text-align: left;" trbidi="on">
Hola! It had been a little while since I blogged an entry. Had been bit held up due to the change in job, and little did I realize that it had already been an year after accepting this senior role with a company that is a premium partner of MuleSoft. Yep, my day to day job involves working with Mule (Anypoint Platform) heavily, providing integration solutions to our customers and helping customers realize the benefits of using Mule ESB, both on premise and Cloud Hub. After working with Mule for more than an year now, I can comfortably say that Mule ESB lives up to its claims. It is pretty light weight and does not force you to bring an elephant in to the room. I am happy that I could roll out multiple projects successfully and integration using Anypoint platform is a breeze. Am just loving the RAML and whipping up services using the APIKit. Looking forward to an more exciting new year. Happy holidays!</div>
raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-36319395955915701862014-09-07T21:53:00.002-07:002014-09-07T21:53:28.901-07:00Git Flow Cheat Sheet<div dir="ltr" style="text-align: left;" trbidi="on">
A good <a href="http://danielkummer.github.io/git-flow-cheatsheet/" target="_blank">link</a> on the Git flows, must read for all those using Git.</div>
raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-19385751596669561652014-02-23T21:25:00.001-08:002014-02-23T21:25:28.413-08:00Guide for users to switch over to Intellij from Eclipse<div dir="ltr" style="text-align: left;" trbidi="on">
I wanted to switch over to Mac and had been waiting for sometime and that was accomplished in Dec, 2013 and the next thing was to make IntelliJ as my primary IDE for Java development, that didn't happen and had some road blocks as I had to stick to Mule Studio that is Eclipse based. After reading some helpful tips from this <a href="http://zeroturnaround.com/rebellabs/getting-started-with-intellij-idea-as-an-eclipse-user/">link</a>, I found using IntelliJ pretty productive for Java Development.<br />
<br /></div>
raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-74245745822521488352013-09-14T21:52:00.003-07:002013-09-14T21:52:54.061-07:00REST Vs SOAP<div dir="ltr" style="text-align: left;" trbidi="on">
<br /></div>
Here is a good <a href="http://stackoverflow.com/questions/3285704/should-a-netflix-or-twitter-style-web-service-use-rest-or-soap">link</a> that I came across today while browsing. Has some very good perspectives.
raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-7570896539453386312013-09-14T21:51:00.000-07:002013-09-14T21:51:06.330-07:00After a looong pause ...<div dir="ltr" style="text-align: left;" trbidi="on">
<br /></div>
Well, it had been a while since I posted on my blog, this is partially due to ever increasing professional work and I had been posting on company's internal blog, we call it Architect's blog ;). Of late, I developed interest in the NoSQL Databases and am currently undergoing the MongoDB for Java Developer's course. Pretty good course, I must say, more on this in a later post as I have almost completed the 7 week course and doing the final exam. REST webservices is another area of my interest right now.raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-84086406126722897442010-12-11T02:23:00.000-08:002010-12-11T02:29:02.036-08:00Year.introspect(2010)Time has come again to look back and introspect on happenings of this year to learn and equip myself better for the next year. This year had been very interesting both on the personal and work fronts. On the personal side, we had a baby boy on Oct 11 and am starting to get used to the nappy changing duty ;). It is so much fun playing with my son and watching him grow. Babies are the cutest things in this world. <br /><br />On the work side, we did a successful BPEL deployment. It was indeed a good learning experience, especially, with 3DNS/Big IP acting up in production preventing the partner links from being invoked (more on this topic later). Enabling service Orientedness for the application was another fun filled exercise - coaching the team on BPMN, service identification, training the team on BPEL, whipping up schemas and more importantly getting the buy in from stakeholders and peers. Did a bit of hacking to remote deploy all the bpel suitcases to the BPEL console using commons-http-connection. We are still on BPEL PM 10.1.3.4 and have a plan to migrate to SOA Suite 11g sometime mid next year. I have also created an installer for my application based on ant installer, this is a cool stuff that helps in deploying the applications (silently) to the target envs and the dev team can stay away while the ops team does the installation :).<br /><br />I read Robin Sharma's two very good books - Leader who had no title and the monk who sold his Ferrari, both are very good books and I highly recommend reading them. I have also read few technical books - BPMN method and style by Bruce Silver, Oracle SOA Suite Developer's Guide, Getting Started with SOA Suite 11g, Enterprise Architecture A - Z.raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-20046136901029487362010-10-26T04:49:00.000-07:002010-12-11T02:30:48.268-08:00Instance created!!!At 2010-10-11T17:26:00+05:30Z, an instance of an anonymous inner class has been created. The toXML() of the instance is below:<br /><br /><Event name="child birth"><br /> <Name> TBD </Name><br /> <DateofBirth>Oct 11, 2010</DateofBirth><br /> <TimeofBirth>17:26</TimeofBirth><br /> <PlaceofBirth>Basant Sahney Hospital, W Marredpally, Hyderabad</PlaceofBirth><br /> <Gender>Male</Gender><br /> <Weight>2.72 KG</Weight><br /></Event><br /><br />The instance is yet to be named per com.astrology.zodiac.* standards and bind to the Srirangam namespace.<br /><br />And thats the reason I'm not active on the blog ;) and another reason is we have an internal blog in our company that runs on moss and most of my blogging activity is happening on the internal blog.<br /><br />****** UPDATE ******<br />The instance is named Nischay!raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-24602010897964526452010-08-03T02:26:00.000-07:002010-08-03T02:27:57.775-07:00Three Dimensions of S/W ProgrammerOld article but very interesting - <a href="http://softwarecreation.org/2009/three-dimensions-of-a-software-programmer-how-to-get-things-done/">Three Dimensions of S/W Programmer</a>raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-80796065126821017442010-06-03T05:07:00.000-07:002010-06-03T07:22:24.256-07:00BPEL Deployment plan to replace queue namesWe are using Oracle BPEL PM 10.1.3.4 and we are using the deployment plan feature to take care of the replacement of the wsdl end points and schema content. We realized that the queue names were not being replaced with simple search and replace. As guessed, the search replace functionality worked only for the wsdls where the host and port names were getting replaced correctly. Following needs to be done to have it working for the queue names:<br />1. Include the jca namespace in the deployment plan file [xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"]<br />2. Use the following to replace the queue name<br /> <jca:property name="QueueName"><br /> <searchReplace><br /> <search>oldqueuename</search><br /> <replace>newqueuename</replace><br /> </jca:property><br /><br />3. Most important of all, ensure that the above entry is the first inside the <wsdlAndSchema> element, otherwise, there'd be errors during deployment and the queue names shall not be replaced.raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-58606910529071326522010-05-24T07:16:00.000-07:002010-05-24T07:18:52.246-07:00Long PauseI had been silent on the blog for quite a while, the reason being, apparently, too much of activity at work and domestic fronts. Life is back to normal and things are under control now. I'd be writing few entries on the BPEL this time, so watch the space ;)raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-19264256774711998632010-02-06T08:30:00.000-08:002010-02-06T08:34:16.250-08:00Programmer TypesWe have heard of types of architects, this <a href="http://www.makinggoodsoftware.com/2010/01/27/types-of-programmer-or-%E2%80%9Cwhy-can%E2%80%99t-we-be-friends%E2%80%9D/">blog entry</a> talks about types of programmers based on two attributes - planning and sophistication. Another dimension of looking at things!raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-12187709703748999832010-02-06T08:28:00.000-08:002010-02-06T08:30:29.206-08:00Apache Thrift<a href="http://incubator.apache.org/thrift/">Apache Thrift</a> - "Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml.". Sounds pretty interesting.raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-72954136792466054662009-11-25T22:35:00.000-08:002009-11-25T22:43:11.205-08:00Year.introspect(2009)Yet another year!<br />This year I made no more than 7 blog entries, the reason for being quite on the blogging front is that significant time was required to be spent on the work and personal fronts and seldom had a chance to blog.<br /><br />On the work front, had a absoutely eventful year. Moved to a different domain within in the same company and it is very interesting to roll out the projects in a relatively shorter time frames whose business impact is very conspicuous. Had a very delightful time designing the stuff and educating the team. Btw, I got promoted as well :)<br /><br />On the personal front, nothing great but got used to family life and the daily chores :). Early september, we managed to get a week off and went to Kerala. The vacation was much needed and was very refreshing.raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-61919213351467865202009-10-11T03:20:00.000-07:002009-10-11T03:30:07.839-07:00Thank You, Sateesh!Today, our project deployment to PROD went very very smoothly. It is one of the smoothest deployments I had ever seen. Everything worked absolutely fine with no issues. If I look back and introspect the way it was developed and delivered, one key factor that attributed to the success of the project is the "buddy - buddy" relationship with the test team. We have an exceptionally good testing team that worked together with the dev team and helped in identifying the defects early. Thanks to the test lead for his iconic leadership and providing direction to the test team on how to test complex scenarios. Sateesh, you rock!!!raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-40417283857664839902009-08-25T02:22:00.000-07:002009-08-25T02:27:52.550-07:00Control Characters in XMLFor some reason, XML 1.0 does not support low level ASCII control characters, even if they are wrapped inside a CDATA section. In my project, there was a requirement to send barcode data in an XML message that contained ASCII charaters from 4-31 and although we wrapped the content in a CDATA section, it didnt help. The parser didnot understand it and blew up. XML 1.1 seems to have added support for control characters, but the parsers we use are yet to offer the support. We resolved the issue by encoding the content to Base64 and asked the downstream apps to decode it back and use it.<br /><br />Btw, this is my 100th blog entry :)raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-81124616020767783822009-05-29T23:18:00.000-07:002009-05-29T23:20:50.722-07:00Smooks!Came across this nice thing - <a href="http://smooks.org">Smooks</a>, a powerful ETL tool and of course, it is open source. The site talks about transformations from/to java various formats. Itz time to give it a try!raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-87577081788839255492009-05-06T23:53:00.000-07:002009-05-06T23:59:40.016-07:00The premain() methodA colleague of mine pointed me to the premain() method in Java. This method is useful, particularly, in cases where there is a need to add a jar while the system is coming up, the jars can be added to bootstrap classloader, cool! One use of this method is to start an agent to monitor the performance of the system and have some program listen on this port to aggregate the perf stats. I just came across a really cool utility that draws the sequence diagrams while the program is running. Interestingly, this tool is also loading the agent using the premain(). If you'd like to give this tool a try download JTracert from the google code!raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com0tag:blogger.com,1999:blog-12163847.post-32000234528635265872009-01-30T12:02:00.000-08:002009-01-30T12:25:44.234-08:00Web Service Orchestration without BPELIn my project there is a requirement to call few web services in sequence and aggregate the responses and expose the functionality as a web service. There are quite many services with this required behavior. The initial solution was to use some BPEL engine, but the decision was put on hold due to various reasons and we were encouraged to whip up a light weight framework in java that suits our needs. This was indeed interesting and I was successful in designing and developing a embeddable and light weight orchestration framework in java. Following are some thoughts on the same - <br /><br />Since, the framework is more or less chaining of web service calls, I decided to keep the flow of messages as XML inside the orchestration framework. Modeled the Orchestration as an XML pipeline. Chaining of web service calls needed transformation of response to that of the request of the next service and XSL has been choosen to transform the message formats. Quickly whipped up an XSLUtil based on Trax (Transformation API for XML). The next challenge was to invoke the webservices using XML data as request. I decided to go the XML way to avoid marshalling/unmarshalling of POJOs from/to XML. JAX-WS came handy here. JAX-WS comes with a nice feature called Dispatch that would allow invocation of web services using either a SOAP message or XML payload, the latter met my need. It didnt take much time to play with the Dispatch interface and to implement a generic utility. I had the core componenets ready in a very short span of time.<br /><br />The next step was to abstract the execution of these utilities, so defined the classes called *Action for transformation and invocation and made them configurable using a XML file and my little orchestration framework is ready. It also has a feature that reports the invocation trace along with the profiling information. However, this is just the beginning. There was an immediate need to add the branching, looping, assignment actions. Used JEXL for expression evaluation of branching and looping functions. And now, am thinking of adding some kind of a transition governance between the stages (using AspectJ) and add some kind of a compensation handlers to each stage. I'm also playing around with XTS of JBossTM to see if I can provide transaction recovery and make the web services transaction aware.<br /><br />If you have any suggestions and ideas to improve the framework, write a comment.raviskhttp://www.blogger.com/profile/00169937566486526277noreply@blogger.com4