SANDESHA2 INSTALL
=================
1. Installing Sandesha2/C source release on Linux

    - This version of Sandesha2/C depends on Axis2/C 1.6.0
        - Download Axis2/C from http://ws.apache.org/axis2/c/download.cgi and
          install.
    - Go to Sandesha2/C source directory
    - Run configure with AXIS2 include path.
        ./configure --prefix=<axis2c_deploy_path> --enable-static=no --with-axis2=<axis2c_include_path>
    - Run make and make install

    This install the Sandesha2/C as a module in Axis2/C in <axis2c_deploy_path>/modules folder. The module
    folder contains the Sandesha2/C libraries and the module.xml file. At the same time this copy the
    Sandesha2/C include files into <axis2c_deploy_path>/include folder. Also the Sandesha2/C client library
    which will be needed to be linked with some client applications using Sandesha2/C client, is
    installed into <axis2c_deploy_path>/lib folder

    -To Install samples
        - Go samples directory
        - Run configure with AXIS2 include path.
            ./configure --prefix=<axis2c_deploy_path> --with-axis2=<axis2c_include_path>
        -make
        -make install


   Sandesha2/C installation for Linux has the following folder structure. 
   
    Sandesha2
        |
        + - modules/sandesha2 (sandesha2 module library and module.xml file)
        + - docs
        + - config (Contain sample module.xml and axis2.xml files)
        |
        + - services (Contain sample service)
        |
        + - include ( header files)
        + - samples/bin/sandesha2 ( sample executables)
        + - lib (some libs to run Sandesha2/C clients)

3 Installing Sandesha2/C on WIN32

    1. Building from source distribution

    i. You need to have unzipped Axis2/C 1.3 release binary to some folder.
    ii. On your cmd.exe cd to <sandesha2 src>\build\win32
      Edit configure.in file with your binary locations.
    iii. To set necessary environment variables on command line run vcvars32.bat file.
    iv. Run nmake dist command on command line. This will build the sandesha2 binary and samples
       to a directory sandesha2 in <sandesha2 src>\build\sandesha2.


    2. Configuring sandesha2 module

    Sandesha2/C binary distribution will have following directory structure.

    Sandesha2
        |
        + - Sandesha2 (sandesha2 module dll and module.xml file)
        |
        + - samples\bin\sandesha2
        |
        + - include ( header files)
        + - lib (some dll's to run Sandesha2/C clients)

        
 Note: 1.
        Sandesha2 internally uses an Sqlite3 embedded database. You need to provide where to create this database in 
        module.xml file as following.

        <parameter name="sandesha2_db" locked="false"><path>/sandesha2_db</parameter>

        If you use Axis2/C Apache2 module instead of simple_axis2_server make 
        sure that Apache2 user can access the above database file.

        If you do not provide the above database parameter, be aware that Sandesha2/C will create the database file
        named sandesha2_db in the current folder.

      2.
       Sandesha2/C module is installed into <axis2c_deploy_path>/modules/sandesha2c directory. The installed module contain
       libsandesha2.so, module.xml. The sample clients are installed into <axis2c_deploy_path>/bin/samples
       directory. Sample services are installed into <axis2c_deploy_path>/services directory.

