Monday, April 9, 2012

Who is an Agile BA ?

Business Analysis (BA) is a role which collect, analyses requirements and get it across to the Engineers who build the ultimate product. It's crucial since it's the first step in any lifecycle be it product or software or any other. However, in the traditional BA role, solution requirements are fixed and documented up front on how the solution is expected to function at the end of the project. But with the constant change in the industry and competing firms with each other in the industry demand ones' to be Agile. This is where the traditional role of a Business Analyst gets converted to an agile model. An Agile BA is a role who is involved through out the entire life cycle of the project and involved in the facilitation and management of evolving requirements.

I'm a Business Analyst working for WSO2, a open source application development software company focused on providing service-oriented architecture (SOA) solutions for professional developers. On this blog post I would elaborate on my experience being a BA and challenges I faced during performing such. What I wanted to jot down this post is because personal experience be it good or bad, are the ones that drives you to the correct path.

The value addition of engaging a Business Analyst arise by actually facilitating them to be a part of the interface for a client in to an Organization. It's vital that the BA folks talk to the client throughout the Client life cycle since then the person would understand the evolving requirements of the customer and apply the learnings for the new clients. With the constant change in the markets a BA is no longer a person who documents each and every move of the client neither a person who does all the documentation; but an individual who should make an impression on the client. 


Why is it exciting to be a BA ...


Being a BA is exciting since you get to learn so many different domains by dealing with clients. You not only get the wide exposure dealing with different clients but you tend to learn a lot since all those clients who deal contains are the best in their own domain. 


We are thrive to make relationships with the client and not only just help sort out their identified problem. Sometimes these relationships help tone your own carrier.


For me, I loved the fact that how I saw technology at WSO2 is being put to solve a middle-ware problem. At WSO2 we have a complete PaaS platform and it's pretty technical since its' end user is always a developer itself. Therefore, the fact that how to apply the knowledge I have gathered testing the products being a QA in my carrier I now see how actual clients use them for different use cases. I used to look deeper in to technical back then but now I look at them in a birds eye viewpoint and how each technologies map in to an architecture. Its quite fascinating. 


Other side of the Coin...

Well, it's by nature that every job has its own challenges. But it's important for any job out there to define the boundary. Most of the people fail to do their jobs due to a couple of reasons, either they dont know what they are expected to do, or there's no clear responsibility or authority provided or someone else is overriding the task that you do or lastly the individual doesn't have the required skills.

For any BA including myself have faced or still facing almost all.  

Why is it important for a BA to stick throughout the life cycle is; obviously from one call one cannot get the Business Problem they are trying to solve unless the client is really talkative :) Some don't just spill them out or some may just be 'so' vague and it takes forever to understand where the problem is. Working for a middle-ware company during the past 8 months or so, whenever I questioned about the business problem all they say told is they want to move in to a SOA. Is this the business problem? Hell No !! It's a step they just took to solve the problem. Of course if you just want to finish off the business that answer is more than adequate as we have a complete PaaS to cater to any middleware requirement that is out there. OK... The next problem is what is a business problem. For example, Lets say you're an e-ticketing company. Having the time taken between an end user clicks on a website and the time the end user gets the response is high. That is a problem !! It makes a problem since the end users will refrain from using the site if the site is slow. Well now one may say that for such a problem the how we find the root cause? Since the delay could arise anywhere. But making note of such a problem ensures that the problem is solved. If the ultimate problem is not solved if they choose the technology they thought, this would provide a bad impression to the technology provider. Whatever you do it's equally important that you do the RIGHT thing although you may loose the business. Being shortsighted will get the deal closed off but the company would not sustain. Hence the most important role of a BA is to identify the Business Problem and get the relevant architects to solve the problem they face.

Not knowing what to do is dangerous and this may be due to the lack of responsibilities you are put up with. How do we overcome this? Guess it's partly the task of the management of any organization to clear the boundary of a BA to perform its task and be very clear what they expect out of them. It'll be conflicting since a BA identifies the problem and this may be at the expense of the time. But it's crucial from the clients point of view. So at any given point of time there will be a cold battle between a sales guy whose looking to get to the target vs a BA who slows things down.  

Since you are one of the very first guys the client talks it is important that you know your basics to surprise the client. In a good way :) Sometimes it's impossible to join in every engagement with the client, but a subsequent meeting should always be held to brief a BA of the technologies they have to identify and promote any remedies for potential problems similarly any new developments in the company. Also, a BA should learn the basic architectures with the help of Solution Architects since almost the same thing just move and evolve around. Knowing such most used architects makes you explain the solution to the customer easily and with real world examples the client will buy it. Therefore there should be frequent meetings to brief the BAs of such situations the technology has made a significant difference onsite.

All in all, if the BA be only put as a documentation guy a company will loose investing on such a role. Therefore, it's crucial to correct it at an early stage by clearing out the boundaries and identifying the actual responsibility of such a figure.
 


Tuesday, October 4, 2011

WSO2 Product Stack - Overview

It's been awhile since I jotted my Last Blog. So, as a new start I will just introduce the middelware ala-carte that WSO2 provides. For a reader who may follow the blog will find it weird if I just use product acronyms. So just thought of taking some time off to completely introduce our platform. 


What fascinates me about WSO2 is not only it's technologies but it's people, the culture and it's vision. At WSO2, people are treated not as resources but as human-beings !!; which is true when it comes to the software industry because even the processes are ultimately driven by people. For a Software Company to be successful, it requires the WSO2 family to go through tireless days, long hours and of course complaining households.


What WSO2 products have in different, with other vendors who are out there is the underlying Carbon Framework. WSO2 Carbon is based on Java OSGi technology which allows components to be dynamically installed, started, stopped, updated, and uninstalled, as well as eliminating component version conflicts. This facilitates WSO2 middleware products with a consistent set of enterprise-class management, security, clustering, logging, statistics, tracing, throttling, caching, and other capabilities as well as a management UI framework[1], which basically tells you that all the products that are in the Product Stacks Starting point is Carbon and every feature is built on top of it;


For eg; WSO2 Carbon + Mediation + Proxy                    = WSO2 ESB
              WSO2 Carbon + BPEL Process + Process UI    = WSO2BPS
             WSO2 Carbon + Service Hosting                          = WSO2AS




This is one prominent and a unique feature of the WSO2 middleware stack, since all these components are like building blocks, i.e. plug n play , and since the underlying framework is unique these are cross compatible with other WSO2 products. This has enabled us to stimulate real world applications to map effectively to the WSO2 Products and deliver them as effective and efficient Custom SOA Solutions to our Clients. Such SOA Solutions, I'm sure I will talk of rarely in the near future.


Now, someone may wonder whether is it only WSO2 products? Well.. the answer is NO.... 


All WSO2 products are open source and come under Apache Software Licence[2]; i.e. You are free to use, free to develop applications over it and free to use in production; you just have to pay us if you're going to buy support[3]. Therefore, no one can directly say that "so and so" are the only customers that uses WSO2 solution in production. There could be millions of users who are out there that uses. We are driven with passion to develop technologies. Hence we encourage the open source community to use products, drop comments and help improve our products and infact help the community at large; so that we have some 'cool' competition out there !!




During this post, I'll touch on the WSO2 Product Platform and its available features.  We could further discuss on various methodologies to map real world examples using the WSO2 Middle-ware stack in the upcoming blogs.


Our Product Stack comprises of;
WSO2ESB, WSO2BRS, WSO2GREG, WSO2IS, WSO2BAM, WSO2MB, WSO2GS, WSO2BPS, WSO2MS, WSO2DSS, WSO2AS, WSO2CEP 


A Small Introduction and Key features could be outlined as below.          


WSO2ESB 
Out of the product platform this is one product that does marvel. It's not that other products have much features :) I was involved with QA work for the ESB product for nearly an year and saw what this can really do. In any SOA Solution the key product would be an ESB. Since it does all the routing of messages to other components. 
WSO2ESB was first released in par with the Apache Synapse[4] with extended features and since then we have done a series of major releases over the years.
Latest stable released version is ESB 4.0.0.
Features include and does not limit to:

  • Proxy services - facilitating synchronous/asynchronous transport, interface (WSDL/Schema/Policy), message format (SOAP 1.1/1.2, POX/REST, Text, Binary), QoS (WS-Addressing/WS-Security/WS-RM) and optimization switching (MTOM/SwA).
  • Non-blocking HTTP/S transports based on Apache HttpCore-NIO for ultra-fast execution and support for thousands of connections at high concurrency with constant memory usage.
  • Built in Registry/Repository, facilitating dynamic updating and reloading of the configuration and associated resources (e.g. XSLTs, XSD, WSDL, Policies, JS configurations ..)
  • Easily extensible via custom Java classes (mediator and command)/Spring configurations, or BSF Scripting languages (Javascript, Ruby, Groovy, etc.)
  • Built in support for scheduling tasks using the Quartz scheduler.
  • Load-balancing (with or without sticky sessions)/Fail-over, and clustered Throttling and Caching support
  • WS-Security, WS-Reliable Messaging, Caching; Throttling configurable via (message/operation/service level) WS-Policies
  • Lightweight, XML and Web services centric messaging model
  • Support for industrial standards (Hessian binary web service protocol/ Financial Information eXchange protocol and optional Health Level-7 protocol)
  • Enhanced support for the VFS (File/FTP/SFTP), JMS, Mail transports with optional TCP/UDP transports and transport switching among any of the above transports
  • Support for message splitting; aggregation using the EIP and service callouts
  • Database lookup & store support with DBMediators with reusable database connection pools
  • WS-Eventing support with event sources and event brokering
  • Rule based mediation of the messages using the Drools rule engine
  • Transactions support via the JMS transport and Transaction mediator for database mediators
  • Internationalized GUI management console with user management for configuration development
  • Integrated monitoring support with statistics, configurable logging and tracing
  • JMX monitoring support and JMX management capabilities like, Graceful/Forceful shutdown/restart


WSO2BRS
BRS assists to provide you with the suitable capability of codifying, executing, and maintaining your organization's decisions. 


Key Features:

  • Expose Business rules as a web Service
  • Drools based back end runtime
  • Management User Interface for creating, deploying, monitoring, and testing rule services
  • JSR 94 Compliant
  • Based on carbon platform it provides all the QOS features such as Security, Reliable Messaging, caching etc ...



WSO2GREG

WSO2 Governance Registry is an integrated SOA registry-repository, which supports you to efficiently manage your organization's growing SOA. The WSO2 Governance Registry provides an easy-to-use metadata repository complete with support for full versioning, lifecycle management, a rich model for users/roles/permissions, and social features such as tagging, rating and comments. All these could be done via a Simple Management Console.

  • Storing and managing arbitrary resources and collections
  • Tagging, commenting and rating
  • Managing users and roles
  • Authentication and authorization on all resources and actions
  • Resource / collection versioning and rollback
  • Advanced search capabilities - tags, users, etc.
  • Built in media type support for common types (WSDL, XSD)
  • Built in support for known repository types
  • Dependency management - maintain relationships between dependent resources for impact analysis
  • Pluggable media type handlers for handling custom media types
  • Pluggable custom UIs for resource types
  • Activity log and monitoring with filtering support for the activity logs
  • Atom Publishing Protocol (APP) support for reading/writing the data store remotely
  • Subscribe to resources, collections, comments, tags, etc. with any standard feed reader (Bloglines, Google Reader, etc)
  • Intuitive User Interface with an Ajax-based Web 2.0 interface
  • Internationalization
  • Support for deploying back end and front end (UI) in separate servers
  • WSDL Tool to import service information from a given WSDL, and WSDL custom-view
  • WSO2 Governance Registry federation - mounting a remote WSO2 Governance Registry to a specified location
  • Based on the OSGi based WSO2 Carbon architecture: this is a unification of all Java based products from WSO2
  • Advanced service governance through, discovery, impact analysis, versioning and automatically extraction of service meta data
  • Dashboard support with gadgets with design-time and run-time governance information
  • Advanced Life cycle management with checklists, and scripting support
  • Validation policies. e.g. WSDL Validation, WS-I Validation and Schema Validation
  • Eventing and notifications
  • Supports remote links, symbolic links for resources
  • Attach remote WSO2 Governance Registry instances, providing one interface for many WSO2 Governance Registry instances
  • Support for processing custom URL patterns via pluggable URL handlers
  • Support for custom query languages via pluggable query processors
  • Import/export resources and collections
  • Improved transaction support
  • Support for WebSphere, WebLogic, and JBoss
  • Provisioning and feature management support for WSO2 Carbon family of products
  • Support for clustering
  • Check-in/Checkout tool
  • Gadgets for impact analysis on services and registry resources
  • Dynamic Handler configuration, and simulation
  • Tree-based Resource view
  • API to govern SOA artifacts
  • Complete Web Services API for Registry
  • WS-Discovery support
  • Platform, and Group/Cluster based deployment model, with support for adding remote mounts
  • Support for multiple server instances
  • E-mail verification for subscriptions
  • Hierarchical permission model with granular and extensible permissions
  • Governance Archive for uploading WSDLs and Schemas with imports
  • Ability to update resource content by uploading
  • Rich text editor for editing text resources
  • XML editor for editing handler, lifecycle and service UI configurations
  • Support for deploying Carbon Applications (C-App)
  • Content Search
  • WebDAV support
  • Open-Social API
  • JCR API




WSO2IS
The WSO2 Identity Server provides multidisciplinary identity and entitlement management, which enable the tight and powerful security mechanisms that you need in your organization. The WSO2 Identity Server supports a set of state-of-the art security mechanisms such as OpenID and Information Cards for authentication, and XACML for fine-grained authorization. It integrates easily into existing user stores such as LDAP or Active Directory, supports multi-factor authentication, and much more. 


Features:

  • Entitlement Engine with XACML 2.0 support
  • Claim based Security Token Service with SAML 1.1/SAML 2.0 support
  • Information cards support for SAML 1.1/2.0
  • OpenID Provider
  • Extension points for SAML assertion handling
  • XMPP based multi-factor authentication
  • Improved User Management
  • Claim Management
  • User Profiles and Profile Management
  • XKMS
  • Separable front-end and back-end - a single front-end server can be used to administer several back-end servers
  • Information Cards provider supporting Managed Information Cards backed by user name / password and self-issued cards
  • Multi-factor authentication with Information Cards



WSO2BAM
WSO2 Business Activity Monitor can be used to monitor any SOA or non-SOA deployments in your enterprise. It can be run as a stand alone server and its simple event driven model can be used to publish data into the BAM server and visualized in a variety of dashboards. Since the main dashboard supports gadget technology, users can also write their own gadgets according to their unique monitoring needs.
Features Extent to:

  • Support for collecting data on service invocations and message mediations
  • Straight through processing - Polling and Eventing based models for automated data collection without manual intervention
  • Real time activity monitoring with zero latency - No time gap between data collection and availability of data for monitoring
  • Analytics for historical data on service invocations and message mediations summarized over various time dimension intervals
  • Data visualization with dashboards and reports
  • Ability to define and monitor key performance indicators (KPI) with dashboards and reports
  • Provision to extend monitoring capabilities by customizing dashboard gadgets
  • Built-in support for monitoring WSO2 WSAS and WSO2 ESB
  • Ability to extend the current monitoring model with user defined data by collecting custom data formats for monitoring
  • Multiple DBMS support (H2 - default, MySQL and MSSQL)
  • Message level data correlation using Activity ID (Experimental)




WSO2MB



WSO2 Message Broker brings messaging and eventing capabilities into your SOA framework. The underlying messaging framework of the WSO2 Message Broker is powered by Apache Qpid, one of the leading Advanced Message Queuing Protocol (AMQP) messaging engines available today. The Message Broker is compliant with the latest WS-Eventing specification. It's easy-to-use Amazon SQS API provides a standard interface for your message queuing requirements.The underlying JMS engine handles WS-Eventing/JMS synchronisation that enables exposing and consuming your events using two different standard API's.


Features include: 

  • WS-Eventing
  • Message store based on Amazon SQS API
  • JMS Pub/Sub and Queuing



WSO2GS
The WSO2 Gadget Server brings Gadget technology into the enterprise by providing a customized end-user portal that makes it easy for teams to build attractive and effective portals in record time. Built on top of the Google Gadget Specification, the WSO2 Gadget Server allows Google Gadgets to be developed and deployed in a simple, decentralized manner. Any developer with basic web development skills can create a custom gadget easily and many third-party Google Gadgets are available to add to a user’s personalized dashboard.


Features include:

  • Enterprise class Portal interface - Users get to organise gadgets in a familiar portal interface. Sets of gadgets can be organised using tabs. Individual gadgets can be moved between tabs as well as cloning an entire tab to be used as the foundation for a new tab.
  • Client Side Gadgets - Any gadget adhering to the Google Gadget Specification can be added to the portal. These gadgets are basically HTML and Javascript embedded in XML. They can be hosted in any publicly accessible Web Server. The URL of the gadget XML is used to add them to the Portal.
  • Enterprise Gadget Repository - Organisations can maintain a central repository of gadgets. Portal users can browse and add gadgets from this repository to their individual portals, while rating and commenting on individual gadgets.
  • Anonymous Mode - Users can experience most of the Portal's functionality 'excluding' the gadget Repository even before registration and sign in. All data in this mode will be stored in the user's browser.
  • OAuth Support for Gadgets - Gadget Server enables to add OAuth keys for gadgets to communicate with external APIs such as Google GData, Twitter etc.
  • Inter-gadget Communication - Gadget Server allows inter gadget communication.
  • I18n Support for Gadget - Gadget Server supports internationalization of gadgets.
  • User registration, sign-in and external user stores - User registration and sign in can be done using OpenID or Infocards in addition to the traditional user name and password based scheme. Also the Gadget can be integrated to a external user stores such as LDAP and AD.
  • Management Console - Helps configure and manage the server, its users and the Enterprise Gadget Repository via an intuitive browser based administrative interface.
  • Custom Layouts for Tabs - Gadget Server users can choose a desired layout form six different layouts when creating a new tab.
  • Role Based Permissions - Gadgets can be restricted based on users role.
  • Make SOAP Request Support - Not only REST style requests, gadgets written for WSO2 Gadget Server can consume SOAP only web service via make SOAP Request.
  • Theming Support - Gadget Server users can create custom templates for the portal UI, and add them via Gadget Server management console.
  • Gadget Archive Deployment - With WSO2 Carbon Application deployment, users can, write gadgets using Carbon Studio and deploy the gadget archive in to the Gadget server.



WSO2BPS
Business processes are the lifeblood of an enterprise. The WSO2 Business Process Server includes features for managing, securing and defining business processes within an organization. Powered by Apache ODE, it provides a complete Web-based graphical console to deploy, manage, and view processes and process instances, as well as the capability to deploy custom extensions for the WS-BPEL language.
Features include:

  • Deploying Business Processes written in compliance with WS-BPEL 2.0 Standard and BPEL4WS 1.1 standard.
  • Managing BPEL packages, processes and process instances.
  • BPEL Extensions and XPath extensions support
  • Instance recovery(Only supports 'Invoke' activity) support through management console
  • OpenJPA based Data Access Layer
  • WS-Security support for business processes.
  • Support for invoking secured(Using WS-Security) partner services.
  • Clustering support
  • BPEL Package hot update which facilitate Versioning of BPEL Packages
  • E4X based data manipulation support for BPEL assignments
  • Configure external data base system as the BPEL engine's persistence storage
  • Caching support for business processes.
  • Throttling support for business processes.
  • Transport management.
  • Internationalized web based management console.
  • System monitoring.
  • Try-it for business processes.
  • SOAP Message Tracing.
  • New end-point configuration mechanism based on WSO2 Unified Endpoints.
  • Customizable server - You can customize the BPS to fit into your exact requirements, by removing certain features or by adding new optional features.



WSO2MS
The WSO2 Mashup Server supports the composition of Web Services, feeds, scraped Web pages, files and other information sources into new Web Services. It provides a simple file-based deployment model, auto-generation of metadata and runtime resources for the deployed mashups, management console to easily manage the mashups and many other useful features that help you incorporate Web 2.0 information an capabilities into your enterprise SOA.


Features include:

  • Hosting of mashup services written using JavaScript with E4X XML extensions
    • Simple file based deployment model
  • JavaScript annotations to configure the deployed services
  • Auto generation of metadata and runtime resources for the deployed mashups
    • JavaScript stubs that simplify client access to the mashup service
    • Code templates for developing rich HTML or Google Gadget interfaces
    • TryIt functionality to invoke the mashup service through a web browser
    • WSDL 1.1/WSDL 2.0/XSD documents to describe the mashup service
    • API documentation
  • Ability to bundle a custom user interface for the mashups
  • Many useful Javascript Host objects that can be used when writing mashups
    • WSRequest: invoke Web services from mashup services
    • File: File storage/manipulation functionality
    • System: Set of system specific utility functions
    • Session: Ability to share objects across different service invocations
    • Scraper: Extract data from HTML pages and present in XML format
    • APPClient: Atom Publishing Protocol client to retrieve/publish Atom feeds with APP servers
    • Feed: A generic set of host objects to transparently read and create Atom and RSS feeds
    • Request: Ability get information regarding a request received
    • HttpClient: A hostobject equvalent with Apache HttpClient, which help you to do HTTP related stuff
  • Support for recurring and longer-running tasks
  • Support for service lifecycles
  • Ability to secure hosted mashups using a set of commonly used security scenarios
  • Management console to easily manage the mashups
  • Equinox P2 based provisioning support - extend your Mashup Server instance by installing new P2 features. See https://wso2.org/wiki/display/carbon/p2-based-provisioning-support
  • User based mashup deployment model
  • Ability to upload mashups with it's resources as a zip



WSO2DSS
WSO2 Data Services Server provides a convenient Web service interface for data stored in sources such as relational databases, CSV files & MS-Excel files. With WSO2 Data Services Server, data can be exposed and accessed in a secure (using WS-Security) and reliable (using WS-ReliableMessaging) manner; data is also made available for mashing-up with other Web services.
Features include:

  • Support for large XML outputs
  • Content Filtering based on User's role
  • Support for named parameters
  • Ability to configure schema type for output elements
  • Mixing multiple data sources in nested queries
  • Distributed transaction support
  • Oracle Ref Cursor support
  • Support for multiple data source types
  • Clustering support for High Availability and High Scalability
  • Full support for WS-Security, WS-Trust, WS-Policy and WS-Secure Conversation and XKMS
  • JMX and Web interface based monitoring and management
  • WS-* and REST support
  • Data validations



WSO2AS

WSO2 AppServer is an enterprise-ready application server based on the award-winning WSO2 Carbon framework. Being the successor of the WSO2 Web Services Application Server(WSAS), WSO2 Application Server(AS) supports web application deployment and management in addition to its award winning web services management capabilities. Coupled with WSO2 Carbon Authentication/Authorization feature, users now have the capability to manage their applications that range from Web Services, business processes to web applications in a unified manner within the AppServer management console itself.
With capabilities such as clustering and high availability, Eclipse IDE integration, and full support for key WS-* and REST standards, AppServer is becoming the platform of choice for developers and SOA architects.
Features include:

  • Web Application deployment and management within the App Server
  • AppServer tooling - AppServer related artifacts can be easily generated using WSO2 Carbon Studio
  • Clustering support for High Availability & High Scalability
  • Full support for WS-Security, WS-Trust, WS-Policy and WS-Secure Conversation and XKMS
  • JAX-WS support - Deploy any JAX-WS annotated service and engage WS-* protocols through the management console.
  • JMX & Web interface based monitoring and management
  • WS-* & REST support
  • GUI, command line & IDE based tools for Web service development
  • Equinox P2 based provisioning support
  • WSDL2Java/Java2WSDL/WSDL 1.1 & try it(invoke any remote Web service)



WSO2CEP


Complex Event Processing, or CEP, is basically an event processing concept that can be used in identifying the most meaningful events within the event cloud, analyzing their impact, and taking subsequent action in real time. WSO2 Complex event processing server introduces complex event processing to SOA world. WSO2 Complex Event Processing Server supports deployment and management of instances of complex event processing engines like Drools Fusion, Esper and managing event streams using them.


Features include:

  • Bring CEP to SOA by processing XML events and produce results as XML events
  • Ability to define different event streams, queries and out put streams and store them in the registry as a bucket
  • Support EsperTM and fusion back end runtimes
  • Ability to filter data from the XML event using xpath and format the result as an XML event
  • Support different types of brokers WS-Event, JMS to receive publish events
  • Define and store such different broker configurations
  • Administrative Console to create bucks, add subscriptions etc..
  • Ability to specify CEP queries inline or pick from the registry



The product related information are all extracted from our Developer Portal[1]. You can find a load of articles; KB written to be a master of WSO2 Products. As I stated earlier; All you need is passion !!


[1] http://wso2.org/library/carbon
[2]  http://www.apache.org/licenses/LICENSE-2.0.html
[3] http://wso2.com/support/
[4] http://synapse.apache.org/





Sunday, March 13, 2011

How to Deploy WSO2 ESB 3.2.x and above in Apache Tomcat

All WSO2 products are recommended to be deployed as stand alone servers and  we have stop supporting deploying on other 3rd party appservers from the latest releases.

In this blog post I will walk through on how you deploy Apache Tomcat 6.x.x with the new ESB which could be downloaded here. Also note that this blog will be valid from ESB 3.2.x.

Step 1
Extract the downloaded ESB to a desired location. The home directory will now be known as $ESB_HOME from here onwards.

Step 2
Extract Apache Tomcat 6.x.x to the required location which now will be known as $CATALINA_HOME. Downloadable here.

Step 3
Create a 'esb' folder within $CATALINA_HOME/webapps and copy WEB_INF folder which exists in $ESB_HOME/lib/core. You may also copy log4j.properties in $ESB_HOME/lib in to $CATALINA_HOME/webapps/esb/WEB-INF/classes to facilitate logging.

Step 4
Also copy repository and resources folders from $ESB_HOME and create a separate folder 'esb_repo' and copy them in.

From here onwards there requires some configuration tuning for them to work together.

Step 5
Edit $CATALINA_HOME/conf/server.xml to entertain https ports. Note that path of the esb_repo should be as for your location.

<connector port="8443" maxhttpheadersize="8192" maxthreads="150" minsparethreads="25" maxsparethreads="75" enablelookups="false" disableuploadtimeout="true" acceptcount="100" scheme="https" secure="true" sslenabled="true" clientauth="false" sslprotocol="TLS" keystorefile="/esb_repo/repository/resources/security/wso2carbon.jks" keystorepass="wso2carbon">

Step 6
Now we have to complete necessary changes in 'esb_repo' to start successfully
axis2.xml (esb_repo/repository/conf)

Go to the TransportListener and TransportSender section which uses org.apache.synapse.transport.nhttp.HttpCoreNIOSSLListener and change the keystore and truststore absolute paths as per accordingly. Remeber to change this in both TransportListener and TransportSender.

<parameter name="keystore" locked="false">
</parameter></connector>
/esb_repo/repository/resources/security/wso2carbon.jks<connector port="8443" maxhttpheadersize="8192" maxthreads="150" minsparethreads="25" maxsparethreads="75" enablelookups="false" disableuploadtimeout="true" acceptcount="100" scheme="https" secure="true" sslenabled="true" clientauth="false" sslprotocol="TLS" keystorefile="/esb_repo/repository/resources/security/wso2carbon.jks" keystorepass="wso2carbon"><parameter name="keystore" locked="false"><keystore><location></location>
<type>JKS</type>
<password>wso2carbon</password>
<keypassword>wso2carbon</keypassword>
</keystore>
</parameter>
<parameter name="truststore" locked="false">
<truststore>
<location>/esb_repo/repository/resources/security/client-truststore.jks</location>
<type>JKS</type>
<password>wso2carbon</password>
</truststore>
</parameter>

Also change the synapse_config directory absolute path accordingly.
<parameter name="SynapseConfig.ConfigurationFile" locked="false">/esb_repo/repository/deployment/server/synapse-configs</parameter>

Carbon.xml
You may find this file in the same location as per axis2.xml.
Change the Server_URL, WebContextRoot and RegistryHttpPort configurations as per follows

<serverurl>https://localhost:8443/esb/services/</serverurl>

<webcontextroot>/esb</webcontextroot>

<registryhttpport>8080</registryhttpport>

registry.xml
Change the necessary db url to absolute paths as per follows;
<url>jdbc:h2:/esb_repo/repository/database/WSO2CARBON_DB;DB_CLOSE_ON_EXIT=FALSE</url>

user-mgt.xml
Change the necessary db url property to absolute paths as per follows;
<property name="url">jdbc:h2:/esb_repo/repository/database/WSO2CARBON_DB;DB_CLOSE_ON_EXIT=FALSE</property>

Now we are done with the configurations :)

- Go ahead and declare the CARBON_HOME in a console;

export CARBON_HOME=/esb_repo

Start apache tomcat by cd'ng to $CATALINA_HOME/bin and using
./catalina.sh run

Upon starting the WSo2 ESB you can access the console with the server URL https://localhost:8443/esb/services/

Post in any comments if there are problems if you find any in deploying. Best of Luck!

Thursday, November 18, 2010

Enable clustering in WSO2 ESB 3.x.x

On this blog post I will guide you on why we need clustering and steps to follow to enable such in WSO2 ESB. The steps are valid for the releases of 3.x.x

Motivation behind clustering

For Real world Enterprise application deployments; scalability and availability of applications are musts. When it comes to products of middle-ware; as the base becomes the middle-ware product itself this is of utmost important. This has lead clustering a popular key word among deployments.

Clustering enables a group of individual items/products to be engage in transactions together as one item/product. These individual items are known as components of a cluster.

Clustering Behind WSO2-ESB

WSO2-ESB has a clearly defined clustering capability for real-world applications. The setup is clearly defined and just could be get over with by few mins. It's that easy.....

You can download the latest WSO2-ESB from here

Step 1
------------
Extract the downloaded WSO2-ESB to folders Cluster_1 and Cluster_2. If you are setting up both the clusters in your local machine you will have to follow the following step in order to avoid clashing http,https ports, else just skip to Step 2.

I will keep the default ports as it is in Cluster_1 and fillowing changes should be made to Cluster_2 folder.

- Go to Cluster_2/wso2esb-3.x.x/repository/conf and open axis2.xml

In the TansportIns section change the default message in-port http 8280 as 8281 or any other; and https port as 8243 as 8241 or any other avoiding conflicts in ports.



Now, you will also have to change the http/https transports of the distributions so that it wont collide;

- Go to Cluster_2/wso2esb-3.x.x/repository/conf and open mgt-transport.xml

In this, change default Admin Console port http 9763 as 9764 or any other; and https port as 9443 as 9444 or any other avoiding conflicts in ports




Step 2
------------

Now we have to enable clustering for both Cluster_1 and Cluster_2 , wso2esb distributions.

- Go to Cluster_1/wso2esb-3.x.x/repository/conf and open axis2.xml

- Browse using the command 'Cluster"

<clustering class="org.apache.axis2.clustering.tribes.TribesClusteringAgent" enable="false">
Change the parameter ; as True. This is by default made as "False"
The class attribute of the cluster element specifies the main class of the clustering implementation.

AvoidInitation : whether clustering should be initialized automatically on start
up. By default, this is set to true in the wso2 ESB, which will initialize clustering on start up.

domain : Name of the domain of a cluster. All nodes that use the same domain name belongs to the same cluster. By specifying different domain names different clusters can be created.

mcastAddress/mcastPort/mcastFrequency/mcastDropTime : These are parameters which are set globally for the nodes of one cluster.

localMemberhost/localMemberPort : This sugeest that the defined esb distribution specfies its own port and ip-address. Therefore change the localMemberhost to the machine IP from default (127.0.0.1) or comment out if you're setting up in your own machine, and different ports for localMemberPort (e.g. 4000 and 4001) for the Cluster_1 and Cluster_2.

After the changes, your axis2.xml Clustering configuration would look like something below or similar.


Step 3
------------

You are all set to go in to a cluster mode. You may no 'cd' to the Cluster_1/wso2esb-3.x.x/bin and Cluster_2/wso2esb-3.x.x/bin directory and start the setup by following command

./wso2server.sh (In Unix) ./wso2server.bat (In Windows)

Upon successful enabling of the cluster you will note the following details on the console of Cluster_2.




Clustering Example - A Load Balancing system
----------------------------------------------------------------------------------------

WSO2 ESB, can be used to achieve high availability within a clustered ESB.

Imagine a case where, all client requests are always directed to a primary node via the load balancer. Node 2 and Node 3 are kept as back up servers and no requests will be directed under normal operations.

With all three nodes configured as a cluster, when the primary Node fails, the load balancing system will forward to a Node 2 as the primary server with the other as a backups. This will ensure NO data loss within the system ensuring high reliability.

There are whole bunch of examples that could be given with the use of throttling; caching; Failover; validation through the use of WSO2-ESB.

Visit us; http://wso2.org/library/esb , http://wso2.org/support
Talk to us; support@wso2.com

Monday, August 9, 2010

Learn VIM in 15 mins :)


Vim although looks scary seems to be a handy tool if you just master it. I found the most used commands and just pointing them out so it would be easier for any to start working with vim right away......


Opening a VIM File

In the terminal type :: vim xxxxx.txt

THe filename xxxxx will be opened from vim. If you havenot installed vime, you may install by typing, ' sudo apt-get install vim '

VIM Basics ...

Moving around with cursor:
h key = LEFT, l key = RIGHT, k key = UP, j key = DOWN
Exiting vim editor without saving:
press ESC to get into command mode, enter :q! to exit.
Deleting characters in vim command mode:
delete with x key
Inserting / appending text:
Press i or a in command mode and type
Saving changes and exit:
in command mode :wq or SHIFT+zz



VIM Operators and Motions summary

Deleting words:
delete word with d operator and w or e motion
Deleting to the end of the line:

delete to the end of the line with d operator and $ motion
Using operators, motions and counts:

beginning of the line 0, end of the line $, end of the 2nd word 2e beginning of the 4th word 4w
Deleting multiple words:

to delete 3 words you would use d3w
Deleting lines:

to delete single line dd, delete n lines ndd
Undo changes:

undo changes with u



VIM apprentice user summary

Paste command:
paste your cache memory with p command
Replace characters:

rt replace current character with t
Change characters:

ce to change single word, c$ to change to the end of the line



VIM experienced user summary

Advanced Navigation:
end of the file G, beginning of the file gg or 1G, to get on line n use nG instruct vim display file information CTRL+g
Search text with vim:

search forward /, search backward ?, next search n , previous search N
Vim Substitution :

- first occurrence single line :s/bash/perl/
- all occurrences single line :s/bash/perl/g
- first occurrence between line range: :23,100s/bash/perl/
- all occurrences between line range: :23,100s/bash/perl/g
- first occurrence in whole text: :%s/bash/perl/

- all occurrences whole text: :%s/bash/perl/g VIM veteran user summary

Execute external commands on shell from vim:

:!ls will execute ls command on your shell
Writing to files advanced:
:w saves current file without quit, :w bash.sh whites to file bash.sh
Highlight text and save to different file:

highlight text with v operator and save it with :w
Retrieve text from different file:
:r will retrieve content of file



VIM expert user summary

Using o operator:
:o insert line bellow you cursor, O inserts line above your cursor
Copy and paste:

yank line with y and paste it with p
Customize vim's environment:

edit ~/.vimrc file to customize vim's environment




Hope this summary works !! For more information have a look at [1]

[1] http://www.linuxconfig.org/Vim_Tutorial







Sunday, July 25, 2010

ESB - Introduction

There seems to be no specific introduction for an ESB (Enterprise Service Bus) but this presentation helps to understand what an ESB does and depending on the features it has an ESB definition may vary.......


http://www.infoq.com/presentations/Enterprise-Service-Bus


Features it may have :

1. Routing
2. Message Transformation
3. Message Enhancement
4. Protocol Transformation
5. Service Mapping
6. Message Processing
7. Process Choreography
8. Service Orchestration
9. Transaction Management
10. Security


Close Definition could be written up as follows;

Standards based integration platform that combines messaging, web services, data transformation & intelligent routing to reliably connect & coordinate interaction of diverse applications....

Thursday, July 15, 2010

I'm Ishani, an Electrical Engineer by profession; at least up to now when I started blogging ! , and I graduated from University of Moratuwa a year before.

I always wanted to do Computer Engineering but due to lack of marks in the semesters I ended up as a graduate in Electrical Engineering. With the four years learning in the field I felt it in vain to give up on the Electrical and move on to a complete new field with the degree at hand. Soon after my final exams at the university I was offered a Job in Electrical Engineering at a prestigious company.

So I took the offer and started working. Day by day I understood that this was not the line for me. The stream I worked doesn't revolve all the time. I felt it was too static and routine and I was just held back at the Job. And the stress of other people were building up on me with no direct connection with their jobs over mine.

It may be too fast to comment on a field and move on to another since you just had a bad experience. However, with the experience I've gained I decided to change course in my carrier. It was a tough decision which took me one year to realise that the place I dreamt was not the place I'll be if I be an Electrical Engineer !!

We, Engineers seems to be very restricted in our arena and tends to be working solely on management rather than what an Engineer is ought to do. Some may disagree to my thought; and I believe I'm too young in the society to make such a comment.

~ For many people a job is more than an income – it's an important part of who we are. So a career transition of any sort is one of the most unsettling experiences you can face in your life. ~

Moving in to a new field with new technologies and new developments is practically scares me in to bits.

However, I'm thankful for the opportunity I've been given, and to those who helped me to make my decision to move ahead in my carrier.

I believe in my self to be a success; to learn what I've always wanted...... I just take up the Challenge !!

Cheers !
Ishani