SANDESHA2 INSTALL
=================
1. Installing Sandesha2C source release on Linux

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

    This will install the sandesha2c as a module in axis2c in <axis2c_deploy_path>/modules folder. The module
    folder contains the sandesha2c libraries and the module.xml file.

2. Installing Sandesha2C binary release on Linux
   Sandesha2c 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
        |
        + - include ( header files)
        + - bin (database scripts)
        + - bin/samples ( sample executables)

    To deploy sandesha2c in axis2c running environment copy the modules/sandesha2 into <axis2c_deploy_path>/modules folder.
    Do the neccessary changes to the <axis2c_deploy_path>/axis2.xml to run sandesha2c(Refer to the sample config/axis2.xml
    for help).


3 Installing Sandesha2c on WIN32

    1. Building from source distribution

    i. You need to have unziped axis2c 1.0 release binary to some folder.
    ii. Sandesha2 can be used with one of following two databse systems.
            (sqlite, MySql) 
        So install one of above database systems on your machine.
    iii. On your cmd.exe cd to <sandesha2 src>\build\win32
      Edit configure.in file with your binary locations.
      To select MySql have your configure.in entry  WITH_MYSQL = 1.
      To Select Sqlite have your configure.in entry WITH_SQLITE = 1.
    iv. To set necessary environment variables on command line run vcvars32.bat file.
    v. 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 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)

        
    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>

    Now you should be able to run the samples.

 Note: 1.
        Sandesha2 has two main storage mechanisms call inmemory and persistent. The persistent storage could use
        either sqlite or mysql as it's database manager.
        By default sandesha2 use the persistent storage with sqlite as the database. 
        It is assumed that sqlite3.h in /usr/include include directory. If you have different include path for
        sqlite3.h then add the configure option --with-sqlite=<sqlite include file path> to the configure options
        above. If is assumed that libsqlite3.so is in the /usr/lib folder
        To run samples in persistent/sqlite mode copy sandesha2c/config/sqlite_schema.sh/.bat to a directory where you
        will create your sqlite database file and execute it to create the database schema. sqlite3 is an embedded 
        database which need no configuration. If you use axis2c apache2 module instead of simple_axis2_server make 
        sure that apache2 user can access the sqlite database files sandesha2_svr_db and sandesha2_client_db.

        if you want to use the inmemory storage instead, change the entry in the sandesha2_constants.h
        file.
            #define SANDESHA2_DEFAULT_STORAGE_MGR "persistent" as
            #define SANDESHA2_DEFAULT_STORAGE_MGR "inmemory".

        If you want to use persistent storage with mysql then add the option --with-mysql=<mysql include file path>
        to the configure options above. It is assumed that libmysqlclient.so is in /usr/lib folder. It is recommended
        to use mysql database for any erious use. It is not included as as the default database because of licencing issues.
        To run samples in persistent/mysql mode run sandesha2c/config/mysql_schema.sh and sandesha2c/config/init_mysql.sh
        to create the database schema. The database parameters for mysql should
        be included in module.xml. The defaults for server, user and password are localhost, g,g.

      2.
       Sandesha2 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.

               



     
                                        
