<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
  ~  Licensed to the Apache Software Foundation (ASF) under one
  ~  or more contributor license agreements.  See the NOTICE file
  ~  distributed with this work for additional information
  ~  regarding copyright ownership.  The ASF licenses this file
  ~  to you under the Apache License, Version 2.0 (the
  ~  "License"); you may not use this file except in compliance
  ~  with the License.  You may obtain a copy of the License at
  ~
  ~   http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~  Unless required by applicable law or agreed to in writing,
  ~  software distributed under the License is distributed on an
  ~   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~  KIND, either express or implied.  See the License for the
  ~  specific language governing permissions and limitations
  ~  under the License.
  -->

<document>
    <properties>
        <title>Apache Synapse - The Lightweight ESB</title>
    </properties>
    <body>
        <section name="Apache Synapse Enterprise Service Bus (ESB)">
            <p>
                Apache Synapse is a lightweight and high-performance Enterprise Service Bus (ESB).
                Powered by a fast and asynchronous mediation engine, Apache Synapse provides
                exceptional support for XML, Web Services and REST. In addition to XML and SOAP,
                Apache Synapse supports several other content interchange formats, such as plain
                text, binary, Hessian and JSON. The wide range of transport adapters available for
                Synapse, enables it to communicate over many application and transport layer
                protocols. As of now, Apache Synapse supports HTTP/S, Mail (POP3, IMAP, SMTP),
                JMS, TCP, UDP, VFS, SMS, XMPP and FIX.
            </p>
            <p>
                Apache Synapse is free and open source software distributed under the
                <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License 2.0</a>.
                The latest version of Synaspe is <a href="download/2.1/download.cgi">v2.1</a>.
                This release comes with a horde of new features, bug fixes, performance and
                stability improvements.
            </p>
            <p>
                Apache Synapse, Synapse, Apache, the Apache feather logo, and the Apache Synapse
                project logo are trademarks of The <a href="http://www.apache.org">Apache Software
                Foundation</a>
            </p>
        </section>
        <section name="New in Version 2.1">
            <ul>
                <li>
                    Support for creating and managing REST APIs with URL patterns and URI templates
                </li>
                <li>
                    Define sequences and endpoints as templates and reuse seamlessly across the
                    whole configuration
                </li>
                <li>
                    Payload factory mediator for constructing custom XML payloads
                </li>
                <li>
                    Recipient list endpoint
                </li>
                <li>
                    HTTPD like access logging capability in the NHTTP transport
                </li>
                <li>
                    Message stores and message processors for implementing complex integration
                    patterns and advanced messaging scenarios
                </li>
                <li>
                    Receiving sequence support in the send mediator to make service chaining
                    easier
                </li>
                <li>
                    Conditional router mediator for implementing complex routing scenarios with
                    many conditions and rules
                </li>
            </ul>
        </section>
        <section name="Key Features">
            <ul>
                <li>Proxy services - facilitating 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)</li>
                <li>Non-blocking HTTP/S transports for fast HTTP interactions and support for
                    thousands of concurrent connections</li>
                <li>VFS transport for file manipulation and interaction with FTP, SFTP, CIFS
                    and WEBDAV</li>
                <li>JMS support for binary, plain text, XML and SOAP payloads</li>
                <li>Mail transport with extensive support for POP3, IMAP and SMTP</li>
                <li>Support for industry driven <a href="http://www.fixprotocol.org/">Financial
                    Information eXchange (FIX)</a> protocol</li>
                <li>Built-in Registry/Repository, facilitating dynamic reloading of the
                    configuration and associated resources (e.g. XSLTs, XSD, JS, ..)</li>
                <li>Built-in support for scheduling tasks using the
                    <a target="_blank" href="http://www.opensymphony.com/quartz">Quartz</a> scheduler</li>
                <li>Load-balancing (with or without sticky sessions) and fail-over routing</li>
                <li>Support for many Web Services standards including WS-Addressing, WS-Security
                    and WS-Reliable Messaging</li>
                <li>Policy based message throttling and caching (with special support for clustered
                    environments)</li>
                <li>Message splitting and aggregation</li>
                <li>Database lookup and update support with database connection pooling</li>
                <li>Fine grained statistics collection over sequences, endpoints and proxy services</li>
                <li>JMX monitoring and management</li>
                <li>Easily extendable with Java, Spring, or BSF Scripting languages (Javascript,
                    Ruby, Groovy, etc.)</li>
            </ul>
        </section>
        <section name="High Level Architecture">
            <p>
                Apache Synapse is designed to be lightweight and fast. The non-blocking HTTP
                transport, the multi-threaded mediation engine and the streaming XML infoset combine
                to ensure that Synapse can mediate very high volumes of messages through the service
                bus with minimum delay and resource usage. Synapse also comes with comprehensive
                logging capabilities, statistics collection and JMX monitoring support which are
                crucial in production deployments.
            </p>
            <img src="images/synapse-arch.png"/>
            <p>
                Synapse uses Apache Axis2 as the underlying Web Services engine. Therefore it
                has outstanding support for Web Services and related standards such as SOAP and
                WSDL. Tried and tested Axis2 modules like Apache Rampart and Apache Sandesha2 can be
                used with Synapse with no configuration overhead. Using such external modules,
                Apache Synapse supports a range of Web Services standards including WS-Security and
                WS-Reliable Messaging. Synapse also makes use of the Axis2 clustering framework to
                provide enterprise grade clustering support.
            </p>
            <p>
                Synapse is configured using a simple, XML-based configuration language. The
                configuration language and the related functional components are designed with SOA
                best practices in mind. It is trivial to store configuration fragments in an external
                SOA registry and import them to the mediation engine on demand. Synapse ships with a
                large collection of mediators that can be used to implement even the most complex
                enterprise integration scenarios. If necessary, the mediation engine can be extended
                by developing custom mediators using Java or your favorite scripting language.
            </p>
        </section>
    </body>
</document>
