You are viewing a plain text version of this content. The canonical link for it is here.
Posted to savan-dev@ws.apache.org by da...@apache.org on 2009/03/03 13:44:06 UTC

svn commit: r749604 [1/2] - in /webservices/savan/trunk/c: ./ include/ samples/ samples/client/subscriber/ samples/server/ samples/server/listener/ samples/server/publisher/ src/ src/client/ src/core/ src/data/ src/handlers/ src/msgreceivers/ src/subs_...

Author: damitha
Date: Tue Mar  3 12:44:05 2009
New Revision: 749604

URL: http://svn.apache.org/viewvc?rev=749604&view=rev
Log:
Doing major improvements to Savan/C code structure.

1. Abstracting the storage. Now use can time choose from sqlite, service or registry based storage managers or
   write his own storage manager and choose at configure time.
2. Removed remote subscription manager based code from core and moved them to service based storage manager.
   If user choose service based storage manager at configure time then all CRUD calls will use this storage manager
   to call to the remote subscription manager service.
3. Did improvements to the code quality.

Modified:
    webservices/savan/trunk/c/build.sh
    webservices/savan/trunk/c/configure.ac
    webservices/savan/trunk/c/include/savan_constants.h
    webservices/savan/trunk/c/include/savan_db_mgr.h
    webservices/savan/trunk/c/include/savan_error.h
    webservices/savan/trunk/c/include/savan_sub_processor.h
    webservices/savan/trunk/c/include/savan_subscriber.h
    webservices/savan/trunk/c/include/savan_util.h
    webservices/savan/trunk/c/samples/client/subscriber/Makefile.am
    webservices/savan/trunk/c/samples/client/subscriber/subscriber.c
    webservices/savan/trunk/c/samples/configure.ac
    webservices/savan/trunk/c/samples/server/Makefile.am
    webservices/savan/trunk/c/samples/server/listener/listener_skeleton.c
    webservices/savan/trunk/c/samples/server/listener/services.xml
    webservices/savan/trunk/c/samples/server/publisher/publisher_skeleton.c
    webservices/savan/trunk/c/samples/server/publisher/services.xml
    webservices/savan/trunk/c/src/Makefile.am
    webservices/savan/trunk/c/src/client/Makefile.am
    webservices/savan/trunk/c/src/client/savan_client.c
    webservices/savan/trunk/c/src/client/savan_publishing_client.c
    webservices/savan/trunk/c/src/core/Makefile.am
    webservices/savan/trunk/c/src/core/savan_sub_processor.c
    webservices/savan/trunk/c/src/data/module.xml
    webservices/savan/trunk/c/src/handlers/savan_in_handler.c
    webservices/savan/trunk/c/src/handlers/savan_out_handler.c
    webservices/savan/trunk/c/src/msgreceivers/savan_msg_recv.c
    webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c
    webservices/savan/trunk/c/src/subs_mgr/subs_mgr_skel.c
    webservices/savan/trunk/c/src/subscribers/savan_subscriber.c
    webservices/savan/trunk/c/src/util/Makefile.am
    webservices/savan/trunk/c/src/util/error.c
    webservices/savan/trunk/c/src/util/savan_util.c

Modified: webservices/savan/trunk/c/build.sh
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/build.sh?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/build.sh (original)
+++ webservices/savan/trunk/c/build.sh Tue Mar  3 12:44:05 2009
@@ -3,10 +3,3 @@
 ./configure --prefix=$AXIS2C_HOME --enable-static=no --with-axis2=${AXIS2C_HOME}/include/axis2-1.5.0 --enable-filtering=no
 make -j30
 make install
-
-cd samples
-sh autogen.sh
-./configure --prefix=${AXIS2C_HOME} --with-axis2=${AXIS2C_HOME}/include/axis2-1.5.0 --with-savan=${AXIS2C_HOME}/include/savan-0.90
-make -j10
-make install
-cd ..

Modified: webservices/savan/trunk/c/configure.ac
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/configure.ac?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/configure.ac (original)
+++ webservices/savan/trunk/c/configure.ac Tue Mar  3 12:44:05 2009
@@ -87,17 +87,90 @@
   AC_MSG_RESULT(no)
 )
 
+AC_MSG_CHECKING(whether to build sqlite based storage)
+AC_ARG_ENABLE(sqlite, [  --enable-sqlite
+                          build Sqlite based storage (default=yes)],
+[ case "${enableval}" in
+  no)
+    AC_MSG_RESULT(no)
+    ;;
+  *)
+    AC_MSG_RESULT(yes)
+    SAVAN_STORAGE="sqlite"
 
-AC_MSG_CHECKING(To Use Xml Schema. This is a compulsory module to build Woden C)
+    ;;
+  esac ],
+  AC_MSG_RESULT(yes)
+  SAVAN_STORAGE="sqlite"
+)
+
+
+AC_MSG_CHECKING(whether to build service based storage)
+AC_ARG_ENABLE(service, [  --enable-service    
+                          build service based storage (default=no)],
+[ case "${enableval}" in
+  no)
+    AC_MSG_RESULT(no)
+    SAVAN_STORAGE=""
+    SVC_DIR=""
+    ;;
+  *)
+    AC_MSG_RESULT(yes)
+    SAVAN_STORAGE="service"
+    SVC_DIR="subs_mgr"
+    ;;
+  esac ],
+  AC_MSG_RESULT(no)
+)
+
+AC_MSG_CHECKING(To Use Registry based storage manager . This is an optional module to build Savan C)
+AC_ARG_WITH(registry,
+[  --with-registry[=PATH]     Find the REGISTRY header files in 'PATH'.
+    'PATH' should point to REGISTRY include files location.
+    If you omit the '=PATH' part completely, the configure script will search
+    '$(AXIS2C_HOME)/include/registry-0.1.0' for REGISTRY headers.],
+[ case "$withval" in
+  no)
+    AC_MSG_RESULT(no)
+    SAVAN_STORAGE=""
+    ;;
+  *)
+    AC_MSG_RESULT(yes)
+    SAVAN_STORAGE="registry"
+    dnl Find registry include dir in the path
+    if test -d $withval; then
+        registryinc="-I$withval"
+    dnl else find the registry include dir in $(AXIS2C_HOME)/include
+    elif test -d '$(AXIS2C_HOME)/include'; then
+        registryinc="-I$(AXIS2C_HOME)/include/registry-0.1.0"
+    else
+        AC_MSG_ERROR(could not find registry. stop)
+    fi
+    ;;
+  esac ],
+  AC_MSG_RESULT(no)
+)
+
+
+AC_MSG_CHECKING(To Use Xml Schema.)
 AXIOMINC="-I$abs_top_builddir/../axis2c/axiom/include"
 UTILINC="-I$abs_top_builddir/../axis2c/util/include"
 NEETHIINC="-I$abs_top_builddir/../axis2c/neethi/include"
 CFLAGS="$CFLAGS $LIBXML2_CFLAGS"
+
+REGISTRYINC=$registryinc
+
+AC_SUBST(REGISTRYINC)
 AC_SUBST(AXIS2INC)
 AC_SUBST(AXIOMINC)
 AC_SUBST(UTILINC)
 AC_SUBST(NEETHIINC)
 AC_SUBST(XMLSCHEMAINC)
+AC_SUBST(SAVAN_STORAGE)
+AC_SUBST(SVC_DIR)
+
+export SAVAN_STORAGE
+export SVC_DIR
 
 AC_CONFIG_FILES([Makefile \
     src/Makefile \
@@ -106,6 +179,12 @@
     src/handlers/Makefile \
     src/msgreceivers/Makefile\
     src/subscribers/Makefile\
+    src/storage/Makefile\
+    src/storage/common/Makefile\
+    src/storage/sqlite/Makefile\
+    src/storage/registry/Makefile\
+    src/storage/registry/test/Makefile\
+    src/storage/service/Makefile\
     src/subs_mgr/Makefile\
     src/data/Makefile\
     src/util/Makefile

Modified: webservices/savan/trunk/c/include/savan_constants.h
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_constants.h?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_constants.h (original)
+++ webservices/savan/trunk/c/include/savan_constants.h Tue Mar  3 12:44:05 2009
@@ -68,6 +68,7 @@
 
 #define EVENTING_NAMESPACE "http://schemas.xmlsoap.org/ws/2004/08/eventing"
 #define EVENTING_NS_PREFIX "wse"
+#define ADDRESSING_NS_PREFIX "wsa"
 /*#define SAVAN_NAMESPACE "http://ws.apache.org/savan"*/
 #define SAVAN_NAMESPACE "http://ws.apache.org/axis2/services/subscription"
 #define SAVAN_NS_PREFIX "savan"
@@ -84,7 +85,8 @@
 #define ELEM_NAME_ADD_TOPIC "AddTopic"
 #define ELEM_NAME_REMOVE_TOPIC "RemoveTopic"
 #define DEFAULT_DELIVERY_MODE "http://schemas.xmlsoap.org/ws/2004/08/eventing/DeliveryModes/Push"
-#define DEFAULT_FILTER_DIALECT "http://www.w3.org/TR/1999/REC-xpath-19991116"
+#define XPATH_FILTER_DIALECT "http://www.w3.org/TR/1999/REC-xpath-19991116"
+#define DEFAULT_FILTER_DIALECT "http://synapse.apache.org/eventing/dialect/topicFilter"
 
 /* Eventing element names */
 #define ELEM_NAME_SUBSCRIBE             "Subscribe"
@@ -122,7 +124,9 @@
 #define SAVAN_SUBSCRIBER_LIST       "savan_subs_list"
 #define SAVAN_SUBSCRIBER       "savan_subscriber"
 #define SAVAN_TOPIC_LIST       "savan_topic_list"
-#define SAVAN_DB "savan_db"
+#define SAVAN_RESOURCE "savan_resource"
+#define SAVAN_RESOURCE_USERNAME "username"
+#define SAVAN_RESOURCE_PASSWORD "password"
 #define SAVAN_MODULE  "savan"
 #define SAVAN_TOPIC_URL  "TopicURL"
 #define SAVAN_SUBSCRIPTION_MGR_URL  "SubscriptionMgrURL"
@@ -130,6 +134,16 @@
 #define SAVAN_FILTER_TEMPLATE_PATH  "savan_filter_template_path"
 #define SAVAN_FILTER_DIALECT "Dialect"
 #define SAVAN_SUBSCRIPTION_MANAGER "subscription"
+#define SAVAN_STORAGE_MANAGER "storage_mgr"
+#define SAVAN_SQLITE  "sqlite"
+#define SAVAN_INMEMORY_STORAGE  "inmemory"
+#define SAVAN_SERVICE_STORAGE  "service"
+#define SAVAN_REGISTRY_STORAGE  "registry"
+
+#define SAVAN_SUBS_MGR_ADD_SUBSCRIBER_URL "http://ws.apache.org/axis2/c/subscription/add_subscriber"
+#define SAVAN_SUBS_MGR_GET_SUBSCRIBER_URL "http://ws.apache.org/axis2/c/subscription/add_subscriber"
+#define SAVAN_SUBS_MGR_GET_SUBSCRIBER_LIST_URL "http://ws.apache.org/axis2/c/subscription/add_subscriber"
+#define SAVAN_SUBS_MGR_REMOVE_SUBSCRIBER_URL "http://ws.apache.org/axis2/c/subscription/add_subscriber"
 
 /** @} */
 #ifdef __cplusplus

Modified: webservices/savan/trunk/c/include/savan_db_mgr.h
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_db_mgr.h?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_db_mgr.h (original)
+++ webservices/savan/trunk/c/include/savan_db_mgr.h Tue Mar  3 12:44:05 2009
@@ -36,11 +36,6 @@
 {
 #endif
 
-typedef AXIS2_DECLARE_DATA struct savan_db_mgr_args
-{
-    const axutil_env_t *env;
-    void *data;
-} savan_db_mgr_args_t;
 
 /** 
  * @brief Savan Database Manager Struct Impl

Modified: webservices/savan/trunk/c/include/savan_error.h
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_error.h?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_error.h (original)
+++ webservices/savan/trunk/c/include/savan_error.h Tue Mar  3 12:44:05 2009
@@ -83,6 +83,22 @@
         SAVAN_ERROR_PARSING_SUBSCRIBER_NODE_FAILED,
         /* Applying filter failed */
         SAVAN_ERROR_APPLYING_FILTER_FAILED,
+        /* Memory allocation failed for Savan Storage Manager */
+        SAVAN_ERROR_STORAGE_MANAGER_CREATION_FAILED,
+        /* Could not retrieve subscriber from storage */
+        SAVAN_ERROR_SUBSCRIBER_RETRIEVE_ERROR,
+        /* Could not remove subscriber from storage */
+        SAVAN_ERROR_SUBSCRIBER_REMOVE_ERROR,
+        /* Could not update subscriber to storage */
+        SAVAN_ERROR_SUBSCRIBER_UPDATE_ERROR,
+        /* Could not insert subscriber into storage */
+        SAVAN_ERROR_SUBSCRIBER_INSERT_ERROR,
+        /* Could not insert topic into storage */
+        SAVAN_ERROR_TOPIC_INSERT_ERROR,
+        /* Could not create database table */
+        SAVAN_ERROR_DATABASE_TABLE_CREATION_ERROR,
+        /* Could not create database */
+        SAVAN_ERROR_DATABASE_CREATION_ERROR,
         
         SAVAN_ERROR_LAST
     

Modified: webservices/savan/trunk/c/include/savan_sub_processor.h
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_sub_processor.h?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_sub_processor.h (original)
+++ webservices/savan/trunk/c/include/savan_sub_processor.h Tue Mar  3 12:44:05 2009
@@ -34,6 +34,7 @@
 #include <axutil_env.h>
 #include <axis2_conf_ctx.h>
 #include <axutil_array_list.h>
+#include <savan_storage_mgr.h>
 
 #ifdef __cplusplus
 extern "C"
@@ -108,7 +109,8 @@
     */
     AXIS2_EXTERN savan_sub_processor_t * AXIS2_CALL
     savan_sub_processor_create(
-        const axutil_env_t *env);
+        const axutil_env_t *env,
+        savan_storage_mgr_t *storage_mgr);
     
     /**
     * Freesf a subscription manager instance.

Modified: webservices/savan/trunk/c/include/savan_subscriber.h
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_subscriber.h?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_subscriber.h (original)
+++ webservices/savan/trunk/c/include/savan_subscriber.h Tue Mar  3 12:44:05 2009
@@ -282,7 +282,7 @@
         void *subscriber, 
         const axutil_env_t *env);
 
-    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    /*AXIS2_EXTERN axis2_status_t AXIS2_CALL
         savan_subscriber_set_topic_name(
         savan_subscriber_t *subscriber,
         const axutil_env_t *env,
@@ -291,7 +291,7 @@
     AXIS2_EXTERN axis2_char_t *AXIS2_CALL
     savan_subscriber_get_topic_name(
         savan_subscriber_t *subscriber,
-        const axutil_env_t *env);
+        const axutil_env_t *env);*/
     
     axis2_status_t AXIS2_CALL
     savan_subscriber_set_filter_template_path(
@@ -304,7 +304,7 @@
         savan_subscriber_t *subscriber,
         const axutil_env_t *env);
 
-    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    /*AXIS2_EXTERN axis2_status_t AXIS2_CALL
     savan_subscriber_set_topic_url(
         savan_subscriber_t *subscriber,
         const axutil_env_t *env,
@@ -313,7 +313,7 @@
     AXIS2_EXTERN axis2_char_t *AXIS2_CALL
     savan_subscriber_get_topic_url(
         savan_subscriber_t *subscriber,
-        const axutil_env_t *env);
+        const axutil_env_t *env);*/
 /** @} */
 #ifdef __cplusplus
 }

Modified: webservices/savan/trunk/c/include/savan_util.h
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_util.h?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_util.h (original)
+++ webservices/savan/trunk/c/include/savan_util.h Tue Mar  3 12:44:05 2009
@@ -29,6 +29,7 @@
 #include <savan_constants.h>
 #include <savan_subscriber.h>
 #include <savan_sub_processor.h>
+#include <savan_storage_mgr.h>
 #include <axiom_node.h>
 #include <axiom_element.h>
 
@@ -153,8 +154,7 @@
         axis2_msg_ctx_t *msg_ctx);
 
     /**
-    * Find the subscriber object from the store using the given messsage
-    * context.
+    * Find the subscriber instacne from the store using the given messsage context.
     * @param env pointer to environment struct
     * @param msg_ctx pointer to message context
     * @param sub_id pointer to subscription id 
@@ -165,7 +165,25 @@
     savan_util_get_subscriber_from_msg(
         const axutil_env_t *env,
         axis2_msg_ctx_t *msg_ctx,
-        axis2_char_t *sub_id);
+        savan_storage_mgr_t *storage_mgr,
+        const axis2_char_t *sub_id);
+
+    /**
+    * Parse the renew message to retrieve subscriber id and requested expire date. Then retrieve
+    * the subscriber instance from the store using the given messsage and set the expire date
+    * requested as allowed by policy.
+    * @param env pointer to environment struct
+    * @param msg_ctx pointer to message context
+    * @param sub_id pointer to subscription id 
+    * @return a pointer to subscriber on success, else NULL
+    */
+
+    savan_subscriber_t * AXIS2_CALL
+    savan_util_get_subscriber_from_renew_msg(
+        const axutil_env_t *env,
+        axis2_msg_ctx_t *msg_ctx,
+        savan_storage_mgr_t *storage_mgr,
+        const axis2_char_t *sub_id);
 
     /**
     * Get the subscriber store from the service
@@ -189,6 +207,7 @@
     * must be set in the publishers services.xml
     * @param env pointer to environment struct
     * @param msg_ctx pointer to message context
+    * @param storage_mgr pointer to storage_mgr
     * @param subscriber
     * @return the store on success, else NULL
     */
@@ -197,12 +216,14 @@
     savan_util_add_subscriber(
         const axutil_env_t *env,
         axis2_msg_ctx_t *msg_ctx,
+        savan_storage_mgr_t *storage_mgr,
         savan_subscriber_t *subscriber);
 
     axis2_status_t AXIS2_CALL
     savan_util_update_subscriber(
         const axutil_env_t *env,
         axis2_msg_ctx_t *msg_ctx,
+        savan_storage_mgr_t *storage_mgr,
         savan_subscriber_t *subscriber);
 
     /**
@@ -212,6 +233,7 @@
     * must be set in the publishers services.xml
     * @param env pointer to environment struct
     * @param msg_ctx pointer to message context
+    * @param storage_mgr pointer to storage_mgr
     * @param subscriber
     * @return the store on success, else NULL
     */
@@ -220,6 +242,7 @@
     savan_util_remove_subscriber(
         const axutil_env_t *env,
         axis2_msg_ctx_t *msg_ctx,
+        savan_storage_mgr_t *storage_mgr,
         savan_subscriber_t *subscriber);
 
     /**
@@ -277,7 +300,17 @@
         axis2_char_t *topic_url);
 
     AXIS2_EXTERN axis2_char_t *AXIS2_CALL
-    savan_util_get_dbname(
+    savan_util_get_resource_connection_string(
+        const axutil_env_t *env,
+        axis2_conf_t *conf);
+    
+    AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+    savan_util_get_resource_username(
+        const axutil_env_t *env,
+        axis2_conf_t *conf);
+    
+    AXIS2_EXTERN axis2_char_t *AXIS2_CALL
+    savan_util_get_resource_password(
         const axutil_env_t *env,
         axis2_conf_t *conf);
 
@@ -325,12 +358,6 @@
         axiom_element_t *sub_elem,
         savan_subscriber_t *subscriber);
 
-    AXIS2_EXTERN savan_subscriber_t * AXIS2_CALL
-    savan_util_process_savan_specific_subscriber_node(
-        const axutil_env_t *env,
-        axiom_node_t *sub_node,
-        axis2_conf_t *conf);
-
     AXIS2_EXTERN axiom_node_t * AXIS2_CALL
     savan_util_create_subscriber_node(
         const axutil_env_t *env,
@@ -343,12 +370,19 @@
         savan_subscriber_t *subscriber,
         axiom_node_t *parent_node);
 
-    AXIS2_EXTERN axis2_status_t AXIS2_CALL
-    savan_util_populate_topic(
+    /**
+     * Retrieve storage mgr. If it is already created for this request scope then it should be 
+     * available as a message context property. Otherwise create it and set as message context
+     * property.
+     * @param env environment object
+     * @param msg_ctx message context instance
+     * @return storage manager
+     */
+    AXIS2_EXTERN savan_storage_mgr_t * AXIS2_CALL
+    savan_util_get_storage_mgr(
         const axutil_env_t *env,
-        axis2_char_t *topic_url,
+        axis2_conf_ctx_t *conf_ctx,
         axis2_conf_t *conf);
-
 /** @} */
 #ifdef __cplusplus
 }

Modified: webservices/savan/trunk/c/samples/client/subscriber/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/client/subscriber/Makefile.am?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/client/subscriber/Makefile.am (original)
+++ webservices/savan/trunk/c/samples/client/subscriber/Makefile.am Tue Mar  3 12:44:05 2009
@@ -14,7 +14,8 @@
                     -lpthread \
                     $(GUTHTHILA_LIBS) \
                     $(LIBXML2_LIBS)\
-					-lsavan_client
+					-lsavan_client \
+					-lregistry_client
 
 INCLUDES =  -I@AXIS2INC@ \
 			@AXIS2INC@ \

Modified: webservices/savan/trunk/c/samples/client/subscriber/subscriber.c
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/client/subscriber/subscriber.c?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/client/subscriber/subscriber.c (original)
+++ webservices/savan/trunk/c/samples/client/subscriber/subscriber.c Tue Mar  3 12:44:05 2009
@@ -46,7 +46,6 @@
     /* Set up the environment */
     env = axutil_env_create_all("subscriber.log", AXIS2_LOG_LEVEL_TRACE);
 
-    printf("\n***************************************\n");
     printf("Starting Savan subscriber...\n");
 
     client_home = AXIS2_GETENV("AXIS2C_HOME");
@@ -54,9 +53,11 @@
     /*init_event_source((axutil_env_t*)env, client_home);*/
     
     /* Set end point reference of echo service */
-    address = "http://localhost:9090/axis2/services/publisher";
+    address = "http://localhost:9090/axis2/services/weather";
     if (argc > 1 )
+    {
         address = argv[1];
+    }
     
     printf ("Event source endpoint : %s\n", address);
     
@@ -99,6 +100,11 @@
 
     axutil_hash_set(savan_options, SAVAN_OP_KEY_FILTER_DIALECT, AXIS2_HASH_KEY_STRING,
         DEFAULT_FILTER_DIALECT);*/
+    
+    axutil_hash_set(savan_options, SAVAN_OP_KEY_FILTER, AXIS2_HASH_KEY_STRING, "weather");
+
+    axutil_hash_set(savan_options, SAVAN_OP_KEY_FILTER_DIALECT, AXIS2_HASH_KEY_STRING,
+        DEFAULT_FILTER_DIALECT);
 
     /* Create a savan client */
     savan_client = savan_client_create(env);
@@ -117,15 +123,17 @@
         exit(0);
     }
 
-    AXIS2_SLEEP(16);
+    /*AXIS2_SLEEP(16);*/
+    AXIS2_SLEEP(1);
 
 
-    printf("\n***************************************\n");
     printf("Renewing subscription...\n");
     address = savan_client_get_sub_url(savan_client);
     printf("address:%s\n", address); 
     endpoint_ref = axis2_options_get_to(options, env);
     axis2_endpoint_ref_set_address(endpoint_ref, env, address);
+    axutil_hash_set(savan_options, SAVAN_OP_KEY_EXPIRES, AXIS2_HASH_KEY_STRING, "2010-02-12T06:54Z");
+    /*axutil_hash_set(savan_options, SAVAN_OP_KEY_EXPIRES, AXIS2_HASH_KEY_STRING, "P3Y6M4DT12H30M5S");*/
     status = savan_client_renew(savan_client, env, svc_client, savan_options);
     if (status == AXIS2_SUCCESS)
     {
@@ -134,7 +142,6 @@
 
     AXIS2_SLEEP(1);
 
-    printf("\n***************************************\n");
     printf("Getting status of subscription...\n");
     address = savan_client_get_sub_url(savan_client);
     endpoint_ref = axis2_options_get_to(options, env);
@@ -146,17 +153,16 @@
         printf("GetStatus successful\n");
     }
 
-    printf("\n***************************************\n");
     printf("Unsubscribing...\n");
     address = savan_client_get_sub_url(savan_client);
     endpoint_ref = axis2_options_get_to(options, env);
     axis2_endpoint_ref_set_address(endpoint_ref, env, address);
     axis2_svc_client_remove_all_headers(svc_client, env);
-    status = savan_client_unsubscribe(savan_client, env, svc_client);
+    /*status = savan_client_unsubscribe(savan_client, env, svc_client);
     if (status == AXIS2_SUCCESS)
     {
         printf("Unsubscribe successful\n");
-    }
+    }*/
 
 
     if (svc_client)
@@ -182,7 +188,7 @@
     printf("Initializing event source...");
 
     /* Set end point reference of echo service */
-    address = "http://localhost:9090/axis2/services/publisher";
+    address = "http://localhost:9090/axis2/services/weather";
     
     /* Create EPR with given address */
     endpoint_ref = axis2_endpoint_ref_create(env, address);

Modified: webservices/savan/trunk/c/samples/configure.ac
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/configure.ac?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/configure.ac (original)
+++ webservices/savan/trunk/c/samples/configure.ac Tue Mar  3 12:44:05 2009
@@ -129,6 +129,7 @@
 AC_CONFIG_FILES([Makefile \
     server/Makefile \
     server/publisher/Makefile \
+    server/weather/Makefile \
     server/listener/Makefile \
     client/Makefile \
     client/subscriber/Makefile

Modified: webservices/savan/trunk/c/samples/server/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/server/Makefile.am?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/server/Makefile.am (original)
+++ webservices/savan/trunk/c/samples/server/Makefile.am Tue Mar  3 12:44:05 2009
@@ -1,4 +1,4 @@
-SUBDIRS = listener publisher
-EXTRA_DIST=listener publisher
+SUBDIRS = listener publisher weather
+EXTRA_DIST=listener publisher weather
 
 

Modified: webservices/savan/trunk/c/samples/server/listener/listener_skeleton.c
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/server/listener/listener_skeleton.c?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/server/listener/listener_skeleton.c (original)
+++ webservices/savan/trunk/c/samples/server/listener/listener_skeleton.c Tue Mar  3 12:44:05 2009
@@ -81,7 +81,7 @@
     /* Add the implemented operation names of the service to  
      * the array list of functions 
      */
-    axutil_array_list_add(svc_skeleton->func_array, env, "notify");
+    axutil_array_list_add(svc_skeleton->func_array, env, "weather");
 
     /* Any initialization stuff of service should go here */
 

Modified: webservices/savan/trunk/c/samples/server/listener/services.xml
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/server/listener/services.xml?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/server/listener/services.xml (original)
+++ webservices/savan/trunk/c/samples/server/listener/services.xml Tue Mar  3 12:44:05 2009
@@ -1,6 +1,6 @@
 <service name="listener">
     <parameter name="ServiceClass" locked="xsd:false">listener</parameter>
-    <operation name="notify" mep="http://www.w3.org/2004/08/wsdl/in-only">
-           <parameter name="wsamapping">http://ws.apache.org/axis2/c/samples/notify</parameter>
+    <operation name="weather" mep="http://www.w3.org/2004/08/wsdl/in-only">
+           <parameter name="wsamapping">http://ws.apache.org/axis2/c/samples/weather</parameter>
    </operation>
 </service>

Modified: webservices/savan/trunk/c/samples/server/publisher/publisher_skeleton.c
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/server/publisher/publisher_skeleton.c?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/server/publisher/publisher_skeleton.c (original)
+++ webservices/savan/trunk/c/samples/server/publisher/publisher_skeleton.c Tue Mar  3 12:44:05 2009
@@ -223,7 +223,7 @@
     axis2_conf_t *conf = NULL;
     axis2_svc_t *svc = NULL;
 	axiom_attribute_t *test_data = NULL;
-    axis2_char_t *topic_url = "http://localhost:9090/axis2/services/publisher";
+    axis2_char_t *topic = "weather";
     
     publisher_data_t *mydata = (publisher_data_t*)data;
     main_env = mydata->env;
@@ -256,7 +256,7 @@
             axiom_element_set_text(test_elem, env, "test data", test_node);
 		
 			/*printf("%s\n", axiom_node_to_string(test_node, env));*/
-            savan_publishing_client_publish(pub_client, env, test_node, topic_url);
+            savan_publishing_client_publish(pub_client, env, test_node, topic);
             savan_publishing_client_free(pub_client, env);
         }
         AXIS2_SLEEP(5);

Modified: webservices/savan/trunk/c/samples/server/publisher/services.xml
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/samples/server/publisher/services.xml?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/samples/server/publisher/services.xml (original)
+++ webservices/savan/trunk/c/samples/server/publisher/services.xml Tue Mar  3 12:44:05 2009
@@ -1,6 +1,5 @@
 <service name="publisher">
     <parameter name="ServiceClass" locked="xsd:false">publisher</parameter>
-    <parameter name="loadServiceAtStartup" locked="xsd:false">true</parameter>
    <description>
        This is a sample eventing data source which loads as the axis2 engine startup and 
        start publishing to its subscribers.

Modified: webservices/savan/trunk/c/src/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/Makefile.am?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/Makefile.am (original)
+++ webservices/savan/trunk/c/src/Makefile.am Tue Mar  3 12:44:05 2009
@@ -1,2 +1,2 @@
-SUBDIRS = handlers msgreceivers util subscribers client core subs_mgr
+SUBDIRS = handlers msgreceivers util subscribers storage client core $(SVC_DIR)
 EXTRA_DIST=data

Modified: webservices/savan/trunk/c/src/client/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/client/Makefile.am?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/client/Makefile.am (original)
+++ webservices/savan/trunk/c/src/client/Makefile.am Tue Mar  3 12:44:05 2009
@@ -3,7 +3,8 @@
 
 libsavan_client_la_SOURCES = savan_client.c savan_publishing_client.c
 libsavan_client_la_LIBADD = $(top_builddir)/src/subscribers/libsavan_subscribers.la \
-							$(top_builddir)/src/util/libsavan_util.la
+							$(top_builddir)/src/util/libsavan_util.la \
+							../storage/@SAVAN_STORAGE@/libsavan_storage.la
 
 INCLUDES = -I$(top_builddir)/include \
 		@AXIS2INC@ \

Modified: webservices/savan/trunk/c/src/client/savan_client.c
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/client/savan_client.c?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/client/savan_client.c (original)
+++ webservices/savan/trunk/c/src/client/savan_client.c Tue Mar  3 12:44:05 2009
@@ -24,6 +24,7 @@
 #include <savan_util.h>
 #include <savan_constants.h>
 #include <savan_subscriber.h>
+#include <savan_storage_mgr.h>
 
 struct savan_client_t
 {
@@ -90,7 +91,7 @@
     axis2_char_t *sub_url = NULL;
     axis2_char_t *sub_elem_local_name = NULL;
     savan_subscriber_t *subscriber = NULL;
-    axis2_char_t *endto = NULL;
+    /*axis2_char_t *endto = NULL;*/
     axis2_char_t *notify = NULL;
     axis2_char_t *filter = NULL;
     axis2_char_t *filter_dialect = NULL;
@@ -106,20 +107,27 @@
     axis2_options_set_action(wsa_options, env, SAVAN_ACTIONS_SUB);
     
     /* extract the values from the options map */
-    endto = axutil_hash_get(options, SAVAN_OP_KEY_ENDTO_EPR, AXIS2_HASH_KEY_STRING);
+    /* endto endpoint reference is used by the event source to send a subscription end message. Default is not
+     * to send this message by the event source. How this should be provided by the client?
+     */
+    /*endto = axutil_hash_get(options, SAVAN_OP_KEY_ENDTO_EPR, AXIS2_HASH_KEY_STRING);*/
     notify = axutil_hash_get(options, SAVAN_OP_KEY_NOTIFY_EPR, AXIS2_HASH_KEY_STRING);
     filter = axutil_hash_get(options, SAVAN_OP_KEY_FILTER, AXIS2_HASH_KEY_STRING);
     filter_dialect = axutil_hash_get(options, SAVAN_OP_KEY_FILTER_DIALECT, AXIS2_HASH_KEY_STRING);
     expires = axutil_hash_get(options, SAVAN_OP_KEY_EXPIRES, AXIS2_HASH_KEY_STRING);
 
     subscriber = savan_subscriber_create(env);
-    endpoint_ref = axis2_endpoint_ref_create(env, endto);
-    savan_subscriber_set_end_to(subscriber, env, endpoint_ref);
+    /*endpoint_ref = axis2_endpoint_ref_create(env, endto);
+    savan_subscriber_set_end_to(subscriber, env, endpoint_ref);*/
     endpoint_ref = axis2_endpoint_ref_create(env, notify);
     savan_subscriber_set_notify_to(subscriber, env, endpoint_ref);
     savan_subscriber_set_filter(subscriber, env, filter);
     savan_subscriber_set_filter_dialect(subscriber, env, filter_dialect);
-    savan_subscriber_set_expires(subscriber, env, expires);
+    if(expires)
+    {
+        savan_subscriber_set_expires(subscriber, env, expires);
+    }
+
     /* Create the Subscriber node */
     sub_node = savan_util_create_subscriber_node(env, subscriber, NULL);
     if(!sub_node)
@@ -188,26 +196,27 @@
     axis2_char_t *expires = NULL;
     axis2_status_t status = AXIS2_FAILURE;
 
-    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan][client] "
-        "renew...");
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_client_renew");
     
     /* Set wsa action as Renew. remember the old action */
     wsa_options = (axis2_options_t*)axis2_svc_client_get_options(svc_client, env);
     old_action = axis2_options_get_action(wsa_options, env);
     axis2_options_set_action(wsa_options, env, SAVAN_ACTIONS_RENEW);
-    
-    /* Extract the values from the options map */
-    expires = axutil_hash_get(options, SAVAN_OP_KEY_EXPIRES, AXIS2_HASH_KEY_STRING);
-    
+     
     /* Create the body of the Renew request */
     ns = axiom_namespace_create (env, EVENTING_NAMESPACE, EVENTING_NS_PREFIX);
     renew_elem = axiom_element_create(env, NULL, ELEM_NAME_RENEW, ns, &renew_node);
         
-    /* Expires element */
-    expires_elem = axiom_element_create(env, renew_node, ELEM_NAME_EXPIRES, ns,
-        &expires_node);
-    axiom_element_set_text(expires_elem, env, expires, expires_node);
-    
+    /* Extract the values from the options map */
+    expires = axutil_hash_get(options, SAVAN_OP_KEY_EXPIRES, AXIS2_HASH_KEY_STRING);
+    if(expires)
+    {
+        /* Expires element */
+        expires_elem = axiom_element_create(env, renew_node, ELEM_NAME_EXPIRES, ns,
+            &expires_node);
+        axiom_element_set_text(expires_elem, env, expires, expires_node);
+    }
+
     savan_client_add_sub_id_to_soap_header(client, env, svc_client);
 
     /* send the Renew request and wait for the response */
@@ -218,13 +227,17 @@
    
     if (!reply)
     {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to send renew "
-            "request. Error: %d Reason: %s", env->error->error_number,
-            AXIS2_ERROR_GET_MESSAGE(env->error));
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[savan] Failed to send renew request. Error: %d Reason: %s", 
+                env->error->error_number, AXIS2_ERROR_GET_MESSAGE(env->error));
         status = AXIS2_FAILURE;
     }
     else
+    {
         status = AXIS2_SUCCESS;
+    }
+    
+    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_client_renew");
     return status;
 }
 

Modified: webservices/savan/trunk/c/src/client/savan_publishing_client.c
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/client/savan_publishing_client.c?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/client/savan_publishing_client.c (original)
+++ webservices/savan/trunk/c/src/client/savan_publishing_client.c Tue Mar  3 12:44:05 2009
@@ -29,7 +29,7 @@
 #include <savan_subscriber.h>
 #include <savan_util.h>
 #include <savan_constants.h>
-#include <savan_db_mgr.h>
+#include <savan_storage_mgr.h>
 
 struct savan_publishing_client_t
 {
@@ -74,89 +74,28 @@
     savan_publishing_client_t *client,
     const axutil_env_t *env,
     axiom_node_t *payload,
-    axis2_char_t *topic_url)
+    axis2_char_t *filter)
 {
-    axutil_param_t *param = NULL;
     axis2_svc_t *pubs_svc = NULL;
     axutil_array_list_t *subs_store = NULL;
     axis2_conf_t *conf = NULL;
-    axis2_module_desc_t *module_desc = NULL;
     int i = 0, size = 0;
-    axutil_param_t *topic_param = NULL;
-    axutil_qname_t *qname = NULL;
+    savan_storage_mgr_t *storage_mgr = NULL;
 
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_publishing_client_publish");
    
     conf = client->conf;
     pubs_svc = client->svc;
 
-    if(!topic_url)
+    storage_mgr = savan_util_get_storage_mgr(env, NULL, conf);
+    if(storage_mgr)
     {
-        topic_param = axis2_svc_get_param(pubs_svc, env, SAVAN_TOPIC_URL);
-        if (!topic_param)
-        {
-            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] TopicURL param not available");
-            return AXIS2_SUCCESS;
-        }
-
-        topic_url = axutil_param_get_value(topic_param, env);
-    }
-
-    qname = axutil_qname_create(env, SAVAN_MODULE, NULL, NULL);
-    module_desc = axis2_conf_get_module(conf, env, qname);
-
-    param = axis2_module_desc_get_param(module_desc, env, SAVAN_SUBSCRIPTION_MGR_URL);
-    axutil_qname_free(qname, env);
-
-    if(param)
-    {
-        axis2_char_t *subs_mgr_url = NULL;
-
-        axis2_svc_client_t* svc_client = NULL;
-        axutil_param_t *svc_client_param = NULL;
-
-        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-            "[savan] Using remote subscription manager to retrieve subscribers for %s", topic_url);
-        subs_mgr_url = axutil_param_get_value(param, env);
-        svc_client_param = axis2_svc_get_param(pubs_svc, env, SAVAN_SVC_CLIENT);
-        if(svc_client_param)
-        {
-            svc_client = axutil_param_get_value(svc_client_param, env);
-        }
-
-        if(!svc_client)
-        {
-            svc_client = (axis2_svc_client_t *) savan_util_get_svc_client(env);
-            svc_client_param = axutil_param_create(env, SAVAN_SVC_CLIENT, svc_client);
-            axis2_svc_add_param(pubs_svc, env, svc_client_param);
-        }
-
-        subs_store = savan_util_get_subscriber_list_from_remote_subs_mgr(env, topic_url, 
-                subs_mgr_url, svc_client, conf);
-    }
-    else
-    {
-        axis2_char_t sql_retrieve[256];
-        axis2_char_t *topic_name = NULL;
-
-        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-            "[savan] Using local subscription manager to retrieve subscribers for %s", topic_url);
-
-        topic_name = savan_util_get_topic_name_from_topic_url(env, topic_url);
-        sprintf(sql_retrieve, "select id, end_to, notify_to, delivery_mode, "\
-            "expires, filter, renewed, topic_url from subscriber, topic"\
-            " where topic.topic_name=subscriber.topic_name and"\
-            " topic.topic_name='%s';", topic_name);
-
-        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] sql_retrieve:%s", sql_retrieve);
-        subs_store = savan_db_mgr_retrieve_all(env, savan_util_get_dbname(env, conf),
-                                               savan_db_mgr_subs_find_callback, 
-                                               sql_retrieve);
+        subs_store = savan_storage_mgr_retrieve_all_subscribers(storage_mgr, env, filter);
     }
 
     if (!subs_store)
     {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Subscriber store is NULL"); 
+        AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "[savan] Subscriber store is NULL"); 
         return AXIS2_SUCCESS; /* returning FAILURE will break handler chain */
     }
 

Modified: webservices/savan/trunk/c/src/core/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/core/Makefile.am?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/core/Makefile.am (original)
+++ webservices/savan/trunk/c/src/core/Makefile.am Tue Mar  3 12:44:05 2009
@@ -14,4 +14,5 @@
                         ../handlers/libsavan_handlers.la\
                         ../msgreceivers/libsavan_msgreceivers.la\
 						../subscribers/libsavan_subscribers.la\
-						../util/libsavan_util.la
+						../util/libsavan_util.la \
+						../storage/@SAVAN_STORAGE@/libsavan_storage.la

Modified: webservices/savan/trunk/c/src/core/savan_sub_processor.c
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/core/savan_sub_processor.c?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/core/savan_sub_processor.c (original)
+++ webservices/savan/trunk/c/src/core/savan_sub_processor.c Tue Mar  3 12:44:05 2009
@@ -27,11 +27,12 @@
 #include <savan_error.h>
 #include <savan_subscriber.h>
 #include <savan_util.h>
-#include <savan_db_mgr.h>
+#include <savan_storage_mgr.h>
 
 struct savan_sub_processor
 {
     int dummy;
+    savan_storage_mgr_t *storage_mgr;
 };
 
 savan_subscriber_t * AXIS2_CALL 
@@ -62,7 +63,8 @@
 
 AXIS2_EXTERN savan_sub_processor_t *AXIS2_CALL
 savan_sub_processor_create(
-    const axutil_env_t *env)
+    const axutil_env_t *env,
+    savan_storage_mgr_t *storage_mgr)
 {
     savan_sub_processor_t *sub_processor = NULL;
     
@@ -74,10 +76,13 @@
     if (!sub_processor)
     { 
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Cound not create sub_processor"); 
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
         return NULL;        
     }
     
+    memset ((void *) sub_processor, 0, sizeof(savan_sub_processor_t));
+    sub_processor->storage_mgr = storage_mgr;
+    
     return sub_processor;
 }
 
@@ -99,7 +104,7 @@
     if (!subscriber)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to create a subscriber"); 
-        AXIS2_ERROR_SET(env->error, SAVAN_ERROR_FAILED_TO_CREATE_SUBSCRIBER, AXIS2_FAILURE);
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_FAILED_TO_CREATE_SUBSCRIBER, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }    
     /* Set the expiry time on the subscription */
@@ -107,7 +112,10 @@
      * to consider this when setting the expiry time */
 
     expires = savan_util_get_expiry_time(env);
-    savan_subscriber_set_expires(subscriber, env, expires);
+    if(expires)
+    {
+        savan_subscriber_set_expires(subscriber, env, expires);
+    }
 
     /*Set the filter template file for the subscriber*/
 
@@ -129,7 +137,8 @@
 		return status;
 	}
 
-    if(AXIS2_SUCCESS != (status = savan_util_add_subscriber(env, msg_ctx, subscriber)))
+    if(AXIS2_SUCCESS != (status = savan_util_add_subscriber(env, msg_ctx, 
+                    sub_processor->storage_mgr, subscriber)))
 	{
         savan_subscriber_free(subscriber, env);
 		return status;
@@ -151,7 +160,7 @@
 
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_sub_processor_unsubscribe");
 
-    subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, NULL);
+    subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, sub_processor->storage_mgr, NULL);
     if (!subscriber)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to find the subscriber"); 
@@ -163,7 +172,7 @@
     savan_sub_processor_set_sub_id_to_msg_ctx(env, msg_ctx, id);
 
     /* Remove from store */
-    status = savan_util_remove_subscriber(env, msg_ctx, subscriber);
+    status = savan_util_remove_subscriber(env, msg_ctx, sub_processor->storage_mgr, subscriber);
     if (status != AXIS2_SUCCESS)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to remove the subscriber"); 
@@ -183,62 +192,48 @@
     savan_subscriber_t *subscriber = NULL;
     axis2_char_t *id = NULL;
     axis2_bool_t renewable = AXIS2_TRUE;
-    axis2_char_t *expires = NULL;
-    axis2_char_t *renewed_expires = NULL;
     axis2_conf_ctx_t *conf_ctx = NULL;
     axis2_conf_t *conf = NULL;
     axis2_status_t status = AXIS2_FAILURE;
 
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_sub_processor_renew_subscription");
 
-    subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, NULL);
-    if (!subscriber)
+    renewable = savan_sub_processor_is_subscription_renewable(env, msg_ctx);
+    if (!renewable)
     {
         axis2_char_t *reason = NULL;
 
-        AXIS2_ERROR_SET(env->error, SAVAN_ERROR_SUBSCRIBER_NOT_FOUND, AXIS2_FAILURE);
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_UNABLE_TO_RENEW, AXIS2_FAILURE);
         reason = (axis2_char_t *) axutil_error_get_message(env->error);
-        savan_util_create_fault_envelope(msg_ctx, env, SAVAN_FAULT_UTR_CODE, 
-                SAVAN_FAULT_UTR_SUB_CODE, reason, SAVAN_FAULT_UTR_DETAIL1);
+        savan_util_create_fault_envelope(msg_ctx, env, SAVAN_FAULT_UTR_CODE,
+                                         SAVAN_FAULT_UTR_SUB_CODE, 
+                                         reason, 
+                                         SAVAN_FAULT_UTR_DETAIL2);
 
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to find the subscriber"); 
+        savan_subscriber_set_renew_status(subscriber, env, AXIS2_FALSE);
         return AXIS2_FAILURE;
     }
 
-    /* Store sub id in msg ctx to be used by the msg receiver */
-    id = savan_subscriber_get_id(subscriber, env);
-    savan_sub_processor_set_sub_id_to_msg_ctx(env, msg_ctx, id);
-
-    /* Check whether the subscription can be renewed. If renewable, set the new
-     * expiry time in the subscriber */
-
-    renewable = savan_sub_processor_is_subscription_renewable(env, msg_ctx);
-    if (!renewable)
+    subscriber = savan_util_get_subscriber_from_renew_msg(env, msg_ctx, sub_processor->storage_mgr, NULL);
+    if (!subscriber)
     {
         axis2_char_t *reason = NULL;
 
-        AXIS2_ERROR_SET(env->error, SAVAN_ERROR_UNABLE_TO_RENEW, AXIS2_FAILURE);
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_SUBSCRIBER_NOT_FOUND, AXIS2_FAILURE);
         reason = (axis2_char_t *) axutil_error_get_message(env->error);
-        savan_util_create_fault_envelope(msg_ctx, env, SAVAN_FAULT_UTR_CODE,
-                                         SAVAN_FAULT_UTR_SUB_CODE, 
-                                         reason, 
-                                         SAVAN_FAULT_UTR_DETAIL2);
+        savan_util_create_fault_envelope(msg_ctx, env, SAVAN_FAULT_UTR_CODE, 
+                SAVAN_FAULT_UTR_SUB_CODE, reason, SAVAN_FAULT_UTR_DETAIL1);
 
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-                        "[savan] Subscription can not be renewed");
-        savan_subscriber_set_renew_status(subscriber, env, AXIS2_FALSE);
         return AXIS2_FAILURE;
     }
 
-    expires = savan_subscriber_get_expires(subscriber, env);
-    renewed_expires = savan_util_get_renewed_expiry_time(env, expires);
-    savan_subscriber_set_expires(subscriber, env, renewed_expires);
-    savan_subscriber_set_renew_status(subscriber, env, AXIS2_TRUE);
+    /* Store sub id in msg ctx to be used by the msg receiver */
+    id = savan_subscriber_get_id(subscriber, env);
+    savan_sub_processor_set_sub_id_to_msg_ctx(env, msg_ctx, id);
+
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
     conf = axis2_conf_ctx_get_conf(conf_ctx, env);
-    status = savan_db_mgr_update_subscriber(env, 
-                                            savan_util_get_dbname(env, conf), 
-                                            subscriber);
+    status = savan_storage_mgr_update_subscriber(sub_processor->storage_mgr, env, subscriber);
 
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_sub_processor_renew_subscription");
 
@@ -280,8 +275,7 @@
     axiom_node_t *sub_node = NULL;
     axiom_element_t *body_elem = NULL;
     axiom_element_t *sub_elem = NULL;
-    axis2_char_t *topic_url = NULL;
-    axis2_endpoint_ref_t *topic_epr = NULL;
+    axis2_char_t *temp_id = NULL;
     
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
             "[savan] Entry:savan_sub_processor_create_subscriber_from_msg");
@@ -292,12 +286,17 @@
     if (!subscriber)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to create a subscriber instance");
-        AXIS2_ERROR_SET(env->error, SAVAN_ERROR_FAILED_TO_CREATE_SUBSCRIBER, AXIS2_FAILURE);
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_FAILED_TO_CREATE_SUBSCRIBER, AXIS2_FAILURE);
         return NULL;
     }
     
     /* Assign a unique id to subscriber */
-    sub_id = axutil_uuid_gen(env);
+    temp_id = axutil_uuid_gen(env);
+    sub_id = axutil_strcat(env, "urn:uuid:", temp_id, NULL);
+    if(temp_id)
+    {
+        AXIS2_FREE(env->allocator, temp_id);
+    }
     if (sub_id)
     {
         savan_subscriber_set_id(subscriber, env, sub_id);
@@ -310,7 +309,7 @@
     if (!envelope)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the soap envelop"); 
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL, AXIS2_FAILURE);
+        AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL, AXIS2_FAILURE);
         return NULL;
     }
     
@@ -318,7 +317,7 @@
     if (!body)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to extract the soap body"); 
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL, AXIS2_FAILURE);
+        AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SOAP_ENVELOPE_OR_SOAP_BODY_NULL, AXIS2_FAILURE);
         return NULL;
     }
     
@@ -336,29 +335,10 @@
     status = savan_util_process_subscriber_node(env, sub_node, sub_elem, subscriber);
     if(AXIS2_SUCCESS != status)
     {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Parsing subscriber node failed");
-        AXIS2_ERROR_SET(env->error, SAVAN_ERROR_PARSING_SUBSCRIBER_NODE_FAILED, AXIS2_FAILURE);
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_PARSING_SUBSCRIBER_NODE_FAILED, AXIS2_FAILURE);
         return NULL;
     }
 
-    topic_epr = axis2_msg_ctx_get_to(msg_ctx, env);
-    if(topic_epr)
-    {
-        topic_url = (axis2_char_t *)axis2_endpoint_ref_get_address(topic_epr, env);
-    }
-
-    if(topic_url)
-    {
-        savan_subscriber_set_topic_url(subscriber, env, topic_url);
-        status = savan_util_populate_topic(env, topic_url, conf);
-        if(status != AXIS2_SUCCESS)
-        {
-            AXIS2_ERROR_SET(env->error, SAVAN_ERROR_COULD_NOT_POPULATE_TOPIC, AXIS2_FAILURE);
-            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not populate topic");
-            return NULL;
-        }
-    }
-
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
         "[savan] Exit:savan_sub_processor_create_subscriber_from_msg");
     axutil_error_set_status_code(env->error, AXIS2_SUCCESS);
@@ -475,7 +455,6 @@
 	}
 	else if(!axutil_strcmp(filter_dialect, DEFAULT_FILTER_DIALECT))
 	{
-        axis2_char_t *reason = NULL;
 
 #ifdef SAVAN_FILTERING
         return AXIS2_SUCCESS;
@@ -537,6 +516,8 @@
     savan_sub_processor_t * sub_processor,
     const axutil_env_t * env)
 {
+    sub_processor->storage_mgr = NULL;
+
     if (sub_processor)
     {
         AXIS2_FREE(env->allocator, sub_processor);

Modified: webservices/savan/trunk/c/src/data/module.xml
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/data/module.xml?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/data/module.xml (original)
+++ webservices/savan/trunk/c/src/data/module.xml Tue Mar  3 12:44:05 2009
@@ -1,7 +1,10 @@
 <module name="savan" class="mod_savan">
-   <!--parameter name="SubscriptionMgrURL" locked="xsd:false">http://localhost:9092/axis2/services/subscription</parameter-->
-   <!-- Database connection parameters -->
-   <parameter name="savan_db" locked="false">/tmp/savan_db</parameter>
+   <!-- Resource parameters -->
+   <!-- savan_storage could be one of inmemory, sqlite and service-->
+   <parameter name="savan_resource" locked="false">/tmp/savan_db</parameter>
+   <!--parameter name="savan_resource" locked="false">http://localhost:9762/registry</parameter-->
+   <!--parameter name="username" locked="false">admin</parameter-->
+   <!--parameter name="password" locked="false">admin</parameter-->
    <parameter name="savan_filter_template_path" locked="false">/axis2c/deploy/modules/savan/template.xsl</parameter>
     <inflow>
         <handler name="SavanInHandler" class="mod_savan">

Modified: webservices/savan/trunk/c/src/handlers/savan_in_handler.c
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/handlers/savan_in_handler.c?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/handlers/savan_in_handler.c (original)
+++ webservices/savan/trunk/c/src/handlers/savan_in_handler.c Tue Mar  3 12:44:05 2009
@@ -33,7 +33,7 @@
 #include <savan_sub_processor.h>
 #include <savan_util.h>
 #include <savan_msg_recv.h>
-#include <savan_db_mgr.h>
+#include <savan_storage_mgr.h>
 
 axis2_status_t AXIS2_CALL
 savan_in_handler_invoke(struct axis2_handler *handler, 
@@ -73,6 +73,7 @@
     axis2_conf_ctx_t *conf_ctx = NULL;
     axis2_conf_t *conf = NULL;
     int type;
+    savan_storage_mgr_t *storage_mgr = NULL;
     
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Start:savan_in_handler_invoke");
 
@@ -81,16 +82,18 @@
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
     conf = axis2_conf_ctx_get_conf(conf_ctx, env);
 
-    if(!savan_db_mgr_create_db(env, savan_util_get_dbname(env, conf)))
+    storage_mgr = savan_util_get_storage_mgr(env, conf_ctx, conf);
+    if(!storage_mgr)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not create the database. Check \
             whether database path is correct and accessible. Exit loading the Savan module");
+        AXIS2_LOG_HANDLE(env, SAVAN_ERROR_DATABASE_CREATION_ERROR, AXIS2_FAILURE);
 
         return AXIS2_FAILURE;
     }
     
     /* create a subscription processor */
-    processor = savan_sub_processor_create(env);
+    processor = savan_sub_processor_create(env, storage_mgr);
     if (!processor)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to create subscription processor");

Modified: webservices/savan/trunk/c/src/handlers/savan_out_handler.c
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/handlers/savan_out_handler.c?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/handlers/savan_out_handler.c (original)
+++ webservices/savan/trunk/c/src/handlers/savan_out_handler.c Tue Mar  3 12:44:05 2009
@@ -37,7 +37,7 @@
 #include <savan_util.h>
 #include <savan_msg_recv.h>
 #include <savan_subscriber.h>
-#include <savan_db_mgr.h>
+#include <savan_storage_mgr.h>
 
 axis2_status_t AXIS2_CALL
 savan_out_handler_invoke(
@@ -77,18 +77,22 @@
     axis2_conf_ctx_t *conf_ctx = NULL;
     axis2_conf_t *conf = NULL;
     axis2_status_t status = AXIS2_SUCCESS;
+    savan_storage_mgr_t *storage_mgr = NULL;
 
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
     conf = axis2_conf_ctx_get_conf(conf_ctx, env);
 
-    if(!savan_db_mgr_create_db(env, savan_util_get_dbname(env, conf)))
+
+    storage_mgr = savan_util_get_storage_mgr(env, conf_ctx, conf);
+    if(!storage_mgr)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not create the database. Check \
-                whether database path is correct and accessible. Exit loading the Savan module");
-        
+            whether database path is correct and accessible. Exit loading the Savan module");
+        AXIS2_LOG_HANDLE(env, SAVAN_ERROR_DATABASE_CREATION_ERROR, AXIS2_FAILURE);
+
         return AXIS2_FAILURE;
     }
-    
+
     return status;
 }
 

Modified: webservices/savan/trunk/c/src/msgreceivers/savan_msg_recv.c
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/msgreceivers/savan_msg_recv.c?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/msgreceivers/savan_msg_recv.c (original)
+++ webservices/savan/trunk/c/src/msgreceivers/savan_msg_recv.c Tue Mar  3 12:44:05 2009
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-#include <savan_msg_recv.h>
 #include <string.h>
 #include <axiom_element.h>
 #include <axiom_soap_envelope.h>
@@ -28,6 +27,8 @@
 #include <savan_constants.h>
 #include <savan_error.h>
 #include <savan_subscriber.h>
+#include <savan_storage_mgr.h>
+#include <savan_msg_recv.h>
 
 axis2_status_t AXIS2_CALL
 savan_msg_recv_invoke_business_logic_sync(
@@ -77,7 +78,7 @@
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
                 "[savan] Failed to create axis2 message receiver"); 
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
         return NULL;
     }
     
@@ -85,6 +86,7 @@
     if (status != AXIS2_TRUE)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Failed to set message receiver scope"); 
+        AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
         axis2_msg_recv_free(msg_recv, env);
         return NULL;
     }
@@ -185,32 +187,29 @@
     if (!default_envelope)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-                "[savan] Failed to build soap envelope for response message"); 
-        AXIS2_ERROR_SET(env->error, SAVAN_ERROR_FAILED_TO_BUILD_SOAP_ENV, AXIS2_FAILURE);
+            "[savan] Failed to build soap envelope for response message"); 
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_FAILED_TO_BUILD_SOAP_ENV, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
 
     /* Create body elements and attach */
     
     ns = axiom_namespace_create (env, EVENTING_NAMESPACE, EVENTING_NS_PREFIX);
-    addr_ns = axiom_namespace_create(env, AXIS2_WSA_NAMESPACE_SUBMISSION, "wsa");
+    addr_ns = axiom_namespace_create(env, AXIS2_WSA_NAMESPACE_SUBMISSION, ADDRESSING_NS_PREFIX);
     
     /* SubscribeResponse element */
-    response_elem = axiom_element_create(env, NULL, ELEM_NAME_SUB_RESPONSE, ns,
-        &response_node);
+    response_elem = axiom_element_create(env, NULL, ELEM_NAME_SUB_RESPONSE, ns, &response_node);
     
     /* SubscriptionManager element */
-    submgr_elem = axiom_element_create(env, response_node, ELEM_NAME_SUB_MGR, ns,
-        &submgr_node);
-    addr_elem = axiom_element_create(env, submgr_node, ELEM_NAME_ADDR, addr_ns,
-        &addr_node);
+    submgr_elem = axiom_element_create(env, response_node, ELEM_NAME_SUB_MGR, ns, &submgr_node);
+    addr_elem = axiom_element_create(env, submgr_node, ELEM_NAME_ADDR, addr_ns, &addr_node);
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
     conf = axis2_conf_ctx_get_conf(conf_ctx, env);
     qname = axutil_qname_create(env, SAVAN_MODULE, NULL, NULL);
     module_desc = axis2_conf_get_module(conf, env, qname);
     axutil_qname_free(qname, env);
-    subs_mgr_url_param = axis2_module_desc_get_param(module_desc, env, 
-        SAVAN_SUBSCRIPTION_MGR_URL);
+    /* May be later we get the subscription manager url from Policy */
+    subs_mgr_url_param = axis2_module_desc_get_param(module_desc, env, SAVAN_SUBSCRIPTION_MGR_URL);
     if(subs_mgr_url_param)
     {
         submgr_addr = axutil_param_get_value(subs_mgr_url_param, env);
@@ -228,13 +227,13 @@
     id = (axis2_char_t*)axutil_property_get_value(property, env);
     
     /* Set sub id as a ref param */
-    refparam_elem = axiom_element_create(env, submgr_node, ELEM_NAME_REF_PARAM,
-        addr_ns, &refparam_node);
+    refparam_elem = axiom_element_create(env, submgr_node, ELEM_NAME_REF_PARAM, addr_ns, 
+            &refparam_node);
     id_elem = axiom_element_create(env, refparam_node, ELEM_NAME_ID, ns, &id_node);
     axiom_element_set_text(id_elem, env, id, id_node);
     
     /* Expires element. Get expiry time from subscriber and set */
-    /*subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, id);*/
+    /*subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, storage_mgr, id);*/
     subs_prop = axis2_msg_ctx_get_property(msg_ctx, env, SAVAN_SUBSCRIBER);
     if(subs_prop)
     {
@@ -246,16 +245,20 @@
     }
     else
     {
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_SUBSCRIBER_NOT_FOUND, AXIS2_FAILURE);
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Subscriber not found");
         return AXIS2_FAILURE;
     }
-    
-    expires_elem = axiom_element_create(env, response_node, ELEM_NAME_EXPIRES, ns,
-        &expires_node);
-    axiom_element_set_text(expires_elem, env, expires, expires_node);
-    
+   
+    if(expires)
+    {
+        expires_elem = axiom_element_create(env, response_node, ELEM_NAME_EXPIRES, ns,
+            &expires_node);
+        axiom_element_set_text(expires_elem, env, expires, expires_node);
+    }
+
     axiom_node_add_child(body_node , env, response_node);
-     axis2_msg_ctx_set_soap_envelope(new_msg_ctx, env, default_envelope);
+    axis2_msg_ctx_set_soap_envelope(new_msg_ctx, env, default_envelope);
     
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_msg_recv_handle_sub_request");
     return AXIS2_SUCCESS;
@@ -274,6 +277,9 @@
     axiom_node_t *response_node = NULL;
     axiom_element_t *response_elem = NULL;
     savan_subscriber_t *subscriber = NULL;
+    savan_storage_mgr_t *storage_mgr = NULL;
+    axis2_conf_ctx_t *conf_ctx = NULL;
+    axis2_conf_t *conf = NULL;
     
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_msg_recv_handle_unsub_request");
     
@@ -281,7 +287,18 @@
      * reply we will need to check whether the subscriber has been removed from
      * the store */
     
-    subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, NULL);
+    conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
+    storage_mgr = savan_util_get_storage_mgr(env, conf_ctx, conf);
+    if(!storage_mgr)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not create the data resource. Check \
+            whether resource path is correct and accessible. Exit loading the Savan module");
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_DATABASE_CREATION_ERROR, AXIS2_FAILURE);
+
+        return AXIS2_FAILURE;
+    }
+
+    subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, storage_mgr, NULL);
     if (subscriber)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
@@ -333,37 +350,48 @@
     axiom_element_t *expires_elem = NULL;
     axis2_char_t *expires = NULL;
     savan_subscriber_t *subscriber = NULL;
-    axis2_bool_t renewed = AXIS2_FALSE;
+    savan_storage_mgr_t *storage_mgr = NULL;
+    axis2_conf_ctx_t *conf_ctx = NULL;
+    axis2_conf_t *conf = NULL;
     
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_msg_recv_handle_renew_request");
 
-    subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, NULL);
+    conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
+    storage_mgr = savan_util_get_storage_mgr(env, conf_ctx, conf);
+    if(!storage_mgr)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not create the data resource. Check \
+            whether resource path is correct and accessible. Exit loading the Savan module");
+        AXIS2_LOG_HANDLE(env, SAVAN_ERROR_DATABASE_CREATION_ERROR, AXIS2_FAILURE);
+
+        return AXIS2_FAILURE;
+    }
+
+    subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, storage_mgr, NULL);
     if (!subscriber)
     {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-            "[savan] Failed to find the subscriber from local store");
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_SUBSCRIBER_NOT_FOUND, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
 
-    renewed = savan_subscriber_get_renew_status(subscriber, env);
+    /*renewed = savan_subscriber_get_renew_status(subscriber, env);
     if (!renewed)
     {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-            "[savan] Subscription is not renewed");
-        /*return AXIS2_FAILURE;*/
-    }
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Subscription is not renewed");
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_UNABLE_TO_RENEW, AXIS2_FAILURE);
+        return AXIS2_FAILURE;
+    }*/
 
     /* Set wsa action as RenewResponse. */
     info_header =  axis2_msg_ctx_get_msg_info_headers(new_msg_ctx, env);
-    axis2_msg_info_headers_set_action(info_header, env, 
-        SAVAN_ACTIONS_RENEW_RESPONSE);
+    axis2_msg_info_headers_set_action(info_header, env, SAVAN_ACTIONS_RENEW_RESPONSE);
     
     default_envelope = savan_msg_recv_build_soap_envelope(env, &body_node);
     if (!default_envelope)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-            "[savan] Failed to build soap envelope for response message"); 
-        AXIS2_ERROR_SET(env->error, SAVAN_ERROR_FAILED_TO_BUILD_SOAP_ENV, AXIS2_FAILURE);
+                "[savan] Failed to build soap envelope for response message"); 
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_FAILED_TO_BUILD_SOAP_ENV, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
 
@@ -377,13 +405,15 @@
 
     /* Expires element */
     expires = savan_subscriber_get_expires(subscriber, env);
-    
-    expires_elem = axiom_element_create(env, response_node, ELEM_NAME_EXPIRES, ns,
-        &expires_node);
-    axiom_element_set_text(expires_elem, env, expires, expires_node);
-    
+    if(expires)
+    {
+        expires_elem = axiom_element_create(env, response_node, ELEM_NAME_EXPIRES, ns,
+            &expires_node);
+        axiom_element_set_text(expires_elem, env, expires, expires_node);
+    }
+
     axiom_node_add_child(body_node , env, response_node);
-     axis2_msg_ctx_set_soap_envelope(new_msg_ctx, env, default_envelope);
+    axis2_msg_ctx_set_soap_envelope(new_msg_ctx, env, default_envelope);
     
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_msg_recv_handle_renew_request");
     return AXIS2_SUCCESS;
@@ -405,6 +435,9 @@
     axiom_element_t *expires_elem = NULL;
     axis2_char_t *expires = NULL;
     savan_subscriber_t *subscriber = NULL;
+    savan_storage_mgr_t *storage_mgr = NULL;
+    axis2_conf_ctx_t *conf_ctx = NULL;
+    axis2_conf_t *conf = NULL;
     
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
             "[savan] Entry:savan_msg_recv_handle_get_status_request");
@@ -413,12 +446,23 @@
     info_header =  axis2_msg_ctx_get_msg_info_headers(new_msg_ctx, env);
     axis2_msg_info_headers_set_action(info_header, env, SAVAN_ACTIONS_GET_STATUS_RESPONSE);
     
+    conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
+    storage_mgr = savan_util_get_storage_mgr(env, conf_ctx, conf);
+    if(!storage_mgr)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not create the data resource. Check \
+            whether resource path is correct and accessible. Exit loading the Savan module");
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_DATABASE_CREATION_ERROR, AXIS2_FAILURE);
+
+        return AXIS2_FAILURE;
+    }
+
     default_envelope = savan_msg_recv_build_soap_envelope(env, &body_node);
     if (!default_envelope)
     {
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
                 "[savan] Failed to build soap envelope for response message"); 
-        AXIS2_ERROR_SET(env->error, SAVAN_ERROR_FAILED_TO_BUILD_SOAP_ENV, AXIS2_FAILURE);
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_FAILED_TO_BUILD_SOAP_ENV, AXIS2_FAILURE);
         return AXIS2_FAILURE;
     }
 
@@ -431,15 +475,17 @@
         &response_node);
 
     /* Expires element */
-    subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, NULL);
+
+    subscriber = savan_util_get_subscriber_from_msg(env, msg_ctx, storage_mgr, NULL);
     expires = savan_subscriber_get_expires(subscriber, env);
+    if(expires)
+    {
+        expires_elem = axiom_element_create(env, response_node, ELEM_NAME_EXPIRES, ns, &expires_node);
+        axiom_element_set_text(expires_elem, env, expires, expires_node);
+    }
 
-    expires_elem = axiom_element_create(env, response_node, ELEM_NAME_EXPIRES, ns,
-        &expires_node);
-    axiom_element_set_text(expires_elem, env, expires, expires_node);
-    
     axiom_node_add_child(body_node , env, response_node);
-     axis2_msg_ctx_set_soap_envelope(new_msg_ctx, env, default_envelope);
+    axis2_msg_ctx_set_soap_envelope(new_msg_ctx, env, default_envelope);
     
      AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
             "[savan] Exit:savan_msg_recv_handle_get_status_request");

Modified: webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c (original)
+++ webservices/savan/trunk/c/src/subs_mgr/subs_mgr.c Tue Mar  3 12:44:05 2009
@@ -25,7 +25,7 @@
 #include <savan_constants.h>
 
 #include "savan_subs_mgr.h"
-#include <savan_db_mgr.h>
+#include <savan_storage_mgr.h>
 
 AXIS2_EXTERN axiom_node_t *AXIS2_CALL
 savan_subs_mgr_add_subscriber(
@@ -36,19 +36,17 @@
     axis2_conf_ctx_t *conf_ctx = NULL;
     axis2_conf_t *conf = NULL;
     savan_subscriber_t *subscriber = NULL;
-    axis2_char_t *topic_url = NULL;
     axis2_status_t status = AXIS2_SUCCESS;
 
     axutil_qname_t *qname = NULL;
     
     axiom_node_t *sub_node = NULL;
     axiom_node_t *id_node = NULL;
-    axiom_node_t *topic_node = NULL;
     
     axiom_element_t *sub_elem = NULL;
     axiom_element_t *id_elem = NULL;
-    axiom_element_t *topic_elem = NULL;
     axiom_element_t *add_sub_elem = NULL;
+    savan_storage_mgr_t *storage_mgr = NULL;
     
     axis2_char_t *id = NULL;
 
@@ -71,27 +69,6 @@
 
     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
         "[savan] node:%s", axiom_node_to_string(add_sub_node, env));
-    /*Get topic element from node */
-    qname = axutil_qname_create(env, ELEM_NAME_TOPIC, SAVAN_NAMESPACE, NULL);
-    topic_elem = axiom_element_get_first_child_with_qname(add_sub_elem, env, qname,
-        add_sub_node, &topic_node);
-    axutil_qname_free(qname, env);
-    topic_url = axiom_element_get_text(topic_elem, env, topic_node);
-    if(topic_url)
-    {
-        savan_subscriber_set_topic_url(subscriber, env, topic_url);
-
-        status = savan_util_populate_topic(env, topic_url, conf);
-        if(status != AXIS2_SUCCESS)
-        {
-            AXIS2_ERROR_SET(env->error, SAVAN_ERROR_COULD_NOT_POPULATE_TOPIC, AXIS2_FAILURE);
-            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not populate topic");
-            return NULL;
-        }
-
-        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-            "[savan] Subscriber will be added to the topic:%s ", topic_url);
-    }
 
     /* Get Id element from AddSubscriber*/
     qname = axutil_qname_create(env, ELEM_NAME_ID, SAVAN_NAMESPACE, NULL);
@@ -122,15 +99,21 @@
         }
     }
 
-    if(savan_db_mgr_insert_subscriber(env, savan_util_get_dbname(env, conf), subscriber))
+    storage_mgr = savan_util_get_storage_mgr(env, conf_ctx, conf);
+    if(!storage_mgr)
+    {
+        AXIS2_LOG_HANDLE(env, SAVAN_ERROR_DATABASE_CREATION_ERROR, AXIS2_FAILURE);
+        return NULL;
+    }
+    if(savan_storage_mgr_insert_subscriber(storage_mgr, env, subscriber))
     {
         AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-            "[savan] Subscriber %s added to the topic:%s", id, topic_url);
+            "[savan] Subscriber %s added", id);
     }
     else
     {
         AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-                "[savan] Subscriber %s could not be added to the topic:%s", id, topic_url);
+                "[savan] Subscriber %s could not be added", id);
     }
 
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_subs_mgr_add_subscriber");
@@ -143,21 +126,18 @@
     axiom_node_t *remove_sub_node,
     axis2_msg_ctx_t *msg_ctx)
 {
-    axis2_char_t *topic_url = NULL;
-
     axutil_qname_t *qname = NULL;
     
     axiom_node_t *id_node = NULL;
-    axiom_node_t *topic_node = NULL;
     
     axiom_element_t *id_elem = NULL;
-    axiom_element_t *topic_elem = NULL;
     axiom_element_t *remove_sub_elem = NULL;
     
-    axis2_char_t *id = NULL;
+    const axis2_char_t *subscriber_id = NULL;
     axis2_char_t sql_remove[256];
     axis2_conf_ctx_t *conf_ctx = NULL;
     axis2_conf_t *conf = NULL;
+    savan_storage_mgr_t *storage_mgr = NULL;
 
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_subs_mgr_remove_subscriber");
 
@@ -168,14 +148,6 @@
     
     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] node:%s", 
         axiom_node_to_string(remove_sub_node, env));
-    /*Get topic element from node */
-    qname = axutil_qname_create(env, ELEM_NAME_TOPIC, SAVAN_NAMESPACE, NULL);
-    topic_elem = axiom_element_get_first_child_with_qname(remove_sub_elem, env, 
-        qname, remove_sub_node, &topic_node);
-    axutil_qname_free(qname, env);
-    topic_url = axiom_element_get_text(topic_elem, env, topic_node);
-    AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-        "[savan] Subscriber will be removed from the topic:%s ", topic_url);
 
     /* Get Id element from RemoveSubscriber*/
     qname = axutil_qname_create(env, ELEM_NAME_ID, SAVAN_NAMESPACE, NULL);
@@ -183,17 +155,24 @@
         qname, remove_sub_node, &id_node);
     axutil_qname_free(qname, env);
     
-    id = axiom_element_get_text(id_elem, env, id_node);
+    subscriber_id = axiom_element_get_text(id_elem, env, id_node);
     
     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-        "[savan] Removing subscriber with id %s from topic %s", id, topic_url);
+        "[savan] Removing subscriber with id %s", subscriber_id);
     
-    sprintf(sql_remove, "delete from subscriber where id='%s'", id);
+    sprintf(sql_remove, "delete from subscriber where id='%s'", subscriber_id);
 
-    savan_db_mgr_remove(env, savan_util_get_dbname(env, conf), sql_remove);
+    storage_mgr = savan_util_get_storage_mgr(env, conf_ctx, conf);
+    if(!storage_mgr)
+    {
+        AXIS2_LOG_HANDLE(env, SAVAN_ERROR_DATABASE_CREATION_ERROR, AXIS2_FAILURE);
+        return NULL;
+    }
+
+    savan_storage_mgr_remove_subscriber(storage_mgr, env, subscriber_id);
 
     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, 
-        "[savan] Subscriber %s removed from the topic:%s", id, topic_url);
+        "[savan] Subscriber %s removed", subscriber_id);
 
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
         "[savan] Exit:savan_subs_mgr_remove_subscriber");
@@ -210,12 +189,12 @@
     axiom_node_t *subs_id_parent_node = NULL;
     axiom_node_t *subs_id_node = NULL;
     savan_subscriber_t *subscriber = NULL;
-    axis2_char_t *subs_id = NULL;
+    const axis2_char_t *subs_id = NULL;
     axiom_node_t *subs_node = NULL;
     axis2_conf_ctx_t *conf_ctx = NULL;
     axis2_conf_t *conf = NULL;
-    axis2_char_t sql_retrieve[256];
     axis2_status_t status = AXIS2_SUCCESS;
+    savan_storage_mgr_t *storage_mgr = NULL;
 
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, 
         "[savan] Entry:savan_subs_mgr_get_subscriber");
@@ -270,13 +249,13 @@
         return NULL;
     }
 
-
-    sprintf(sql_retrieve, "select id, end_to, notify_to, delivery_mode, "\
-        "expires, filter, renewed, topic_url from subscriber, topic"\
-        " where id='%s' and topic.topic_name=subscriber.topic_name;", subs_id);
-
-    subscriber = savan_db_mgr_retrieve(env, savan_util_get_dbname(env, conf), 
-                savan_db_mgr_subs_retrieve_callback, sql_retrieve);
+    storage_mgr = savan_util_get_storage_mgr(env, conf_ctx, conf);
+    if(!storage_mgr)
+    {
+        AXIS2_LOG_HANDLE(env, SAVAN_ERROR_DATABASE_CREATION_ERROR, AXIS2_FAILURE);
+        return NULL;
+    }
+    subscriber = savan_storage_mgr_retrieve_subscriber(storage_mgr, env, subs_id);
     
     subs_node = savan_util_create_savan_specific_subscriber_node(env, subscriber, NULL);
     if(!subs_node)
@@ -298,85 +277,78 @@
     axiom_node_t *node,
     axis2_msg_ctx_t *msg_ctx)
 {
-    axis2_char_t *topic_url = NULL;
-    axis2_char_t *topic_name = NULL;
     axutil_array_list_t *subs_store = NULL;
     axiom_namespace_t *ns1 = NULL;
     axiom_node_t *subs_list_node = NULL;
-    axiom_node_t *topic_parent_node = NULL;
-    axiom_node_t *topic_node = NULL;
     axiom_element_t* subs_list_elem = NULL;
     axis2_conf_ctx_t *conf_ctx = NULL;
     axis2_conf_t *conf = NULL;
-    axis2_char_t sql_retrieve[256];
     int i = 0, size = 0;
+    savan_storage_mgr_t *storage_mgr = NULL;
+    axiom_node_t *filter_parent_node = NULL;
+    axiom_node_t *filter_node = NULL;
+    axis2_char_t *filter = NULL;
 
     AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_subs_mgr_get_subscriber_list");
     /* Expected request format is :-
      * <ns1:get_subscriber_list xmlns:ns1="http://ws.apache.org/savan">
-     *      <Topic>topic_url</Topic>
      *      <ns:Susbscriber xmlns:ns="http://schemas.xmlsoap.org/ws/2004/08/eventing">
      *      ...
      *      </ns:Subscriber>
      *      <ns:Susbscriber xmlns:ns="http://schemas.xmlsoap.org/ws/2004/08/eventing">
      *      ...
-     *      </ns:get_subscriber_list>
-     * </ns1:Subscribers>
+     *      </ns:Subscriber>
+     * </ns1:get_subscriber_list>
      */
     conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
     conf = axis2_conf_ctx_get_conf(conf_ctx, env);
     if (!node) /* 'get_subscriber_list' node */
     {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, AXIS2_FAILURE);
+        AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, AXIS2_FAILURE);
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Axiom node is null, unable to continue");
         return NULL;
     }
 
-    topic_parent_node = axiom_node_get_first_element(node, env);
-    if (!topic_parent_node) 
+    filter_parent_node = axiom_node_get_first_element(node, env);
+    if (!filter_parent_node) 
     {
-        AXIS2_ERROR_SET(env->error, 
-            AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, AXIS2_FAILURE);
+        AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, AXIS2_FAILURE);
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-                        "[savan] topic parent node is null, unable to continue");
+            "[savan] filter parent node is null, unable to continue");
         return NULL;
     }
 
-    topic_node = axiom_node_get_first_child(topic_parent_node, env);
-    if (!topic_node) /* actual topic text */
+    filter_node = axiom_node_get_first_child(filter_parent_node, env);
+    if (!filter_node) /* actual filter text */
     {
-        AXIS2_ERROR_SET(env->error, 
-            AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, AXIS2_FAILURE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Invalid XML in request");
+        AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, AXIS2_FAILURE);
         return NULL;
     }
 
-    if (axiom_node_get_node_type(topic_node, env) == AXIOM_TEXT)
+    if (axiom_node_get_node_type(filter_node, env) == AXIOM_TEXT)
     {
-        axiom_text_t *topic_text = (axiom_text_t *)axiom_node_get_data_element(
-            topic_node, env);
-        if (topic_text && axiom_text_get_value(topic_text , env))
+        axiom_text_t *filter_text = (axiom_text_t *)axiom_node_get_data_element(
+            filter_node, env);
+        if (filter_text && axiom_text_get_value(filter_text , env))
         {
-            topic_url = (axis2_char_t *)axiom_text_get_value(topic_text, env);
-            topic_name = savan_util_get_topic_name_from_topic_url(env, topic_url);
-            AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Requested Topic:%s", topic_name);
+            filter = (axis2_char_t *)axiom_text_get_value(filter_text, env);
+            AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Requested Filter:%s", filter);
         }
     }
     else
     {
-        AXIS2_ERROR_SET(env->error, 
-            AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, AXIS2_FAILURE);
+        AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_SVC_SKEL_INVALID_XML_FORMAT_IN_REQUEST, AXIS2_FAILURE);
         AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Invalid XML in request");
         return NULL;
     }
 
-    sprintf(sql_retrieve, "select id, end_to, notify_to, delivery_mode, "\
-        "expires, filter, topic_url, renewed from subscriber, topic where "\
-        "subscriber.topic_name=topic.topic_name and topic.topic_name='%s';", 
-            topic_name);
-
-    subs_store = savan_db_mgr_retrieve_all(env, savan_util_get_dbname(env, conf),
-            savan_db_mgr_subs_find_callback, sql_retrieve);
+    storage_mgr = savan_util_get_storage_mgr(env, conf_ctx, conf);
+    if(!storage_mgr)
+    {
+        AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_DATABASE_CREATION_ERROR, AXIS2_FAILURE);
+        return NULL;
+    }
+    subs_store = savan_storage_mgr_retrieve_all_subscribers(storage_mgr, env, filter);
 
     /* create the body of the subscribers element */
     ns1 = axiom_namespace_create (env, SAVAN_NAMESPACE, SAVAN_NS_PREFIX);
@@ -413,67 +385,3 @@
     return subs_list_node;
 }
 
-AXIS2_EXTERN axiom_node_t *AXIS2_CALL
-savan_subs_mgr_get_topic_list(
-    const axutil_env_t *env,
-    axiom_node_t *node,
-    axis2_msg_ctx_t *msg_ctx)
-{
-
-    axutil_array_list_t *topic_store = NULL;
-    axiom_namespace_t *ns1 = NULL;
-    axiom_node_t *topic_list_node = NULL;
-    axiom_element_t* topic_list_elem = NULL;
-    axis2_conf_ctx_t *conf_ctx = NULL;
-    axis2_conf_t *conf = NULL;
-    axis2_char_t sql_retrieve[256];
-    int i = 0, size = 0;
-
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_subs_mgr_get_topic_list");
-
-    /* Expected request format is :-
-     * <ns1:get_topic_list xmlns:ns1="http://ws.apache.org/savan">
-     * </ns1:get_topic_list>
-     */
-    conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
-    conf = axis2_conf_ctx_get_conf(conf_ctx, env);
-    if (!node) /* 'get_topic_list' node */
-    {
-        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_SVC_SKEL_INPUT_OM_NODE_NULL, AXIS2_FAILURE);
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Input parameter NULL");
-        return NULL;
-    }
-    /* create the body of the topic_list element */
-    ns1 = axiom_namespace_create (env, SAVAN_NAMESPACE, SAVAN_NS_PREFIX);
-    topic_list_elem = axiom_element_create(env, NULL, ELEM_NAME_TOPICS, ns1, &topic_list_node);
-    sprintf(sql_retrieve, "select topic_url from topic;");
-
-    topic_store = savan_db_mgr_retrieve_all(env, savan_util_get_dbname(env, conf),
-            savan_db_mgr_topic_find_callback, sql_retrieve);
-
-    size = axutil_array_list_size(topic_store, env);
-    for(i = 0; i < size; i++)
-    {
-        axis2_char_t *topic_url = NULL;
-        topic_url = axutil_array_list_get(topic_store, env, i); 
-        AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "topic_url:%s", topic_url);
-        if (topic_url)
-        {
-            axiom_node_t *topic_node = NULL;
-            axiom_element_t* topic_elem = NULL;
-
-            /* create the topic element */
-            topic_elem = axiom_element_create(env, topic_list_node, ELEM_NAME_TOPIC, ns1, 
-                    &topic_node);
-            if(topic_node)
-            {
-                axiom_element_set_text(topic_elem, env, topic_url, topic_node); 
-            }
-        }
-    }
-
-    AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_subs_mgr_get_topic_list");
-    return topic_list_node;
-}
-
-

Modified: webservices/savan/trunk/c/src/subs_mgr/subs_mgr_skel.c
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/subs_mgr/subs_mgr_skel.c?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/subs_mgr/subs_mgr_skel.c (original)
+++ webservices/savan/trunk/c/src/subs_mgr/subs_mgr_skel.c Tue Mar  3 12:44:05 2009
@@ -32,8 +32,9 @@
 
 #include "savan_subs_mgr.h"
 #include <savan_constants.h>
-#include <savan_db_mgr.h>
+#include <savan_storage_mgr.h>
 #include <savan_util.h>
+#include <savan_error.h>
 
 int AXIS2_CALL
 savan_subs_mgr_free(
@@ -118,27 +119,26 @@
     const axutil_env_t *env,
     axis2_conf_t *conf)
 {
-    axutil_array_list_t *topic_param_list = NULL;
+    savan_storage_mgr_t *storage_mgr = NULL;
+    /*axutil_array_list_t *topic_param_list = NULL;
     axis2_svc_t *subs_svc = NULL;
     axis2_op_t *op = NULL;
-    int i = 0, size = 0;
-    const axis2_char_t *dbname = NULL;
+    int i = 0, size = 0;*/
 
     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Start:savan_subs_mgr_init_with_conf");
 
-    dbname = savan_util_get_dbname(env, conf);
-
-    if(!savan_db_mgr_create_db(env, dbname))
+    storage_mgr = savan_util_get_storage_mgr(env, NULL, conf);
+    if(!storage_mgr)
     {
-        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
-                "[savan] Could not create the database for name %s. Check whether database path "\
-                "is correct and accessible. Exit loading the Savan module", dbname);
-        
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Could not create the database. Check \
+            whether database path is correct and accessible. Exit loading the Savan module");
+        AXIS2_LOG_HANDLE(env, SAVAN_ERROR_DATABASE_CREATION_ERROR, AXIS2_FAILURE);
+
         return AXIS2_FAILURE;
     }
 
     savan_subs_mgr_init(svc_skeleton, env);
-    subs_svc = axis2_conf_get_svc(conf, env, "subscription");
+    /*subs_svc = axis2_conf_get_svc(conf, env, "subscription");
     op = axis2_svc_get_op_with_name(subs_svc, env, "get_topic_list");
     topic_param_list = axis2_op_get_all_params(op, env);
     if(topic_param_list)
@@ -167,7 +167,7 @@
         {
             AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Topic %s could not be added", topic_url_str);
         }
-    }
+    }*/
 
     AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] End:savan_subs_mgr_init_with_conf");
 

Modified: webservices/savan/trunk/c/src/subscribers/savan_subscriber.c
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/subscribers/savan_subscriber.c?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/subscribers/savan_subscriber.c (original)
+++ webservices/savan/trunk/c/src/subscribers/savan_subscriber.c Tue Mar  3 12:44:05 2009
@@ -35,8 +35,8 @@
     axis2_char_t *delivery_mode;
     axis2_char_t *expires;
     axis2_char_t *filter;
-    axis2_char_t *topic_name;
-    axis2_char_t *topic_url;
+    /*axis2_char_t *topic_name;
+    axis2_char_t *topic_url;*/
     axis2_bool_t renewed;
 	axis2_char_t *filter_dialect;
 
@@ -67,8 +67,8 @@
     subscriber->expires = NULL;
     subscriber->filter = NULL;
     subscriber->filter_dialect = NULL;
-    subscriber->topic_name = NULL;
-    subscriber->topic_url = NULL;
+    /*subscriber->topic_name = NULL;
+    subscriber->topic_url = NULL;*/
     subscriber->renewed = AXIS2_FALSE;
 	#ifdef SAVAN_FILTERING
 	subscriber->xslt_filter = NULL;
@@ -112,7 +112,7 @@
         AXIS2_FREE(env->allocator, subscriber->filter);
     }
 
-    if(subscriber->topic_name)
+    /*if(subscriber->topic_name)
     {
         AXIS2_FREE(env->allocator, subscriber->topic_name);
     }
@@ -120,7 +120,7 @@
     if(subscriber->topic_url)
     {
         AXIS2_FREE(env->allocator, subscriber->topic_url);
-    }
+    }*/
 
 	#ifdef SAVAN_FILTERING
     if(subscriber->xslt_filter)
@@ -475,7 +475,7 @@
     return subscriber->renewed;
 }
 
-AXIS2_EXTERN axis2_status_t AXIS2_CALL
+/*AXIS2_EXTERN axis2_status_t AXIS2_CALL
 savan_subscriber_set_topic_name(
     savan_subscriber_t *subscriber,
     const axutil_env_t *env,
@@ -516,4 +516,4 @@
 {
     return subscriber->topic_url;
 }
-
+*/

Modified: webservices/savan/trunk/c/src/util/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/util/Makefile.am?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/util/Makefile.am (original)
+++ webservices/savan/trunk/c/src/util/Makefile.am Tue Mar  3 12:44:05 2009
@@ -1,7 +1,7 @@
 datadir=$(prefix)/modules/savan
 noinst_LTLIBRARIES = libsavan_util.la
 
-libsavan_util_la_SOURCES = savan_util.c sqlite3.c db_mgr.c error.c
+libsavan_util_la_SOURCES = savan_util.c error.c
 
 data_DATA=template.xsl
 INCLUDES = -I$(top_builddir)/include \

Modified: webservices/savan/trunk/c/src/util/error.c
URL: http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/util/error.c?rev=749604&r1=749603&r2=749604&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/util/error.c (original)
+++ webservices/savan/trunk/c/src/util/error.c Tue Mar  3 12:44:05 2009
@@ -58,6 +58,30 @@
     
     axutil_error_messages[SAVAN_ERROR_APPLYING_FILTER_FAILED] = 
         "Applying filter failed";
+        
+    axutil_error_messages[SAVAN_ERROR_STORAGE_MANAGER_CREATION_FAILED] =
+        "Memory allocation failed for Savan Storage Manager";
+    
+    axutil_error_messages[SAVAN_ERROR_SUBSCRIBER_RETRIEVE_ERROR] =
+        "Could not retrieve subscriber from storage";
+    
+    axutil_error_messages[SAVAN_ERROR_SUBSCRIBER_REMOVE_ERROR] =
+        "Could not remove subscriber from storage";
+    
+    axutil_error_messages[SAVAN_ERROR_SUBSCRIBER_UPDATE_ERROR] =
+        "Could not update subscriber to storage";
+    
+    axutil_error_messages[SAVAN_ERROR_SUBSCRIBER_INSERT_ERROR] =
+        "Could not insert subscriber into storage";
+    
+    axutil_error_messages[SAVAN_ERROR_TOPIC_INSERT_ERROR] =
+        "Could not insert topic into storage";
+    
+    axutil_error_messages[SAVAN_ERROR_DATABASE_TABLE_CREATION_ERROR] =
+        "Could not create database table";
+    
+    axutil_error_messages[SAVAN_ERROR_DATABASE_CREATION_ERROR] =
+        "Could not create database";
 
     return AXIS2_SUCCESS;
 }