<?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>FAQ</title>
    </properties>
    <body>
        <section name="Apache Synapse FAQs">
            <p>
                Welcome to Apache Synapse FAQs.
            </p>
        </section>
        <section name="General(GeneralApache Synapse questions - Non technical)">
            <ol>
                <li>
                    What is Apache Synapse?
                    <ul>
                        <li>
                            Apache Synapse is a lightweight and high-performance Enterprise Service
                            Bus (ESB).
                        </li>
                    </ul>
                </li>
                <p/>

                <li>
                    What makes Apache Synapse unique?
                    <ul>
                        <li>
                            Apache Synapse is fast and able to handle thousands of concurrent
                            connections
                            with constant memory usage. It comes with a rich set of mediators to
                            support almost any integration scenario out of the box. It is also
                            easily
                            extensible and highly customizable.
                        </li>
                    </ul>
                </li>
                <p/>
                <li>
                    What is the license?
                    <ul>
                        <li>
                            Apache Synapse comes with Apache 2.0 licence.
                        </li>
                    </ul>
                </li>
                <p/>
            </ol>
        </section>

        <section name="Mediation(Questions related to sequences, endpoints, proxies etc)">
            <ol>
                <li>
                    What is a proxy service?
                    <ul>
                        <li>
                            A proxy service is a virtual service hosted on the ESB. It can accept
                            requests from service clients, just like a real Web Service. A proxy
                            service can process requests and forward them to an actual Web Service
                            (back end service) to be further processed. The responses coming back
                            from
                            the back end service can be routed back to the original client. Proxy
                            services are mostly used to expose an existing service over a different
                            transport, format or QoS configuration.
                        </li>
                    </ul>
                </li>
                <p/>

                <li>
                    What is a mediator?
                    <ul>
                        <li>
                            A mediator is the basic message processing unit in the ESB. A mediator
                            can take a message, carry out some predefined actions on it and output
                            the modified message. Apache Synapse ships with a range of mediators capable
                            of carrying out various tasks on input messages.
                        </li>
                    </ul>
                </li>
                <p/>
                <li>
                    What is a sequence?
                    <ul>
                        <li>
                            A sequence is an ordered list of mediators (a mediator chain). When a
                            sequence is given a message, it will go through all the mediators in the
                            sequence. A sequence can also handover messages to other sequences.
                        </li>
                    </ul>
                </li>
                <p/>
                <li>
                    What is an Endpoint?
                    <ul>
                        <li>
                            A logical representation of an actual endpoint or a group of endpoints
                            (i.e. Load Balancing and Fail Over).
                        </li>
                    </ul>
                </li>
                <p/>
                <li>
                    What are Local Entries?
                    <ul>
                        <li>
                            Local entries can be used to hold various configuration elements
                            required by sequences and proxy services. Usually they are used to hold
                            WSDLs, XSDs, XSLT files etc. A local entry can contain XML content as
                            well
                            as plain text content. A local entry can be configured to load content
                            from a remote file too.
                        </li>
                    </ul>
                </li>
                <p/>

                <li>
                    What is a Message Mediation?
                    <ul>
                        <li>
                            Managing and transforming the messages flowing between the client and a
                            service in an enterprise.
                        </li>
                    </ul>
                </li>
                <p/>

                <li>
                    What is Message Mediation?
                    <ul>
                        <li>
                            Mediating messages coming into a specific service by specifying the
                            target URI as a Synapse mediation service.
                        </li>
                    </ul>
                </li>
                <p/>
                <li>
                    What is Service Mediation?
                    <ul>
                        <li>
                            Mediating messages coming into a specific service by specifying the
                            target URI as a Synapse mediation service.
                        </li>
                    </ul>
                </li>
                <p/>
                <li>
                    What is a Message Store?
                    <ul>
                        <li>
                            Message Store is the storage for ESB messages. It can be an in-memory
                            store
                            or can be JMS store with an external Message Broker. You can always plug
                            your
                            own message store implementations as well.
                        </li>
                    </ul>
                </li>
                <p/>
                <li>
                    What is a Message Processor?
                    <ul>
                        <li>
                            Message processor can be used to implement different messaging and
                            integration patters along with Message stores. Message processors will
                            consume
                            the messages in message stores and do the processing of them.
                        </li>
                    </ul>
                </li>
                <p/>
                <li>
                    What is a Template?
                    <ul>
                        <li>
                            ESB Templates try to minimize this redundancy by creating prototypes
                            that
                            users can re-use and utilize as and when needed. This is very much
                            analogous
                            to classes and instances of classes where-as, a template is a class that
                            can be used to wield instance objects such as templates and endpoints.
                        </li>
                    </ul>
                </li>
                <p/>
                <li>
                    What is the REST Api?
                    <ul>
                        <li>
                            REST Api can be used to mediate HTTP POST, GET, PUT and DELETE request
                            through Synapse and to integrate various RESTful services.
                        </li>
                    </ul>
                </li>
                <p/>
                <li>
                    Can Endpoint perform error handling?
                    <ul>
                        <li>
                            Yes. Endpoints can do error handling. User can configure the behavior
                            of an endpoints when it faced to a erroneous situation.
                        </li>
                    </ul>
                </li>
                <p/>
            </ol>
        </section>
        <section name="Transports(Transport related questions)">
            <ol>
                <li>
                    What are the transports supported by the Apache Synapse?
                    <ul>
                        <li>
                            HTTP, HTTPS, VFS based file transport, FIX, Hessian, HL7,UDP, JMS, Mail,
                            TCP, XMPP
                        </li>
                    </ul>
                </li>
                <p/>

                <li>
                    Do I need an external JMS broker for the JMS transport?
                    <ul>
                        <li>
                            Yes, Apache Synapse requires an external JMS broker like Apache ActiveMQ
                        </li>
                    </ul>
                </li>
                <p/>
                <li>
                    Does Apache Synapse support two way JMS scenario (request/response) ?
                    <ul>
                        <li>
                            Yes, you can refer sample 264 which demonstrates exactly the JMS
                            request/response scenario.
                        </li>
                    </ul>
                </li>
                <p/>
                <li>
                    What is the NHTTP transport?
                    <ul>
                        <li>
                           This is the default HTTP transport used by Apache Synapse. NHTTP stands for
                            non-blocking HTTP. NHTTP transport uses the Java Non-blocking I/O API.
                            This allows the NHTTP transport to scale into handling hundreds of connections
                            without blocking the threads. The server worker threads used by the NHTTP
                            transport do not get blocked on I/O until the Synapse receives responses
                            for the already forwarded requests. Therefore Apache Synapse can accept
                            more concurrent connections and requests than most HTTP server products.
                        </li>
                    </ul>
                </li>
                <p/>
                <li>
                    What is the underlying HTTP library used by the NHTTP transport?
                    <ul>
                        <li>
                           NHTTP transport uses the Apache Http Core NIO library underneath. This
                           library provides low level I/O handling and HTTP level detail handling.
                        </li>
                    </ul>
                </li>
                <p/>
            </ol>
        </section>

    </body>
</document>
