Showing posts with label SOA. Show all posts
Showing posts with label SOA. Show all posts

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/