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

    - This version of Sandesha2/C depends on Axis2/C 1.3
        - 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


2. Installing Sandesha2/C binary release on Linux
   Sandesha2/C binary distribution 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)
        |
        + - samples
               |
               + - source files of samples in folders
        + - services (Contain sample service)
        |
        + - include ( header files)
        + - bin/samples ( sample executables)
        + - lib (some libs to run Sandesha2/C clients)

    To deploy Sandesha2/C in Axis2/C running environment copy the modules/sandesha2 into <axis2c_deploy_path>/modules folder.
    Also copy the lib/libsandesha2_client.so into <axis2c_deploy_path>/lib folder. Do the necessary changes to the 
    <axis2c_deploy_path>/axis2.xml to run Sandesha2/C(Refer to the sample config/axis2.xml for help).

    To Run the samples copy the sample service inside services directory to <axis2c_deploy_path>/services folder.


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 
               |
               + - source files of samples in folders
        |
        + - include ( header files)
        + - lib (some dll's to run Sandesha2/C clients)

        
    copy Sandesha2 directory ( containing sandesha2 dll and module.xml ) to <AXIS2C_HOME>\modules directory.
    copy RMSampleService directory in samples\bin directory to <AXIS2C_HOME>\services directory
    copy axis2.xml file in Sandesha2 directory to <AXIS2C_HOME>. Copy the lib/sandesha2_client.dll into <AXIS2C_HOME>/lib 
    folder

    Now you should be able to run the samples.

 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.

