Saturday, December 12, 2009

Using OSGi Service Registration & Consumption with Service Properties

When I was looking in to resource which tells about OSGi Service Properties I found very little useful articles. Most of the resource just describe how to write services and consume them and they just mention we can use properties to varies different services. You might not know what OSGi properties yet,first I will show you how to write a typical OSGi service and register it in to the framework, then let's look in to how do we have to deal with Service Properties.

  • Before writing a real service we always have to have an interface of that particular service, then we have to implement our interface.Let's assume the Interface name is Calculator and implementation class name is CalculatorImpl.
  • Then we have to register our service using a class which implements BundleActivator class. Normally when our bundle get resolved start method of that class get called. So normally we have to register our services during the activation of our bundle. So we have to do the registration inside the start method of the Activator class of our bundle.
public class CalculatorAcivator implements BundleActivator{
public void start(BundleContext context){
// Registering the Calculator Service as an OSGi Service
Calculator calc = new CalculatorImpl();
context.registerService(CalculatorService.class.getName(),calc,null);
}
public void stop(){
}
}

  • Then we have to write another class which is in another bundle and get the service reference. In order to do that OSGi API provide number of ways, here I will be showing the very basic way of consuming a known service.

public class CalculatorConsumer implements BundleActivator{
public void start(BundleContext context){
// Registering the Calculator Service as an OSGi Service
ServiceReference ref = context.getServiceReference(Calculator.class.getName);
if(ref != null){
Calculator calc = (Calculator)ref.getService(ref)
// now you have a reference to the Calculator service
}
}
public void stop(){
}
}


Here the registration happens with registerService method of BundleContext object which is the object we always use to talk to the OSGi environment. In here you can see we are registering the service by giving the interface name, object of the service class and a null value. Second argument is the Service object which is going to use by the consumer. Before going in to the last argument I would like to remind you something which I have mentioned in my blog post about of Introduction to OSGi Services. Here I have mentioned that we can register different services which implement the same interface, as an example we can write another class which implements the same Calculator class. So during registration of process we give the same full qualified class name. So you may get confused how do we the exactly the same require object when we get the service because when we get a service we again pass the interface name rather parsing the exactly implementation class name. So that is the place where we have to use Service Properties to get the differentiation of the services which implement the same interface.

As the third argument for the registerService method we have to give a Dictionary type object and normally what we are doing is create a Properties object and put required values to identify our service from the services which implement the same interface.

Properties props = new Properties();
props.put("name","CalculatorImpl");
context.registerService(Calculator.class.getName(),calc,props);

So once you give the Service properties, during the consumption you can check these properties using Service Filters to get the the exactly the required Service object using getService method by passing the filter. As an example if we want to get the service object of the registered service above we have to give the filter string like this.

ServiceReference ref =context.getServiceReference(Calculator.class.getName(),"(name=Calculator)");
Calculator calc =(Calculator) ref.getService(ref);

This will simply return the actual CalculatorImpl object. When you give the filter Strings you have to obay certain rules whey you deal with complex filters and I will be writing more about OSGi Service Filters which will be helpful for you to use OGSi services in effective manner.







Friday, December 11, 2009

Introduction to OSGi Services

Recently I'm doing some work at WSO2 with OSGi Services and I'm reading some OSGi books which is very interesting for a typical Java developer. So I thought of blogging little by little about what I'm learning by reading about OSGi since there are little number of resources to read about OSGi in the internet.

In simple OSGi Service is again a service which we expose using a Java class as we do in a typical Web Service, but here we have our consumers run in the same JVM and message parsing happens through the same JVM, so no remote calls at all. With OSGi services it contains it's own way of handling clients and it's own way of handling consumers of the services like we have in Web Services. In web services we should have a framework to process web service calls and with OSGi services we have to have the an OSGi framework running to consume and expose OSGi services.
We can write a simple service interface first and implement it in a class and register the service.You can register different number of services by creating different implementation of the same interface. In OSGi we keep all the service information in a Service Registry and when someone wants to consume a given service it actually talk to the Service Broker which is aware of the OSGi registry. Through the service Broker it connect with the service and give a reference of the service object, so that we can call appropriate methods in the service class. Instead of just consuming service operations OSGi services provide set of features like monitoring service registration and unregistration using different approaches. So we can do certain things while a particular service register and while a service is unregistering. I will be writing more on how to register a service, consume a service and how to track service life-cycle, how to use service properties to select required and how to use filters with OSGi Services. I hope to write on those things in few blog posts rather writing all together.

Sunday, December 6, 2009

Standard Java class loading hierarchy



I think before we write complex Java programs we should have a basic understanding about how JVM works and class loading is one of the important thing which JVM does during running of Java programs. In typical Java programs we are using hierarchical class loading concept. In berief class loading is basically contains two operations which are locating the class in the file system and convert physical bytes in to Class object. We can overwrite the first operation by extending java.lang.ClassLoader but we cannot change the way conversion of physical bytes in to Class object.

When we run a normal Java application we have to give the classpath value for our Java command and it's the place where we have our Jar files. So that is the place where we start our class loading. JVM reads paths according to the given order and it's directly goes to the first place which is called Application Class Loader. Since the Java class loading is heirarchical, before loading the class by itself it delegate the work to the upper layer called Extension class Loader and before doing any work Extension class loader delegate the work to Bootstrap class Loader. This concept is called parent first class loading.
So when we try to load our own Jar, Bootstrap and Extension is failing to load the class because Bootstrap is aware of classes in JRE library or extension of JRE class and Extension class loader is aware of libraries in extension directory and finally class loading happens in Application class loader.









Amazon Kindle for Sri Lankans


Recently I bought an amazon kindle since Amazon recently started on shipping to Sri Lanka and I thought of writing some information on behalf of the Sri Lankans who are going to buy a kindle from Amazon.
First I would say that shipping service is excellent and it shipped directly to home on exact date they mentioned, but if flights get delayed it will prolly delayed and you can monitor the shipping progress via amazon since they send us an email once they ship it from there. Sad news is once we take the kindle from DHL we have to pay a tax of 2602 Rs and if you are buying a kindle Leather cover you have to pay another 319 bucks as well.


I would like to first talk about the price, if you are buying a new amazon kindle you have to pay 259$ for the kindle and if you are thinking of shipping it'll cost you 20$ and if you are buying a leather cover it will cost 24$. so including taxes from Sri Lanka total cost would be roughly 332$. I would recommend to buy a kindle leather cover since it will be really really useful for smooth usage for the device.

When we talk about features first I should say that if you live in Sri Lanka you will not be able to access internet since Kindle network is not support in Sri Lanka because they do not have a partnership with any Sri Lankan 3G service providers yet. But I cannot say this is impossible since you can try to replace the sim card in the kindle (Kindle is having a built in HSDPA modem with a built in AT&T Sim card) modem and change the Access Point some how (that is what I'm searching these days) and use it in the normal way we use our 3G internet connection. But I still do not have a solution since I'm bit scared to open up the kindle back cover :). Still I love it once I feel i should open up and try to do something I will do it but I hope amazon will support the Wireless support to Sri Lanka soon.

But even though you can still use kindle to read books which is a very cool experience and I would say that it will prolly increase the number of books you read. What you have to do is you can get the books pdf versions or any other kindle supporting file format and convert it in to kindle version by sending an email to "username"@free.kindle.com with attaching the document. It will send the document converting to the kindle version to you email, in few seconds so you just have to get the document and copy that to you kindle using the kindle USB cable.

The new kindle is supporting the PDF files but I'm not that happy about it, because of the font size and page seperation issues. So the best option is to use free amazon conversion service but some of the images get completely black during the convesion and you have to be bit patient in those situations. But if you are reading story books instead of techie books it will work fine for you.But still I would say this will be a cool experience and good chance for you to read more and more books, during you travel by bus and when you feel unhappy reading at the computer.

Reading experience with the kindle is great and it's screan is very much like a typical paper, since it doesn't have back light. No pain for eyes even if you keep on reading for hours. Important thing I'm seeing here is you can read in any place. If you fed up staying in your chair you can go to bed and start reading which is hard to do with your laptop,and if you want you can read in any place at your home and it will be a good hobby for you to use it during weekends. If you travel long way to your job you can keep on reading in the bus of if you are a person who travel during weekends it would be great to bring your kindle with you and read a bit. If you are a person who hate reading ebooks this is the ideal solution for you to buy an amazon kindle even thought it's an ebook reader, you never feel that you are reading an ebook, it's very much like a normal book.

I will be writing some more about the kindle in future, hopefully if I find how to crack the kindle HSDPA modem to work in Sri Lanka, I will prolly blogging, so keep in touch. Still it's amazing for me and it's really improving my reading !

Wednesday, November 18, 2009

It's good that I came home last night

I decided to come home on Wednesday and work from home on Thursday and Friday because my father is not good these days due to his kidney failure and dubieties and when I was coming it's around 12 PM. My mom used to sleep with our grand mother's place so father is sleeping alone at home. So when I came and knock the door I heard he's telling something so I thought he's coming to open the door, but after staying few minutes I realize something wrong and he couldn't come due to some reason so I went from back door (since I know how to open it from outside) and I saw that he was trying to come but couldn't because his blood sugar level was very low. He was trying to reach to the glucose packs which is few meters away from the bed.
Fortunately once I gave glucose and water after sometime he came to normal...Unless I'm not there things would be bad.

It's good that I came home last night.

Sunday, September 27, 2009

Birth and Death

The best practice is to ask this question in the morning/evening and tonight.
Why did I born ?
Birth and death is almost a single thing and obviously there's no existence of one thing without the other one so we can consider both together. People used to cry so much when someone die but it's a joke to cry when someone die because we all know when someone born they'll die so the best time to cry is when someone born. Are we in a position to understand this ?
Can we live in a closed room for few hours continuously without doing anything? It's would be a very ugly experience for us but how do we feel when we stay in our mom's body for more than 9 months ? But still we want to have another birth .. We were born to stop another birth and the answer for the question "Why did I born? Stop another birth."
Translated from "Ajan cha natha"

Friday, September 18, 2009

Upcomming multitenant version of WSO2 Governance Registry

We are working on making WSO2 Governance Registry Multi tenant so that users can use it more convenient way rather setting it up in their own environment and configure it. Now we can have a single instance running of WSO2 Governance Registry and allow so many organizations to use that instance by completely separating data between those organizations. Each Organization is having their own tenant and set of users for each tenant and all the data between users and between tenant are successfully separated in database level.

We are almost done with new big feature with our Governance Registry and we are about to host it in an Amazon Cloud so that all the users can easily access it create your own tenant and add users to it and all the users can login by giving tenant domain name and user-id.


Please wait until we host it during upcoming week !

Get the dynamic UI for service adding in WSO2 Governance Registry 3.0.1

If you are using WSO2 Governance Registry 3.0.0 you can see that we are allowing users to create their services as resources by giving different kinds of information about the resource. If you go through the context sensitive documentation by clicking on the help button when you go the add service UI you'll get to know that you can configure the given UI by giving different values for the already provided UI by changing some XML files located int /governance/configurations directory.


Now we are allowing users to create their own fields in to govenance registry Service UI form so that you can have your own data in to service resources. This is a completely dynamic UI generation based on an XML. You just have to change an xml in the registry and change your Service UI dynamically. If you want to get this feature in you can do that by switching in to upcoming release of WSO2 Governance Registry 3.0.1 and download the patch here[1] and go through the readme on how to apply the patch to registry.

[1]http://builder.wso2.org/~carbon/service-ui-M2/patch.zip

Tuesday, July 7, 2009

Governance Registry Service Metadata

WSO2 Governance Registry is providing complete Service Metadata Management features with Release 3.0.0 to do a better governance in your SOA system. In the new left panel there are set of operations supported in order to manage service metadata efficiently.

We are providing two main operations to manage service metadata in order to do a better governance in users SOA(Service Oriented Architecture) system.

  • Importing required Service metadata as Registry resource
  • Managing imported Registry Resources
  • Users can add it's service details in different ways like importing complete set of service details, importing WSDL of set of services in the SOA system, importing Schema's or Policies of set of services in the SOA system. Importing service details can be done using the upper part of the metadata menu which contains the links Add->Service, Add-Policy, Add->WSDL, Add->Schema.

    Add Service

    This service import method is preferred when user doesn't have a proper description about the service with a WSDL but we provide a field to import WSDL in to Governance Registry. When user click on Add Service link user will be given a form to fill. Important thing in this form is user can simply reconfigure the default configuration.

    Configuring "Add Service" UI

    User can configure the set of drop down lists which suit to users SOA system. This can be done by changing the current configuration by editing the content of set of resources in /governance/configuration/. There are set of resources as displayed in Figure 3 which you can browse and edit the XML content of the resource.

    Ex: Default configuration have drop down list for Service states with the fields of Created Tested Deployed and Deprecated. If user wants to add a new Service in to this drop down list you have to add a new XML element like this in to the XML content of the resource /governance/configuration/states

    After adding new XML element save the content and to find the change, go to add service UI and see the states drop down. Likewise users can configure all the drop downs in the add service UI.Likewise users can configure all the drop downs in the add service UI.

    In Add Service UI there are set of fields to fill and service name and service Namespace are mandatory. Most of the fields are obvious service informations and if you want to add a WSDL URL you can add it but the information from the WSDL will not be display when you go to edit these information. So we prefer you to use add->WSDL if you have a WSDL in the given resource. And you can add any number of endpoints to the given service by clicking add endpoint link and if user try to add more and more endpoints without filling previously added endpoint new endpoint will not be displayed.

    After successfully adding a new Service user will be directed to newly added resource location which constructed based on the service Namespace which user shouldn't concern about. After direction user can see a resource with the given service name and if user give already exist service name service import operation will fail.

    Add Policy

    User can add Policy by traversing to the add Policy link. This form contains fields, policy URL and policy name. Governance Registry will automatically suggest a name for the policy once the URL is entered. Policy will be imported as a resource in to the Governance Registry. Successful import will redirect in to a page which list all the imported policies.


    Add WSDL

    If a WSDL URL is available and you need to import service information to the Governance Registry you can use the "Add WSDL" option provided with the Governance Registry. Once the URL is provided to the UI, a name is automatically suggested for the resource in Governance Registry. When we import the given WSDL we are extracting certain number of details like service name, service namespaces and service endpoints and import the given WSDL as a resource and import a service resource which is very similar to the resource we are creating when user add a service using add service UI. So user can go to that resource and edit the rest of the information user couldn't import through WSDL import operation, like Authentication Platform, Authentication Mechanism etc.

    Add Schema

    Like WSDL importing Governance Registry allow users to add Schema in to registry using add Schema UI. User have to give the schema location in to Schema URL and Schema name will be filling very similar in Add WSDL and Add Policy forms. Successful schema import will redirect in to currently available imported schema listing page.

    Validation

    Similar to WSDLs, WSO2 Governance Registry performs Schema validations on the wsdl provided once importing is done. The result is displayed under "properties" section of the imported Schema resource.


    Saturday, May 30, 2009

    My Elder brother Graduated in May 28th 2009

    This weekend is a very interesting one for all of my family members since My elder brother graduated last Thursday and one of my younger brother came home after nearly a month by finishing his first exam at faculty of medicine University of Peradeniya...
    My brothers convocation held in BMICH in colombo and parents were there to see their son's victory. This was my moms whole life since we were in our childhood. I always remember she was pointing to University of Ruhuna which is by the road of my fathers place and advising us to study hard...Yeah, she used to do that since I was in Grade 1...
    I'm thanking all of them who helped him to become a graduate..and wishing him all the success for his future endovours !!!! I think he's going to get another degree in couple of months and will be posting again on that !!!

    Monday, May 11, 2009

    Configuring Airtel HSDPA on Ubuntu

    Today I bought an Airtel Data bundle and tried to configure it on my Ubuntu 9.04.I have been accessing internet through my Mobitel connection for sometime and I thought it would be easy to configure it to Airtel.Yes it was easy but I had to do couple of things since the debian package did not had Airtel information in Sri Lankan service providers list. If you are a user willing to configure your Airtel HSDPA(Sri Lankan) connection on Ubuntu with your mobile this blog is for you.

    1.In the current mobile-broadband package which ships with Ubuntu 9.04 doesn't contain Airtel as service provider for Sri Lanka.So you have to get the latest update of the package. In order to do that,install subversion on your machine and get and svn check out from here :
    http://svn.gnome.org/svn/mobile-broadband-provider-info/trunk

    2.Copy serviceprovider.xml and serviceprovider.dtd file in to /usr/share/mobile-broadband-provider-info/

    3. You can see a computer at the panel which show the status of the network, right click it and select edit-Connections and select Mobile-Broadband tab.

    4. If you have already define one connectioin please remove it and add a new one. After copying that new file it will show you Airtel as a Sri Lankan Service Provider during the wizard.

    5. According to configuration now this should connect to the internet through Airtel Access point. But Unfortunately it didn't connect for me. The Access point on the latest trunk of the package is wrong and you have to double click on the newly added connection to reconfigure it and select the Access Point to

    AirtelLive (No Spelling mistakes and I'm don't have time to test the case sensitivity, just copy and paste this)

    6. Now you are done. Now when you click the icon which show the network status with a computer icon you can see the Airtel to select and click on it will connect to the internet if you have enough signal....:-)

    For me it work fine since I'm in galle right now and hopefully it'll work fine in Dehiwelle... (I used to stay there during week days)

    Sunday, May 10, 2009

    Problems with Jar files

    As a developer from a company which uses OSGi for most of their products I thought of discussing the problems we are having with typical jar files. Most of those issues are solved in OSGi Environment.Don't think twice OSGify your products to achieve real modularity for your software.
    First and major issue with simple jar files is not having a runtime concept, they are meaningful only during compile time. At runtime no changes could be done to a jar,it is just expose in to all the jar files in the environment which import it.Jar files doesn't contain any meta data about their dependencies and we do not have any control over the dependency management of jar files. All the classes in the jar is expose in to all the packages of the environment. In simple there's not information hiding between jar files in the Java runtime Environment. So I could say those words something like this. With OOP(Object Oriented Programming) we are achieving information hiding in class level but that's is, how nice if we could achieve that in modular level like exposing some of the packages(making public as we do in public methods and public variables in a class) and hide other packages of a particular jar file. And we can consider this as no communication mechanism between jar files in the horizontal direction, it just allow users to communication through the vertical direction by importing packages. No horizontal communication at all ....:-(

    With typical jar files if we have different versions of the same jar it will just pick the appropriate class from the classpath according to the order we are specifying the classpath, so we couldn't consider this as a proper versioning system.

    Next issue I would discuss is lack of dependency information in a single jar file. Most of the jar files are always depends on other third party jar, but we do not have any proper way of keeping that meta data describe the dependency for a given Jar file. This cause people to get a very popular Exception called ClassNotFoundException.

    Keeping only the dependency information in not enough, we should have a proper understanding about the versions of those dependencies otherwise we couldn't guarantee the behaviour since different versions could be having different behaviours. So with the dependency we should have the version information included on it.

    I have described couple of issues we are having with typical jar files and I will be blogging on how OSGi(Open System Gateway initiative) is going to solve almost all of the above issues and Lead Software Development in to new Modularity concept which will be an elegant feature of Java world.

    Saturday, May 9, 2009

    WSO2 Registry Initialization

    Since I was assigned to work with Registry team at WSO2 I had a look in to the Registry Core source code which ships as a separate bundle with Carbon. I read the code from the Declarative Service level code and thought of blog about the Registry Initialization.
    Since this is a bundle of Carbon Environment it calls most of the methods of OSGI(Open Services Gateway Initiative) but other than calling them all the initialization happens inside the start method of the bundle itself.
    At the very first stage it will create the class RegistryConfiguration which mainly go through the carbon.xml and find what type of initialization is configured. It could be a Remote Registry or an Embedded Registry(Default Initialization). If it's a Remote Registry users have to give the values for following parameters like URL,UserName and Password in the carbon.xml.After reading carbon.xml it simply validate the configuration and create the RegistryContext object by reading registry.xml and passing RegistryRealm object in to RegistryContext. Almost all the initialization happed during the time of creation of RegistryContext. Major tasks are reading registry.xml and registering Handlers and configurating most of the database configurations in programmatical stage.

    After initializing the registry service based on the carbon.xml it add it to carbon environment by calling addCarbonRootCollection method and now RegistryCore is up and running in Carbon Environment. In the latest trunk all the bundle initializations are done using Declarative Service and you won't be able to find Tracker Classes or Activators any more in Carbon platform.

    I will be writing more about the structure of the Registry-Core in near future since it could be useful to understand the internal implementation for who ever is going to implement their own repository management system.

    Saturday, May 2, 2009

    Object Passing between JSP's and Normal Java Classes

    Recently I was assigned to work with Java Web Component stuff and I was encountered a problem when I was developing new Web Services Component to WSO2 registry. Let me explain my problem....
    I have developed a web Service and generated the code for the client side. If you have a look on my JSP code it's calling the method getProfile by passing arguments path,data,session. My requirement in this method is calling the web service client and get the output of the Web service in to the variable data. When I debug the class GetProfileUtil I notice the expected behaviour of variable data but when the JSP runs it throws a Null Pointer Exception when call the get method of the data(Map>). So the modifications happen inside the method getProfile to the variable data is not visible to the JSP.

    String path =request.getParameter("path");
    Map defaultprofile = null;
    Map> data = null;

    try {
    GetProfileUtil.getProfile(path,data,config,session);
    defaultprofile = data.get(UserCoreConstants.DEFAULT_PROFILE);
    } catch (Exception e) {
    CarbonUIMessage uiMsg = new CarbonUIMessage(CarbonUIMessage.ERROR, e.getMessage(), e);
    session.setAttribute(CarbonUIMessage.ID, uiMsg);
    }

    But when I modify my method like this to create the object inside the method and return it, it worked fine. I simply avoid passing the variabl in to the method getProfile but rather create a data variable and return it.

    String path =request.getParameter("path");
    Map defaultprofile = null;
    Map> data = null;

    try {
    data =GetProfileUtil.getProfile(path,config,session);
    defaultprofile = data.get(UserCoreConstants.DEFAULT_PROFILE);
    } catch (Exception e) {
    CarbonUIMessage uiMsg = new CarbonUIMessage(CarbonUIMessage.ERROR, e.getMessage(), e);
    session.setAttribute(CarbonUIMessage.ID, uiMsg);
    }

    when I access the bean variable I got all the modifications happen inside the method.
    Is this the typical behaviour of JSP's and it's totally different from the way Java hadle object passing between classes and methods.
    As far as I understand only wrong thing I have done in my first case is pointing to a null value for data variable....Otherwise it should work...I don't know that approach might be a worst thing to do...

    Friday, April 24, 2009

    Web Services API for WSO2 Registry

    With WSO2 Registry we have a REST API which users can use to implement their own features for the registry based on our Atom Publishing Protocol Client (RemoteRegisty instance). Currently most of the User interfaces are implemented based on Web Services and we are calling most of the REST API methods inside those web services but we did not offer a complete web services API for our clients even though we have used web services method which are scattered among various User Interface bundles in OSGi Environment of our platform.I was able to do this implementation which is identical to our REST API and users can implement their own web services using our WS-API. We are in the process of testing those API calls through web services and if anybody is going play new WS-API please be kind enough to report any issue when you are dealing at runtime. If you are willing to use our WS-API you can alway have a look in to our carbon components repository and have to build the registry module to use the WS API.

    Resource Caching for WSO2 Registry

    Once I started employing at WSO2 I was assigned to work with WSO2 Registry which is again another useful product ships Under carbon platform. This is a Registry which users can keep all the resource in their SOA platform and manage all of those resource in elegant manner. As the very first job I was assigned was to implement resource caching for the WSO2 Registry.
    In Registry every content is treated as Resource which is having a defined path for each resource to identify it. With resource caching when a particular user do a get operation for a particular resource first it checks in the Hashmap resurce is already cached or not so that it can find whether the user is going to do a new get operation or not. If user is doing a new get operation it adds that resource in to the Hashmap after checking the maximum size of the hashmap and directly get the resource from the serverside and return it. If that resource is already in the Hashmap it send the last modified date to the server side. In the server code it check whether somebody modified or not by comparing metadata of the resource and send a 304 HTTP header if nobody modified. If we get a 304 for the Remote Registry we just give the cached resource rather getting it from our server.
    When users are dealing with large datasets this approach uses the users bandwith in an efficient manner rather getting resources from the serverside each and everytime user request for resources. You will be able to get this feature with our next release or if you are using our SVN repository it's already available for you.

    Tuesday, April 7, 2009

    First Job Experience at WSO2 Inc

    I was able to get an offer from one of the leading open source software company in Sri Lanka as well as in the world. Even with the recession getting an offer from company is a big deal for a fresh graduate. I got my first offer from WSO2 Inc which is almost developing complete SOA (Service Oriented Architecture) platform.Most of the development works are done in Sri Lankan office though we have offices in US and UK. We have basically two streams of products with Java and Scripting-C products. Main Java product is WSO2 Carbon which is a complete SOA platform with lot of bundles integrated all together using OSGi to give a collection of implementations to have a single platfor for SOA. During these days I'm trying to catch up the works going on WSO2 which is a really cool experience for a fresh graduate since I have whole a lot of thing to be learn by myself.

    I'm suppose to work with one of the major product called WSO2 Registry which is a registry implementation for SOA platform which help to make a complex unmanagable system more structured and managable. This is not a product which is very specific for SOA management but we can use to manage our resource generally. I will be writing more technical blogs in future about Registry work and my technical experience I'm getting during my time at WSO2.

    Trips to Amsterdam and New Orleans


    Fortunately I was able to travel overseas two times during my undergraduate time simply because I contributed over Apache Software Foundation during the time I spend at the university as an undergraduate. It was a really really cool experience for me since I haven't been in abroad before that. I went to New Orleans in Louisiana in November 2008 and Amsterdam in March. But due to the touch schedule at the university I couldn't write about both.

    My first to participate in ApacheCon US 2008 and I had to give a talk in one of the sessions and it was all about Apache Qpid which was the project I got the committership and now I'm a PMC member for Apache Qpid. That was a very strange experience for me to travel over US alone and I was shocked when I landed over Atlanta AirPort since all most all the people who were around to me was foriengers and I never being to that kind of a scenario before in my life. During my time at the ApacheCon I was able meet lots of Apache folks and discuss certain thing which are technical and really helpful for me for my career and I was able add lot of professional contacts. Whole trip went pretty decent other than delaying my baggage during my arrival to US but now I feel it's good since I got enough cloths from one of the WSO2 collegue and got 50$ from the AirLine.

    Now the Amsterdam trip was again a cool experience and opportunity I got from ASF travel assistance committee and I'm really grateful to ASF giving me all of these opportunities. Amsterdam is a damn beautiful city and most of the people are riding their own bycicles and no trafic in the city at all. When I was there it was very cold but I love that weather since I don't want to wash my cloths :-) Most of the people used to close their shops when it comes to 6 in the evening and they go home and enjoy. Almost all the houses are very much similar to houses in Galle Dutch fort so those architectural thing were not unfamiliar for me since my home town in Galle. I was able to get a real experience with the streats I used to see in films with lot of shops around the road and flow of the road is not build with tar but with some kind of bricks. I have noticed couple of differences between Europe and US during the two weeks of my time in Europe and US. US people are friendlier than Europians but they Europian people enjoy their lives and less traffic and little bit of less complex life stile than US. And most of europians used to speak something other than English and sometimes it's hard to do the work in English (All the ATM machines were in Dutch).

    I have lot more to tell about my experience but that's all I can write due to busy schedule with my first job which is one of unmemorable opportunity I got in my life.

    Sunday, January 18, 2009

    My Today's Sunday School Lesson

    I thought of blogging about some stuff which I'm thinking deeply and which motivate me to think more and more. I hope this will be very useful for all the people, no matter what your religion what your nationality or whatever.. since you are a human being.

    My Sunday school lesson was thrilakshana which is a Sinhalese term and I'm really sorry that I don't know the english term of that. It is capable of describing the whole Buddhism using three words.

    1. Anithya ( inconsistency )
    2. Dukkha ( Sadness but not sure about the exact term)
    3. Anathma - ()

    In buddhism it describe that all the constructs in this world have the previous charactoristics which we never think about that. For me I used to think of it time to time and I feels pretty good when I start on think in that way but unfortunately my mind is changing time to time according to the environment I used to live. From now I'm going to describe each term one by one.

    First the Anithya which imply the inconsistency. It tells that all the constructs in simpler way all the thing in this world used to get change during the life time of that. First it creates due to certain facts and it last for sometime with whole bunch of changes and it ends. This is an obvious thing everybody can understand but the important fact is that we never think about the goods we are using day to day. We try to think that goods belongs to us more and more but the truth is everything is gonna change according to natural low and nobody is capable of changing that nature but we keep on trying that. As an example we used to do lot of thing to maintain our figure and show that we are not getting older.... Are we capable of stop getting mature.. Nobody can do that.. So the best thing is to understand the reality of changing nature of the world including ourselfs. Our thoughts used to change in a very rapid manner so the best way to deal with those inconsistency is to understand the truth and deal with them. That's what I understood from the meaning of Anithya... or inconsistency.

    Next term is Dukkha, it is not all about sadness nrmal meaning of dukkha in Sinhalese is sadness but in here it describe the unimportant nature of the surrounding of our environment. Since everything in our environment used to obey it's own rule and since we cannot change it according to our requirment we should consider them as unimportant or nonvaluable things. This exactly does't imply that we shouldn't neglect everything around us but this tells us not to stick in to goods in an extreme manner. We should keep on dealing with everything while keep in mind about the real nature of the things.

    Anathma term is not much clear for me but as far as I undestand it's all about again we do not belong anything in this world including our selves because they use their own rules so can we consider my car is exactly as my car... Can we consider my computer exactly as mine since it break whenever it wants to be and one day it won't work.... Think little bit can we tell those thingbs belong to me.... Same fact apply to ourselves... we get sick.. we recover.. we die.... it uses it's own rules we cannot control our body so can we control outside stuff.. never...

    This is all about my idea of Thrilakshan.... If you got any comments please feel free to comment which will help to someone....