WSO2 Venus

Samisa AbeysingheIridium - Building M1

I am trying to build M1 for WSO2 Carbon 3.0.0

Looks an uphill task, given the amount of active development that is going on.

Building once, building twice, building thrice, still building.

It is a major undertaking to get this whole platform right.

The users are at ease, they get the luxury of a lean, robust platform.

But we the developers, the date leading to the feature freeze is a nightmare. Sometimes you have to credit the folks, who go through all this pain and still pull it and put this all together.

Denis WeerasiriAssociation Rule Mining with Extended Vertical Format Data Mining


I and my final year project team members at Department of Computer Science and Engineering, University of Moratuwa conducted a research on better alternative to the Apriori algorithm, and proving the efficiency enhancement by using a dataset. Under the supervision of Dr. Shehan Perera, we analyzed the Apriori algorithm, and came up with a better implementation which is supposed to be more efficient than its predecessors.

Current databases are very large sizes, reaching Tera-bytes and Peta-bytes, and the trend towards further increase. With this explosion of growth of databases of particular importance is the question of scalability of data mining techniques. Therefore, to find association rules require efficient scalable algorithms that allow solving the problem with in a reasonable time.
Large companies for decades accumulated data on their customers, suppliers, products and services. Due to high rate of development of e-commerce working in Web start-ups can turn into a huge enterprise in a matter of months, rather than something those years. And, as a consequence, will grow rapidly and their databases. Data mining, which is also called knowledge discovery in databases provides organizations with the tools developed to analyze the large collection of information to find trends, patterns and relationships that can help in making strategic decisions.

Traditionally, that the algorithms of data analysis assumed that the input database containing a relatively small number of records. However, the size of modern databases is too large, which is why they can not be fully deployed in the main memory. Extracting data fro m your hard drive is considerably slower access to data located in memory. Therefore, to methods of data mining used to work with very large databases, to become effective, they must possess a significant level of scalability. The algorithm is called scalable, if sustained capacity of main memory with an increase in th e number of records in the input database, its execution time increases linearly.

Recently, researchers have focused their efforts on the study of scalable algorithms for data mining in very large data sets. Here it's described an efficient and scalable frequent item-set mining method with Apriori algorithm.

Apriori algorithm is proposed for mining frequent item sets for Boolean association rules. It operates on databases having transactions to learn the association rules. Apriori algorithm is a base algorithm proposed by R. Agrawal and R. Srikant in 1994, on which many researches are done, and improvements are suggested for the general case as well as a specific subset of the applicable data. Due to the huge amount of data that is mined in the present applications, even a small performance gain on the algorithm will result in a considerable amount of throughput gain. Some enhancements to Apriori algorithm sacrifice the accuracy for a better response time. Sampling is a simplest example, where accuracy is lost in favor of performance gain.

Hash-based technique, Transaction reduction, Partitioning, Dynamic itemset counting, and multilevel and multidimensional association rules are some of the other common enhancements proposed to improve the efficiency of Apriori algorithm.

Apriori algorithm generates candidate sets and tests them to find the frequent itemsets, significantly reducing the size of candidate sets. Algorithms such as Frequent-pattern growth (FP-Growth) mine frequent itemsets without candidate generation. Both the algorithm sets have their own advantages and disadvantages. Many hybrid algorithms have been proposed and still researched to suit the general case, or mostly a particular case specialized for a given dataset.


Related articles - Project proposal

 

Yumani RanaweeraAccessing a datafile through Selenium RC

In our testing most of us require to call data from a data storage and execute our tests to confirm various validations work as expected, different conditions are met etc.

Below is a code snippet that I used in calling data used in a .txt file in validating a simple test in user name password based sign-in process. I was on Selenium RC/JUnit/Java platform in this.

public class SignIn extends SeleneseTestCase {

public void setUp() throws Exception {
setUp("https://localhost:9443/carbon/", "*chrome");
}

public void testSignInValdation() throws Exception {
BufferedReader in = null;
InputStreamReader inputStream = null;

inputStream = new InputStreamReader(new FileInputStream("C:" + File.separator + "signin.txt"));
in = new BufferedReader(inputStream);
String line = null;

while ((line = in.readLine()) != null) {
System.out.println("password: " + line);
selenium.open("/carbon/admin/login.jsp");
selenium.waitForPageToLoad("30000");
selenium.type("txtUserName", "yumani");
selenium.type("txtPassword", line);
selenium.click("//input[@value='Sign-in']");
selenium.waitForPageToLoad("30000");
}
}
}

Charitha KankanamgeVisits to this blog - 2009 (significant increase of visitors)

I published a stat report about this blog in February 2009, which showed 30037 unique visitors during 2008-2009. Here is the StatCounter report for 2009-2010.




There were 55,839 unique visitors, 25000 increase compared to last year. 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. 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.

Charitha KankanamgeWSO2 QA Test Framework - Fundamentals

WSO2 QA Test framework 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.
With the introduction of WSO2 Carbon 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.
So, we started implementing our automated test framework in 2009 March.
As I discussed in some previous posts, we chose selenium 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.
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 https://wso2.org/repos/wso2/branches/commons/qa/web-test-framework/2.0.3

common
bps
registry
wsas
esb
gs
mashup
is
ds

Each project is built using its pom.xml at the root of the project directory. We used selenium maven plugin and surefire plugin to start selenium RC server and launch Junit tests respectively.
commons 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 svn:externals to link the common classes to relevant projects.
You can find all common classes at https://wso2.org/repos/wso2/branches/commons/qa/web-test-framework/2.0.3/commons/src/test/java/org/wso2/carbon/web/test/common/

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.

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.

host.name=172.16.37.1
http.port=9763
https.port=9443
carbon.home=/home/charitha/products/wsas/wso2wsas-3.1.3
context.root=/wsas
browser.version=firefox
admin.username=admin
admin.password=admin
module.version=2.03

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)

Lets look at a product specific test suite. Go to wsas 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.

lib
src
pom.xml
runAll.sh
runAll.rb
wsas_test_suites.txt

lib directory is used to store the test artifacts specific to WSAS such as axis2 services, jaxws services etc.
You can invoke tests using two different ways.

  • Direct maven invocation - you can run tests individually by passing a system property as follows
mvn clean install -Dtest.suite=usermanagement

  • 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.
sh runAll.sh

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.

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.

You will also notice in AllTests class that initBrowser() method of the BrowserInitializer class is called to launch the browser instance for a particular test as follows.

public synchronized static void initBrowser()throws Exception{


if (browser == null) {
browser = new DefaultSelenium("localhost", 4444, "*"+property.getProperty("browser.version"), "https://" + property.getProperty("host.name") + ":" + property.getProperty("https.port"));
browser.start();
browser.setSpeed("200");

}
}

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

Stay tuned.. will post more on automation soon!

Sanjiva WeerawaranaThe myth of rogue states

The February 8th issue of the Newsweek (International) magazine has an absolutely great article titled “End of the Rogue”. The article is about how the concept of a “rogue state” (apparently created the cold war days) is no longer valid and how the US needs to get past it.

Not surprisingly many comments on the online edition don’t agree that the US approach needs to change. Living in Sri Lanka, however, and having observed the wrath of the US (and UK and EU) for the way the anti-LTTE war was conducted and ended, I can see what must be going on in “rogue” countries!

The most interesting quote I found in the article is this:

We don’t have the right to think other people should think like us.

If we all could live by that the entire world would be a better place!

Deepal JayasingheSetting default SSH shell to bash

I spent some times to figure out how to execute a remote command using “bash” and thought of sharing my findings (make your job easier).

An easy way is to go and edit ~/.profile and add the bash over there.

However above will not work if you try to remotely execute a script file, to solve that issues you need to edit

/etc/passwd

Find the entry corresponding to your logging and edit the last part of the entry for example; if the entry is like;

abc:x:13:13:abc:/bin:/bin/sh
then change that to
abc:x:13:13:abc:/bin:/bin/bash

You are in the business now…

Damitha KumarageOpensource software for Mathematics

It is a long time I’m back into Mathematics. Time has changed a lot. There are abundance of resources available for students of Mathematics out there in Internet which is almost unthinkable before a decade. Life is so easy. No need to run for the Library just to get familier with that Definition or Theorem. I [...]

Denis WeerasiriEnterprise mashups powered solutions for banking services


I came across an article about a real world implementation of mashup technology in banking services. Here it explains how enterprise mashups bridge the information gap in financial services.
 

Denis WeerasiriHappy new year Sri Lanka!


For the past four years, I usually spent the new year's eve at my boarding place with my colleagues as we get ready for exams in the upcoming month of January. (Though it's not official, January seems to be a month for the final semester exams in my university :)).
Though we were away from our homes, somehow we got the chance to celebrate the new year with few of traditional new year foods at our boarding place.


Normally for Sri Lanka , the new year falls on April 13th or 14th every year. Food is the essential part of New Year festivities in Sri Lanka. Sinhalese food is very rich in nutrition. They prepare sweet meats such as mung kavum, konda kavum and unduvel. There is also an old tradition of preparing Kiri Bhath (milk rice) with rice.
Even though Sri Lankans also celebrates new year's day on January 1st as well.
 

Paul FremantleBritish MPs hint at even worse behaviour

I don't normally blog about politics, but every once in a while they wind me up so much I can't help it!

4 British Politicians have been charged under the Theft Act for fiddling their expenses. They are saying that they are going to claim "parliamentary privelige" to avoid prosecution. Basically, under the 1689 Bill of Rights, MPs cannot be taken to court for things that happen within parliament. This is designed to protect them from libel and encourage free speech in Parliament. They are going to argue that this applies to their expense reports as well.

Whether or not they win that argument - this is really sinking to a new low. To pad your expenses is one thing. To claim that you are above the ordinary law - that you can avoid prosecution for fiddling your expenses just because you were a politician - that is the lowest of the low. If these MPs and Lords are truly innocent, let them prove it without claiming parliamentary privelige. 

To do anything else will be to sink to a new low - cowering under one of the most sacred of our parliamentary rules to hide their thievery.

Thilina BuddhikaWSO2 Identity Server 2.0.3 released..



The WSO2 Identity Server team is pleased to announce the release of version 2.0.3 of the open source WSO2 Identity Server (IS).



This is a bug fixed release.

IS 2.0.3 release is available for download at [1].
New Features
Various bug fixes - including security fixes & enhancements to Apache Axis2, Apache Rampart, Apache Sandesha2 , WSO2 Carbon [2]  & other projects.
- Hide quoted text -

How to Run

1. Extract the downloaded zip
2. Go to the bin directory in the extracted folder
3. Run the wso2server.sh or wso2server.bat as appropriate
4. Point you browser to the URL 
https://localhost:9443/carbon/
5. Use "admin", "admin" as the username and password.
6. If you need to start the OSGi console with the server use the property -DosgiConsole when starting the server

For more details, run, wso2server.sh (wso2server.bat) --help

Known issues

All known issues have been filed here [3]. Please report any issues you find as JIRA entries.

Reporting Problems

Issues can be reported using the public JIRA available at 
https://wso2.org/jira/browse/identity

Contact us

WSO2 IS developers can be contacted via the mailing lists:
For Users: 
identity-user@wso2.org
For Developers: 
carbon-dev@wso2.org
For details on subscriptions please see 
http://wso2.org/mail

Alternatively, questions can also be raised in the IS forum: 
http://wso2.org/forum/308

Support

We are committed to ensuring that your enterprise middleware deployment is completely supported from evaluation to production. Our unique approach ensures that all support leverages our open development methodology and is provided by the very same engineers who build the technology.

For more details and to take advantage of this unique opportunity please visit 
http://wso2.com/support/

For more information about WSO2 Identity Server please see 
http://wso2.com/products/identity-server/ or visit the WSO2 Oxygen Tank developer portal for addition resources.

Thank you

The WSO2 Identity Server Team

[1]. 
http://wso2.org/downloads/identity
[2]. 
http://wso2.org/projects/carbon
[3]. 
https://wso2.org/jira/browse/CARBON

Chintana WilamunaYahoo Traffic Server

Yahoo has donated the caching proxy server they use internally to Apache Foundation. This, apart from acting as a high performance proxy server has many other cool features. If you’re trying it out here’s the minimum required settings that you should set in order it to act as a caching proxy server. First you have to [...]

Yumani RanaweeraDeploying WSO2 Carbon 2.0.x in IBM WebSphere Application Server 6.1

I have converted one of the past blog posts into an article and its now published in WSO2 Oxygen Tank -Library.

Its titled as "Deploying WSO2 Carbon 2.0.x in IBM WebSphere Application Server 6.1". Is available here.

Tyrell PereraHaiti Is a Marketing Lesson

Haiti Is a Marketing Lesson - Dan Pallotta - Harvard Business Review
"The reason people are giving so much money to Haiti is simple: They are hearing about it. They are seeing and reading about the catastrophe over and over again on the front page, in prime time, and in viral web appeals 24 hours a day, seven days a week. This is not a singular occurrence: Every so often, for brief moments, disasters trigger the deluge of media for humanity as is enjoyed every day by the likes of Budweiser, BMW, and the iPod. If it had to be paid for, the media that is currently publicizing Haiti would cost many tens, if not hundreds, of millions of dollars. But alas, we would never let humanitarian organizations spend that kind of money on advertising, despite the fact that it might bring in many times more dollars than it costs."

Interesting read, considering the fact that even for-profit marketers seem to ignore these fundamentals sometimes.


Charitha KankanamgeGoogle Automation - Automated testing search engine


If you are looking for software test automation information, you will get the best results by using Google Automation search engine. It only searches the sites that matter most to automators.

Samisa AbeysingheIridium - WSO2 Carbon 3.0.0

Iridium - that is the code name for the upcoming WSO2 Carbon 3.0.0 release.

We are quite busy working on the release.

I see people coding all over the place, breaking the svn build, fixing the build back again, reverting changes, making more changes, chatting about new features, fighting about new features, and so forth and so on.

Feature freeze is a week away. Will blog about the new exiting features soon.

Samisa AbeysingheExercise or be dead!

Chanaka JayasenaNew Lost Season Rocks !!!!!


New Lost season started on ABC network last Tuesday. In last two seasons they introduced time travel. Now it seems they are talking about parallel universe theory. They say this is going to be there last season of the long running amazing TV show.
"The aftermath from the detonation of the hydrogen bomb is revealed."

Chanaka JayasenaSql queries result table column selecting javascript function

I was looking for a script which do the above. I couldn't find any. So I wrote a one. The following function takes a sql query string such as
"SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.P_Id=Orders.P_Id ORDER BY Persons.LastName SELECT AVG(OrderPrice) AS OrderAverage FROM Orders" and returns a string array containing LastName,FirstName,OrderNo.


function brakeColumns(query) {
var columnList = new Array();
var patten1 = /^[\w\$][\w]*/i;
var patten2 = /^[\w\$][\w]*\.[\w\$][\w]*$/i;
var numEnd = query.search(/\sfrom\s/i);
var elems = (query.substring(6, numEnd)).split(",");
for (var i = 0; i < elems.length; i++) {
var elem = elems[i].toString();
elem = trim(elem);
var stPoint = "";
var wanted = "";
if (elem.search(/\sas\s/i) != -1) {
stPoint = elem.search(/\sas\s/i);
wanted = elem.substring(stPoint + 4);
wanted = trim(wanted);
if (patten1.test(wanted)) {
columnList.push(wanted);
}
} else if (patten2.test(elem)) { //check for tablename.column name pattern
stPoint = elem.search(/\./);
wanted = elem.substring(stPoint + 1);
wanted = trim(wanted);
if (patten1.test(wanted)) {
columnList.push(wanted);
}
} else { //check for straight column name like username,passsword etc
if (patten1.test(elem)) {
columnList.push(elem);
}
}
}
return(columnList);
}


function trim(stringToTrim) {
return stringToTrim.replace(/^\s+|\s+$/g, "");
}

Charitha KankanamgeHow to start WSO2 Carbon AMIs

The latest product versions of WSO2 SOA platform 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 cloud virtual machines.
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.
I will use WSO2 ESB AMI for the demonstration, however you can follow the same steps to start any of the WSO2 Carbon AMI.

Pre-requisite:
You should have the necessary Amazon EC2 account ready for AMI administration. AMI EC2 API tools should be installed in your computer. You may refer to this tutorial in order to set up the infrastructure.

Step 1
Go to WSO2 ESB home page in Oxygen Tank. Click on WSO2 Cloud Service under the Download icon.
You will find WSO2 ESB cloud virtual machines in that page. Take a note of AMI ID given there (ami-878569ee)

Step2
Open a shell and issue the following command to start 64bit WSO2 ESB AMI instance.

ec2-run-instances ami-878569ee -k --instance-type m1.large

Replace with the name of your public/private keypair. Read http://docs.amazonwebservices.com/AmazonEC2/gsg/2006-06-26/running-an-instance.html if you do not know hot to generate a keypair.


Step 3

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).

e.g:-

INSTANCE i-c28093aa ami-878569ee pending charithakankanamgewso2-keypair 0 m1.large 2010-02-04T06:03:25+0000 us-east-1c aki-a3d737ca ari-7cb95a

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.

ec2-describe-instances

e.g:- ec2-describe-instances i-c28093aa

This will return the public DNS name as follows.

INSTANCE i-c28093aa ami-878569ee ec2-174-129-86-140.compute-1.amazonaws.com domU-12-31-39-0C-21-B2.compute-1.internal

Step 4

Open a browser and access URL, https://ec2-174-129-86-140.compute-1.amazonaws.com. You will be able to log in to WSO2 ESB management console.






Tyrell PereraLatest Releases of WSO2 Mashup and Gadget Servers



We announced the releases of WSO2 Mashup Server version 2.0.2 and WSO2 Gadget Server version 1.0.1 yesterday. These releases as usual include improvements and fixes and in case of the Mashup Server, a new Host Object in addition to the collection already available. So make sure you have a look at the brand new HttpClient Host Object once you download 2.0.2.

I'm really happy about the traction WSO2 Gadget Server is gaining since its initial release in December 2009. It not only fulfils the last mile of our SOA platform story by providing a presentation layer, but also uses the Google Gadgets Specification to make this presentation layer SOA centric and interoperable with other portals such as iGoogle. And the most encouraging part? The users get it. That is a great feeling.

Our next major set of releases will come in March 2010, code named Iridium and will have some major enhancements and features. We are also doing a great amount of work targeting the Cloud. The WSO2 Gadget Server will soon be available as a Service, with Mashup Server to follow.


Sanjiva WeerawaranaWSO2 platform overview

We recently posted a slide deck that gives an updated overview of the WSO2 platform. This covers both our downloadable products as well as our cloud offerings. Enjoy!

Chanaka JayasenaLegal identifier matching regex pattern

The following will match any legal identifier — an unlimited-length sequence of Unicode letters and digits, beginning with a letter, the dollar sign "$", or the underscore character

/^[a-zA-Z\$_][a-zA-Z0-9]*/


The following is a example in Javascript

alert(/^[a-zA-Z\$_][a-zA-Z0-9]*/.test("testVar"));

Yumani RanaweeraCloud and open source meet to test Web apps

Start-up Sauce Labs receives funding to support open-source Selenium project on-premise and in the cloud.

Blog post by Dave Rosenberg on Software, Interrupted.
http://news.cnet.com/8301-13846_3-10437699-62.html

Dimuthu GamageWebinar: WSO2 Business Activity Monitor for Agile Enterprises

Samisa Abeysinghe, the directory of engineering at WSO2 will present a webinar on Building an Agile Enterprise With Business Activity Monitoring today (3rd February 2010).

There he will provide an overview of WSO2 Business Activity Monitor (WSO2 BAM), the latest product from the WSO2 Carbon platform, including its built-in dashboard to view analytics , reports of past and present activities of the enterprise SOA infrastructure and how these information can be used in tactical and strategic decision making.

Chanaka JayasenaSimple way to converting html tags to display in web pages

I think every one has tried at least ones to put some html code in your blog post. I tried several ways but finally I ended up replacing special characters like "<" and ">" with &lt; and &gt;

Following is a solution that you can easily integrate in to your web page. Include this javascript method in your header section.
function putInsidePre(txt,toPre){
var preText = document.createTextNode(txt);
document.getElementById(toPre).appendChild(preText);
}

and put the following style class in your css or just include them in a new >style< tag.
.codeStyle {
background-color:#EAEFF1;
border:1px solid #88BFCE;
color:#325669;
display:block;
font-size:11px;
height:200px;
line-height:1.5em;
overflow:auto;
}


Then you can create a
 tag and give it a id and call "putInsidePre" method to populate it.

Here is a full working example.

<html>
<head>
<style>
.codeStyle {
background-color:#EAEFF1;
border:1px solid #88BFCE;
color:#325669;
display:block;
font-size:11px;
height:200px;
line-height:1.5em;
overflow:auto;
}
</style>
<script>
function putInsidePre(txt,toPre){
var preText = document.createTextNode(txt);
document.getElementById(toPre).appendChild(preText);
}
</script>
</head>
<body>

<pre class="codeStyle" id="codeBlock"></pre>
<script>
putInsidePre('<html><head></head><body>Content</body></html>',"codeBlock");
</script>
</body>
</html>

Charitha KankanamgeImportance of logging in QA testing

Recently James Bach posted a nice blog entry in which he identified logging 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.
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.
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.

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.

Chintana WilamunaWeb site lead generation pages

This article explains some worthy insights into making lead generation pages. An interesting idea that’s new to me was to make the page a dead-end. Having no links on the lead generation page that links back to the main site. Making it “harder” for the user to click something and navigate away from the lead [...]

Charitha KankanamgeHow to deploy WSAS-3.X on Oracle WebLogic 10.3

Once Azeez has written a 10 minute guide to installing WSO2 WSAS on Weblogic server. That guide explains the steps to deploy 2.X family of WSAS on weblogic. With the introduction of WSO2 Carbon 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.
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 WSO2 BPS on tomcat and WSO2 WSAS-3.X on Jboss.

This post describes the steps to deploy WSO2 WSAS-3.X on WebLogic 10.3

Step1

Create a new weblogic domain by running config.sh {bat} located at WebLogic_HOME/wlserver_10.3/common/bin directory.
Lets assume the new domain is wsas.

Access your weblogic domain direcrtory and start weblogic (Go to WebLogic_HOME/user_projects/domains/wsas/bin and run startWebLogic.cmd)

Step 2
Download the latest version of WSO2 WSAS-3.X from here. 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)

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.
wso2wsas will be used as the webapp root directory.

Step 3

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 Environment --> servers. Select AdminServer.
Click on KeyStores tab. Configure keystores as shown below.



Keystore = Custom Identity & Custom Trust


Custom Identity Keystore = C:\wsas\wsas-repo\resources\security\wso2carbon.jks

Custom Identity Keystore Type = JKS

Custom Identity Keystore Passphrase = wso2carbon

Confirm Custom Identity Keystore Passphrase = wso2carbon

Custom Trust Keystore = C:\wsas\wsas-repo\resources\security\wso2carbon.jks

Custom Trust Keystore Type = JKS

Custom Trust Keystore Passphrase = wso2carbon

Confirm Custom Trust Keystore Passphrase = wso2carbon

Now, select SSL tab and enter the following values.

Identity and trust locations = keystores

Private Key Alias = wso2carbon

Private Key Passphrase = wso2carbon

Confirm Private Key Passphrase = wso2carbon


Save the configuration and go to the General tab. Select the check box next to "SSL listen port enabled".

Now we have configured the necessary changes to enable SSL on weblogic. Lets continue with deploying WSO2 WSAS on weblogic.

Step 4

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.
First, open carbon.xml and update the ServerURL element as follows.

<ServerURL>https://localhost:7002/wso2wsas/services/</ServerURL>

Note that we have configured weblogic to run on 7002 port.

Update WebContextRoot element as follows.

<WebContextRoot>/wso2wsas</WebContextRoot>

Save and close carbon.xml.

Open registry.xml and update DB URL as follows.

<url>jdbc:h2:C:\wsas\wsas-repo\database\WSO2CARBON_DB;create=true</url>

Now, open user-mgt.xml and update database URL as follows.

<url>jdbc:h2:C:\wsas\wsas-repo\database\WSO2CARBON_DB;create=true</url>

Make sure to specify the absolute path of the WSO2CARBON_DB in both of the above elements.

We must change the http and https ports in In Transports section of axis2.xml as follows.

<transportReceiver name="http"
class="org.wso2.carbon.core.transports.http.HttpTransportListener">
<parameter name="port">7001</parameter>

</transportReceiver>

<transportReceiver name="https"
class="org.wso2.carbon.core.transports.http.HttpsTransportListener">

<parameter name="port">7002</parameter>
</transportReceiver>

Step 5

We have completed the required configurations and we can deploy WSO2 WSAS on weblogic now.
First, shutdown the weblogic server instance if it is still running.
open a new command window and change the directory to WebLogic_HOME/user_projects/domains/wsas/bin.
Define an environment variable called CARBON_HOME and set the path to your wsas-repo directory.

In windows; set CARBON_HOME=C:\wsas\wsas-repo
In linux; export CARBON_HOME=\home\user\wsas\wsas-repo

Run startWebLogic.cmd

Once the server is started successfully, log in to weblogic administration console using https://localhost:7002/console
Then, go to the Summary of Deployments page and select Install.
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.



Click on next to proceed through the wizard and continue with the default settings.
Once the deployment is successful, save the configuration and select start --> servicing all requests

Now, we are done with the deployment. You could access the management console using https:\\localhost:7002\wso2wsas\carbon

Note:-
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

2. If you want to deploy JaxWS services in WSAS/WebLogic platform, you should do the following configuration to avoid a class casting issue (https://wso2.org/jira/browse/CARBON-4835)

- Remove weblogic.jar/META-INF/services/com.sun.xml.ws.api.wsdl.writer.WSDLGeneratorExtension & restart Carbon

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.




Chintana WilamunaBrowsers, browsers and more browsers

No matter how many browsers are out there I still haven’t found the one true browser that rule ‘em all. This has the awkward situation where there has to be multiple browser instances running at any given time. All the memory that these fellows eats up is not much of a bigger deal because memory [...]

Thilina BuddhikaHow to generate Self-Signed Certificates programmatically ?

The most common approach of generating a self-signed certificate is using the Java Keytool. But there may be situations where the requirement is to generate self-signed certificates programmatically.

It is possible to do this by programmatically invoking the keytool(using Runtime.exec) which is not a very promising approach. And also it is possible to use the Sun's proprietary classes used inside the Keytool to do this. But there is no documented API on these classes.

One clean approach of programmatically generating these self-signed certificates is through the Bouncy Castle API. I will walk you through the important steps of the above process.

To start with this, you need to have the Bouncy Castle jar in your classpath.(You can download it from here)

First you need to generate a key pair. We are using "RSA" public-key cryptography algorithm and a key size of 1024.

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair KPair = keyPairGenerator.generateKeyPair();

Then instantiate an X.509 cert. generator.
X509V3CertificateGenerator v3CertGen = new X509V3CertificateGenerator();

Now start creating the certificate. Serial number, issuer, validity period and Subject are set here.
v3CertGen.setSerialNumber(BigInteger.valueOf(new SecureRandom().nextInt()));
v3CertGen.setIssuerDN(new X509Principal("CN=" + domainName + ", OU=None, O=None L=None, C=None"));
v3CertGen.setNotBefore(new Date(System.currentTimeMillis() - 1000L * 60 * 60 * 24 * 30));
v3CertGen.setNotAfter(new Date(System.currentTimeMillis() + (1000L * 60 * 60 * 24 * 365*10)));
v3CertGen.setSubjectDN(new X509Principal("CN=" + domainName + ", OU=None, O=None L=None, C=None"));

Then set the public key of the key pair and the signing algorithm to the cert generator.
v3CertGen.setPublicKey(KPair.getPublic());
v3CertGen.setSignatureAlgorithm("MD5WithRSAEncryption");

Now you can generate the certificate.
X509Certificate PKCertificate = v3CertGen.generateX509Certificate(KPair.getPrivate());

And store it in a file.
FileOutputStream fos = new FileOutputStream("/path/to/testCert.cert");
fos.write(PKCertificate.getEncoded());
fos.close();

You can view this cert using the keytool.
keytool -printcert -file /path/to/cert

Upto now we have created a key-pair and generated a X.509 certificate which contains the public key. Now we have to import the generated private key to a key store. Importing the private key to a key store is straight forward.

Load the key store to memory.

KeyStore privateKS = KeyStore.getInstance("JKS");
FileInputStream fis = new FileInputStream("/path/to/sample-key-store.jks");
privateKS.load(fis, "keyStorePass".toCharArray());

Import the private key to the key store.

privateKS.setKeyEntry("sample.alias", KPair.getPrivate(),
new char[]{'e', 'n', 't', 'r', 'y', 'p', 'a', 's', 's'},
new java.security.cert.Certificate[]{PKCertificate});

Write the key store back to disk.

privateKS.store( new FileOutputStream(keystoreFile), "keyStorePass".toCharArray());

You can try this with different parameters like key sizes, signing algorithms, etc.

Saliya EkanayakeSplit View in Firefox

After being able to split the Eclipse windows, I felt the need to split Firefox. Luckily I came across this add-on called "Split Browser", which simply does this for you. It enables you to split tabs both horizontally and vertically. Here's a screenshot of this.

Saliya EkanayakeSplit View in Eclipse

I really wanted the split view feature to be in Eclipse as with most of the other IDEs. In fact, Eclipse has this feature, but doesn't give a visible menu/tool option to do it. The simplest way is to drag the tab containing the source until you can see an arrow mark. Then it will split the view as soon as you let go of the mouse. Here's a nice video I found on how to do this.

http://addisu.taddese.com/blog/split-windowview-using-eclipse/

Here's a screenshot of how it looks.


Kaushalye KapurugeBlog Ideas

cartoon from www.weblogcartoons.com

Cartoon by Dave Walker. Find more cartoons you can freely re-use on your blog at We Blog Cartoons.

Nandika JayawardanaMaking the Skeleton Dance

This is a very interesting marketing strategy.  A guy walks into an into an interview and  highlights his negatives.

As I look over my copy of Thompson's application, I mentally reduce his chances from minuscule to nonexistent. I glance at my watch. I've got an early flight. I wonder how long it will take my compatriots to blow poor Thompson off.
"So why should we hire you, Mr. Thompson?" the area manager asks, starting with the question she usually finishes with.
Thompson smiles.
"I'm 53 years old," he says without hesitation. "I'm not pretty. I've been unemployed for almost five months—ever since my last company went belly-up. I've got no experience in your industry. If you take a look at my application you'll see that there's a checkmark next to the yes on that question about whether or not I've ever been convicted of a felony. I've applied for any number of other jobs and no one else will hire me." He looks at us each in turn while he's slowly ticking off these points on his fingers, as confidently as if he were explaining his Harvard MBA, his Olympic gold medals and his seven years as CEO of General Motors. "So let me tell you why I'm the best possible candidate you're ever going to find for this position."
And that's exactly what he proceeds to do—demonstrating the poise and assurance and experience he'd gained in those 53 years.
"If you hire me, I can't afford not to succeed!" he tells us with passion and conviction. "I don't have the option of being able to move on to greener pastures—or even brown pastures—when the job gets too grueling. I'm 100 percent committed. As locked into this position as I was locked into that jail cell 35 years ago. And if you'll notice that's where I earned the most of the credits for my college degree. I never wanted a Master's, so I've made sure I've never had to go back. But what I learned in that place—the formal and the informal training—has a lot to do with why I've been so successful at every job I've had since then."

Read the full article here.

http://www.evancarmichael.com/Sales/372/Making-the-Skeleton-Dance-Bragging-about-the-Negatives.html

Samisa AbeysingheNever Say Die


This photo shows the man that was pulled out of rubble, alive, after 14 days the 7.0 magnitude Haiti quake took place.

Kalani RuwanpathiranaCreating the search index in a database - Apache Lucene

My previous post shows how to index records (or stored files) in a database. In that case the index is created in the local file system. However in real scenarios most of the applications run on clustered environments. Then the problem comes where to create the search index. Creating the index in the local file system is not a solution for the particular situation as the index should be

Samisa Abeysinghe2010 Presidential Election -Genaral Lost!

MR clearly won the election. By a margin that I did not expect.

SF lost.

It is an interesting question if it was really that MR won or SF lost.

Was the election free and fair? On the election day, it was. Leading to the election, it was not.

Government media was misused to the max. The election commissioner admitted this in his statement declaring the result. Unlike in the previous elections, private media was not that bad this time.
Obviously, since I did not like what was going on in the state media, I did not watch those. However, while private media runs with their earned money, state media runs with people's tax money. So they got to be more responsible.

The general was sunk in the mud with government media, and also filled peoples minds with FUD. The whole conspiracy theories and the stuff are total bullshit. I saw posters reminding people with 89-90 era photos, before the election day. These were government sponsored, and was targeted towards generating FUD against SF. However, anyone with bit of understanding on the uprising and the chaos in 89-90, would know that it was triggered by the unbalanced power that was given to UNP in 77. Seeing these posters, the feeling that I got was that I have to be concerned about my sons lives down another 10 to 15 years. What we are doing now is to over power the rulers, like in 77. Consequences will be felt down the line.

It is a reality that SF did at least something to win the war. And GR knew the value of SF in this context. Keep the politics aside, the suicide attack on SF and the follow up developments contributed a lot on the win of war. So more than SF or MR, I believe that it is GR who made it happen. Also, it is not MR, but GR that LTTE was looking to kill at that time. More than anyone, the terror outfit knew who was more threatening.

Looking at the way that SF was attacked, it was shocking for me to see how dirty the politics were. It was amazing how people overlooked, and people were directed to overlook, the services done by SF, and MR did the whole thing to win the war. It was more shocking that it boiled down to the question of weather SF or MR won the war, and those who really fought on the ground and those who got killed in bunches, even in the last minute, were largely forgotten. What would have happened if a solder, who was in the front, in the last battle, was a candidate in the presidential election? Would or would not that person have been attacked like SF?

And what if GR ran against MR? Who would have won?

The problem with SF to start with was that he joined camps with the wrong people. JVP and UNP were bankrupt. Also, I am not sure what the whole rationale of his statement to the Sunday Leader news paper. That alone lost his campaign. SF wanted to win. And that is why he lost. If he stood genuine, out of the dirty politics, did not stand with the bankrupt opposition and stood against the obvious government corruptions, and was not afraid to loose it, standing for the truth, he would have won much better.

But the truth is, you need money to run a campaign. Presidency is a big business here. Look at the marketing budget, the money spent on the ad campaign. Who would spend money if there is no return. So if you want to run the campaign, you need money. So SF had to find some money. The best source was UNP. I do not know where the money come from - some say from foreign powers, and some say, from Colombo business community. From wherever it is, they have money. So SF had to join forces with someone to get the money. And that very thing paved the way for him to be attacked the way MR camp attacked him. So he lost.

Bottom line. SF should not have contested the polls.

However, the real problems remain. Corruption is one of the key problems that I have. Corruption at the ground level in MR camp, because the people see no risk of loosing. There are numerous examples in the village that I live in.
There is no way that MR camp will loose the general election. MR camp will fight among them for preferential votes. There will be no risk of loosing hence, no need to worry about "serving people".
Also, I see no vision, no strategy. It is like the Dehiwala sky bridge. Government "sell" it. But it is a waste of money and increase of traffic. Electronics engineers do not have jobs. They come looking for QA jobs in IT. Because the government companies have outsourced all work to Chinese companies. But I see polling ads "sell" development. And I see on Facebook, that engineering students in the campus happily voting for MR. The government should not be obliged to provide jobs to all graduates, but they should also not prevent job opportunities due to cheap outsourcing. I see Chinese faced people near construction sites - bad new for civil engineering graduates.

Politics is easy money. This also must have played a role for SF to consider running.
In the process, he lost a lot of respect from lot of people.

MR won the first election without any support from minority parties. It was the Sinhala vote that made him president. Thondaman did not support MR in 2005. This time, minorities were with MR for couple of reasons. One for bargaining. Two because SF was army commander. People associated killing with SF and winning with MR. No war can be won without killing. The one who winds the war is the war hero. Now who is the real war hero, MR or SF? This whole logic is busted.

Bargaining possibilities still remains. Minorities will use this for the max in general election. The minorities who did not support MR to win in the first place, will get a bigger pie. They did not help win the war, but will reap the benefits of MR win. Who is loosing? I did vote for MR in 2005. Thondaman took away so many votes from MR in 2005. What am I getting today? What is Thondaman not getting today? What is SF getting today? Again, who won the war? Who helped win the war? Who is getting the benefit?

The General lost! I still respect him though, irrespective of what he said and done during the election, because of the role he played in winning the war in this country.

MR won!

I am keeping my eyes open, to see if it was a people win, if there will be something bright in the future.


Samisa AbeysingheSOA Skills - Seond Highest Paid

A recent salary survey has shown that employers place a premium on SOA related skills.

The leader is ABAP (Advanced Business Application Programming)

We have seen over the last year that people were increasingly looking for WSO2 skills, which is a good proof on the fact that SOA skills are premium and being sought after.

Samisa AbeysingheHaiti Quake Miracle after 14 Days

U.S. troops pulled a man alive from the rubble of a collapsed building in Haiti's destroyed capital on Tuesday, two weeks after a massive earthquake rattled the country.

The 35-year-old man, covered in dust and dressed only in underpants, was carried out from the ruins of a building in downtown Port-au-Prince and was driven off for medical treatment. He did not appear to have any serious injuries.

The rescue, exactly 14 days after the magnitude-7.0 earthquake killed as many as 200,000 people, came as the U.S.-led relief effort was focused on getting help to hundreds of thousands of survivors left homeless, hungry and injured.
Read more

Samisa AbeysingheNew Decade, New Portal - Slides

The WSO2 Gadget Server is a new kind of Enterprise Portal that is designed around SOA and pure Web technologies. The Gadget Server is based around the Google Gadget Specification, a lightweight open specification for web and AJAX portlets. Gadgets are already heavily used on the Web with Google's own iGoogle personalized homepage used by millions, and hundreds of available gadgets freely available on the web. In particular, the Gadget specification is based on well-known languages (just XML, HTML and JavaScript), meaning that the Gadget Server is effective technology for Java, .NET and LAMP approaches alike.

See the Gadget Server webinar slides here.

Samisa Abeysinghe2010 Presidential Election - Mahinda Winning!

MR is winning. That is not that surprising.

However, the margin he is winning by is very surprising.


Samisa Abeysinghe2010 Presidential Election - Peaceful

Peaceful, free and fair.

SF did not even vote. So if MR wins by 1 :P

I still do not understand why some of these people hang around the polling station after voting.
There were plenty of people around even at 3.55 pm, five minutes to finish the poll.

At least another four years of the country is decided by now.

Now to the next poll..who will be the president in another 4/6 years? BR? NR? or SR?

Samisa Abeysinghe2010 Presidential Election - People are Voting like Hell

Looks like the turnout going to be good.

I see long queues in all three polling stations that I saw, riding around. (No I am not an election observer ;) )

Good! Whatever the outcome is, let the majority decide.

And in our area, things are very calm.

Samisa Abeysinghe2010 Presidential Election - It is time to begin Change

Looking at 2005 results, it will be a very close one.

While it looks like MR will win, the divide will be very marginal.

Had MR done little bit to curb corruption, he would have won easily - but keeping people like the "Kudu Gamunu" he has done himself more harm than good.

To be frank, I have no idea what SF will do if he wins. But it does not matter much as it is very unlikely he would win. However, SF seems more genuine compared to the typical politician that MR is. The problem is the bunch of idiots around SF.

The real problem is, there is none out of the whole lot in this contest that is going to address the real problems, like the price of rice, like the debacle in education system. The whole campaign was based on FUD and mud. After all, we are a very high literate nation, but not an educated one or even not that thinking type for that matter. If you look at the ground level, even the educated ones are debating in two camps, MR vs SF, the the loyal and not-loyal, the purple and green+red. There is no third eye, there is no view in a direction outside these.

The question in the air is who will win, SF or MR. However, what about people? Will they win? What about the general public? The story goes, "every politician is corrupted; they will take commissions - 10% is standard". You cannot fix this system etc. etc. Today, 15 million will vote to select one, and few around him will eat up the whole thing. Then the 15 million will grumble and mumble till the next election and would do the same thing again. If we are to develop as a nation, this needs to change (change not like Obaba, though, which is NATO). Someone needs to take initiative.

Srinath Perera"Why I Write" by George Orwell

"Why I Write" by George Orwell is an famous essay on reasons why people write?, which I found rather interesting. He said that "All writers are vain, selfish, and lazy, and at the very bottom of their motives there lies a mystery." which a phrase that is often quoted typically only the first part.

Samisa AbeysingheBuilding an Agile Enterprise with Business Activity Monitoring

“Agility” is more than just a buzz word. The ability to be agile ensures enterprises to gain a competitive advantage. The right decisions made at the right time by the right people is the key to success. And both IT as well as business domain experts understand the need to respond to the latest trends in a proactive manner.

WSO2's new Business Activity Monitor - WSO2 BAM, is the ideal tool that is not only useful for business users but also IT personal to monitor key performance indicators that govern the success of their enterprise. The built in dashboards and reports along with analytical capabilities of historical data, empower users to make the right tactical and strategic decisions.

This webinar, will enlighten you on how to exercise business activity monitoring with your SOA deployments to implement a complete feedback life-cycle in your SOA.

Isuru SuriarachchiJAX-WS Service development with WSAS


I’ve started a series of articles on JAX-WS development with WSAS. The first one here, talks about the basics and fundamentals of JAX-WS development. I’ve written some areas of this topic in my previous posts in this blog. But this article brings all together and provides a very easy to follow approach to develop JAX-WS services with WSAS. There will be few more articles coming out on JAX-WS client side development, MTOM support, WS-Security etc. So stay tuned. I’ll post everything on this blog once those articles will be published.

Isuru SuriarachchiCode First or Contract First with WSAS?


“Code First or Contract First?”. This has been a hot topic in the Web services world for many years among the Web service developers. In one of my latest articles on WSO2 Oxygen Tank, I’ve discussed this topic in the context of WSO2 WSAS. In this article, you’ll find out how to select the most appropreate approach to be followed when developing your Web Service with WSAS.

Chintana WilamunaBill Gates’ vision

This is not about Bill Gates’ move into social media, twitter, the micro blogging craze for the cool kids. No. Nor this is about The Gates Notes where he write about his thoughts. After reading The Internet Tidal Wave [PDF] again, it’s fascinating to take a peek at Bill Gates vision for the company, 15 [...]

Samisa AbeysingheBill Gates is using Twitter

Yes, it is good marketing to twitter. And it is also true. Bill Gates is on Twitter.

Look at the number of followers, given there are only handful of tweets so far.

Samisa AbeysingheOpen Source BAM Tool

WSO2 BAM tool can be used to monitor business activities across multiple heterogeneous platforms.

The BAM tool comes with an eventing model, that can be used to publish events from any platform, like a .NET service, an Apache Axis2 service, or even from a regular PHP script, to record data and monitor them using a central, set of visualization tools, such as dashboards and reports.

The WSO2 BAM is available as a free software download. WSO2 BAM is released under the open source Apache License 2.0, and so there are no licensing fees.

This project is the only active open source BAM project around as of today, and given it's capabilities to be extended to monitor any type of data, makes it a very good choice for any business activity monitoring need.

The project also has a comprehensive road-map planned for this year.

Paul FremantleMule no longer an Open Source company

While I have said for a long time that Mule was not really an Open Source company - since the real version of their ESB (as opposed to the children's edition sorry Community Edition) is not an Open Source product, the fact was that they continued to promote themselves as an Open Source company.

The latest offering from MuleSoft - MuleMQ - is now just a standard proprietary product, with a 30-day trial and no community project. I guess the rename from MuleSource to MuleSoft was an indicator that they were moving away from Open Source.

Tyrell PereraWebinar: New Decade, New Portal



Webinar: New Decade, New Portal
In this webinar, Paul Fremantle, CTO of WSO2, will be explaining the benefits of the Gadget approach to portals, and also showing how you can get started with building effective portals fast. Tune in to find out about the best portal for the next decade.

Starts: Thursday, January 21, 2010 at 09:00 AM; Ends: 10:00 AM (PST)
Presenter: Paul Fremantle
Register Now it's free!


Isuru SuriarachchiHow to use MTOM with Axis2 JAX-WS services


If you are new to JAX-WS service development with Axis2, please read this first. In this post, you will find out how to use MTOM functionality in Axis2 JAX-WS services. Here I’m using Axis2 1.5.1.

First of all, you have to use the BindingType annotation to set the SOAP11 MTOM binding as follows.

@BindingType(SOAPBinding.SOAP11HTTP_MTOM_BINDING)

After that, you can use javax.activation.DataHandler to represent your binary data in your parameters or return types. A simple MTOM enabled JAX-WS service class can be written as follows.

@WebService(serviceName = “MTOMSampleService”,
targetNamespace = “http://mtom.jaxws.wso2.org”
)
@BindingType(SOAPBinding.SOAP11HTTP_MTOM_BINDING)

public class MTOMService {

@WebMethod(action = “urn:uploadFile”)
public String uploadFile(DataHandler data) {
try {
InputStream is = data.getInputStream();
….
String msg = “File ” + data.getName() + ” of type ” + data.getContentType() +
” successfully received”;
return msg;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

@WebMethod(action = “urn:getTestData”)
public DataHandler getBinaryTestData(String stmtId) {
byte[] testData = new byte[10240];

for (int i = 0; i < testData.length; i++) {
testData[i] = 0×7f;
}

ByteArrayDataSource bds = new ByteArrayDataSource(
testData, “application/octet-stream”);
return new DataHandler(bds);

}

}

DataHandler objects can be used inside wrapped classes as well.

Nandika JayawardanaHow to write a custom message receiver for WSF/CPP

When you have to go beyond the supported interface of a ServiceSkeleton when implementing a service, you can use a custom message receiver to achieve that functionality.  For example, recently we encountered such scenario where the unparsed soap enveloped body has to be accessed for some custom logic. But when implementing a service using ServiceSkeleton interface, you would always ended up getting the first child of the soap body as an argument.

In that kind of a situation, the best option would be to implement a custom message receiver. WSF/CPP now provides a very convenient API for implementing a message receiver. 

For implementing a custom message receiver, WSF/CPP provides a class named MessageReceiver. What a user has to do is to extend from this and implement the abstract method invokeBusinessLogicSync which will receive inflow message context and outflow message context as arguments. Then you have the full control over the processing of the message received by the message receiver.

Next add the macro WSF_MESSAGE_RECEIVER_INIT and pass the message receiver class name as the argument.

Next compile the written code as a shared library and place it in <WSFCPP_REPO>\lib directory. When implementing a service which would be invoked using this custom message receiver, set the name of the shared library as the “messageReceiver” parameter for each operation. For example, if the shared library name is “CustomMsgRecv

<operation name=”Op1”><messageReceiver class=”CustomMsgRecv”/></operation>

Here is the example message receiver code.

/* CustomMsgRecv.h */

#include <MessageReceiver.h>

class CustomMsgRecv : public wso2wsf::MessageReceiver
{
public:
WSF_EXTERN bool WSF_CALL
invokeBusinessLogicSync(wso2wsf::MessageContext *inMsgCtx,
wso2wsf::MessageContext* outMsgCtx);
CustomMsgRecv(void);
~CustomMsgRecv(void);
};


/** CustomMsgRecv.cpp */



#include "CustomMsgRecv.h"
#include <MessageReceiver.h>

using namespace wso2wsf;

WSF_MESSAGE_RECEIVER_INIT(CustomMsgRecv)

CustomMsgRecv::CustomMsgRecv(void)
{
}

CustomMsgRecv::~CustomMsgRecv(void)
{
}

WSF_EXTERN bool WSF_CALL
CustomMsgRecv::invokeBusinessLogicSync(wso2wsf::MessageContext *inMsgCtx,
wso2wsf::MessageContext *outMsgCtx)
{
/** Add Your Logic Here */
}

Samisa AbeysingheSri Lanka Decides 2010 - Some Decide - Others Rigged

On Saturday, the postman came to deliver the official voting notices. I was given a paper t sign, I noticed there were only three. I asked him, why only three, it has to be four. He said only three came.

Funny! My mother, sister and my wife have voting rights, not me.

I went to the "Grama Niladari" that moment, the official who is handling the voting list. He looked at the list, and said, in 2007 my name is there, and not in 2008. And he blamed my mother, she must have not entered my name - well, my wife's name is there, how can the dauther in law is remembered and the son is not.

All in all, my name has gone missing. If they officially dropped my name, due to some mismatch or something, there supposed to be a B list, and even that does not contain my name.

This is damn crazy. They happily take my taxes, but they do not have the decency to put my name on the voters list.

I did not believe all these stories of rigging by dropping random names. Now it has happened to me, I am sure there would be hundreds of thousands of such cases. This election is a closely fought one, and even before the election is begun, the rigging is underway.

To hell with presidential election in Sri Lanka, 2010 Jan - this is all busted.


Tyrell PereraDon't Make Conan's Mistake

Don't Make Conan's Mistake - The Conversation - Harvard Business Review
So what's in your best interest? How can you avoid making Conan's mistake?

Stay in your role because you are gaining experiences that will help you achieve your long-term career objectives, or because you think it is the job you can get at the moment, or because it's fun — but you don't stay in your job because of some potential future rewards that may or may not materialize.

No organization can make reasonable promises of future placement — you're setting yourself up for disappointment trusting an organization to honor that agreement. In fact, that's essentially today's career deal.

I've had a similar discussion recently during a gathering of friends and those who were there might remember my stance being exactly this. If I have anything more to add to this great post in HBR, it would be that; every time you think about someone else's dream, you take time away from thinking about yours. So allocate time carefully.

Always think about your dream and consider everything that surround you, including your employer, your peers and the cards life has dealt you in general as tools to realize this dream. Trust me, you will be a very satisfied individual no matter what the present situation is, if you do so.




Tyrell PereraGartner's Top Predictions for IT Organizations and Users, 2010 and Beyond

Highlights from the report are;
  • By 2012, 20% percent of businesses will have no ownership of IT assets. Fueled by technological developments in 2009, such as virtualization and cloud computing, there’s a movement toward decreased IT hardware assets and more ownership of hardware by third parties.
  • By 2012, India-based IT companies will represent 20% of cloud service providers in the market. Gartner attributes this to companies leveraging their market positions and R&D efforts in cloud computing, resulting in cloud-enabled outsourcing options.
  • By 2012, Facebook will lead the pack in developing the distributed, interoperable social Web through Facebook Connect and similar mechanisms. The interoperability will be critical to survival of other social networks.
  • Other social networks (including Twitter) will continue to develop with focus on greater adoption and specialization. However, they will all revolve around Facebook.
  • By 2014, building on server vitalization and desktop power management as savings in energy costs, more organizations will be driven by the need to be responsible for carbon dioxide emissions and will include carbon costs in business cases. Vendors will have to provide carbon lifecycle statistics for their products.
  • In 2012, 60% of a new PCs total life greenhouse gas emissions will have occurred before the user first turns it on. In its lifetime, a typical PC consumes 10 times its own weight in fossil fuels, but around 80% of a PC's total energy usage occurs during production and transportation. Buyers will be paying more attention to eco labels.
  • Online marketing by 2015 will control more than US$ 250 billion in Internet marketing spending worldwide.
  • By 2014, mobile and Internet technology will help over 3 billion of the world's adults to electronically transact. Emerging economies will see increase in mobile and Internet adoption through 2014. Worldwide mobile penetration rate will get to 90%.
  • By 2013, mobile phones will replace PCs as the most common device for Web access. A piece of advice: optimize your site for the smaller-screen formats.

Read the complete report at Gartner >>


Samisa AbeysingheCode creation talents

The following is an extract from a blog by John Nunemaker

The other day someone sent me an IM and thanked me for my open source contributions. They then said something about wishing they had my gem/code creation talents. I didn’t miss a beat and informed them that I have no talent.

I am sick of hearing people say, “Oh, I love your code, I wish I could do that.” You can. The only reason you can’t is because you don’t practice enough. I used to think that I wasn’t smart enough. I was jealous of those that did crazy code stuff that I couldn’t even comprehend. Then, one day, I ran into something I did not understand and instead of giving up, I pushed through. I sat there in front of my computer for hours and wrestled with class and class instance variables.

Here is the original post.

Sameera JayasomaDeveloping OSGi bundles for WSO2 Carbon using Maven bundle plugin

Even though the title mentions about WSO2 Carbon, the steps that I've explained can be used to develop generic OSGi bundles which are compliant with OSGi R4 specification. WSO2 Carbon is the platform that I am using here to deploy the bundles. WSO2 Carbon is the industry's first SOA middleware platform based on OSGi.

If you read this post till the end, you will understand how to develop OSGi bundles using Maven bundle plugin and deploying them in WSO2 Carbon.

Obviously, the first step is to generate a Maven 2 project. One option is to create from the scratch and the second option is to use the Maven archetype plugin. Since the former is time-consuming, I am using the latter here.

Generate the Maven 2 project

mvn archetype:create -DarchtetypeGroupId=org.apache.maven.archetypes
-DgroupId=org.wso2.carbon -DartifactId=org.wso2.carbon.helloworld

Changes to generated Maven 2 project

  • Make another directory under "src/main/java/org/wso2/carbon/" with the name helloword.
  • Move the App.java file located inside the "src/main/java/org/wso2/carbon/" folder to "src/main/java/org/wso2/carbon/helloworld" folder
  • Replace source of the App.java file with the following.
package org.wso2.carbon.helloworld;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

/**
* Hello world!
*/
public class App implements BundleActivator {

public void start(BundleContext context) throws Exception {
System.out.println("Hello World!");
}

public void stop(BundleContext context) throws Exception {
System.out.println("Goodbye World!");
}
}

You need to modify the generated pom.xml as well

Please note the changes done in the following pom.xml file. If you are interested in Maven bundle plugin, please refer this article on WSO2 Oxygen tank

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.wso2.carbon</groupId>
<artifactId>org.wso2.carbon.helloworld</artifactId>
<packaging>bundle</packaging>
<version>1.0.0</version>
<name>org.wso2.carbon.helloworld</name>
<url>http://maven.apache.org</url>

<dependencies>
<dependency>
<groupId>org.eclipse.osgi</groupId>
<artifactId>org.eclipse.osgi</artifactId>
<version>3.5.0.v20090520</version>
</dependency>

<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>1.4.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
<Bundle-Name>${pom.name}</Bundle-Name>
<Bundle-Activator>org.wso2.carbon.helloworld.App</Bundle-Activator>
<Private-Package>org.wso2.carbon.helloworld</Private-Package>
<Import-Package>org.osgi.framework.*</Import-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>


<repositories>
<repository>
<id>wso2-maven2-repository</id>
<name>WSO2 Maven2 Repository</name>
<url>http://dist.wso2.org/maven2</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</releases>
</repository>
</repositories>

</project>

Building the OSGi bundle.

mvn install

Generated OSGi bundle(org.wso2.carbon.helloworld-1.0.0.jar) is placed in the target folder of the project. Observe the content of the bundle, specially the MANIFEST.MF file. It contains the OSGi manifest headers

Starting WSO2 Carbon

If you have correctly followed above steps, now we are in a position to deploy the generated bundle in WSO2 Carbon. Download the Carbon distribution from the project site. Then unzip the it to a preferred location. Go to the "bin" directory and execute the following command. Here "-DosgiConsole=19443" option is used to allow telnet access to the Equinox OSGi console.

Linux
sh wso2server.sh -DosgiConsole=19443
Windows
wso2server -DosgiConsole=19443

Now in a separate window, execute the following command to access the OSGi console

telnet localhost 19443

Deploying the generated OSGi bundle

Execute the following command to install the bundle into the Carbon instance

osgi> install file:/home/sameera/wso2/testing/maven/archtype/org.wso2.carbon.helloworld/target/org.wso2.carbon.helloworld-1.0.0.jar
Bundle id is 267

Using the given bundle id, now we can start and stop the helloworld bundle

osgi> start 267
Hello World!
osgi> stop 267
Goodbye World!

Are you still following this blog post? Great!!! now you know how to develop and deploy OSGi bundles into WSO2 Carbon.

Samisa AbeysingheCloud Realiies in 2010

In 2000, that is 10 years ago, every organization had to have their own mail server, wither in-house or rented from and ISP.

Today, you go to a company like Google, and get your packaged office solution, that not only has email, but also other stuff like documents and calenders.

In another 10 years time....

Well as we all know, the world moves faster and faster every year. Though it took many years for email to become a hosted service, it would not take that many years for other IT operations to go into hosted model, thanks to the hype, and looming reality, around the cloud.

Within this year, we will see end-to-end IT operations, completely on the cloud, including integrated enterprise applications.

Ruwan JanapriyaA Scam – HSBC Credit Card Bill Pay through EasyPay – Sri Lanka

Yeah! I am a "proud" customer of HSBC. Yeah!! I also know you'll laugh at me for my stupidy for keeping a HSBC Credit Card. But still, I want to share my "latest" experience with HSBC bill payment. I paid my last credit card bill on the due date using ...

Kalani RuwanpathiranaHow to Write a Custom Class Loader to Load Classes from a Jar

A custom class loader is needed when the developer needs to load classes from some custom repositories, to implement hot deployment features and to allow unloading of classes. According to Java2 class loading system, a custom class loader should subclass java.lang.ClassLoader and overrride findClass() method which is responsible for loading the class bytes and returning a defined class.

Saliya EkanayakeFunny Infinite Loop with C#

What will happen when you run the following C# code? It's a never ending loop. Oh! really? yea, note the "Name" inside set method. I have used uppercase N. Now it will call setter recursively.

Interesting isn't it? :)


public class Person
{
private String name;
public String Name
{
set
{
System.Console.WriteLine("assigning wow");
Name = value;
}
}
}


public class Hello
{
static void Main()
{
Person person = new Person();
person.Name = "wow";
}
}

Kalani RuwanpathiranaIndexing a Database Using Apache Lucene and Searching the Content

Here is a Java code sample of using Apache Lucene to create the index from a database. (I am using Lucene version 2.3.2 and mysql) final File INDEX_DIR = new File("index"); try{ Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "password"); StandardAnalyzer analyzer = new StandardAnalyzer();

Kalani RuwanpathiranaLoading Index to the RAM and Flushing Updates to the Database Periodically - Lucene

As my previous post shows, storing index in the database is a solution for applications run on clustered environments. But there is a performance hit as we read/write from/to the database when the index is updated. It is more time consuming. Therefore we can simply load the index to the RAM (Lucene supports RAMDirectory) and flush the changes to the database periodically. It can be done as

Danushka MenikkumburaApache Continues to be the Leading Web Server

A survey conducted by netcraft shows that Apache Web server continues to be the leading Web server by a huge margin leaving others in the dust. Apache httpd claims to have the largest market share. 

overalld Active Servers

top1m_historyMarket Share

Tyrell Perera2010 and Cloud Stocks

Is 2010 Another Great Year for Cloud Stocks? | AMR Research - Supply Chain Management Experts
Today, cloud applications represent a small percent of software spend. In the Piper Jaffray study, it’s 5.7%. This is expected to grow to 13.5% of total spend over the next five years. Personally, I think that figure is too conservative.

For now, 72% of respondents are leaning toward best-of-breed vendors for cloud applications. That said, though, when asked to select the tech vendor that would be a “material part of your organization’s cloud-computing plans,” Microsoft earned top billing with 65% of the vote, followed by Oracle (61%), VMware (55%), Google (53%), and salesforce.com (52%).

If you’re curious about SAP’s ranking, only 11% see the ERP leader as a key cloud vendor. The relatively low response placed the company 16th on the list, trailing RIM, Dell, Red Hat, Amazon.com, IBM, Sun, EMC, Apple, Concur, and Yahoo.


Danushka MenikkumburaApache may Stop 1.3, 2.0 Series Releases

There are clear indications that ASF may stop new releases of the 1.3 and 2.0 series of its Web server product. Apparently their main focus now is on 2.2 series. Nevertheless there is a larger number of 1.3 and 2.0 series servers in production systems as of now.

Danushka MenikkumburaGoogle Docs to Replace USB Drives?

Google unveiled yesterday on their official blog that Google Docs would offer to host “all” file types with a limit of 250MB. With this, you can now host all your valuable docs in a central location and share/access them from different computers. You can read the full story here.

Danushka MenikkumburaJeOS

JeOS (pronounced “juice”) stands for Just enough Operating System. In essence JeOS is not a generic, all-inclusive, bulky operating system but a customized, light-weight version for a particular application. The implication is that JeOS is for Software Appliances.

The idea is to have the minimum set of OS components that are required to run a particular software appliance so that its makes the appliance light-weight and robust.

Typically, a JeOS consist of the following:

  • JeOS media ( OS core {Kernel,Virtual Drives,Login}
  • OS Minimum maintenance tools
  • Minimum user space tools
  • Packages repository (DVD or Network based)

Major OS vendors now offer their “juice” variants optimized for virtual appliances and that have been tuned to take advantage of key performance technologies of the latest virtualization products including VMware and KVM. The list includes, Ubuntu JeOS, OEL JeOS, SUSE JeOS, LimeJeOS (openSUSE version), Orange JeOS (CentOS version), etc.   

Samisa AbeysingheBrowser Size Tool from Google


The browser size tool from Google helps you to gauge how users will see your site on their Web browsers.

The above image shows how my blog performs, not that good it seems :)


Dimuthu GamageAccess WSO2 Governance as a Service From Remote Registry

WSO2 Governance as a Service is a hosted instance of WSO2 Governance Registry with multi-tenant support. WSO2 Governance as a Service provide you almost all the functionalities provided with the Governance Registry targeting the enterprise SOA governance, same time it provides all the advantages  inherent with the Software as a Service model.

Here I’m talking about how to use a popular feature available in Governance Registry, inside WSO2 Governance as a Service. i.e. Remote Registry Client. With Remote Registry Client, you can access the resources in registry programatically. It uses atom/pub protocol to communicate with the registry server.

Here is an example of using Remote Registry Client. I assumed I have an account with domain name ‘example.com’ with a user name ‘example_user’ (‘example_password’). You have to change this to valid values before running this code, You can create an account in Governance as a Service freely for a limited use.

import java.net.URL;
import org.wso2.carbon.registry.core.Registry;
import org.wso2.carbon.registry.core.Resource;
import org.wso2.carbon.registry.app.RemoteRegistry;

class RegistryDemo {
    public static void main(String[] args) throws Exception {

        // calls the registry with the authentication information
        callRemoteRegistry("http://governance.cloud.wso2.com/registry",
                   "example_username@example.com", "example_password");
    }

    public static void callRemoteRegistry(String url, String username,
                       String password) throws Exception {

        Registry myRegistry = new RemoteRegistry(new URL(url), username, password);
        if (!myRegistry.resourceExists("/demoResource")) {

            Resource r = myRegistry.newResource();
            r.setContent("demo content");
            myRegistry.put("/demoResource", r);
        }

        Resource r = myRegistry.get("/demoResource");
        byte[] contentBytes = (byte[])r.getContent();
        String content = new String(contentBytes);
        System.out.println("Content: " + content);
    }
}

Dimuthu GamageMake vs Ant

Ant was developed mainly to run java programs, so it is good at building and running java programs. But you can use the good all Make program to build and even run java programs.

Say I have an ant file that will

  1. Clean the build – ant clean
  2. Compile – ant compile
  3. Make a Jar – ant jar
  4. Run – ant run or simply ant

For this, I will only compile one java file name src/test/HelloWorld.java

<project name="HelloWorld" basedir="." default="main">

    <property name="src.dir"     value="src"/>

    <property name="build.dir"   value="build"/>
    <property name="classes.dir" value="${build.dir}/classes"/>

    <property name="jar.dir"     value="${build.dir}/jar"/>
    <property name="main-class"  value="test.HelloWorld"/>

    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>

    <target name="compile">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${classes.dir}"/>

    </target>

    <target name="jar" depends="compile">
        <mkdir dir="${jar.dir}"/>

        <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>

            </manifest>
        </jar>
    </target>

    <target name="run" depends="jar">

        <java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
    </target>

    <target name="clean-build" depends="clean,jar"/>

    <target name="main" depends="clean,run"/>

</project>

If you want to learn what each line of this means, just follow the excellent ant tutorial at http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html.

Here is the Makefile that will do the above tasks,

SRC_DIR=src
BUILD_DIR=build
CLASSES_DIR=$(BUILD_DIR)/classes
JAR_DIR=$(BUILD_DIR)/jar

PROJECT=HelloWorld
MAIN_CLASS=test.HelloWorld
PACKAGE=test
 
run: clean jar
        java -jar $(JAR_DIR)/$(PROJECT).jar
 

jar: $(JAR_DIR)/$(PROJECT).jar
 
$(JAR_DIR)/$(PROJECT).jar: $(CLASSES_DIR)/$(PACKAGE)/*.class
        echo Main-Class: $(MAIN_CLASS)> mf
        test -d $(JAR_DIR) | mkdir -p $(JAR_DIR)

        jar cfm $@ mf -C $(CLASSES_DIR) .
 
compile: $(CLASSES_DIR)/$(PACKAGE)/*.class

 
$(CLASSES_DIR)/$(PACKAGE)/%.class: ${SRC_DIR}/$(PACKAGE)/*.java
        test -d $(CLASSES_DIR) | mkdir -p $(CLASSES_DIR)

        javac -sourcepath src -d ${CLASSES_DIR} $<
 
clean:
        rm -rf build mf

You may notice I had to provide the package name to the compile command, as it doesn’t have a proper wildcards to represent the jar. Similar to ant all these make tasks will execute only if it is required. i.e. for an example if all the .class files are up to date with .java it will not try to recompile it.

Chanaka JayasenaBest of TV in 2009

FlashForward

(Sci-Fi | Mystery | Thriller)

For me this is the best TV serious came out in 2009. A mysterious event causes nearly everyone on the planet to simultaneously lose consciousness for 137 seconds, during which people see what appear to be visions of their lives approximately six months in the future—a global “flashforward”. A team of Los Angeles FBI agents, led by Stanford Wedeck (Vance) and spearheaded by Mark Benford (Fiennes), begin the process of determining what happened, why, and whether it will happen again.



Dollhouse

(Sci-Fi | Mystery | Thriller)



The show revolves around a corporation running numerous underground establishments (known as "Dollhouses") across the globe which program individuals referred to as Actives (or Dolls) with temporary personalities and skills. Wealthy clients hire Actives from Dollhouses at great expense for various purposes. The series primarily follows the Active known as Echo, played by Eliza Dushku, on her journey towards self-awareness.

Sadly Fox announced that the show had been canceled. Final episode will airing January 22, 2010.

V


(Sci-Fi | Mystery | Thriller)


I remember watching the old TV serious when we were kids. The remake seems to be very good.


The Vampire Diaries


(Horror | Romance)


The story centers around Elena Gilbert, a high school girl torn between two vampire brothers.

Srinath PereraIcons for your Architecture Diagrams

If you have been wondering about where to find Icons for your Architecture Diagrams/ Presentations, here are few options.

  1. Try Open Clipart, but get 0.18 (new version, categories are not good and very hard to find something)
  2. If you are in Ubuntu, try /usr/share/icons/gnome/scalable, there is lot of .svg files there
  3. Look for wikipedia entry, images in there are reusable (same for wikimedia)
  4. Google with create commons settings

Hiranya Jayathilaka"I See You"

I saw it and it’s a beauty!
Went to see Avatar last week with some friends, and I got only two words about the movie – “Frikkin Awesome”. It’s undoubtedly one of the best movies I’ve ever watched and definitely the best movie I’ve watched in last couple of years. Everything about Avatar is so fascinating. The plot, sceneries, special effects, music and just about everything else is near perfection. I also liked the message that movie attempts to give. Avatar is about people who are at the two ends of the spectrum. On one end we have people who are willing to engage in dirty act, commit any crime, kill anyone and destroy anything to earn a quick buck. On the other end of the spectrum there are people who are willing to sacrifice their lives to defend what is considered correct and uphold the moral values. The movie takes you through the conflict between these two types of people.
If you still didn’t watch it you are not even a person. So make haste. It’s science fiction and fantasy at their very best. Also please do yourselves a favor by watching it on the big screen in a real theatre, rather than watching it on your home theatre system.
Mr. James Cameron sir, you are a genius. Thank you loads to the actors and the behind screen team of Avatar for the great entertainment. And congratulations on breaking the record previously held by Return of the King for the second highest-grossing movie ever. With the way things have been going, may be even the first place (which is currently held by Titanic) is a possibility right now.

Danushka MenikkumburaWhy SaaS?

SaaS stands for Software as a Service. It means you pay for the Software like service rather than buying and installing it locally. Why would you want to keep paying for a service when you could just buy a piece of software and pay once?. Well there are a couple of good reasons that you have never thought of.

1. Low cost of entity - Typically the periodic fee that you pay is structured so that it is much less than the cost of licensing a product on a one time basis. Specially SaaS applications are specifically built with a multi-tenant backend, thus enabling multiple customers or users to access a shared data model. This architecture naturally lowers the unit cost as in a multi-tenant implementation, you have just a single instance of the application running. In other words, its a one-to-many relationship as oppose to a one-to-one mapping. Therefore, specially small businesses will definitely fine SaaS affordable as they do not have to pay a big lump sum upfront. On the other hand, since the consumers of the service do not have to worry about hardware costs, the actual cost goes down considerably. Specially small business owners may not be comfortable at all with certain high-end hardware requirements. In good old days, most of the hardware vendors used to provide bespoke software offerings so that they could come up with hardware deals coupled with software solutions.

2. Built in updates - With SaaS all the product updates are included in your subscription. Contrast this with a typical software product which you might have to pay for upgrades each year to keep current. Possibly you need to have your own system support department to keep an eye on your systems.

3. Better reliability - The story goes that the SaaS provider has invested heavily in infrastructure, and the system is running on top of the line hardware and networks. In other words you don't have to invest in your own infrastructure before you can even install another product.

There are some decent real-world SaaS implementations. WSO2 is in the process of offering some of its great products as services and GaaS was the first to come out. GaaS stands for Governance as a Service and its powered by the WSO2 Governance Registry.

gaas-image

Customers are allowed to use the service free for a limited level of usage and will need to pay for usage beyond that. The free limits are:

  • Up to 5 users
  • No more than 100 resources stored per tenant
  • No more than 100 resource accesses per day per tenant
  • Each resource at most 1MB in size

You can try out GaaS for yourself at WSO2 GaaS homepage!.

Dimuthu GamageWSF/PHP Code First Approach: Returning an Array of String

Here is a problem that many people have asked me how to do it. “Returning an array of string” with the code first approach. The API or WSDL generation annotation guide, http://wso2.org/project/wsf/php/2.0.0/docs/wsdl_generation_api.html contain all the things required in details. Here is an example of a service that return an array of string.

<?php

/** splitMe function
 * @param string $string_to_split string to split
 * (maps to the xs:string XML schema type )
 * @return array of string $result split to array
 *(maps to the xs:double XML schema type )
 */
function splitMe($string_to_split)
{
    return array("result" => split(":", $string_to_split));

}

$operations = array("splitMe"=>"splitMe");
$opParams = array("splitMe"=>"MIXED");

$svr = new WSService(array("operations"=>$operations,
                           "bindingStyle"=>"doclit",
                           "opParams"=>$opParams));

$svr->reply();
?>

Note that the annotation corresponding to the return value.

 * @return array of spring $result split to array

This will generate an schema with an element of maxOccurs=’unbounded’. Note that you can get the wsdl from the ’serviceurl?wsdl’.

<xsd:element name="splitMeResponse">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="result" maxOccurs="unbounded" type="xsd:string"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

Now just generate a client for this service using wsdl2php and try invoke it. You will get an array of string as the response.

    $input = new splitMe();
    $input->string_to_split = "a:b:c:d";

 
    // call the operation
    $response = $proxy->splitMe($input);
    print_r($response);

Samisa AbeysingheBeauty is...


This is how you build perfect beauty ;)

Chanaka JayasenaVote

"Do you believe if the person you are voting for will not hesitate to kill you if you are the only thing that is keeping him/her from winning an election?"

Chanaka JayasenaWSO2 Data Services v2.2.0 released

WSO2 Data Services Server team has recently announce the release of version 2.2.0 of the WSO2 Data Services Server.

The WSO2 Data Services Server is an extremely simple and elegant mechanism to take data and make it available as a set of WS-* style Web services or as a set of REST style Web resources. It augments SOA development efforts by providing an easy to use platform for creating and hosting data services. This enables easy integration of data into business processes, mashups, gadgets, BI applications and any service in general.


Why should you use the new version?

Dimuthu GamageWriting Business Rules in WSO2 Carbon Platform

If you want to write rules in a Java program you have lot of choices. You can use a third party library like Drools or use the JAVA built-in JSR-94 reference implementation. In WSO2 Carbon, there is a component that abstract the behaviour of different rule engine and give you a unified API. Currently it has plugged into Drools and JAVA built-in JSR-94 implementation.

The rule component in WSO2 Carbon platform mainly used by WSO2 ESB product to mediate messages according to the given business rules. But the component is written to facilitate any requirement of using business rules in WSO2 Carbon platform. I had such a requirement in past few days and manage to use the rule component easily with the help of the component author, indika@wso2.com. So I thought it is worth sharing my experience in here.

Here You will be preparing the following stuff.

1. Rule configuration -

We can use this to provide the information about the rule implementation we are going to use, the rules (You can write rules inline or provide a reference to an external file) and the input and output adapter information.

<configuration xmlns="http://www.wso2.org/products/rule/drools">
<executionSet uri="simpleItemRuleXML">
<source key="file:src/test/resources/rules/simple-rules.drl"/>

<!-- <source>

<x><![CDATA[
 rule InvokeABC
 // rules inbuilt to the rule conf
 end

 ]]>
</x>
</source> -->
<creation>
<property name="source" value="drl"/>

</creation>
</executionSet>
<session type="stateless"/>
<input name="facts" type="itemData" key="dataContext"></input>

<output name="results" type="itemData" key="dataContext"></output>
</configuration>


2. The Rules  -

You can write rules inline in the above configuration or put it in a file and refer it from a key which can be refered from the ResourceHelper (described below).

import java.util.Calendar;

rule YearEndDiscount
when
$item : org.test.pojo.SimpleItem(price > 100 )

then

Calendar calendar = Calendar.getInstance();
if (calendar.get(Calendar.MONTH) == Calendar.JANUARY) {

$item.setPrice($item.getPrice() * 80/100);
}

end

3. Data Context -

The context object that can be used to feed and retrieve data from and to rule engine. Here is the data context for my application.

public class SimpleDataContext {

    public List<NameValuePair> getInput() {

        // in reality the data will be retrieve from a database or some datasource 
        List<NameValuePair> itemPairList = new ArrayList<NameValuePair>();
        SimpleItem item1 = new SimpleItem();
        item1.setName("item1");
        item1.setPrice(50);
        itemPairList.add(new NameValuePair(item1.getName(), item1));

        SimpleItem item2 = new SimpleItem();
        item2.setName("item2");
        item2.setPrice(120);
        itemPairList.add(new NameValuePair(item2.getName(), item2));

        SimpleItem item3 = new SimpleItem();
        item3.setName("item3");
        item3.setPrice(130);
        itemPairList.add(new NameValuePair(item3.getName(), item3));

        return itemPairList;
    }

    public void setResult(Object result) {

        if (!(result instanceof SimpleItem)) {
            System.out.println("it is not a SimpleItem");
        }

        SimpleItem item = (SimpleItem)result;
        System.out.println("Item: " + item.getName() + ", Price: " + item.getPrice());
    }

}

And the Item I’m going to manipulate using rule is a simple bean like this,

public class SimpleItem {
    String name;
    int price;
    public String getName() {

        return name;
    }

    public void setName(String name) {

        this.name = name;
    }

    public int getPrice() {

        return price;
    }

    public void setPrice(int price) {

        this.price = price;
    }
}

4. Data Adapter

You have to adapt the input and output with the rule engine. Mostly here you only have to wrap the data context. The advantage of having the data adapter is, a data adapter always associated with a input/output type. So in the rule configuration I can provide the type for the input and output. If you see my rule configuration above, you see the input/output type is marked as “ItemData”. Here is my custom data adapter that is associated with the “itemData” type.

public class SimpleDataAdapter implements
        ResourceAdapter, InputAdaptable, OutputAdaptable {

    // the type associated with the adapter
    private final static String TYPE = "itemData";
    public String getType() {

        return TYPE;
    }

    public Object adaptInput(ResourceDescription resourceDescription, Object tobeadapted) {

        if (!(tobeadapted instanceof SimpleDataContext)) {
            return null;
        }

        SimpleDataContext dataContext = (SimpleDataContext)tobeadapted;
        return dataContext.getInput();
    }

    public boolean adaptOutput(ResourceDescription description,
                               Object value,
                               Object context,
                               ResourceHelper resourceHelper) {

        if (!(context instanceof SimpleDataContext)) {
            return false;
        }

        ((SimpleDataContext)context).setResult(value);
        return true;
    }

    public boolean canAdapt(ResourceDescription description, Object ouptput) {
        String key = description.getKey();
        return key != null && !"".equals(key);
    }

}

5. Resource Helper

Resource Helper will map the keys refered from the configuration to JAVA objects. This is mostly used in mediation rule configurations which can extract the message data using a key or an xpath. In this example, we don’t have much keys refering from the configuration only the rule file and the data context.

public class SimpleResourceHelper extends ResourceHelper {

    public ReturnValue findByKey(String key, Object source, Object defaultValue) {

        if (!(source instanceof SimpleDataContext)) {
            return new ReturnValue(defaultValue);
        }

        SimpleDataContext dataContext = (SimpleDataContext)source;
        if (key.startsWith("file:")) {

            String filename = key.substring("file:".length());
            try {

                BufferedInputStream in = new BufferedInputStream(new FileInputStream(filename));
                return new ReturnValue(in);
            } catch (Exception e) {

                return new ReturnValue(defaultValue);
            }
        }
        if (key.startsWith("dataContext")) {

            return new ReturnValue(dataContext);
        }
        return new ReturnValue(defaultValue);
    }

    // there are few more methods to be implemented, which can just leave not implemented for this example
    }
}

That is all the accessories. Now you will be able to write the rule engine execution code.

File ruleConfigFile = new File(ruleConfigFilename);
XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(new FileInputStream(ruleConfigFile));

//create the builder
StAXOMBuilder builder = new StAXOMBuilder(parser);
//get the root element (in this case the envelope)

OMElement ruleConfig =  builder.getDocumentElement();
EngineConfiguration configuration =
        new EngineConfigurationFactory().create(ruleConfig, new AXIOMXPathFactory());

EngineController
        engineController = new EngineController(configuration, new SimpleResourceHelper());
        final ResourceAdapterFactory factory = ResourceAdapterFactory.getInstance();

ResourceAdapter adapter = new SimpleDataAdapter();
String adapterType = adapter.getType();
if (!factory.containsResourceAdapter(adapterType)) {

    factory.addResourceAdapter(adapter);
}

SimpleDataContext simpleContext = new SimpleDataContext();

if (!engineController.isInitialized()) {
    engineController.init(simpleContext);

}

if (engineController.isInitialized()) {
    engineController.execute(simpleContext, simpleContext);

}

Danushka MenikkumburaPoderosa - Tabbed SSH Client for Windows

If you are fed up of using PuTTY for remote login, switch to Poderosa. It provides a tabbed shell interface so that you do not have to have a pile of shell windows open as when you are using PuTTY. Poderosa is licensed under Apache 2.0.

screen1

Dimuthu GamageGetting the size of BLOB in MySql

If you want to store binary in database, you can use BLOB as the data type of that column. In Mysql you can use TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB depending on your space requirement. Here is an example of database table using BLOB as a column type.

CREATE TABLE BloBTest (
    id INT NOT NULL AUTO_INCREMENT,
    filename VARCHAR( 32 ) NOT NULL,
    content BLOB NOT NULL,
    PRIMARY KEY ( id )
)

Storing Data

PHP:

$filename = "myimage.png";
$filecontent = file_get_contents($filename);
$filecontent_escaped = mysql_real_escape_string($filecontent);

$sql = "INSERT INTO BloBTest(filename, content) " +
       "VALUES('$filename','$filecontent_escaped')";
mysql_query($sql, $link);

Java:

String filename = "myimage.png";
InputStream filecontent = new FileInputStream(filename);

String sql = "INSERT INTO BloBTest(filename, content) VALUES(?, ?)";

int size = filecontent.available();
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, filename);
ps.setBinaryStream(2, filecontent, size);
ps.executeUpdate();

Retrieving Data

PHP

$sql = "SELECT filename, content FROM BloBTest";
$result = mysql_query($sql, $link);
while ($row = mysql_fetch_assoc($result)) {

    $filename = $row["filename"];
    $content = $row["content"];
    $new_filename = "new_" . $filename;
    file_put_contents($new_filename, $content);
}

Java:

String sql = "SELECT filename, content FROM BloBTest";

PrepareStatement ps  = conn.prepareStatement(resourceContentSQL);
ResultSet result = ps.executeQuery();

if (result.next()){
    String filename = result.getString("filename");
    InputStream contentStream = result.getBinaryStream("content");
    String newFilename = "new_" + filename;
    // storing the input stream in the file

    OutputStream out=new FileOutputStream(newFilename);
    byte buf[]=new byte[1024];
    int len;
    while((len=contentStream.read(buf))>0)

    out.write(buf,0,len);
    out.close();
}

Retrieving the Size of the Blob

After you store your data as a blob, you can manipulate or query the data with some of the in-built String functions in mysql. For an example if you want to query the size of the blob you just stored, you can use OCTET_LENGTH function. Here is an example,  (this will give you the size in bytes.)

SELECT OCTET_LENGTH(content) FROM BloBTest WHERE filename='myimage.png'
.

Tyrell PereraGartner Acquires Burton Group

Gartner Acquires Burton Group
STAMFORD, Conn., January 5, 2010 —    Gartner, Inc. (NYSE: IT), the leading provider of research and analysis on the global information technology industry, today announced that, on December 30, 2009, it acquired Burton Group, Inc. for approximately $56 million in cash. Burton Group is a leading research and advisory services firm that focuses on providing practical, technically in-depth advice to front-line IT professionals. The firm has approximately 41 research analysts, 40 sales and client service associates, and projected 2009 revenue of $30 million.


Dimuthu GamageRegister Today for WSO2 Governance as a Service

WSO2 Governance as a Service is an online multi-tenant supported instance of WSO2 Governance Registry which is the solution for SOA Governance from the WSO2 SOA stack. You can start trying out WSO2 Governance as a Service by accessing the http://governance.cloud.wso2.com and creating an account for your organization (free for limited use).

In order to identify your account, you have to provide the domain name of your organization. I will demonstrate how to create an account using the “ws.dimuthu.org” as my domain name.

1. First go to http://governance.cloud.wso2.com from a web browser and click the ‘Register’ button. You will be asked to enter the domain name as the first step.

Enter the domain

Enter the domain

After that, you have the option of validating the ownership of the domain right at the registration process, or you can skip the validation and continue to the next step in which case your domain will be appended ‘-trial’ suffix. You can validate the ownership of the domain later at any stage.

Here I want to validate the domain right now, so I click ‘Take me to the domain ownership confirmation page straight-away’ and click the ‘Submit’ button.

2. This will redirect you to the domain ownership validation page. You can validate the ownership of your domain in one of two ways.

Method i). Just create a text file named ‘wso2gaas.txt’ in the web root of your domain and enter the given text. This is the most simplest method of two.

Validate domain name using Textfile

Validate domain name using Textfile

Method ii). You can put a DNS entry according to the given instructions. This is a little tedious approch to validate the domain. In fact it may take a while to propagate the new DNS information, so you may have to wait hours without refreshing the page until you finally validate the domain ownership.

Click the continue button after the domain validation done. Then you will be redirected to a page requesting more information.

3. Tenant Registration Page

Tenant Registration

Tenant Registration

4) After this step, you will be notified to check for your email which will contain a mail with a link to proceed with the registration. There you will be able to select a theme for your organization and finalize creating your account. Login to the admin account for your tenant with the credential you provided a the time of the registration.

The domain ownership validation was introduced to WSO2 Governance as a Service account registration only now. So for organizations who have already have account will have a message similar to this when they are trying to login to their account.

Info box at login

Info box at login

So the account I have registered using the domain name ‘example.com’ has been renamed to ‘example.com-trial’. As the instruction of the message says you can go to the account management page after the login and validate the domain ownership.

Account Management Page

Account Management Page

Samisa AbeysingheJASON Schema

JASON Schema is looking to threaten the dominance of XML as lingua franca in computing.

It will be some time before XML is ruled out, given its dominance in integration efforts and SOA based apps.

However, JASON always was a formidable alternative, and the JASON schema fills the gaps that were there in data definition space. And given the ability to operate across many Web applications and platforms, it also looks real when it comes to interoperability.


Srinath PereraFourth Paradigm, an E-Sceince book by MSR

Microsoft Research has published this book "Fourth Paradigm", which describes how to handle very large data sets. If you are interested in E-Science use cases, this seems very good reading. It is partly based on Jim Gary's last work. The book is free and can be downloaded from here.

Samisa Abeysinghelean . enterprise . middleware

That is the new tag line of WSO2.
lean . enterprise . middleware
Yes we are still open source, and much into SOA.

However, we are the most comprehenssive, enterprise ready open source middleware platform, that expands well beyond SOA and still much simpler, compared to other bulky solutions.

lean
  • because of the simplicity
  • zero code configuration
  • can get up and running within minutes
  • constant, concise management console used across products - little leaning time
  • option to fall back to XML config files if no management console desired
  • components can be added as well as removed - you can control your middleware - deploy what you need
enterprise
  • designed for the enterprise
  • complete platform - covers all aspects of the enterprise
  • IT as well as business needs taken into account
  • deployed by many enterprises - proven to work
  • minimal TCO, maximum ROI, optimal effectiveness

middleware
  • solves EAI problems in a novel way
  • SOA as well as EDA tooling
  • develop, test, deploy, monitor, orchestrate and fine tune
  • security, policy rules, reliability, transactions facilitated
  • governance, BPM, BAM, portals supported


Charitha KankanamgeEnabling hotupdate in Apache Axis2

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.
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.
In order to enable hotupdate, you could simple edit the following parameter in AXIS2_HOME/conf/axis2.xml

<parameter name="hotupdate">true</parameter>

If you use WSO2 Carbon based product such as WSO2 WSAS, WSO2 ESB or WSO2 BPS, you can follow the same procedure.

Samisa AbeysingheHappy Palindrome Day! 01-02-2010

A palindrome is a word, phrase, number or other sequence of units that can be read the same way in either direction - Wikipedia

And today is...
January 2, 2010 = 01/02/2010 = 01022010

Samisa Abeysinghe2010 - SOA and Cloud

One bit of advice for this year:
Talk Cloud but use SOA.
For cloud is yet to mature, and still unknown for the most part.
On the contrary, SOA has proven to help enterprises thrive, throughout last year, and will be more this year.

Sanjiva WeerawaranaDelivering a complete middleware platform under the Apache license

Let me start by wishing everyone a wonderful 2010!

Right from the get-go, WSO2 was designed to be a company that built a complete middleware platform. We set out to target the big guys who have a complete story, except with two key fundamental differences: our technical approach and our business model.

Our technical approach is of course based on Web services and SOA. For the first time in the history of computing, Web services have offered a lingua franca for how systems interact with each other. There were of course many previous attempts, but one camp or the other of the technology industry didn't agree and so there was no "English" of the computer world. Web services has changed that with every major and minor vendor supporting interoperability via Web services (XML, HTTP, SOAP and the rest of WS-*).

SOA, despite the much ballyhooed story of its demise at the beginning of 2009, is not only alive and well, but is in fact kicking butt. SOA is fundamentally an approach for how to build large scale composite systems. As an approach, it mimics the real world's service-oriented economy. As such, SOA is a fundamental concept, not some vendor-driven theory. That said, SOA, like any other technology, has had to live through the Gartner Hype Curve. If at all instead of 2009 being the year SOA died, it became the year it came out of the trough and started climbing up towards the plateau of productivity.

Of course the fall into the trough was not without reason for SOA and Web services. Much of it was driven by middleware vendors not delivering anything new, anything valuable in the form of SOA middleware. Many of them simply took their existing middleware and rebranded it the shiny new SOA gimmick. Well that of course doesn't work and the cracks in the story will force you down to the trough .. and it did.

WSO2 is unique in having started from nothing and set off on a path to build a complete middleware platform with Web services and SOA in its heart. The result is simply orders of magnitude less complexity, much better performance and overall greater productivity and lower TCO. These are not random claims from me - these have all come from our users and customers.

We now call it Lean Enterprise Middleware. Try it and see - you'll be shocked at how lean it us, how productive it is and how much money you can save by replacing your legacy or pretend open source middleware stack with ours.

Now let's talk about the business model. Right from the beginning, we made a strong commitment to releasing all of our software under the Apache license and to not attempt any bait-n-switch type acts. Believe me, that took a lot of hard work to keep going .. investors for example have a major issue with the Apache license. Why? Well because you can take any of our software and do whatever you want with it and never ever pay us. We have no legal recourse to making you pay (as dual license business models do) nor any way to force you to pay for the good stuff (as many "commercial open source" companies do). Instead, we rely on delivering real, measurable value to our customers without forcing them to pay us. Our customers love us because they pay for the value we deliver to them, not because we are using the law to force them to pay for the software they use.
When I say you can do whatever, I mean whatever - recently one of our competitors sold a support contract for one of our own pieces of software! Yes, that is possible. In this case the people who will pay the eventual price is the customer who did the stupid thing of buying support from someone who has nothing to do with the software! Remember Oracle's Unbreakable Linux? Well that didn't break Redhat and neither will this act - it just shows how low some people will go to make a buck.
So today you can download an entire enterprise middleware platform from us without registering, without paying, without any risk of bait-n-switch for absolutely no cost. How can we afford to do that and become a successful business? We have many many customers who happily pay us to provide maintenance, provide help and in general to be their technology partner. So having thousands and thousands of free non-paying users is not a problem for us - that's free marketing and helps us save the world from the ugliness that is IBM, Oracle, etc. middleware.


WSO2 is delivering on the promise to build lean enterprise middleware and deliver 100% of it as open source under the Apache license. Oh yes, we also offer it as various cloud offerings - virtual machines, or online services.

We are the ONLY vendor offering a complete enterprise middleware platform 100% open source under the Apache license.

That was all wrapped up in 2009, a tremendous year for us. In an environment of economic uncertainty, not only did we meet our targets but we beat them. We have been doubling revenue each year and this year was no different. We are on a roll :-).

Looking towards 2010, we have more work to do to make our enterprise middleware platform simply untouchable by anyone else. We're already far ahead of our competitors with our WSO2 Carbon powered platform, but we have several things planned to further leave our competitors in the dust. As I wrote in an earlier blog, we practice open development - so if you want to be part of it come on over and join us on architecture@wso2.org!

Ayanthi AnandagodaWelcome 2010!!


I’ll say it here again.

The opposite of courage in our society is not cowardice, it is conformity. – (Author: Rollo May)

Samisa AbeysingheWSO2 - 2009

Paul has blogged about WSO2 achievements in 2009.

It has been a simply phenomenal year and I want to thank all the WSO2 team who have made it happen. The efforts have been outstanding and if anything there was more professionalism and even smoother operations this year. We are truly moving from startup to mature company. Above all the team displayed "Grace Under Pressure" - which is how Ernest Hemingway described having "guts".

I could not agree more - we are evolving into a mature company. And I think one of our key strengths is our ability to evolve as a team, in conquering "enterprise challenges".

Samisa AbeysingheMy 2009

It was a fabulous year for me personally.

I set couple of goals for the year, and I did achieve all of those. I might admit, the first time that I manage to do that.

One of the secrets of success was, I kept my goals simple. Just couple of them.
The other was that, I kept focus, and took corrective steps to fix and get them back on course, when those deviated.
Also, success of 2009, was based on hard work done in previous years. So it is kind of a long journey to get here.

Apart from achieving the year's goals (which are personal, hence, I will not note them down here), there also happen to be some notable happenings in life.

Firt of all, the work - life balance. Specially being able to devote some time for the elder son. There were many days where 14-18 hour work day was regular, even towards the end of the year, still I was able to have some time to share a moment with the kid.
I also got to this habit of not going online on weekends. I would check email on Saturday morning and hardly use the internet modem till Monday morning. I would use the laptop, to write, to read, but would rather not go online, where I would get glued to a mail thread on something. This helped a great deal to devote some time to other matters in life, other than work.

I also learned the importance of co-location when it comes to work. Though I thought that I could do most of my work from home being online, it proved to me that I had to be in the office, to talk to people, face to face. So I got to admit that, the mid of the year was slow, as I was mostly working from home. But in order to get back to the same level of productivity, I used to drive back to office every day, even after noon, chase that boosted productivity as well as effectiveness a great deal.

I wrote a second book this year. I am yet to blog about it.

I read a lot this year. The most inspiring being a book on the myths of innovation. I also read a book on how to think better. Though I read many other things, these two are the most note worthy.

Towards the mid of this year, I realized that, the next year, I will celebrate 10 years in industry. And the fact that I am getting old.

And as always, I enjoyed work, specially the fact that I got involved with the BAM product at the grass root level, in addition to being part of many other things that was going on in engineering. I thought getting involved with some client issues as well as the cloud computing effort was fun as well as educating.

I do not just "hope" that 2010 would be a better year, as I "know" 2010 will be one of the best in my life, given that I have set the stage for that in 2009.

Samisa AbeysingheLast Hours of a Historic Year - 2009

It simply is a historic year - 2009.

For Sri Lanka, there has not been a better year. It is the year that we got over the civil war. I would not call it a win, as there are no winners in a war, in any war, given the costs. However, the war is no more. Which is a great achievement for all Sri Lankans. No matter who claims the ownership of the end of the war, if one looks at the ground reality, it is not one individual, rather the people in this country, who ended it for future generations.

It was fought for thirty years. People were fed up with it. The terror leader was growing older. And the generations who suffered from the war, from childhood, became young and strong. They fought with their blood for those whom were slaughtered by the terrorists. They had enough in their guts to fight through the drought, rain, flood and through fierce resistance, for they fought to bring justice to those who fell, their won fathers, mothers, brothers and sisters.

Needless to say that this war was started by few idiots, with very shallow political agendas. Though it is over now, I do not see any steps, whatsoever, taken to prevent such a catastrophe in the future. We remain wide open to be exploited and be fooled into such situations. And I see no politician taking this seriously, to fix the situation. However, it is time that we Sri Lankans can learn a lesson here. If we could get over such a cruel war, we can also defeat the root causes that keep us a poor country. No matter what, politicos and the government that are composed of those politicos are doing, the people can drive this country towards prosperity.

The war is over now. It is not time to argue who won it, how, and for what reasons. We are wasting valuable time on those. It is time to question, what next, where to, and how... and lets not wait for the government to take initiative, let the people begin...

Deepal JayasingheHow to disable service listing in Axis2

Number of users have requested to have a way to enable/disable service listing in Axis2. What that means is, by default Axis2 list out all the service in the system when you go the following URL;

http://localhost:8080/axis2/services/listServices

However there are situation where we do not need to expose our services publicly, in such a situation following would comes handy.

To enable/disable service listing use following parameter in axis2.xml (WEB-INF/con/axis2.xml).

<parameter name="disableServiceList">true</parameter>

True – Disable
False -Enable

Adding this does not prevent listing service under administration window, to stop it, you need to change the default username and password. You can do that by changing the following two paramters.

<parameter name="userName">admin</parameter>
<parameter name="password">axis2</parameter>

You can download the fix here, replace axis2-kernel.jar (WEB-INF/lib) with this.

Tyrell PereraInvictus


Out of the night that covers me,
Black as the Pit from pole to pole,
I thank whatever gods may be
For my unconquerable soul.

In the fell clutch of circumstance
I have not winced nor cried aloud.
Under the bludgeonings of chance
My head is bloody, but unbowed.

Beyond this place of wrath and tears
Looms but the Horror of the shade,
And yet the menace of the years
Finds, and shall find, me unafraid.

It matters not how strait the gate,
How charged with punishments the scroll,
I am the master of my fate:
I am the captain of my soul.

~ William Ernest Henley (Invictus)






It neither had expensive 3D animations, nor nine feet tall natives fighting alien imperialism. But this is the movie that touched me most this season.


Samisa AbeysingheSpace Backyard


This is how your backyard will look from your house in space.


Tyrell PereraDual booting Ubuntu Karmic and MS Vista with Grub2



With Ubuntu 9:10 Karmic Koala, the default boot loader is now Grub2. I wish I read up a bit more on that before trying to dual boot Vista on my Ubuntu machine today. I was prepared to get my boot loader wiped out of course. But the recovery procedure is a bit different in Grub2. So if you have Karmic Koala running and want to install Vista on another partition to dual boot, this might help.

Step 1 - Use GParted to create space for your Vista installation (I reserved 40 GB). Make it primary and leave it unformatted.
Step 2 - Boot from the Vista CD and select the newly created partition. Vista will complain it can't install to that partition (Who didn't see that coming?). Press SHIFT+F10 and follow the steps described in this post to get the installation going.
Step 3 - Once Vista is ready and your Grub boot loader is wiped out by Vista. Follow the steps in this post on the Ubuntu forum to recover Grub 2 via LiveCD.
Step 4 - Follow the steps here once you have successfully booted back to your Ubuntu Karmic installation, in order to get Vista listed in the Grub boot menu.

That's it :)


Srinath PereraBeautiful Sri Lanka

Couple of shots I was able to get on the way.

Parrots, often find as couples

Parrots


Kingfisher

Kingfisher

Peacock

Peacock, hope I will find one in its dance, one day.

Ruwanwali Saya

Ruwanwali Saya

Srinath Perera@ Jaffna

We were @ Jaffna last weekend, following are few shots. If you are planning to go a) it takes about 14-16hours drive b) it is good if you have a SUV/Pickup as some parts of the road is not in that good condition (around Vavuniya). c) You have to leave Elephant pass by 5pm on your way back.

Jaffna
Nallur Kovil

Wating on A9

Waiting on A9 for Clearance

A9 Road

A9, almost at the end of road. Not many roads in SL run for 300+kms (it is 200kmX400km almost).

Elepahnt Pass

Elephant Pass


Jaffna

Tal Trees, Signature of Jaffna

Iranamadu Tank

Iranamadu Tank

Footnotes