You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by da...@apache.org on 2007/04/25 08:01:30 UTC

svn commit: r532207 [2/3] - /webservices/sandesha/trunk/c/src/storage/sqlite/

Added: webservices/sandesha/trunk/c/src/storage/sqlite/permanent_invoker_mgr.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/storage/sqlite/permanent_invoker_mgr.c?view=auto&rev=532207
==============================================================================
--- webservices/sandesha/trunk/c/src/storage/sqlite/permanent_invoker_mgr.c (added)
+++ webservices/sandesha/trunk/c/src/storage/sqlite/permanent_invoker_mgr.c Tue Apr 24 23:01:28 2007
@@ -0,0 +1,445 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+#include <sandesha2_permanent_invoker_mgr.h>
+#include "sandesha2_permanent_bean_mgr.h"
+#include <sandesha2_invoker_mgr.h>
+#include <sandesha2_storage_mgr.h>
+#include <sandesha2_constants.h>
+#include <sandesha2_error.h>
+#include <axutil_log.h>
+#include <axutil_hash.h>
+#include <axutil_thread.h>
+#include <axutil_property.h>
+#include <axutil_types.h>
+
+/** 
+ * @brief Sandesha2 Permanent Invoker Manager Struct Impl
+ *   Sandesha2 Permanent Invoker Manager 
+ */ 
+typedef struct sandesha2_permanent_invoker_mgr
+{
+    sandesha2_invoker_mgr_t invoker_mgr;
+    sandesha2_permanent_bean_mgr_t *bean_mgr;
+}sandesha2_permanent_invoker_mgr_t;
+
+#define SANDESHA2_INTF_TO_IMPL(invoker_mgr) \
+    ((sandesha2_permanent_invoker_mgr_t *) invoker_mgr)
+
+static int 
+sandesha2_invoker_find_callback(
+    void *not_used, 
+    int argc, 
+    char **argv, 
+    char **col_name)
+{
+    int i = 0;
+    sandesha2_invoker_bean_t *bean = NULL;
+    sandesha2_bean_mgr_args_t *args = (sandesha2_bean_mgr_args_t *) not_used;
+    const axutil_env_t *env = args->env;
+    axutil_array_list_t *data_list = (axutil_array_list_t *) args->data;
+    if(argc < 1)
+    {
+        args->data = NULL;
+        return 0;
+    }
+    if(!data_list)
+    {
+        data_list = axutil_array_list_create(env, 0);
+        args->data = data_list;
+    }
+    bean = sandesha2_invoker_bean_create(env);
+    for(i = 0; i < argc; i++)
+    {
+        if(0 == axis2_strcmp(col_name[i], "msg_ctx_ref_key"))
+            sandesha2_invoker_bean_set_msg_ctx_ref_key(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "msg_no"))
+            sandesha2_invoker_bean_set_msg_no(bean, env, atol(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "seq_id"))
+            if(argv[i])
+                sandesha2_invoker_bean_set_seq_id(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "is_invoked"))
+            sandesha2_invoker_bean_set_invoked(bean, env, AXIS2_ATOI(argv[i]));
+    }
+    axutil_array_list_add(data_list, env, bean);
+    return 0;
+}
+
+static int 
+sandesha2_invoker_retrieve_callback(
+    void *not_used, 
+    int argc, 
+    char **argv, 
+    char **col_name)
+{
+    int i = 0;
+    sandesha2_bean_mgr_args_t *args = (sandesha2_bean_mgr_args_t *) not_used;
+    const axutil_env_t *env = args->env;
+    sandesha2_invoker_bean_t *bean = (sandesha2_invoker_bean_t *) args->data;
+    if(argc < 1)
+    {
+        args->data = NULL;
+        return 0;
+    }
+    if(!bean)
+    {
+        bean = sandesha2_invoker_bean_create(env);
+        args->data = bean;
+    }
+    for(i = 0; i < argc; i++)
+    {
+        if(0 == axis2_strcmp(col_name[i], "msg_ctx_ref_key"))
+            sandesha2_invoker_bean_set_msg_ctx_ref_key(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "msg_no"))
+            sandesha2_invoker_bean_set_msg_no(bean, env, atol(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "seq_id"))
+            if(argv[i])
+                sandesha2_invoker_bean_set_seq_id(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "is_invoked"))
+            sandesha2_invoker_bean_set_invoked(bean, env, AXIS2_ATOI(argv[i]));
+    }
+    return 0;
+}
+
+static int 
+sandesha2_invoker_count_callback(
+    void *not_used, 
+    int argc, 
+    char **argv, 
+    char **col_name)
+{
+    int *count = (int *) not_used;
+    *count = AXIS2_ATOI(argv[0]);
+    return 0;
+}
+
+void AXIS2_CALL
+sandesha2_permanent_invoker_mgr_free(
+    sandesha2_invoker_mgr_t *invoker_mgr,
+    const axutil_env_t *env);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_invoker_mgr_insert(
+    sandesha2_invoker_mgr_t *invoker_mgr,
+    const axutil_env_t *env,
+    sandesha2_invoker_bean_t *bean);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_invoker_mgr_remove(
+    sandesha2_invoker_mgr_t *invoker_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *key);
+
+sandesha2_invoker_bean_t *AXIS2_CALL
+sandesha2_permanent_invoker_mgr_retrieve(
+    sandesha2_invoker_mgr_t *invoker_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *key);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_invoker_mgr_update(
+    sandesha2_invoker_mgr_t *invoker_mgr,
+    const axutil_env_t *env,
+    sandesha2_invoker_bean_t *bean);
+
+axutil_array_list_t *AXIS2_CALL
+sandesha2_permanent_invoker_mgr_find(
+    sandesha2_invoker_mgr_t *invoker_mgr,
+    const axutil_env_t *env,
+    sandesha2_invoker_bean_t *bean);
+
+sandesha2_invoker_bean_t *AXIS2_CALL
+sandesha2_permanent_invoker_mgr_find_unique(
+    sandesha2_invoker_mgr_t *invoker_mgr,
+    const axutil_env_t *env,
+    sandesha2_invoker_bean_t *bean);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_create_invoker_mgr_match(
+    sandesha2_permanent_bean_mgr_t *invoker_mgr,
+    const axutil_env_t *env,
+    sandesha2_rm_bean_t *bean,
+    sandesha2_rm_bean_t *candidate);
+
+static const sandesha2_invoker_mgr_ops_t invoker_mgr_ops = 
+{
+    sandesha2_permanent_invoker_mgr_free,
+    sandesha2_permanent_invoker_mgr_insert,
+    sandesha2_permanent_invoker_mgr_remove,
+    sandesha2_permanent_invoker_mgr_retrieve,
+    sandesha2_permanent_invoker_mgr_update,
+    sandesha2_permanent_invoker_mgr_find,
+    sandesha2_permanent_invoker_mgr_find_unique
+};
+
+AXIS2_EXTERN sandesha2_invoker_mgr_t * AXIS2_CALL
+sandesha2_permanent_invoker_mgr_create(
+    const axutil_env_t *env,
+    sandesha2_storage_mgr_t *storage_mgr,
+    axis2_conf_ctx_t *ctx)
+{
+    sandesha2_permanent_invoker_mgr_t *invoker_mgr_impl = NULL;
+    AXIS2_ENV_CHECK(env, NULL);
+    invoker_mgr_impl = AXIS2_MALLOC(env->allocator, 
+        sizeof(sandesha2_permanent_invoker_mgr_t));
+    invoker_mgr_impl->bean_mgr = sandesha2_permanent_bean_mgr_create(env,
+        storage_mgr, ctx, SANDESHA2_BEAN_MAP_STORAGE_MAP);
+    invoker_mgr_impl->bean_mgr->ops.match = 
+        sandesha2_permanent_create_invoker_mgr_match;
+    invoker_mgr_impl->invoker_mgr.ops = invoker_mgr_ops;
+
+    return &(invoker_mgr_impl->invoker_mgr);
+}
+
+void AXIS2_CALL
+sandesha2_permanent_invoker_mgr_free(
+    sandesha2_invoker_mgr_t *invoker_mgr,
+    const axutil_env_t *env)
+{
+    sandesha2_permanent_invoker_mgr_t *invoker_mgr_impl = NULL;
+    invoker_mgr_impl = SANDESHA2_INTF_TO_IMPL(invoker_mgr);
+    if(invoker_mgr_impl->bean_mgr)
+    {
+        sandesha2_permanent_bean_mgr_free(invoker_mgr_impl->bean_mgr, env);
+        invoker_mgr_impl->bean_mgr = NULL;
+    }
+    if(invoker_mgr_impl)
+    {
+        AXIS2_FREE(env->allocator, invoker_mgr_impl);
+        invoker_mgr_impl = NULL;
+    }
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_invoker_mgr_insert(
+    sandesha2_invoker_mgr_t *invoker_mgr,
+    const axutil_env_t *env,
+    sandesha2_invoker_bean_t *bean)
+{
+    axis2_char_t sql_insert[1024];
+    axis2_char_t sql_retrieve[256];
+    axis2_char_t sql_update[1024];
+    axis2_bool_t ret = AXIS2_FALSE;
+    sandesha2_permanent_invoker_mgr_t *invoker_mgr_impl = NULL;
+
+    axis2_char_t *msg_ctx_ref_key = sandesha2_invoker_bean_get_msg_ctx_ref_key(
+        (sandesha2_rm_bean_t *) bean, env);
+    long msg_no = sandesha2_invoker_bean_get_msg_no(bean, env);
+    axis2_char_t *seq_id = sandesha2_invoker_bean_get_seq_id(bean, env);
+    axis2_bool_t is_invoked = sandesha2_invoker_bean_is_invoked(bean, env);
+
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_invoker_mgr_insert");
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+    invoker_mgr_impl = SANDESHA2_INTF_TO_IMPL(invoker_mgr);
+
+    sprintf(sql_retrieve, "select msg_ctx_ref_key, msg_no, "\
+        "seq_id, is_invoked from invoker where msg_ctx_ref_key='%s'", 
+        msg_ctx_ref_key);
+    sprintf(sql_update, "update invoker set msg_no=%ld, seq_id='%s',"\
+        "is_invoked=%d where msg_ctx_ref_key='%s';", msg_no, seq_id, is_invoked, 
+        msg_ctx_ref_key);
+    sprintf(sql_insert, "insert into invoker(msg_ctx_ref_key, msg_no, seq_id,"\
+        "is_invoked) values('%s', %ld, '%s', %d);", msg_ctx_ref_key, msg_no, 
+        seq_id, is_invoked);
+    ret = sandesha2_permanent_bean_mgr_insert(invoker_mgr_impl->bean_mgr, env,
+        (sandesha2_rm_bean_t *) bean, sandesha2_invoker_retrieve_callback, 
+        sql_retrieve, sql_update, sql_insert);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_invoker_mgr_insert");
+    return ret;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_invoker_mgr_remove(
+    sandesha2_invoker_mgr_t *invoker_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *key)
+{
+    axis2_char_t sql_remove[256];
+    axis2_char_t sql_retrieve[256];
+    sandesha2_permanent_invoker_mgr_t *invoker_mgr_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, key, AXIS2_FALSE);
+    invoker_mgr_impl = SANDESHA2_INTF_TO_IMPL(invoker_mgr);
+    sprintf(sql_remove, "delete from invoker where msg_ctx_ref_key='%s';", key);
+    sprintf(sql_retrieve, "select msg_ctx_ref_key, msg_no, seq_id, is_invoked"\
+        " from invoker where msg_ctx_ref_key='%s'", key);
+    return sandesha2_permanent_bean_mgr_remove(invoker_mgr_impl->bean_mgr, env, 
+        sandesha2_invoker_retrieve_callback, sql_retrieve, sql_remove);
+}
+
+sandesha2_invoker_bean_t *AXIS2_CALL
+sandesha2_permanent_invoker_mgr_retrieve(
+    sandesha2_invoker_mgr_t *invoker_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *key)
+{
+    axis2_char_t sql_retrieve[256];
+    sandesha2_invoker_bean_t *bean = NULL;
+    sandesha2_permanent_invoker_mgr_t *invoker_mgr_impl = NULL;
+    AXIS2_PARAM_CHECK(env->error, key, AXIS2_FALSE);
+    invoker_mgr_impl = SANDESHA2_INTF_TO_IMPL(invoker_mgr);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_invoker_mgr_retrieve");
+    sprintf(sql_retrieve, "select msg_ctx_ref_key, msg_no, seq_id, is_invoked"\
+        " from invoker where msg_ctx_ref_key='%s'", key);
+    sandesha2_permanent_bean_mgr_retrieve(invoker_mgr_impl->bean_mgr, env, 
+        sandesha2_invoker_retrieve_callback, sql_retrieve);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_invoker_mgr_retrieve");
+    return bean;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_invoker_mgr_update(
+    sandesha2_invoker_mgr_t *invoker_mgr,
+    const axutil_env_t *env,
+    sandesha2_invoker_bean_t *bean)
+{
+    /*axis2_char_t *ref_key = NULL;*/
+    axis2_char_t *sql_update = NULL;
+    axis2_char_t *sql_retrieve = NULL;
+    axis2_bool_t ret = AXIS2_FALSE;
+    sandesha2_permanent_invoker_mgr_t *invoker_mgr_impl = NULL;
+
+    axis2_char_t *msg_ctx_ref_key = sandesha2_invoker_bean_get_msg_ctx_ref_key(
+        (sandesha2_rm_bean_t *) bean, env);
+    long msg_no = sandesha2_invoker_bean_get_msg_no(bean, env);
+    axis2_char_t *seq_id = sandesha2_invoker_bean_get_seq_id(bean, env);
+    axis2_bool_t is_invoked = sandesha2_invoker_bean_is_invoked(bean, env);
+
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_invoker_mgr_update");
+    AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+    invoker_mgr_impl = SANDESHA2_INTF_TO_IMPL(invoker_mgr);
+
+    sprintf(sql_retrieve, "select msg_ctx_ref_key, msg_no, "\
+        "seq_id, is_invoked from invoker where msg_ctx_ref_key='%s'", 
+        msg_ctx_ref_key);
+    sprintf(sql_update, "update invoker set msg_no=%ld, seq_id='%s',"\
+        "is_invoked=%d where msg_ctx_ref_key='%s';", msg_no, seq_id, is_invoked, 
+        msg_ctx_ref_key);
+    ret = sandesha2_permanent_bean_mgr_update(invoker_mgr_impl->bean_mgr, env, 
+        (sandesha2_rm_bean_t *)bean, sandesha2_invoker_retrieve_callback, 
+        sql_retrieve, sql_update);
+
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_invoker_mgr_update:return:%d", ret);
+    return ret;
+}
+
+axutil_array_list_t *AXIS2_CALL
+sandesha2_permanent_invoker_mgr_find(
+    sandesha2_invoker_mgr_t *invoker_mgr,
+    const axutil_env_t *env,
+    sandesha2_invoker_bean_t *bean)
+{
+    axis2_char_t *sql_find = NULL;
+    axis2_char_t *sql_count = NULL;
+    axutil_array_list_t *ret = NULL;
+    sandesha2_permanent_invoker_mgr_t *invoker_mgr_impl = NULL;
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_invoker_mgr_find");
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    invoker_mgr_impl = SANDESHA2_INTF_TO_IMPL(invoker_mgr);
+    sql_find = "select msg_ctx_ref_key,msg_no, seq_id,is_invoked from invoker;";
+    sql_count = "select count(*) as no_recs from invoker;";
+    ret = sandesha2_permanent_bean_mgr_find(invoker_mgr_impl->bean_mgr, env, 
+        (sandesha2_rm_bean_t *) bean, sandesha2_invoker_find_callback,
+        sandesha2_invoker_count_callback, sql_find, sql_count);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_invoker_mgr_find");
+    return ret;
+}
+
+sandesha2_invoker_bean_t *AXIS2_CALL
+sandesha2_permanent_invoker_mgr_find_unique(
+    sandesha2_invoker_mgr_t *invoker_mgr,
+    const axutil_env_t *env,
+    sandesha2_invoker_bean_t *bean)
+{
+    axis2_char_t *sql_find = NULL;
+    axis2_char_t *sql_count = NULL;
+    sandesha2_permanent_invoker_mgr_t *invoker_mgr_impl = NULL;
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+    invoker_mgr_impl = SANDESHA2_INTF_TO_IMPL(invoker_mgr);
+    sql_find = "select msg_ctx_ref_key,msg_no,seq_id,is_invoked from invoker;";
+    sql_count = "select count(*) as no_recs from invoker;";
+    return (sandesha2_invoker_bean_t *) sandesha2_permanent_bean_mgr_find_unique(
+        invoker_mgr_impl->bean_mgr, env, (sandesha2_rm_bean_t *) bean, 
+        sandesha2_invoker_find_callback, sandesha2_invoker_count_callback, 
+        sql_find, sql_count);
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_create_invoker_mgr_match(
+    sandesha2_permanent_bean_mgr_t *invoker_mgr,
+    const axutil_env_t *env,
+    sandesha2_rm_bean_t *bean,
+    sandesha2_rm_bean_t *candidate)
+{
+    axis2_bool_t select = AXIS2_TRUE;
+    axis2_char_t *ref_key = NULL;
+    axis2_char_t *temp_ref_key = NULL;
+    axis2_char_t *seq_id = NULL;
+    axis2_char_t *temp_seq_id = NULL;
+    long msg_no = 0;
+    long temp_msg_no = 0;
+    axis2_bool_t is_invoked = AXIS2_FALSE;
+    axis2_bool_t temp_is_invoked = AXIS2_FALSE;
+    
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_create_invoker_mgr_match");
+    ref_key = sandesha2_invoker_bean_get_msg_ctx_ref_key(bean, env);
+    temp_ref_key = sandesha2_invoker_bean_get_msg_ctx_ref_key(candidate, env);
+    if(ref_key && temp_ref_key && 0 != axis2_strcmp(ref_key, temp_ref_key))
+    {
+        select = AXIS2_FALSE;
+    }
+    seq_id = sandesha2_invoker_bean_get_seq_id(
+        (sandesha2_invoker_bean_t *) bean, env);
+    temp_seq_id = sandesha2_invoker_bean_get_seq_id(
+        (sandesha2_invoker_bean_t *) candidate, env);
+    if(seq_id && temp_seq_id && 0 != axis2_strcmp(seq_id, temp_seq_id))
+    {
+        select = AXIS2_FALSE;
+    }
+    msg_no = sandesha2_invoker_bean_get_msg_no(
+        (sandesha2_invoker_bean_t *) bean, env);
+    temp_msg_no = sandesha2_invoker_bean_get_msg_no(
+        (sandesha2_invoker_bean_t *) candidate, env);
+    if(msg_no != 0 && (msg_no != temp_msg_no))
+    {
+        select = AXIS2_FALSE;
+    }
+    is_invoked = sandesha2_invoker_bean_is_invoked(
+        (sandesha2_invoker_bean_t *) bean, env);
+    temp_is_invoked = sandesha2_invoker_bean_is_invoked(
+        (sandesha2_invoker_bean_t *) candidate, env);
+    if(is_invoked != temp_is_invoked)
+    {
+        select = AXIS2_FALSE;
+    }
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_create_invoker_mgr_match:return:%d", 
+            select);
+    return select;
+}
+

Added: webservices/sandesha/trunk/c/src/storage/sqlite/permanent_next_msg_mgr.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/storage/sqlite/permanent_next_msg_mgr.c?view=auto&rev=532207
==============================================================================
--- webservices/sandesha/trunk/c/src/storage/sqlite/permanent_next_msg_mgr.c (added)
+++ webservices/sandesha/trunk/c/src/storage/sqlite/permanent_next_msg_mgr.c Tue Apr 24 23:01:28 2007
@@ -0,0 +1,479 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+#include <sandesha2_permanent_next_msg_mgr.h>
+#include "sandesha2_permanent_bean_mgr.h"
+#include <sandesha2_next_msg_mgr.h>
+#include <sandesha2_constants.h>
+#include <sandesha2_error.h>
+#include <sandesha2_utils.h>
+#include <sandesha2_storage_mgr.h>
+#include <axutil_log.h>
+#include <axutil_hash.h>
+#include <axutil_thread.h>
+#include <axutil_property.h>
+#include <axutil_types.h>
+#include <stdlib.h>
+/** 
+ * @brief Sandesha2 Permanent Next Message Manager Struct Impl
+ *   Sandesha Sequence2 Permanent Next Message Manager 
+ */ 
+typedef struct sandesha2_permanent_next_msg_mgr
+{
+    sandesha2_next_msg_mgr_t next_msg_mgr;
+    sandesha2_permanent_bean_mgr_t *bean_mgr;
+    axutil_array_list_t *values;
+}sandesha2_permanent_next_msg_mgr_t;
+
+#define SANDESHA2_INTF_TO_IMPL(next_msg_mgr) \
+    ((sandesha2_permanent_next_msg_mgr_t *) next_msg_mgr)
+
+static int 
+sandesha2_next_msg_find_callback(
+    void *not_used, 
+    int argc, 
+    char **argv, 
+    char **col_name)
+{
+    sandesha2_next_msg_bean_t *bean = NULL;
+    int i = 0;
+    sandesha2_bean_mgr_args_t *args = (sandesha2_bean_mgr_args_t *) not_used;
+    const axutil_env_t *env = args->env;
+    axutil_array_list_t *data_list = (axutil_array_list_t *) args->data;
+    if(argc < 1)
+    {
+        args->data = NULL;
+        return 0;
+    }
+    if(!data_list)
+    {
+        data_list = axutil_array_list_create(env, 0);
+        args->data = data_list;
+    }
+    if(argc > 0)
+    {
+        bean = sandesha2_next_msg_bean_create(env);
+    }
+    for(i = 0; i < argc; i++)
+    {
+        if(0 == axis2_strcmp(col_name[i], "seq_id"))
+        {
+            sandesha2_next_msg_bean_set_seq_id(bean, env, argv[i]);
+        }
+        if(0 == axis2_strcmp(col_name[i], "ref_msg_key"))
+        {
+            if(argv[i] && 0 != axis2_strcmp("(null)", argv[i]))
+            {
+                sandesha2_next_msg_bean_set_ref_msg_key(bean, env, argv[i]);
+            }
+        }
+        if(0 == axis2_strcmp(col_name[i], "polling_mode"))
+            sandesha2_next_msg_bean_set_polling_mode(bean, env, 
+                AXIS2_ATOI(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "msg_no"))
+            sandesha2_next_msg_bean_set_next_msg_no_to_process(bean, env, 
+                atol(argv[i]));
+    }
+    if(bean)
+        axutil_array_list_add(data_list, env, bean);
+    return 0;
+}
+
+static int 
+sandesha2_next_msg_retrieve_callback(
+    void *not_used, 
+    int argc, 
+    char **argv, 
+    char **col_name)
+{
+    int i = 0;
+    sandesha2_bean_mgr_args_t *args = (sandesha2_bean_mgr_args_t *) not_used;
+    const axutil_env_t *env = args->env;
+    sandesha2_next_msg_bean_t *bean = (sandesha2_next_msg_bean_t *) args->data;
+    if(argc < 1)
+    {
+        args->data = NULL;
+        return 0;
+    }
+    if(!bean && argc > 0)
+    {
+        bean = sandesha2_next_msg_bean_create(env);
+        args->data = bean;
+    }
+    for(i = 0; i < argc; i++)
+    {
+        if(0 == axis2_strcmp(col_name[i], "seq_id"))
+            sandesha2_next_msg_bean_set_seq_id(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "ref_msg_key"))
+            if(argv[i] && 0 != axis2_strcmp("(null)", argv[i]))
+            {
+                sandesha2_next_msg_bean_set_ref_msg_key(bean, env, argv[i]);
+            }
+        if(0 == axis2_strcmp(col_name[i], "polling_mode"))
+        {
+            sandesha2_next_msg_bean_set_polling_mode(bean, env, 
+                AXIS2_ATOI(argv[i]));
+        }
+        if(0 == axis2_strcmp(col_name[i], "msg_no"))
+            sandesha2_next_msg_bean_set_next_msg_no_to_process(bean, env, 
+                atol(argv[i]));
+    }
+    return 0;
+}
+
+static int 
+sandesha2_next_msg_count_callback(
+    void *not_used, 
+    int argc, 
+    char **argv, 
+    char **col_name)
+{
+    int *count = (int *) not_used;
+    *count = AXIS2_ATOI(argv[0]);
+    return 0;
+}
+
+void AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_free(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_insert(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env,
+    sandesha2_next_msg_bean_t *bean);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_remove(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *seq_id);
+
+sandesha2_next_msg_bean_t *AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_retrieve(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *seq_id);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_update(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env,
+    sandesha2_next_msg_bean_t *bean);
+
+axutil_array_list_t *AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_find(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env,
+    sandesha2_next_msg_bean_t *bean);
+
+sandesha2_next_msg_bean_t *AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_find_unique(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env,
+    sandesha2_next_msg_bean_t *bean);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_match(
+    sandesha2_permanent_bean_mgr_t *next_msg_mgr,
+    const axutil_env_t *env,
+    sandesha2_rm_bean_t *bean,
+    sandesha2_rm_bean_t *candidate);
+
+axutil_array_list_t *AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_retrieve_all(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env);
+
+static const sandesha2_next_msg_mgr_ops_t next_msg_mgr_ops = 
+{
+    sandesha2_permanent_next_msg_mgr_free,
+    sandesha2_permanent_next_msg_mgr_insert,
+    sandesha2_permanent_next_msg_mgr_remove,
+    sandesha2_permanent_next_msg_mgr_retrieve,
+    sandesha2_permanent_next_msg_mgr_update,
+    sandesha2_permanent_next_msg_mgr_find,
+    sandesha2_permanent_next_msg_mgr_find_unique,
+    sandesha2_permanent_next_msg_mgr_retrieve_all
+};
+
+AXIS2_EXTERN sandesha2_next_msg_mgr_t * AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_create(
+    const axutil_env_t *env,
+    sandesha2_storage_mgr_t *storage_mgr,
+    axis2_conf_ctx_t *ctx)
+{
+    sandesha2_permanent_next_msg_mgr_t *next_msg_mgr_impl = NULL;
+    AXIS2_ENV_CHECK(env, NULL);
+    next_msg_mgr_impl = AXIS2_MALLOC(env->allocator, 
+        sizeof(sandesha2_permanent_next_msg_mgr_t));
+
+    next_msg_mgr_impl->values = axutil_array_list_create(env, 0);
+    if(!next_msg_mgr_impl->values)
+    {
+        AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+        return NULL;
+    }
+    next_msg_mgr_impl->bean_mgr = sandesha2_permanent_bean_mgr_create(env,
+        storage_mgr, ctx, SANDESHA2_BEAN_MAP_NEXT_MESSAGE);
+    next_msg_mgr_impl->bean_mgr->ops.match = sandesha2_permanent_next_msg_mgr_match;
+    next_msg_mgr_impl->next_msg_mgr.ops = next_msg_mgr_ops;
+
+    return &(next_msg_mgr_impl->next_msg_mgr);
+}
+
+void AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_free(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env)
+{
+    sandesha2_permanent_next_msg_mgr_t *next_msg_mgr_impl = NULL;
+    next_msg_mgr_impl = SANDESHA2_INTF_TO_IMPL(next_msg_mgr);
+
+    if(next_msg_mgr_impl->bean_mgr)
+    {
+        sandesha2_permanent_bean_mgr_free(next_msg_mgr_impl->bean_mgr, env);
+        next_msg_mgr_impl->bean_mgr = NULL;
+    }
+    if(next_msg_mgr_impl->values)
+    {
+        axutil_array_list_free(next_msg_mgr_impl->values, env);
+        next_msg_mgr_impl->values = NULL;
+    }
+    if(next_msg_mgr_impl)
+    {
+        AXIS2_FREE(env->allocator, next_msg_mgr_impl);
+        next_msg_mgr_impl = NULL;
+    }
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_insert(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env,
+    sandesha2_next_msg_bean_t *bean)
+{
+    axis2_char_t sql_insert[1024];
+    axis2_char_t sql_retrieve[256];
+    axis2_char_t sql_update[1024];
+	axis2_char_t *seq_id = NULL;
+	axis2_char_t *ref_msg_key = NULL;
+	axis2_bool_t polling_mode;
+	long msg_no;
+	sandesha2_permanent_next_msg_mgr_t *next_msg_mgr_impl = NULL;
+
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_next_msg_mgr_insert");
+	seq_id = sandesha2_next_msg_bean_get_seq_id((sandesha2_rm_bean_t *) bean, 
+        env);
+	ref_msg_key = sandesha2_next_msg_bean_get_ref_msg_key(bean, env);
+	polling_mode = sandesha2_next_msg_bean_is_polling_mode(bean, env);
+    msg_no = sandesha2_next_msg_bean_get_next_msg_no_to_process(bean, env);
+
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+    next_msg_mgr_impl = SANDESHA2_INTF_TO_IMPL(next_msg_mgr);
+
+    sprintf(sql_retrieve, "select seq_id, ref_msg_key, polling_mode, msg_no"\
+        " from next_msg where seq_id='%s';", seq_id);
+    sprintf(sql_update, "update next_msg set ref_msg_key='%s', polling_mode=%d"\
+        ",msg_no=%ld where seq_id='%s';", ref_msg_key, polling_mode, msg_no, 
+        seq_id);
+    sprintf(sql_insert, "insert into next_msg(seq_id, ref_msg_key,"\
+        "polling_mode, msg_no) values('%s', '%s', %d, %ld);", seq_id, 
+        ref_msg_key, polling_mode, msg_no);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_next_msg_mgr_insert");
+    return sandesha2_permanent_bean_mgr_insert(next_msg_mgr_impl->bean_mgr, env,
+        (sandesha2_rm_bean_t *) bean, sandesha2_next_msg_retrieve_callback, 
+        sql_retrieve, sql_update, sql_insert);
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_remove(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *seq_id)
+{
+    axis2_char_t sql_remove[256];
+    axis2_char_t sql_retrieve[256];
+    sandesha2_permanent_next_msg_mgr_t *next_msg_mgr_impl = NULL;
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_next_msg_mgr_remove");
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, seq_id, AXIS2_FALSE);
+    next_msg_mgr_impl = SANDESHA2_INTF_TO_IMPL(next_msg_mgr);
+    sprintf(sql_remove, "delete from next_msg where seq_id='%s'",
+        seq_id);
+    sprintf(sql_retrieve, "select seq_id, ref_msg_key, polling_mode, msg_no"\
+        " from next_msg where seq_id='%s';", seq_id);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_next_msg_mgr_remove");
+    return sandesha2_permanent_bean_mgr_remove(next_msg_mgr_impl->bean_mgr, env, 
+        sandesha2_next_msg_retrieve_callback, sql_retrieve, sql_remove);
+}
+
+sandesha2_next_msg_bean_t *AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_retrieve(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *seq_id)
+{
+    axis2_char_t sql_retrieve[256];
+    sandesha2_next_msg_bean_t *bean = NULL;
+    sandesha2_permanent_next_msg_mgr_t *next_msg_mgr_impl = NULL;
+
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, seq_id, AXIS2_FALSE);
+    next_msg_mgr_impl = SANDESHA2_INTF_TO_IMPL(next_msg_mgr);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_next_msg_mgr_retrieve");
+    sprintf(sql_retrieve, "select seq_id, ref_msg_key, polling_mode, msg_no"\
+        " from next_msg where seq_id='%s';", seq_id);
+    bean = (sandesha2_next_msg_bean_t *) sandesha2_permanent_bean_mgr_retrieve(
+        next_msg_mgr_impl->bean_mgr, env, sandesha2_next_msg_retrieve_callback, 
+        sql_retrieve);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_next_msg_mgr_retrieve");
+    return bean;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_update(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env,
+    sandesha2_next_msg_bean_t *bean)
+{
+    axis2_char_t sql_retrieve[256];
+    axis2_char_t sql_update[1024];
+    axis2_bool_t ret = AXIS2_FALSE;
+    sandesha2_permanent_next_msg_mgr_t *next_msg_mgr_impl = NULL;
+
+    axis2_char_t *seq_id = sandesha2_next_msg_bean_get_seq_id((sandesha2_rm_bean_t *) bean, 
+        env);
+    axis2_char_t *ref_msg_key = sandesha2_next_msg_bean_get_ref_msg_key(bean, env);
+    axis2_bool_t polling_mode = sandesha2_next_msg_bean_is_polling_mode(bean, env);
+    long msg_no = sandesha2_next_msg_bean_get_next_msg_no_to_process(bean, env);
+
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+    next_msg_mgr_impl = SANDESHA2_INTF_TO_IMPL(next_msg_mgr);
+
+    sprintf(sql_retrieve, "select seq_id, ref_msg_key, polling_mode, msg_no"\
+        " from next_msg where seq_id='%s';", seq_id);
+    sprintf(sql_update, "update next_msg set ref_msg_key='%s', polling_mode=%d"\
+        ",msg_no=%ld where seq_id='%s';", ref_msg_key, polling_mode, msg_no, 
+        seq_id);
+    ret = sandesha2_permanent_bean_mgr_update(next_msg_mgr_impl->bean_mgr, env, 
+        (sandesha2_rm_bean_t *) bean, sandesha2_next_msg_retrieve_callback, 
+        sql_retrieve, sql_update);
+    return ret;
+}
+
+axutil_array_list_t *AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_find(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env,
+    sandesha2_next_msg_bean_t *bean)
+{
+    axis2_char_t *sql_find = NULL;
+    axis2_char_t *sql_count = NULL;
+    axutil_array_list_t *ret = NULL;
+    sandesha2_permanent_next_msg_mgr_t *next_msg_mgr_impl = NULL;
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    next_msg_mgr_impl = SANDESHA2_INTF_TO_IMPL(next_msg_mgr);
+    sql_find = "select seq_id,ref_msg_key, polling_mode,msg_no from next_msg";
+    sql_count = "select count(*) as no_recs from next_msg";
+    ret = sandesha2_permanent_bean_mgr_find(next_msg_mgr_impl->bean_mgr, env, 
+        (sandesha2_rm_bean_t *) bean, sandesha2_next_msg_find_callback,
+        sandesha2_next_msg_count_callback, sql_find, sql_count);
+    return ret;
+}
+
+sandesha2_next_msg_bean_t *AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_find_unique(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env,
+    sandesha2_next_msg_bean_t *bean)
+{
+    axis2_char_t *sql_find = NULL;
+    axis2_char_t *sql_count = NULL;
+    sandesha2_next_msg_bean_t *ret = NULL;
+    sandesha2_permanent_next_msg_mgr_t *next_msg_mgr_impl = NULL;
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+    next_msg_mgr_impl = SANDESHA2_INTF_TO_IMPL(next_msg_mgr);
+    sql_find = "select seq_id,ref_msg_key,polling_mode,msg_no from next_msg";
+    sql_count = "select count(*) as no_recs from next_msg";
+    ret = (sandesha2_next_msg_bean_t *) sandesha2_permanent_bean_mgr_find_unique(
+        next_msg_mgr_impl->bean_mgr, env, (sandesha2_rm_bean_t *) bean, 
+        sandesha2_next_msg_find_callback, sandesha2_next_msg_count_callback, 
+        sql_find, sql_count);
+    return ret;
+}
+
+axutil_array_list_t *AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_retrieve_all(
+    sandesha2_next_msg_mgr_t *next_msg_mgr,
+    const axutil_env_t *env)
+{
+    axis2_char_t *sql_find = NULL;
+    sandesha2_permanent_next_msg_mgr_t *next_msg_mgr_impl = NULL;
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    next_msg_mgr_impl = SANDESHA2_INTF_TO_IMPL(next_msg_mgr);
+    sql_find = "select seq_id,ref_msg_key,polling_mode,msg_no from next_msg";
+    return (axutil_array_list_t *) sandesha2_next_msg_mgr_find(
+        next_msg_mgr, env, NULL);
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_next_msg_mgr_match(
+    sandesha2_permanent_bean_mgr_t *next_msg_mgr,
+    const axutil_env_t *env,
+    sandesha2_rm_bean_t *bean,
+    sandesha2_rm_bean_t *candidate)
+{
+    axis2_bool_t equal = AXIS2_TRUE;
+    long next_msg_no = 0;
+    long temp_next_msg_no = 0;
+    axis2_char_t *seq_id = NULL;
+    axis2_char_t *temp_seq_id = NULL;
+    sandesha2_permanent_next_msg_mgr_t *next_msg_mgr_impl = NULL;
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_next_msg_mgr_match");
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    next_msg_mgr_impl = SANDESHA2_INTF_TO_IMPL(next_msg_mgr);
+    next_msg_no = sandesha2_next_msg_bean_get_next_msg_no_to_process(
+        (sandesha2_next_msg_bean_t *) bean, env);
+    temp_next_msg_no = sandesha2_next_msg_bean_get_next_msg_no_to_process(
+        (sandesha2_next_msg_bean_t *) candidate, env);
+    if(next_msg_no > 0 && (next_msg_no != temp_next_msg_no))
+    {
+        equal = AXIS2_FALSE;
+    }
+    seq_id = sandesha2_next_msg_bean_get_seq_id(bean, env);
+    temp_seq_id = sandesha2_next_msg_bean_get_seq_id(candidate, env);
+    if(seq_id && temp_seq_id && 0 != axis2_strcmp(seq_id, temp_seq_id))
+    {
+        equal = AXIS2_FALSE;
+    }
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_next_msg_mgr_match:equal:%d", 
+            equal);
+    return equal;
+}
+

Added: webservices/sandesha/trunk/c/src/storage/sqlite/permanent_sender_mgr.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/storage/sqlite/permanent_sender_mgr.c?view=auto&rev=532207
==============================================================================
--- webservices/sandesha/trunk/c/src/storage/sqlite/permanent_sender_mgr.c (added)
+++ webservices/sandesha/trunk/c/src/storage/sqlite/permanent_sender_mgr.c Tue Apr 24 23:01:28 2007
@@ -0,0 +1,692 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+#include <sandesha2_permanent_sender_mgr.h>
+#include "sandesha2_permanent_bean_mgr.h"
+#include <sandesha2_sender_mgr.h>
+#include <sandesha2_constants.h>
+#include <sandesha2_error.h>
+#include <sandesha2_utils.h>
+#include <sandesha2_sender_bean.h>
+#include <sandesha2_storage_mgr.h>
+#include <axutil_log.h>
+#include <axutil_hash.h>
+#include <axutil_thread.h>
+#include <axutil_property.h>
+#include <axutil_types.h>
+
+/** 
+ * @brief Sandesha2 Permanent Sender Manager Struct Impl
+ *   Sandesha2 Permanent Sender Manager 
+ */ 
+typedef struct sandesha2_permanent_sender_mgr
+{
+    sandesha2_sender_mgr_t sender_mgr;
+    sandesha2_permanent_bean_mgr_t *bean_mgr;
+} sandesha2_permanent_sender_mgr_t;
+
+#define SANDESHA2_INTF_TO_IMPL(sender_mgr) \
+    ((sandesha2_permanent_sender_mgr_t *) sender_mgr)
+
+static int 
+sandesha2_sender_find_callback(
+    void *not_used, 
+    int argc, 
+    char **argv, 
+    char **col_name)
+{
+    int i = 0;
+    sandesha2_sender_bean_t *bean = NULL;
+    sandesha2_bean_mgr_args_t *args = (sandesha2_bean_mgr_args_t *) not_used;
+    const axutil_env_t *env = args->env;
+    axutil_array_list_t *data_list = (axutil_array_list_t *) args->data;
+    if(argc < 1)
+    {
+        args->data = NULL;
+        return 0;
+    }
+    if(!data_list)
+    {
+        data_list = axutil_array_list_create(env, 0);
+        args->data = data_list;
+    }
+    bean = sandesha2_sender_bean_create(env);
+    for(i = 0; i < argc; i++)
+    {
+        if(0 == axis2_strcmp(col_name[i], "msg_id"))
+            sandesha2_sender_bean_set_msg_id(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "msg_ctx_ref_key"))
+            if(argv[i])
+                sandesha2_sender_bean_set_msg_ctx_ref_key(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "internal_seq_ID"))
+            if(argv[i])
+                sandesha2_sender_bean_set_internal_seq_id(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "sent_count"))
+            sandesha2_sender_bean_set_sent_count(bean, env, AXIS2_ATOI(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "msg_no"))
+            sandesha2_sender_bean_set_msg_no(bean, env, atol(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "send"))
+            sandesha2_sender_bean_set_send(bean, env, AXIS2_ATOI(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "resend"))
+            sandesha2_sender_bean_set_resend(bean, env, AXIS2_ATOI(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "time_to_send"))
+            sandesha2_sender_bean_set_time_to_send(bean, env, atol(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "msg_type"))
+            sandesha2_sender_bean_set_msg_type(bean, env, AXIS2_ATOI(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "seq_id"))
+            if(argv[i])
+                sandesha2_sender_bean_set_seq_id(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "wsrm_anon_uri"))
+            if(argv[i])
+                sandesha2_sender_bean_set_wsrm_anon_uri(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "to_address"))
+            if(argv[i])
+                sandesha2_sender_bean_set_to_address(bean, env, argv[i]);
+    }
+    axutil_array_list_add(data_list, env, bean);
+    return 0;
+}
+
+static int 
+sandesha2_sender_retrieve_callback(
+    void *not_used, 
+    int argc, 
+    char **argv, 
+    char **col_name)
+{
+    int i = 0;
+    sandesha2_bean_mgr_args_t *args = (sandesha2_bean_mgr_args_t *) not_used;
+    const axutil_env_t *env = args->env;
+    sandesha2_sender_bean_t *bean = (sandesha2_sender_bean_t *) args->data;
+    if(argc < 1)
+    {
+        args->data = NULL;
+        return 0;
+    }
+    if(!bean)
+    {
+        bean = sandesha2_sender_bean_create(env);
+        args->data = bean;
+    }
+    for(i = 0; i < argc; i++)
+    {
+        if(0 == axis2_strcmp(col_name[i], "msg_id"))
+            sandesha2_sender_bean_set_msg_id(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "msg_ctx_ref_key"))
+            if(argv[i])
+                sandesha2_sender_bean_set_msg_ctx_ref_key(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "internal_seq_ID"))
+            if(argv[i])
+                sandesha2_sender_bean_set_internal_seq_id(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "sent_count"))
+            sandesha2_sender_bean_set_sent_count(bean, env, AXIS2_ATOI(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "msg_no"))
+            sandesha2_sender_bean_set_msg_no(bean, env, atol(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "send"))
+            sandesha2_sender_bean_set_send(bean, env, AXIS2_ATOI(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "resend"))
+            sandesha2_sender_bean_set_resend(bean, env, AXIS2_ATOI(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "time_to_send"))
+            sandesha2_sender_bean_set_time_to_send(bean, env, atol(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "msg_type"))
+            sandesha2_sender_bean_set_msg_type(bean, env, AXIS2_ATOI(argv[i]));
+        if(0 == axis2_strcmp(col_name[i], "seq_id"))
+            if(argv[i])
+                sandesha2_sender_bean_set_seq_id(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "wsrm_anon_uri"))
+            if(argv[i])
+                sandesha2_sender_bean_set_wsrm_anon_uri(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "to_address"))
+            if(argv[i])
+                sandesha2_sender_bean_set_to_address(bean, env, argv[i]);
+    }
+    return 0;
+}
+
+static int 
+sandesha2_sender_count_callback(
+    void *not_used, 
+    int argc, 
+    char **argv, 
+    char **col_name)
+{
+    int *count = (int *) not_used;
+    *count = AXIS2_ATOI(argv[0]);
+    return 0;
+}
+
+
+void AXIS2_CALL
+sandesha2_permanent_sender_mgr_free(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_sender_mgr_insert(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    sandesha2_sender_bean_t *bean);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_sender_mgr_remove(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *msg_id);
+
+sandesha2_sender_bean_t *AXIS2_CALL
+sandesha2_permanent_sender_mgr_retrieve(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *msg_id);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_sender_mgr_update(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    sandesha2_sender_bean_t *bean);
+
+axutil_array_list_t *AXIS2_CALL
+sandesha2_permanent_sender_mgr_find_by_internal_seq_id(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *internal_seq_id);
+
+axutil_array_list_t *AXIS2_CALL
+sandesha2_permanent_sender_mgr_find_by_sender_bean(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    sandesha2_sender_bean_t *bean);
+
+sandesha2_sender_bean_t *AXIS2_CALL
+sandesha2_permanent_sender_mgr_find_unique(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    sandesha2_sender_bean_t *bean);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_sender_mgr_match(
+    sandesha2_permanent_bean_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    sandesha2_rm_bean_t *bean,
+    sandesha2_rm_bean_t *candidate);
+
+sandesha2_sender_bean_t *AXIS2_CALL
+sandesha2_permanent_sender_mgr_get_next_msg_to_send(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    const axis2_char_t *seq_id);
+
+static const sandesha2_sender_mgr_ops_t sender_mgr_ops = 
+{
+    sandesha2_permanent_sender_mgr_free,
+    sandesha2_permanent_sender_mgr_insert,
+    sandesha2_permanent_sender_mgr_remove,
+    sandesha2_permanent_sender_mgr_retrieve,
+    sandesha2_permanent_sender_mgr_update,
+    sandesha2_permanent_sender_mgr_find_by_internal_seq_id,
+    sandesha2_permanent_sender_mgr_find_by_sender_bean,
+    sandesha2_permanent_sender_mgr_find_unique,
+    sandesha2_permanent_sender_mgr_get_next_msg_to_send,
+};
+
+AXIS2_EXTERN sandesha2_sender_mgr_t * AXIS2_CALL
+sandesha2_permanent_sender_mgr_create(
+    const axutil_env_t *env,
+    sandesha2_storage_mgr_t *storage_mgr,
+    axis2_conf_ctx_t *ctx)
+{
+    sandesha2_permanent_sender_mgr_t *sender_mgr_impl = NULL;
+    
+    AXIS2_ENV_CHECK(env, NULL);
+    sender_mgr_impl = AXIS2_MALLOC(env->allocator, 
+        sizeof(sandesha2_permanent_sender_mgr_t));
+
+    sender_mgr_impl->bean_mgr = sandesha2_permanent_bean_mgr_create(env,
+        storage_mgr, ctx, SANDESHA2_BEAN_MAP_RETRANSMITTER);
+    sender_mgr_impl->bean_mgr->ops.match = sandesha2_permanent_sender_mgr_match;
+    sender_mgr_impl->sender_mgr.ops = sender_mgr_ops;
+    return &(sender_mgr_impl->sender_mgr);
+}
+
+void AXIS2_CALL
+sandesha2_permanent_sender_mgr_free(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env)
+{
+    sandesha2_permanent_sender_mgr_t *sender_mgr_impl = NULL;
+    sender_mgr_impl = SANDESHA2_INTF_TO_IMPL(sender_mgr);
+
+    if(sender_mgr_impl->bean_mgr)
+    {
+        sandesha2_permanent_bean_mgr_free(sender_mgr_impl->bean_mgr, env);
+        sender_mgr_impl->bean_mgr = NULL;
+    }
+    if(sender_mgr_impl)
+    {
+        AXIS2_FREE(env->allocator, sender_mgr_impl);
+        sender_mgr_impl = NULL;
+    }
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_sender_mgr_insert(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    sandesha2_sender_bean_t *bean)
+{
+    axis2_char_t sql_insert[1024];
+    axis2_char_t sql_retrieve[256];
+    axis2_char_t sql_update[1024];
+    axis2_bool_t ret = AXIS2_FALSE;
+    sandesha2_permanent_sender_mgr_t *sender_mgr_impl = NULL;
+
+    axis2_char_t *msg_id = sandesha2_sender_bean_get_msg_id((sandesha2_rm_bean_t *) bean, 
+        env);
+    axis2_char_t *msg_ctx_ref_key = sandesha2_sender_bean_get_msg_ctx_ref_key(bean, env);
+    axis2_char_t *internal_seq_id = sandesha2_sender_bean_get_internal_seq_id(bean, env);
+    int sent_count = sandesha2_sender_bean_get_sent_count(bean, env);
+    long msg_no = sandesha2_sender_bean_get_msg_no(bean, env);
+    axis2_bool_t send = sandesha2_sender_bean_is_send(bean, env);
+    axis2_bool_t resend = sandesha2_sender_bean_is_resend(bean, env);
+    long time_to_send = sandesha2_sender_bean_get_time_to_send(bean, env);
+    int msg_type = sandesha2_sender_bean_get_msg_type(bean, env);
+    axis2_char_t *seq_id = sandesha2_sender_bean_get_seq_id(bean, env);
+    axis2_char_t *wsrm_anon_uri = sandesha2_sender_bean_get_wsrm_anon_uri(bean, env);
+    axis2_char_t *to_address = sandesha2_sender_bean_get_to_address(bean, env);
+
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_sender_mgr_insert");
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+    sender_mgr_impl = SANDESHA2_INTF_TO_IMPL(sender_mgr);
+
+    sprintf(sql_retrieve, "select msg_id, msg_ctx_ref_key, "\
+        "internal_seq_id, sent_count, msg_no, send, resend, time_to_send, "\
+        "msg_type, seq_id, wsrm_anon_uri, to_address from sender "\
+        "where msg_id='%s'", msg_id);
+
+    sprintf(sql_update, "update sender set msg_ctx_ref_key='%s'"\
+        ", internal_seq_id='%s', sent_count=%d, msg_no=%ld, send=%d"\
+        ", resend=%d, time_to_send=%ld, msg_type=%d, seq_id='%s'"\
+        ", wsrm_anon_uri='%s', to_address='%s' where msg_id='%s';",
+        msg_ctx_ref_key, internal_seq_id, sent_count, msg_no, send, resend,
+        time_to_send, msg_type, seq_id, wsrm_anon_uri, to_address, msg_id);
+
+    sprintf(sql_insert, "insert into sender(msg_id, msg_ctx_ref_key,"\
+        "internal_seq_id, sent_count, msg_no, send, resend, time_to_send,"\
+        "msg_type, seq_id, wsrm_anon_uri, to_address) values('%s', '%s', '%s',"\
+        "%d, %ld, %d, %d, %ld, %d, '%s', '%s', '%s');", msg_id, msg_ctx_ref_key, 
+        internal_seq_id, sent_count, msg_no, send, resend, time_to_send, 
+        msg_type, seq_id, wsrm_anon_uri, to_address);
+
+    ret = sandesha2_permanent_bean_mgr_insert(sender_mgr_impl->bean_mgr, env,
+        (sandesha2_rm_bean_t *) bean, sandesha2_sender_retrieve_callback, 
+        sql_retrieve, sql_update, sql_insert);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_sender_mgr_insert:return:%d", ret);
+    return ret;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_sender_mgr_remove(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *msg_id)
+{
+    axis2_char_t sql_retrieve[256];
+    axis2_char_t sql_remove[256];
+    sandesha2_permanent_sender_mgr_t *sender_mgr_impl = NULL;
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_sender_mgr_remove");
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, msg_id, AXIS2_FALSE);
+    sender_mgr_impl = SANDESHA2_INTF_TO_IMPL(sender_mgr);
+    sprintf(sql_remove, "delete from sender where msg_id='%s'", msg_id);
+    sprintf(sql_retrieve, "select msg_id, msg_ctx_ref_key, "\
+        "internal_seq_id, sent_count, msg_no, send, resend, time_to_send, "\
+        "msg_type, seq_id, wsrm_anon_uri, to_address from sender "\
+        "where msg_id='%s'", msg_id);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_sender_mgr_remove");
+    return sandesha2_permanent_bean_mgr_remove(sender_mgr_impl->bean_mgr, env,
+        sandesha2_sender_retrieve_callback, sql_retrieve, sql_remove);
+}
+
+sandesha2_sender_bean_t *AXIS2_CALL
+sandesha2_permanent_sender_mgr_retrieve(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *msg_id)
+{
+    axis2_char_t sql_retrieve[256];
+    sandesha2_sender_bean_t *ret = NULL;
+    sandesha2_permanent_sender_mgr_t *sender_mgr_impl = NULL;
+
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_sender_mgr_retrieve");
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, msg_id, AXIS2_FALSE);
+    sender_mgr_impl = SANDESHA2_INTF_TO_IMPL(sender_mgr);
+
+    sprintf(sql_retrieve, "select msg_id, msg_ctx_ref_key, "\
+        "internal_seq_id, sent_count, msg_no, send, resend, time_to_send, "\
+        "msg_type, seq_id, wsrm_anon_uri, to_address from sender "\
+        "where msg_id='%s'", msg_id);
+    ret = (sandesha2_sender_bean_t *) sandesha2_permanent_bean_mgr_retrieve(
+        sender_mgr_impl->bean_mgr, env, sandesha2_sender_retrieve_callback, 
+        sql_retrieve);
+
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_sender_mgr_retrieve");
+    return ret;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_sender_mgr_update(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    sandesha2_sender_bean_t *bean)
+{
+    axis2_char_t sql_retrieve[256];
+    axis2_char_t sql_update[1024];
+    axis2_bool_t ret = AXIS2_FALSE;
+    sandesha2_permanent_sender_mgr_t *sender_mgr_impl = NULL;
+
+    axis2_char_t *msg_id = sandesha2_sender_bean_get_msg_id((sandesha2_rm_bean_t *) bean, 
+        env);
+    axis2_char_t *msg_ctx_ref_key = sandesha2_sender_bean_get_msg_ctx_ref_key(bean, env);
+    axis2_char_t *internal_seq_id = sandesha2_sender_bean_get_internal_seq_id(bean, env);
+    int sent_count = sandesha2_sender_bean_get_sent_count(bean, env);
+    long msg_no = sandesha2_sender_bean_get_msg_no(bean, env);
+    axis2_bool_t send = sandesha2_sender_bean_is_send(bean, env);
+    axis2_bool_t resend = sandesha2_sender_bean_is_resend(bean, env);
+    long time_to_send = sandesha2_sender_bean_get_time_to_send(bean, env);
+    int msg_type = sandesha2_sender_bean_get_msg_type(bean, env);
+    axis2_char_t *seq_id = sandesha2_sender_bean_get_seq_id(bean, env);
+    axis2_char_t *wsrm_anon_uri = sandesha2_sender_bean_get_wsrm_anon_uri(bean, env);
+    axis2_char_t *to_address = sandesha2_sender_bean_get_to_address(bean, env);
+
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_sender_mgr_update");
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+    sender_mgr_impl = SANDESHA2_INTF_TO_IMPL(sender_mgr);
+
+    sprintf(sql_retrieve, "select msg_id, msg_ctx_ref_key, "\
+        "internal_seq_id, sent_count, msg_no, send, resend, time_to_send, "\
+        "msg_type, seq_id, wsrm_anon_uri, to_address from sender "\
+        "where msg_id='%s'", msg_id);
+
+    sprintf(sql_update, "update sender set msg_ctx_ref_key='%s'"\
+        ", internal_seq_id='%s', sent_count=%d, msg_no=%ld, send=%d"\
+        ", resend=%d, time_to_send=%ld, msg_type=%d, seq_id='%s'"\
+        ", wsrm_anon_uri='%s', to_address='%s' where msg_id='%s';",
+        msg_ctx_ref_key, internal_seq_id, sent_count, msg_no, send, resend,
+        time_to_send, msg_type, seq_id, wsrm_anon_uri, to_address, msg_id);
+
+    ret = sandesha2_permanent_bean_mgr_update(sender_mgr_impl->bean_mgr, env, 
+        (sandesha2_rm_bean_t *) bean, sandesha2_sender_retrieve_callback, sql_retrieve, sql_update);
+
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_invoker_mgr_update:return:%d", ret);
+    return ret;
+
+    return AXIS2_SUCCESS;
+}
+
+axutil_array_list_t *AXIS2_CALL
+sandesha2_permanent_sender_mgr_find_by_internal_seq_id(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *internal_seq_id)
+{
+    axis2_char_t *sql_find = NULL;
+    axis2_char_t *sql_count = NULL;
+    sandesha2_sender_bean_t *bean = NULL;
+    axutil_array_list_t *ret = NULL;
+    sandesha2_permanent_sender_mgr_t *sender_mgr_impl = NULL;
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_sender_mgr_find_by_internal_seq_id");
+    AXIS2_ENV_CHECK(env, NULL);
+    sender_mgr_impl = SANDESHA2_INTF_TO_IMPL(sender_mgr);
+    
+    bean = sandesha2_sender_bean_create(env);
+    sandesha2_sender_bean_set_internal_seq_id(bean, env, 
+        internal_seq_id);
+    sql_find = "select msg_id, msg_ctx_ref_key, internal_seq_id, "\
+        "sent_count, msg_no, send, resend, time_to_send, msg_type, seq_id, "\
+        "wsrm_anon_uri, to_address from sender;";
+    sql_count = "select count(*) as no_recs from sender;";
+    ret = sandesha2_permanent_bean_mgr_find(sender_mgr_impl->bean_mgr, env, 
+        (sandesha2_rm_bean_t *) bean, sandesha2_sender_find_callback,
+        sandesha2_sender_count_callback, sql_find, sql_count);
+    if(bean)
+        sandesha2_sender_bean_free((sandesha2_rm_bean_t *) bean, env);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_sender_mgr_find_by_internal_seq_id");
+    return ret;
+}
+
+axutil_array_list_t *AXIS2_CALL
+sandesha2_permanent_sender_mgr_find_by_sender_bean(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    sandesha2_sender_bean_t *bean)
+{
+    axis2_char_t *sql_find = NULL;
+    axis2_char_t *sql_count = NULL;
+    sandesha2_permanent_sender_mgr_t *sender_mgr_impl = NULL;
+    axutil_array_list_t *ret = NULL;
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_sender_mgr_find_by_sender_bean");
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    sender_mgr_impl = SANDESHA2_INTF_TO_IMPL(sender_mgr);
+    sql_find = "select msg_id, msg_ctx_ref_key, internal_seq_id,"\
+        "sent_count, msg_no, send, resend, time_to_send, msg_type, seq_id, "\
+        "wsrm_anon_uri, to_address from sender;";
+    sql_count = "select count(*) as no_recs from sender;";
+    ret = sandesha2_permanent_bean_mgr_find(sender_mgr_impl->bean_mgr, env, 
+        (sandesha2_rm_bean_t *) bean, sandesha2_sender_find_callback,
+        sandesha2_sender_count_callback, sql_find, sql_count);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_sender_mgr_find_by_sender_bean");
+    return ret;
+}
+
+sandesha2_sender_bean_t *AXIS2_CALL
+sandesha2_permanent_sender_mgr_find_unique(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    sandesha2_sender_bean_t *bean)
+{
+    axis2_char_t *sql_find = NULL;
+    axis2_char_t *sql_count = NULL;
+    sandesha2_permanent_sender_mgr_t *sender_mgr_impl = NULL;
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+    sender_mgr_impl = SANDESHA2_INTF_TO_IMPL(sender_mgr);
+    sql_find = "select msg_ctx_ref_key, internal_seq_id, "\
+        "sent_count, msg_no, send, resend, time_to_send, msg_type, seq_id, "\
+        "wsrm_anon_uri, to_address from sender;";
+    sql_count = "select count(*) as no_recs from sender;";
+    return (sandesha2_sender_bean_t *) sandesha2_permanent_bean_mgr_find(
+        sender_mgr_impl->bean_mgr, env, (sandesha2_rm_bean_t *) bean, 
+        sandesha2_sender_find_callback, sandesha2_sender_count_callback, 
+        sql_find, sql_count);
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_sender_mgr_match(
+    sandesha2_permanent_bean_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    sandesha2_rm_bean_t *bean,
+    sandesha2_rm_bean_t *candidate)
+{
+    axis2_bool_t add = AXIS2_TRUE;
+    axis2_char_t *ref_key = NULL;
+    axis2_char_t *temp_ref_key = NULL;
+    long time_to_send = 0;
+    long temp_time_to_send = 0;
+    axis2_char_t *msg_id = NULL;
+    axis2_char_t *temp_msg_id = NULL;
+    axis2_char_t *internal_seq_id = NULL;
+    axis2_char_t *temp_internal_seq_id = NULL;
+    long msg_no = 0;
+    long temp_msg_no = 0;
+    int msg_type = 0;
+    int temp_msg_type = 0;
+    axis2_bool_t is_send = AXIS2_FALSE;
+    axis2_bool_t temp_is_send = AXIS2_FALSE;
+    
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_sender_mgr_match");
+    ref_key = sandesha2_sender_bean_get_msg_ctx_ref_key(
+        (sandesha2_sender_bean_t *) bean, env);
+    temp_ref_key = sandesha2_sender_bean_get_msg_ctx_ref_key(
+        (sandesha2_sender_bean_t *) candidate, env);
+    if(ref_key && temp_ref_key && 0 != axis2_strcmp(ref_key, temp_ref_key))
+    {
+        add = AXIS2_FALSE;
+    }
+    time_to_send = sandesha2_sender_bean_get_time_to_send(
+        (sandesha2_sender_bean_t *) bean, env);
+    temp_time_to_send = sandesha2_sender_bean_get_time_to_send(
+        (sandesha2_sender_bean_t *) candidate, env);
+    /*if(time_to_send > 0 && (time_to_send != temp_time_to_send))*/
+    if(time_to_send > 0 && (time_to_send < temp_time_to_send))
+    {
+        add = AXIS2_FALSE;
+    }
+    msg_id = sandesha2_sender_bean_get_msg_id(bean, env);
+    temp_msg_id = sandesha2_sender_bean_get_msg_id(candidate, env);
+    if(msg_id && temp_msg_id && 0 != axis2_strcmp(msg_id, temp_msg_id))
+    {
+        add = AXIS2_FALSE;
+    }
+    internal_seq_id = sandesha2_sender_bean_get_internal_seq_id(
+        (sandesha2_sender_bean_t *) bean, env);
+    temp_internal_seq_id = sandesha2_sender_bean_get_internal_seq_id(
+        (sandesha2_sender_bean_t *) candidate, 
+            env);
+    if(internal_seq_id && temp_internal_seq_id && 0 != axis2_strcmp(
+                internal_seq_id, temp_internal_seq_id))
+    {
+        add = AXIS2_FALSE;
+    }
+    msg_no = sandesha2_sender_bean_get_msg_no(
+        (sandesha2_sender_bean_t *) bean, env);
+    temp_msg_no = sandesha2_sender_bean_get_msg_no(
+        (sandesha2_sender_bean_t *) candidate, env);
+    if(msg_no > 0 && (msg_no != temp_msg_no))
+    {
+        add = AXIS2_FALSE;
+    }
+    msg_type = sandesha2_sender_bean_get_msg_type(
+        (sandesha2_sender_bean_t *) bean, env);
+    temp_msg_type = sandesha2_sender_bean_get_msg_type(
+        (sandesha2_sender_bean_t *) candidate, env);
+    if(msg_type != SANDESHA2_MSG_TYPE_UNKNOWN  && (msg_type != temp_msg_type))
+    {
+        add = AXIS2_FALSE;
+    }
+    is_send = sandesha2_sender_bean_is_send(
+        (sandesha2_sender_bean_t *) bean, env);
+    temp_is_send = sandesha2_sender_bean_is_send(
+        (sandesha2_sender_bean_t *) candidate, env);
+    if(is_send != temp_is_send)
+    {
+        add = AXIS2_FALSE;
+    }
+    /* Do not use the is_resend flag to match messages, as it can stop us from
+     * detecting RM messages during 'get_next_msg_to_send'*/
+    /*is_resend = sandesha2_sender_bean_is_resend(
+        (sandesha2_sender_bean_t *) bean, env);
+    temp_is_resend = sandesha2_sender_bean_is_resend(
+        (sandesha2_sender_bean_t *) candidate, env);
+    if(is_resend != temp_is_resend)
+    {
+        add = AXIS2_FALSE;
+    }*/
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_sender_mgr_match:add:%d", 
+            add);
+    return add;
+}
+
+sandesha2_sender_bean_t *AXIS2_CALL
+sandesha2_permanent_sender_mgr_get_next_msg_to_send(
+    sandesha2_sender_mgr_t *sender_mgr,
+    const axutil_env_t *env,
+    const axis2_char_t *seq_id)
+{
+    axis2_char_t *sql_find = NULL;
+    axis2_char_t *sql_count = NULL;
+    sandesha2_sender_bean_t *matcher = sandesha2_sender_bean_create(env);
+    long time_now = 0;
+    int i = 0, size = 0;
+    axutil_array_list_t *match_list = NULL;
+    sandesha2_permanent_sender_mgr_t *sender_mgr_impl = NULL;
+    sandesha2_sender_bean_t *result = NULL;
+    AXIS2_ENV_CHECK(env, NULL);
+    sender_mgr_impl = SANDESHA2_INTF_TO_IMPL(sender_mgr);
+
+    sandesha2_sender_bean_set_send(matcher, env, AXIS2_TRUE);
+    time_now = sandesha2_utils_get_current_time_in_millis(env);
+    sandesha2_sender_bean_set_time_to_send(matcher, env, time_now);
+    sandesha2_sender_bean_set_internal_seq_id(matcher, env, 
+        (axis2_char_t *) seq_id);
+    sql_find = "select msg_id, msg_ctx_ref_key, "\
+        "internal_seq_id, sent_count, msg_no, send, resend, "\
+        "time_to_send, msg_type, seq_id, wsrm_anon_uri, "\
+        "to_address from sender;";
+    sql_count = "select count(*) as no_recs from sender;";
+    match_list = sandesha2_permanent_bean_mgr_find(sender_mgr_impl->bean_mgr, env, 
+        (sandesha2_rm_bean_t *) matcher, sandesha2_sender_find_callback,
+        sandesha2_sender_count_callback, sql_find, sql_count);
+
+    /*
+     * We either return an application message or an RM message. If we find
+     * an application message first then we carry on through the list to be
+     * sure that we send the lowest app message avaliable. If we hit a RM
+     * message first then we are done.
+     */
+    if(match_list)
+        size = axutil_array_list_size(match_list, env);
+    for(i = 0; i < size; i++)
+    {
+        sandesha2_sender_bean_t *bean = NULL;
+        int msg_type = -1;
+        bean = (sandesha2_sender_bean_t *) axutil_array_list_get(match_list, 
+            env, i);
+        msg_type = sandesha2_sender_bean_get_msg_type(bean, env);
+        if(msg_type == SANDESHA2_MSG_TYPE_APPLICATION)
+        {
+            long msg_no = sandesha2_sender_bean_get_msg_no(bean, env);
+            long result_msg_no = -1;
+            if(result)
+                result_msg_no = sandesha2_sender_bean_get_msg_no(result, env);
+            if(result == NULL || result_msg_no > msg_no)
+                result = bean;
+        }
+        else if(!result)
+        {
+            result = bean;
+            break;
+        }
+    }
+    return result;
+}
+

Added: webservices/sandesha/trunk/c/src/storage/sqlite/permanent_seq_property_mgr.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/storage/sqlite/permanent_seq_property_mgr.c?view=auto&rev=532207
==============================================================================
--- webservices/sandesha/trunk/c/src/storage/sqlite/permanent_seq_property_mgr.c (added)
+++ webservices/sandesha/trunk/c/src/storage/sqlite/permanent_seq_property_mgr.c Tue Apr 24 23:01:28 2007
@@ -0,0 +1,519 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+#include <sandesha2_seq_property_mgr.h>
+#include <sandesha2_permanent_seq_property_mgr.h>
+#include "sandesha2_permanent_bean_mgr.h"
+#include <sandesha2_constants.h>
+#include <sandesha2_error.h>
+#include <sandesha2_utils.h>
+#include <sandesha2_storage_mgr.h>
+#include <sandesha2_seq_property_mgr.h>
+#include <sandesha2_rm_bean.h>
+#include <axutil_log.h>
+#include <axutil_hash.h>
+#include <axutil_thread.h>
+#include <axutil_property.h>
+#include <axutil_types.h>
+
+/** 
+ * @brief Sandesha Permanent Sequence Property Manager Struct Impl
+ *   Sandesha Permanent Sequence Property Manager 
+ */ 
+typedef struct sandesha2_permanent_seq_property_mgr
+{
+    sandesha2_seq_property_mgr_t seq_prop_mgr;
+    sandesha2_permanent_bean_mgr_t *bean_mgr;
+    axutil_array_list_t *values;
+} sandesha2_permanent_seq_property_mgr_t;
+
+#define SANDESHA2_INTF_TO_IMPL(seq_property_mgr) \
+    ((sandesha2_permanent_seq_property_mgr_t *) seq_property_mgr)
+
+static int 
+sandesha2_seq_property_find_callback(
+    void *not_used, 
+    int argc, 
+    char **argv, 
+    char **col_name)
+{
+    int i = 0;
+    sandesha2_seq_property_bean_t *bean = NULL; 
+    sandesha2_bean_mgr_args_t *args = (sandesha2_bean_mgr_args_t *) not_used;
+    const axutil_env_t *env = args->env;
+    axutil_array_list_t *data_list = (axutil_array_list_t *) args->data;
+    if(argc < 1)
+    {
+        args->data = NULL;
+        return 0;
+    }
+    if(!data_list)
+    {
+        data_list = axutil_array_list_create(env, 0);
+        args->data = data_list;
+    }
+    bean = sandesha2_seq_property_bean_create(env);
+    for(i = 0; i < argc; i++)
+    {
+        if(0 == axis2_strcmp(col_name[i], "seq_id"))
+            sandesha2_seq_property_bean_set_seq_id(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "name"))
+            if(argv[i])
+                sandesha2_seq_property_bean_set_name(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "value"))
+            if(argv[i])
+                sandesha2_seq_property_bean_set_value(bean, env, argv[i]);
+    }
+    axutil_array_list_add(data_list, env, bean);
+    return 0;
+}
+
+static int 
+sandesha2_seq_property_retrieve_callback(
+    void *not_used, 
+    int argc, 
+    char **argv, 
+    char **col_name)
+{
+    int i = 0;
+    sandesha2_bean_mgr_args_t *args = (sandesha2_bean_mgr_args_t *) not_used;
+    const axutil_env_t *env = args->env;
+    sandesha2_seq_property_bean_t *bean = NULL;
+    if(argc < 1)
+    {
+        args->data = NULL;
+        return 0;
+    }
+    bean = (sandesha2_seq_property_bean_t *) args->data;
+    if(!bean)
+    {
+        bean = sandesha2_seq_property_bean_create(env);
+        args->data = bean;
+    }
+    for(i = 0; i < argc; i++)
+    {
+        if(0 == axis2_strcmp(col_name[i], "seq_id"))
+            sandesha2_seq_property_bean_set_seq_id(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "name"))
+            if(argv[i])
+                sandesha2_seq_property_bean_set_name(bean, env, argv[i]);
+        if(0 == axis2_strcmp(col_name[i], "value"))
+            if(argv[i])
+                sandesha2_seq_property_bean_set_value(bean, env, argv[i]);
+    }
+    return 0;
+}
+
+static int 
+sandesha2_seq_property_count_callback(
+    void *not_used, 
+    int argc, 
+    char **argv, 
+    char **col_name)
+{
+    int *count = (int *) not_used;
+    *count = AXIS2_ATOI(argv[0]);
+    return 0;
+}
+
+
+void AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_free(
+    sandesha2_seq_property_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_insert(
+    sandesha2_seq_property_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env,
+    sandesha2_seq_property_bean_t *bean);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_remove(
+        sandesha2_seq_property_mgr_t *seq_prop_mgr,
+        const axutil_env_t *env,
+        axis2_char_t *seq_id,
+        axis2_char_t *name);
+
+sandesha2_seq_property_bean_t *AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_retrieve(
+    sandesha2_seq_property_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *seq_id,
+    axis2_char_t *name);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_update(
+    sandesha2_seq_property_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env,
+    sandesha2_seq_property_bean_t *bean);
+
+axutil_array_list_t *AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_find(
+    sandesha2_seq_property_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env,
+    sandesha2_seq_property_bean_t *bean);
+
+sandesha2_seq_property_bean_t *AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_find_unique(
+    sandesha2_seq_property_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env,
+    sandesha2_seq_property_bean_t *bean);
+
+static axis2_bool_t AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_match(
+    sandesha2_permanent_bean_mgr_t *seq_prop,
+    const axutil_env_t *env,
+    sandesha2_rm_bean_t *bean,
+    sandesha2_rm_bean_t *candidate);
+
+axutil_array_list_t *AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_retrieve_all(
+    sandesha2_seq_property_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env);
+
+static axis2_char_t *
+sandesha2_permanent_seq_property_mgr_get_id_with_bean(
+    const axutil_env_t *env,
+    sandesha2_seq_property_bean_t *bean);
+
+static axis2_char_t *
+sandesha2_permanent_seq_property_mgr_get_id_with_seq_id_and_name(
+    const axutil_env_t *env,
+    axis2_char_t *seq_id,
+    axis2_char_t *name);
+
+static const sandesha2_seq_property_mgr_ops_t seq_property_mgr_ops = 
+{
+    sandesha2_permanent_seq_property_mgr_free,
+    sandesha2_permanent_seq_property_mgr_insert,
+    sandesha2_permanent_seq_property_mgr_remove,
+    sandesha2_permanent_seq_property_mgr_retrieve,
+    sandesha2_permanent_seq_property_mgr_update,
+    sandesha2_permanent_seq_property_mgr_find,
+    sandesha2_permanent_seq_property_mgr_find_unique,
+    sandesha2_permanent_seq_property_mgr_retrieve_all,
+};
+
+AXIS2_EXTERN sandesha2_seq_property_mgr_t * AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_create(
+    const axutil_env_t *env,
+    sandesha2_storage_mgr_t *storage_mgr,
+    axis2_conf_ctx_t *ctx)
+{
+    sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
+    AXIS2_ENV_CHECK(env, NULL);
+    seq_prop_mgr_impl = AXIS2_MALLOC(env->allocator, 
+        sizeof(sandesha2_permanent_seq_property_mgr_t));
+
+    seq_prop_mgr_impl->values = NULL;
+    seq_prop_mgr_impl->bean_mgr = sandesha2_permanent_bean_mgr_create(env,
+        storage_mgr, ctx, SANDESHA2_BEAN_MAP_SEQ_PROPERTY);
+    seq_prop_mgr_impl->bean_mgr->ops.match = sandesha2_permanent_seq_property_mgr_match;
+    seq_prop_mgr_impl->seq_prop_mgr.ops = seq_property_mgr_ops;
+    return &(seq_prop_mgr_impl->seq_prop_mgr);
+}
+
+void AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_free(
+    sandesha2_seq_property_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env)
+{
+    sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
+    seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
+
+    if(seq_prop_mgr_impl->values)
+    {
+        axutil_array_list_free(seq_prop_mgr_impl->values, env);
+        seq_prop_mgr_impl->values = NULL;
+    }
+    if(seq_prop_mgr_impl->bean_mgr)
+    {
+        sandesha2_permanent_bean_mgr_free(seq_prop_mgr_impl->bean_mgr, env);
+        seq_prop_mgr_impl->bean_mgr = NULL;
+    }
+    if(seq_prop_mgr_impl)
+    {
+        AXIS2_FREE(env->allocator, seq_prop_mgr_impl);
+        seq_prop_mgr_impl = NULL;
+    }
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_insert(
+    sandesha2_seq_property_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env,
+    sandesha2_seq_property_bean_t *bean)
+{
+    axis2_char_t sql_insert[1024];
+    axis2_char_t sql_update[1024];
+    axis2_char_t sql_retrieve[256];
+    axis2_bool_t ret = AXIS2_FALSE;
+    sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
+
+    axis2_char_t *id = sandesha2_permanent_seq_property_mgr_get_id_with_bean(env, bean);
+    axis2_char_t *seq_id = sandesha2_seq_property_bean_get_seq_id(bean, env);
+    axis2_char_t *name = sandesha2_seq_property_bean_get_name(bean, env);
+    axis2_char_t *value = sandesha2_seq_property_bean_get_value(bean, env);
+
+    AXIS2_LOG_INFO(env->log, 
+        "Entry:[sandesha2]sandesha2_permanent_seq_property_mgr_insert");
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+    seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
+
+    sprintf(sql_retrieve, "select seq_id, name, value from seq_property "\
+        "where id='%s'", id);
+    sprintf(sql_update, "update seq_property set seq_id='%s', name='%s',"\
+        "value='%s' where id='%s'", seq_id, name, value, id);
+    sprintf(sql_insert, "insert into seq_property(id, seq_id, name, value) "\
+        "values('%s', '%s', '%s', '%s')", id, seq_id, name, value);
+    ret = sandesha2_permanent_bean_mgr_insert(seq_prop_mgr_impl->bean_mgr, env, 
+        (sandesha2_rm_bean_t *) bean,  sandesha2_seq_property_retrieve_callback, 
+        sql_retrieve, sql_update, sql_insert);
+    AXIS2_LOG_INFO(env->log, 
+        "Exit:[sandesha2]sandesha2_permanent_seq_property_mgr_insert:return%d", 
+            ret);
+    return ret;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_remove(
+        sandesha2_seq_property_mgr_t *seq_prop_mgr,
+        const axutil_env_t *env,
+        axis2_char_t *seq_id,
+        axis2_char_t *name)
+{
+    axis2_char_t *key = NULL;
+    axis2_char_t sql_remove[256];
+    axis2_char_t sql_retrieve[256];
+    axis2_status_t status = AXIS2_FAILURE;
+    sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_seq_property_mgr_remove");
+
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, seq_id, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, name, AXIS2_FALSE);
+    seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
+    key = sandesha2_permanent_seq_property_mgr_get_id_with_seq_id_and_name(env, 
+        seq_id, name);
+    sprintf(sql_remove, "delete from seq_property where id='%s'", key);
+    sprintf(sql_retrieve, "select seq_id, name, value from seq_property "\
+        "where id='%s'", key);
+    status = sandesha2_permanent_bean_mgr_remove(seq_prop_mgr_impl->bean_mgr, env, 
+        sandesha2_seq_property_retrieve_callback, sql_retrieve, sql_remove);
+    AXIS2_FREE(env->allocator, key);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_seq_property_mgr_remove");
+    return status;
+}
+
+sandesha2_seq_property_bean_t *AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_retrieve(
+    sandesha2_seq_property_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env,
+    axis2_char_t *seq_id,
+    axis2_char_t *name)
+{
+    axis2_char_t *key = NULL;
+    axis2_char_t sql_retrieve[256];
+    sandesha2_seq_property_bean_t *ret = NULL;
+    sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
+
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_seq_property_mgr_retrieve");
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, seq_id, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, name, AXIS2_FALSE);
+    seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
+    key = sandesha2_permanent_seq_property_mgr_get_id_with_seq_id_and_name(env, 
+        seq_id, name);
+    sprintf(sql_retrieve, "select seq_id, name, value from seq_property "\
+        "where id='%s'", key);
+    ret = (sandesha2_seq_property_bean_t *) sandesha2_permanent_bean_mgr_retrieve(
+        seq_prop_mgr_impl->bean_mgr, env, sandesha2_seq_property_retrieve_callback, 
+        sql_retrieve);
+    AXIS2_FREE(env->allocator, key);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_seq_property_mgr_retrieve");
+    return ret;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_update(
+    sandesha2_seq_property_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env,
+    sandesha2_seq_property_bean_t *bean)
+{
+    axis2_char_t sql_update[1024];
+    axis2_char_t sql_retrieve[256];
+    axis2_bool_t ret = AXIS2_FALSE;
+    sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
+
+    axis2_char_t *id = sandesha2_permanent_seq_property_mgr_get_id_with_bean(env, bean);
+    axis2_char_t *seq_id = sandesha2_seq_property_bean_get_seq_id(bean, env);
+    axis2_char_t *name = sandesha2_seq_property_bean_get_name(bean, env);
+    axis2_char_t *value = sandesha2_seq_property_bean_get_value(bean, env);
+
+    AXIS2_LOG_INFO(env->log, 
+        "Entry:[sandesha2]sandesha2_permanent_seq_property_mgr_update");
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+    seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
+
+    sprintf(sql_retrieve, "select seq_id, name, value from seq_property "\
+        "where id='%s'", id);
+    sprintf(sql_update, "update seq_property set seq_id='%s', name='%s',"\
+        "value='%s' where id='%s'", seq_id, name, value, id);
+    ret = sandesha2_permanent_bean_mgr_update(seq_prop_mgr_impl->bean_mgr, env, 
+        (sandesha2_rm_bean_t *) bean, sandesha2_seq_property_retrieve_callback, 
+        sql_retrieve, sql_update);
+    AXIS2_LOG_INFO(env->log, 
+        "Exit:[sandesha2]sandesha2_permanent_seq_property_mgr_update:return:%d", ret);
+    return ret;
+}
+
+axutil_array_list_t *AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_find(
+    sandesha2_seq_property_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env,
+    sandesha2_seq_property_bean_t *bean)
+{
+    axis2_char_t *sql_find = NULL;
+    axis2_char_t *sql_count = NULL;
+    sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
+    axutil_array_list_t *ret = NULL;
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_seq_property_mgr_find");
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
+    sql_find = "select seq_id, name,value from seq_property";
+    sql_count = "select count(*) as no_recs from seq_property";
+    ret = sandesha2_permanent_bean_mgr_find(seq_prop_mgr_impl->bean_mgr, env, 
+        (sandesha2_rm_bean_t *) bean, sandesha2_seq_property_find_callback,
+        sandesha2_seq_property_count_callback, sql_find, sql_count);
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_seq_property_mgr_find");
+    return ret;
+}
+
+sandesha2_seq_property_bean_t *AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_find_unique(
+    sandesha2_seq_property_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env,
+    sandesha2_seq_property_bean_t *bean)
+{
+    axis2_char_t *sql_find = NULL;
+    axis2_char_t *sql_count = NULL;
+    sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+    seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
+    sql_find = "select seq_id, name,value from seq_property";
+    sql_count = "select count(*) as no_recs from seq_property";
+    return (sandesha2_seq_property_bean_t *) 
+        sandesha2_permanent_bean_mgr_find_unique(seq_prop_mgr_impl->bean_mgr, 
+        env, (sandesha2_rm_bean_t *) bean, sandesha2_seq_property_find_callback,
+        sandesha2_seq_property_count_callback, sql_find, sql_count);
+}
+
+static axis2_bool_t AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_match(
+    sandesha2_permanent_bean_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env,
+    sandesha2_rm_bean_t *bean,
+    sandesha2_rm_bean_t *candidate)
+{
+    axis2_bool_t equal = AXIS2_TRUE;
+    axis2_char_t *seq_id = NULL;
+    axis2_char_t *temp_seq_id = NULL;
+    axis2_char_t *name = NULL;
+    axis2_char_t *temp_name = NULL;
+    axis2_char_t *value = NULL;
+    axis2_char_t *temp_value = NULL;
+    
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Entry:sandesha2_permanent_seq_property_mgr_match");
+    seq_id = sandesha2_seq_property_bean_get_seq_id(
+        (sandesha2_seq_property_bean_t *) bean, env);
+    temp_seq_id = sandesha2_seq_property_bean_get_seq_id(
+        (sandesha2_seq_property_bean_t *) candidate, env);
+    if(seq_id && temp_seq_id && 0 != axis2_strcmp(seq_id, temp_seq_id))
+    {
+        equal = AXIS2_FALSE;
+    }
+    name = sandesha2_seq_property_bean_get_name(
+        (sandesha2_seq_property_bean_t *) bean, env);
+    temp_name = sandesha2_seq_property_bean_get_name(
+        (sandesha2_seq_property_bean_t *) candidate, env);
+    if(name && temp_name && 0 != axis2_strcmp(name, temp_name))
+    {
+        equal = AXIS2_FALSE;
+    }
+    value = sandesha2_seq_property_bean_get_value(
+        (sandesha2_seq_property_bean_t *) bean, env);
+    temp_value = sandesha2_seq_property_bean_get_value(
+        (sandesha2_seq_property_bean_t *) candidate, env);
+    if(value && temp_value && 0 != axis2_strcmp(value, temp_value))
+    {
+        equal = AXIS2_FALSE;
+    }
+    AXIS2_LOG_INFO(env->log, 
+        "[sandesha2]Exit:sandesha2_permanent_seq_property_mgr_match:equal:%d", 
+            equal);
+    return equal;
+}
+
+axutil_array_list_t *AXIS2_CALL
+sandesha2_permanent_seq_property_mgr_retrieve_all(
+    sandesha2_seq_property_mgr_t *seq_prop_mgr,
+    const axutil_env_t *env)
+{
+    sandesha2_permanent_seq_property_mgr_t *seq_prop_mgr_impl = NULL;
+    AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+    seq_prop_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_prop_mgr);
+    return sandesha2_seq_property_mgr_find(seq_prop_mgr, env, NULL);
+}
+
+static axis2_char_t *
+sandesha2_permanent_seq_property_mgr_get_id_with_seq_id_and_name(
+    const axutil_env_t *env,
+    axis2_char_t *seq_id,
+    axis2_char_t *name)
+{
+    axis2_char_t *id = NULL;
+
+    id = axutil_strcat(env, seq_id, ":", name, NULL);
+    return id;
+}
+
+static axis2_char_t *
+sandesha2_permanent_seq_property_mgr_get_id_with_bean(
+    const axutil_env_t *env,
+    sandesha2_seq_property_bean_t *bean)
+{
+    axis2_char_t *seq_id = NULL;
+    axis2_char_t *name = NULL;
+    axis2_char_t *id = NULL;
+
+    seq_id = sandesha2_seq_property_bean_get_seq_id(bean, env);
+    name = sandesha2_seq_property_bean_get_name(bean, env);
+    id = axutil_strcat(env, seq_id, ":", name, NULL);
+
+    return id;
+}
+



---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org