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 2006/07/11 06:08:11 UTC
svn commit: r420702 [1/2] -
/webservices/sandesha/trunk/c/src/storage/inmemory/
Author: damitha
Date: Mon Jul 10 21:08:10 2006
New Revision: 420702
URL: http://svn.apache.org/viewvc?rev=420702&view=rev
Log: (empty)
Added:
webservices/sandesha/trunk/c/src/storage/inmemory/
webservices/sandesha/trunk/c/src/storage/inmemory/Makefile.am
webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_create_seq_mgr.c
webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_invoker_mgr.c
webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_next_msg_mgr.c
webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_sender_mgr.c
webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_seq_property_mgr.c
webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_storage_manager.c
webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_transaction.c
Added: webservices/sandesha/trunk/c/src/storage/inmemory/Makefile.am
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/storage/inmemory/Makefile.am?rev=420702&view=auto
==============================================================================
--- webservices/sandesha/trunk/c/src/storage/inmemory/Makefile.am (added)
+++ webservices/sandesha/trunk/c/src/storage/inmemory/Makefile.am Mon Jul 10 21:08:10 2006
@@ -0,0 +1,13 @@
+noinst_LTLIBRARIES = libsandesha2_inmemory.la
+
+libsandesha2_inmemory_la_SOURCES = \
+ in_memory_create_seq_mgr.c \
+ in_memory_invoker_mgr.c \
+ in_memory_sender_mgr.c \
+ in_memory_next_msg_mgr.c \
+ in_memory_seq_property_mgr.c \
+ in_memory_transaction.c
+
+INCLUDES = -I$(top_builddir)/include \
+ -I$(top_builddir)/include/sandesha2 \
+ @UTILINC@
Added: webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_create_seq_mgr.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_create_seq_mgr.c?rev=420702&view=auto
==============================================================================
--- webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_create_seq_mgr.c (added)
+++ webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_create_seq_mgr.c Mon Jul 10 21:08:10 2006
@@ -0,0 +1,379 @@
+/*
+ * 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_in_memory_create_seq_mgr.h>
+#include <sandesha2_constants.h>
+#include <sandesha2_error.h>
+#include <axis2_log.h>
+#include <axis2_hash.h>
+#include <axis2_thread.h>
+#include <axis2_property.h>
+
+typedef struct sandesha2_in_memory_create_seq_mgr_impl sandesha2_in_memory_create_seq_mgr_impl_t;
+
+/**
+ * @brief Sandesha Sequence Report Struct Impl
+ * Sandesha Sequence Report
+ */
+struct sandesha2_in_memory_create_seq_mgr_impl
+{
+ sandesha2_in_memory_create_seq_mgr_t seq_mgr;
+
+ axis2_hash_t *table;
+ axis2_thread_mutex_t *mutex;
+
+};
+
+#define SANDESHA2_INTF_TO_IMPL(seq_mgr) ((sandesha2_in_memory_create_seq_mgr_impl_t *) seq_mgr)
+
+axis2_status_t AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_free(
+ void *seq_mgr,
+ const axis2_env_t *envv);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_insert(
+ sandesha2_in_memory_create_seq_mgr_t *seq_mgr,
+ const axis2_env_t *env,
+ sandesha2_create_seq_bean_t *bean);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_remove(
+ sandesha2_in_memory_create_seq_mgr_t *seq_mgr,
+ const axis2_env_t *env,
+ axis2_char_t *msg_id);
+
+sandesha2_create_seq_bean_t *AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_retrieve(
+ sandesha2_in_memory_create_seq_mgr_t *seq_mgr,
+ const axis2_env_t *env,
+ axis2_char_t *msg_id);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_update(
+ sandesha2_in_memory_create_seq_mgr_t *seq_mgr,
+ const axis2_env_t *env,
+ sandesha2_create_seq_bean_t *bean);
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_find(
+ sandesha2_in_memory_create_seq_mgr_t *seq_mgr,
+ const axis2_env_t *env,
+ sandesha2_create_seq_bean_t *bean);
+
+sandesha2_create_seq_bean_t *AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_find_unique(
+ sandesha2_in_memory_create_seq_mgr_t *seq_mgr,
+ const axis2_env_t *env,
+ sandesha2_create_seq_bean_t *bean);
+
+AXIS2_EXTERN sandesha2_in_memory_create_seq_mgr_t * AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_create(
+ const axis2_env_t *env,
+ axis2_ctx_t *ctx)
+{
+ sandesha2_in_memory_create_seq_mgr_impl_t *seq_mgr_impl = NULL;
+ axis2_property_t *property = NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+ seq_mgr_impl = AXIS2_MALLOC(env->allocator,
+ sizeof(sandesha2_in_memory_create_seq_mgr_impl_t));
+
+ seq_mgr_impl->table = NULL;
+ seq_mgr_impl->mutex = NULL;
+
+ seq_mgr_impl->seq_mgr.ops = AXIS2_MALLOC(env->allocator,
+ sizeof(sandesha2_in_memory_create_seq_mgr_ops_t));
+
+ seq_mgr_impl->mutex = axis2_thread_mutex_create(env->allocator,
+ AXIS2_THREAD_MUTEX_DEFAULT);
+ if(!seq_mgr_impl->mutex)
+ {
+ sandesha2_in_memory_create_seq_mgr_free(&(seq_mgr_impl->seq_mgr), env);
+ return NULL;
+ }
+
+ property = AXIS2_CTX_GET_PROPERTY(ctx, env,
+ SANDESHA2_BEAN_MAP_CREATE_SEQUECE, AXIS2_FALSE);
+ seq_mgr_impl->table = (axis2_hash_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
+ if(!seq_mgr_impl->table)
+ {
+ axis2_property_t *property = NULL;
+
+ property = axis2_property_create(env);
+ seq_mgr_impl->table = axis2_hash_make(env);
+ if(!property || !seq_mgr_impl->table)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ return NULL;
+ }
+ AXIS2_PROPERTY_SET_VALUE(property, env, seq_mgr_impl->table);
+ AXIS2_PROPERTY_SET_FREE_FUNC(property, env, seq_mgr_impl->seq_mgr.ops->free);
+ AXIS2_CTX_SET_PROPERTY(ctx, env, SANDESHA2_BEAN_MAP_CREATE_SEQUECE,
+ property, AXIS2_FALSE);
+ }
+ seq_mgr_impl->seq_mgr.ops->free = sandesha2_in_memory_create_seq_mgr_free;
+ seq_mgr_impl->seq_mgr.ops->insert =
+ sandesha2_in_memory_create_seq_mgr_insert;
+ seq_mgr_impl->seq_mgr.ops->remove =
+ sandesha2_in_memory_create_seq_mgr_remove;
+ seq_mgr_impl->seq_mgr.ops->retrieve =
+ sandesha2_in_memory_create_seq_mgr_retrieve;
+ seq_mgr_impl->seq_mgr.ops->update =
+ sandesha2_in_memory_create_seq_mgr_update;
+ seq_mgr_impl->seq_mgr.ops->find =
+ sandesha2_in_memory_create_seq_mgr_find;
+ seq_mgr_impl->seq_mgr.ops->find_unique =
+ sandesha2_in_memory_create_seq_mgr_find_unique;
+
+ return &(seq_mgr_impl->seq_mgr);
+}
+
+axis2_status_t AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_free(
+ void *seq_mgr,
+ const axis2_env_t *env)
+{
+ sandesha2_in_memory_create_seq_mgr_impl_t *seq_mgr_impl = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ seq_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_mgr);
+
+ if(seq_mgr_impl->mutex)
+ {
+ axis2_thread_mutex_destry(seq_mgr_impl->mutex);
+ seq_mgr_impl->mutex = NULL;
+ }
+ if(seq_mgr_impl->table)
+ {
+ axis2_hash_free(seq_mgr_impl->table, env);
+ seq_mgr_impl->table = NULL;
+ }
+
+ if((&(seq_mgr_impl->seq_mgr))->ops)
+ {
+ AXIS2_FREE(env->allocator, (&(seq_mgr_impl->seq_mgr))->ops);
+ (&(seq_mgr_impl->seq_mgr))->ops = NULL;
+ }
+
+ if(seq_mgr_impl)
+ {
+ AXIS2_FREE(env->allocator, seq_mgr_impl);
+ seq_mgr_impl = NULL;
+ }
+ return AXIS2_SUCCESS;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_insert(
+ sandesha2_in_memory_create_seq_mgr_t *seq_mgr,
+ const axis2_env_t *env,
+ sandesha2_create_seq_bean_t *bean)
+{
+ sandesha2_in_memory_create_seq_mgr_impl_t *seq_mgr_impl = NULL;
+ axis2_char_t *msg_id = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ seq_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_mgr);
+
+ axis2_thread_mutex_lock(seq_mgr_impl->mutex);
+ msg_id = SANDESHA2_CREATE_SEQ_BEAN_GET_CREATE_SEQ_MSG_ID(bean, env);
+ axis2_hash_set(seq_mgr_impl->table, msg_id, AXIS2_HASH_KEY_STRING, bean);
+ axis2_thread_mutex_unlock(seq_mgr_impl->mutex);
+
+ return AXIS2_TRUE;
+
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_remove(
+ sandesha2_in_memory_create_seq_mgr_t *seq_mgr,
+ const axis2_env_t *env,
+ axis2_char_t *msg_id)
+{
+ sandesha2_in_memory_create_seq_mgr_impl_t *seq_mgr_impl = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, msg_id, AXIS2_FALSE);
+ seq_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_mgr);
+
+ axis2_thread_mutex_lock(seq_mgr_impl->mutex);
+ axis2_hash_set(seq_mgr_impl->table, msg_id, AXIS2_HASH_KEY_STRING, NULL);
+ axis2_thread_mutex_unlock(seq_mgr_impl->mutex);
+
+ return AXIS2_TRUE;
+
+}
+
+sandesha2_create_seq_bean_t *AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_retrieve(
+ sandesha2_in_memory_create_seq_mgr_t *seq_mgr,
+ const axis2_env_t *env,
+ axis2_char_t *msg_id)
+{
+ sandesha2_in_memory_create_seq_mgr_impl_t *seq_mgr_impl = NULL;
+ sandesha2_create_seq_bean_t *bean = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, msg_id, AXIS2_FALSE);
+ seq_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_mgr);
+
+ axis2_thread_mutex_lock(seq_mgr_impl->mutex);
+ bean = (sandesha2_create_seq_bean_t *) axis2_hash_get(seq_mgr_impl->table,
+ msg_id, AXIS2_HASH_KEY_STRING);
+ axis2_thread_mutex_unlock(seq_mgr_impl->mutex);
+
+ return bean;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_update(
+ sandesha2_in_memory_create_seq_mgr_t *seq_mgr,
+ const axis2_env_t *env,
+ sandesha2_create_seq_bean_t *bean)
+{
+ sandesha2_in_memory_create_seq_mgr_impl_t *seq_mgr_impl = NULL;
+ axis2_char_t *msg_id = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ seq_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_mgr);
+
+ axis2_thread_mutex_lock(seq_mgr_impl->mutex);
+ msg_id = SANDESHA2_CREATE_SEQ_BEAN_GET_CREATE_SEQ_MSG_ID(bean, env);
+ if(!msg_id)
+ {
+ axis2_thread_mutex_unlock(seq_mgr_impl->mutex);
+ return AXIS2_FALSE;
+ }
+ axis2_hash_set(seq_mgr_impl->table, msg_id, AXIS2_HASH_KEY_STRING, bean);
+ axis2_thread_mutex_unlock(seq_mgr_impl->mutex);
+
+ return AXIS2_TRUE;
+}
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_find(
+ sandesha2_in_memory_create_seq_mgr_t *seq_mgr,
+ const axis2_env_t *env,
+ sandesha2_create_seq_bean_t *bean)
+{
+ sandesha2_in_memory_create_seq_mgr_impl_t *seq_mgr_impl = NULL;
+ axis2_array_list_t *beans = NULL;
+ axis2_hash_index_t *i = NULL;
+ sandesha2_create_seq_bean_t *temp = NULL;
+ void *v = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ seq_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_mgr);
+
+ axis2_thread_mutex_lock(seq_mgr_impl->mutex);
+ beans = axis2_array_list_create(env, 0);
+ if(!beans)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ axis2_thread_mutex_unlock(seq_mgr_impl->mutex);
+ return NULL;
+ }
+ if(!bean)
+ {
+ axis2_thread_mutex_unlock(seq_mgr_impl->mutex);
+ return beans;
+ }
+ for (i = axis2_hash_first (seq_mgr_impl->table, env); i;
+ i = axis2_hash_next (env, i))
+ {
+ axis2_bool_t equal = AXIS2_TRUE;
+ axis2_char_t *msg_id = NULL;
+ axis2_char_t *temp_msg_id = NULL;
+ axis2_char_t *seq_id = NULL;
+ axis2_char_t *temp_seq_id = NULL;
+ axis2_char_t *internal_seq_id = NULL;
+ axis2_char_t *temp_internal_seq_id = NULL;
+
+ axis2_hash_this (i, NULL, NULL, &v);
+ temp = (sandesha2_create_seq_bean_t *) v;
+ msg_id = SANDESHA2_CREATE_SEQ_BEAN_GET_CREATE_SEQ_MSG_ID(bean, env);
+ temp_msg_id = SANDESHA2_CREATE_SEQ_BEAN_GET_CREATE_SEQ_MSG_ID(temp, env);
+ if(msg_id && temp_msg_id && 0 != AXIS2_STRCMP(msg_id, temp_msg_id))
+ {
+ equal = AXIS2_FALSE;
+ }
+ seq_id = SANDESHA2_CREATE_SEQ_BEAN_GET_SEQ_ID(bean, env);
+ temp_seq_id = SANDESHA2_CREATE_SEQ_BEAN_GET_SEQ_ID(temp, env);
+ if(seq_id && temp_seq_id && 0 != AXIS2_STRCMP(seq_id, temp_seq_id))
+ {
+ equal = AXIS2_FALSE;
+ }
+ internal_seq_id = SANDESHA2_CREATE_SEQ_BEAN_GET_INTERNAL_SEQ_ID(bean,
+ env);
+ temp_internal_seq_id = SANDESHA2_CREATE_SEQ_BEAN_GET_INTERNAL_SEQ_ID(
+ temp, env);
+ if(internal_seq_id && temp_internal_seq_id && 0 != AXIS2_STRCMP(
+ internal_seq_id, temp_internal_seq_id))
+ {
+ equal = AXIS2_FALSE;
+ }
+ if(AXIS2_TRUE == equal)
+ {
+ AXIS2_ARRAY_LIST_ADD(beans, env, temp);
+ }
+
+ }
+ axis2_thread_mutex_unlock(seq_mgr_impl->mutex);
+
+ return beans;
+}
+
+sandesha2_create_seq_bean_t *AXIS2_CALL
+sandesha2_in_memory_create_seq_mgr_find_unique(
+ sandesha2_in_memory_create_seq_mgr_t *seq_mgr,
+ const axis2_env_t *env,
+ sandesha2_create_seq_bean_t *bean)
+{
+ sandesha2_in_memory_create_seq_mgr_impl_t *seq_mgr_impl = NULL;
+ axis2_array_list_t *beans = NULL;
+ int i = 0, size = 0;
+ sandesha2_create_seq_bean_t *ret = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ seq_mgr_impl = SANDESHA2_INTF_TO_IMPL(seq_mgr);
+
+ axis2_thread_mutex_lock(seq_mgr_impl->mutex);
+
+ beans = sandesha2_in_memory_create_seq_mgr_find(seq_mgr, env, bean);
+ if(beans)
+ size = AXIS2_ARRAY_LIST_SIZE(beans, env);
+ if( size > 1)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Non-Unique result");
+ AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_NON_UNIQUE_RESULT, AXIS2_FAILURE);
+ axis2_thread_mutex_unlock(seq_mgr_impl->mutex);
+ return NULL;
+ }
+ for(i = 0; i < size; i++)
+ {
+ ret = AXIS2_ARRAY_LIST_GET(beans, env, i);
+ break;
+ }
+
+ axis2_thread_mutex_unlock(seq_mgr_impl->mutex);
+
+ return ret;
+}
+
Added: webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_invoker_mgr.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_invoker_mgr.c?rev=420702&view=auto
==============================================================================
--- webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_invoker_mgr.c (added)
+++ webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_invoker_mgr.c Mon Jul 10 21:08:10 2006
@@ -0,0 +1,384 @@
+/*
+ * 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_in_memory_invoker_mgr.h>
+#include <sandesha2_constants.h>
+#include <sandesha2_error.h>
+#include <axis2_log.h>
+#include <axis2_hash.h>
+#include <axis2_thread.h>
+#include <axis2_property.h>
+
+typedef struct sandesha2_in_memory_invoker_mgr_impl sandesha2_in_memory_invoker_mgr_impl_t;
+
+/**
+ * @brief Sandesha Sequence Report Struct Impl
+ * Sandesha Sequence Report
+ */
+struct sandesha2_in_memory_invoker_mgr_impl
+{
+ sandesha2_in_memory_invoker_mgr_t invoker;
+
+ axis2_hash_t *table;
+ axis2_thread_mutex_t *mutex;
+
+};
+
+#define SANDESHA2_INTF_TO_IMPL(invoker) ((sandesha2_in_memory_invoker_mgr_impl_t *) invoker)
+
+axis2_status_t AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_free(
+ void *invoker,
+ const axis2_env_t *envv);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_insert(
+ sandesha2_in_memory_invoker_mgr_t *invoker,
+ const axis2_env_t *env,
+ sandesha2_invoker_bean_t *bean);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_remove(
+ sandesha2_in_memory_invoker_mgr_t *invoker,
+ const axis2_env_t *env,
+ axis2_char_t *ref_key);
+
+sandesha2_invoker_bean_t *AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_retrieve(
+ sandesha2_in_memory_invoker_mgr_t *invoker,
+ const axis2_env_t *env,
+ axis2_char_t *ref_key);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_update(
+ sandesha2_in_memory_invoker_mgr_t *invoker,
+ const axis2_env_t *env,
+ sandesha2_invoker_bean_t *bean);
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_find(
+ sandesha2_in_memory_invoker_mgr_t *invoker,
+ const axis2_env_t *env,
+ sandesha2_invoker_bean_t *bean);
+
+sandesha2_invoker_bean_t *AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_find_unique(
+ sandesha2_in_memory_invoker_mgr_t *invoker,
+ const axis2_env_t *env,
+ sandesha2_invoker_bean_t *bean);
+
+AXIS2_EXTERN sandesha2_in_memory_invoker_mgr_t * AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_create(
+ const axis2_env_t *env,
+ axis2_ctx_t *ctx)
+{
+ sandesha2_in_memory_invoker_mgr_impl_t *invoker_impl = NULL;
+ axis2_property_t *property = NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+ invoker_impl = AXIS2_MALLOC(env->allocator,
+ sizeof(sandesha2_in_memory_invoker_mgr_impl_t));
+
+ invoker_impl->table = NULL;
+ invoker_impl->mutex = NULL;
+
+ invoker_impl->invoker.ops = AXIS2_MALLOC(env->allocator,
+ sizeof(sandesha2_in_memory_invoker_mgr_ops_t));
+
+ invoker_impl->mutex = axis2_thread_mutex_create(env->allocator,
+ AXIS2_THREAD_MUTEX_DEFAULT);
+ if(!invoker_impl->mutex)
+ {
+ sandesha2_in_memory_invoker_mgr_free(&(invoker_impl->invoker), env);
+ return NULL;
+ }
+
+ property = AXIS2_CTX_GET_PROPERTY(ctx, env,
+ SANDESHA2_BEAN_MAP_STORAGE_MAP, AXIS2_FALSE);
+ invoker_impl->table = (axis2_hash_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
+ if(!invoker_impl->table)
+ {
+ axis2_property_t *property = NULL;
+
+ property = axis2_property_create(env);
+ invoker_impl->table = axis2_hash_make(env);
+ if(!property || !invoker_impl->table)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ return NULL;
+ }
+ AXIS2_PROPERTY_SET_VALUE(property, env, invoker_impl->table);
+ AXIS2_PROPERTY_SET_FREE_FUNC(property, env, invoker_impl->invoker.ops->free);
+ AXIS2_CTX_SET_PROPERTY(ctx, env, SANDESHA2_BEAN_MAP_STORAGE_MAP,
+ property, AXIS2_FALSE);
+ }
+ invoker_impl->invoker.ops->free = sandesha2_in_memory_invoker_mgr_free;
+ invoker_impl->invoker.ops->insert =
+ sandesha2_in_memory_invoker_mgr_insert;
+ invoker_impl->invoker.ops->remove =
+ sandesha2_in_memory_invoker_mgr_remove;
+ invoker_impl->invoker.ops->retrieve =
+ sandesha2_in_memory_invoker_mgr_retrieve;
+ invoker_impl->invoker.ops->update =
+ sandesha2_in_memory_invoker_mgr_update;
+ invoker_impl->invoker.ops->find =
+ sandesha2_in_memory_invoker_mgr_find;
+ invoker_impl->invoker.ops->find_unique =
+ sandesha2_in_memory_invoker_mgr_find_unique;
+
+ return &(invoker_impl->invoker);
+}
+
+axis2_status_t AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_free(
+ void *invoker,
+ const axis2_env_t *env)
+{
+ sandesha2_in_memory_invoker_mgr_impl_t *invoker_impl = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ invoker_impl = SANDESHA2_INTF_TO_IMPL(invoker);
+
+ if(invoker_impl->mutex)
+ {
+ axis2_thread_mutex_destry(invoker_impl->mutex);
+ invoker_impl->mutex = NULL;
+ }
+ if(invoker_impl->table)
+ {
+ axis2_hash_free(invoker_impl->table, env);
+ invoker_impl->table = NULL;
+ }
+
+ if((&(invoker_impl->invoker))->ops)
+ {
+ AXIS2_FREE(env->allocator, (&(invoker_impl->invoker))->ops);
+ (&(invoker_impl->invoker))->ops = NULL;
+ }
+
+ if(invoker_impl)
+ {
+ AXIS2_FREE(env->allocator, invoker_impl);
+ invoker_impl = NULL;
+ }
+ return AXIS2_SUCCESS;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_insert(
+ sandesha2_in_memory_invoker_mgr_t *invoker,
+ const axis2_env_t *env,
+ sandesha2_invoker_bean_t *bean)
+{
+ sandesha2_in_memory_invoker_mgr_impl_t *invoker_impl = NULL;
+ axis2_char_t *ref_key = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ invoker_impl = SANDESHA2_INTF_TO_IMPL(invoker);
+
+ axis2_thread_mutex_lock(invoker_impl->mutex);
+ ref_key = SANDESHA2_INVOKER_BEAN_GET_MSG_CONTEXT_REF_KEY(bean, env);
+ axis2_hash_set(invoker_impl->table, ref_key, AXIS2_HASH_KEY_STRING, bean);
+ axis2_thread_mutex_unlock(invoker_impl->mutex);
+
+ return AXIS2_TRUE;
+
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_remove(
+ sandesha2_in_memory_invoker_mgr_t *invoker,
+ const axis2_env_t *env,
+ axis2_char_t *key)
+{
+ sandesha2_in_memory_invoker_mgr_impl_t *invoker_impl = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, key, AXIS2_FALSE);
+ invoker_impl = SANDESHA2_INTF_TO_IMPL(invoker);
+
+ axis2_thread_mutex_lock(invoker_impl->mutex);
+ axis2_hash_set(invoker_impl->table, key, AXIS2_HASH_KEY_STRING, NULL);
+ axis2_thread_mutex_unlock(invoker_impl->mutex);
+
+ return AXIS2_TRUE;
+
+}
+
+sandesha2_invoker_bean_t *AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_retrieve(
+ sandesha2_in_memory_invoker_mgr_t *invoker,
+ const axis2_env_t *env,
+ axis2_char_t *key)
+{
+ sandesha2_in_memory_invoker_mgr_impl_t *invoker_impl = NULL;
+ sandesha2_invoker_bean_t *bean = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, key, AXIS2_FALSE);
+ invoker_impl = SANDESHA2_INTF_TO_IMPL(invoker);
+
+ axis2_thread_mutex_lock(invoker_impl->mutex);
+ bean = (sandesha2_invoker_bean_t *) axis2_hash_get(invoker_impl->table,
+ key, AXIS2_HASH_KEY_STRING);
+ axis2_thread_mutex_unlock(invoker_impl->mutex);
+
+ return bean;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_update(
+ sandesha2_in_memory_invoker_mgr_t *invoker,
+ const axis2_env_t *env,
+ sandesha2_invoker_bean_t *bean)
+{
+ sandesha2_in_memory_invoker_mgr_impl_t *invoker_impl = NULL;
+ axis2_char_t *ref_key = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ invoker_impl = SANDESHA2_INTF_TO_IMPL(invoker);
+
+ axis2_thread_mutex_lock(invoker_impl->mutex);
+ ref_key = SANDESHA2_INVOKER_BEAN_GET_MSG_CONTEXT_REF_KEY(bean, env);
+ if(!ref_key)
+ {
+ axis2_thread_mutex_unlock(invoker_impl->mutex);
+ return AXIS2_FALSE;
+ }
+ axis2_hash_set(invoker_impl->table, ref_key, AXIS2_HASH_KEY_STRING, bean);
+ axis2_thread_mutex_unlock(invoker_impl->mutex);
+
+ return AXIS2_TRUE;
+}
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_find(
+ sandesha2_in_memory_invoker_mgr_t *invoker,
+ const axis2_env_t *env,
+ sandesha2_invoker_bean_t *bean)
+{
+ sandesha2_in_memory_invoker_mgr_impl_t *invoker_impl = NULL;
+ axis2_array_list_t *beans = NULL;
+ axis2_hash_index_t *i = NULL;
+ sandesha2_invoker_bean_t *temp = NULL;
+ void *v = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ invoker_impl = SANDESHA2_INTF_TO_IMPL(invoker);
+
+ axis2_thread_mutex_lock(invoker_impl->mutex);
+ beans = axis2_array_list_create(env, 0);
+ if(!beans)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ axis2_thread_mutex_unlock(invoker_impl->mutex);
+ return NULL;
+ }
+ if(!bean)
+ {
+ axis2_thread_mutex_unlock(invoker_impl->mutex);
+ return beans;
+ }
+ for (i = axis2_hash_first (invoker_impl->table, env); i;
+ i = axis2_hash_next (env, i))
+ {
+ 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_hash_this (i, NULL, NULL, &v);
+ temp = (sandesha2_invoker_bean_t *) v;
+ ref_key = SANDESHA2_INVOKER_BEAN_GET_MSG_CONTEXT_REF_KEY(bean, env);
+ temp_ref_key = SANDESHA2_INVOKER_BEAN_GET_MSG_CONTEXT_REF_KEY(temp, 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(bean, env);
+ temp_seq_id = SANDESHA2_INVOKER_BEAN_GET_SEQ_ID(temp, 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(bean, env);
+ temp_msg_no = SANDESHA2_INVOKER_BEAN_GET_MSG_NO(temp, env);
+ if(msg_no != 0 && (msg_no != temp_msg_no))
+ {
+ select = AXIS2_FALSE;
+ }
+ is_invoked = SANDESHA2_INVOKER_BEAN_IS_INVOKED(bean, env);
+ temp_is_invoked = SANDESHA2_INVOKER_BEAN_IS_INVOKED(temp, env);
+ if(is_invoked != temp_is_invoked)
+ {
+ select = AXIS2_FALSE;
+ }
+ if(AXIS2_TRUE == select)
+ {
+ AXIS2_ARRAY_LIST_ADD(beans, env, temp);
+ }
+
+ }
+ axis2_thread_mutex_unlock(invoker_impl->mutex);
+
+ return beans;
+}
+
+sandesha2_invoker_bean_t *AXIS2_CALL
+sandesha2_in_memory_invoker_mgr_find_unique(
+ sandesha2_in_memory_invoker_mgr_t *invoker,
+ const axis2_env_t *env,
+ sandesha2_invoker_bean_t *bean)
+{
+ sandesha2_in_memory_invoker_mgr_impl_t *invoker_impl = NULL;
+ axis2_array_list_t *beans = NULL;
+ int i = 0, size = 0;
+ sandesha2_invoker_bean_t *ret = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ invoker_impl = SANDESHA2_INTF_TO_IMPL(invoker);
+
+ axis2_thread_mutex_lock(invoker_impl->mutex);
+
+ beans = sandesha2_in_memory_invoker_mgr_find(invoker, env, bean);
+ if(beans)
+ size = AXIS2_ARRAY_LIST_SIZE(beans, env);
+ if( size > 1)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Non-Unique result");
+ AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_NON_UNIQUE_RESULT, AXIS2_FAILURE);
+ axis2_thread_mutex_unlock(invoker_impl->mutex);
+ return NULL;
+ }
+ for(i = 0; i < size; i++)
+ {
+ ret = AXIS2_ARRAY_LIST_GET(beans, env, i);
+ break;
+ }
+
+ axis2_thread_mutex_unlock(invoker_impl->mutex);
+
+ return ret;
+}
+
Added: webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_next_msg_mgr.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_next_msg_mgr.c?rev=420702&view=auto
==============================================================================
--- webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_next_msg_mgr.c (added)
+++ webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_next_msg_mgr.c Mon Jul 10 21:08:10 2006
@@ -0,0 +1,417 @@
+/*
+ * 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_in_memory_next_msg_mgr.h>
+#include <sandesha2_constants.h>
+#include <sandesha2_error.h>
+#include <sandesha2_utils.h>
+#include <axis2_log.h>
+#include <axis2_hash.h>
+#include <axis2_thread.h>
+#include <axis2_property.h>
+
+typedef struct sandesha2_in_memory_next_msg_mgr_impl sandesha2_in_memory_next_msg_mgr_impl_t;
+
+/**
+ * @brief Sandesha Sequence Report Struct Impl
+ * Sandesha Sequence Report
+ */
+struct sandesha2_in_memory_next_msg_mgr_impl
+{
+ sandesha2_in_memory_next_msg_mgr_t next_msg;
+
+ axis2_hash_t *table;
+ axis2_array_list_t *values;
+ axis2_thread_mutex_t *mutex;
+
+};
+
+#define SANDESHA2_INTF_TO_IMPL(next_msg) ((sandesha2_in_memory_next_msg_mgr_impl_t *) next_msg)
+
+axis2_status_t AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_free(
+ void *next_msg,
+ const axis2_env_t *envv);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_insert(
+ sandesha2_in_memory_next_msg_mgr_t *next_msg,
+ const axis2_env_t *env,
+ sandesha2_next_msg_bean_t *bean);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_remove(
+ sandesha2_in_memory_next_msg_mgr_t *next_msg,
+ const axis2_env_t *env,
+ axis2_char_t *seq_id);
+
+sandesha2_next_msg_bean_t *AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_retrieve(
+ sandesha2_in_memory_next_msg_mgr_t *next_msg,
+ const axis2_env_t *env,
+ axis2_char_t *seq_id);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_update(
+ sandesha2_in_memory_next_msg_mgr_t *next_msg,
+ const axis2_env_t *env,
+ sandesha2_next_msg_bean_t *bean);
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_find(
+ sandesha2_in_memory_next_msg_mgr_t *next_msg,
+ const axis2_env_t *env,
+ sandesha2_next_msg_bean_t *bean);
+
+sandesha2_next_msg_bean_t *AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_find_unique(
+ sandesha2_in_memory_next_msg_mgr_t *next_msg,
+ const axis2_env_t *env,
+ sandesha2_next_msg_bean_t *bean);
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_retrieve_all(
+ sandesha2_in_memory_next_msg_mgr_t *next_msg,
+ const axis2_env_t *env);
+
+AXIS2_EXTERN sandesha2_in_memory_next_msg_mgr_t * AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_create(
+ const axis2_env_t *env,
+ axis2_ctx_t *ctx)
+{
+ sandesha2_in_memory_next_msg_mgr_impl_t *next_msg_impl = NULL;
+ axis2_property_t *property = NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+ next_msg_impl = AXIS2_MALLOC(env->allocator,
+ sizeof(sandesha2_in_memory_next_msg_mgr_impl_t));
+
+ next_msg_impl->table = NULL;
+ next_msg_impl->values = NULL;
+ next_msg_impl->mutex = NULL;
+
+ next_msg_impl->next_msg.ops = AXIS2_MALLOC(env->allocator,
+ sizeof(sandesha2_in_memory_next_msg_mgr_ops_t));
+
+ next_msg_impl->mutex = axis2_thread_mutex_create(env->allocator,
+ AXIS2_THREAD_MUTEX_DEFAULT);
+ if(!next_msg_impl->mutex)
+ {
+ sandesha2_in_memory_next_msg_mgr_free(&(next_msg_impl->next_msg), env);
+ return NULL;
+ }
+
+ property = AXIS2_CTX_GET_PROPERTY(ctx, env,
+ SANDESHA2_BEAN_MAP_NEXT_MESSAGE, AXIS2_FALSE);
+ next_msg_impl->table = (axis2_hash_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
+ if(!next_msg_impl->table)
+ {
+ axis2_property_t *property = NULL;
+
+ property = axis2_property_create(env);
+ next_msg_impl->table = axis2_hash_make(env);
+ if(!property || !next_msg_impl->table)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ return NULL;
+ }
+ AXIS2_PROPERTY_SET_VALUE(property, env, next_msg_impl->table);
+ AXIS2_PROPERTY_SET_FREE_FUNC(property, env, next_msg_impl->next_msg.ops->free);
+ AXIS2_CTX_SET_PROPERTY(ctx, env, SANDESHA2_BEAN_MAP_NEXT_MESSAGE,
+ property, AXIS2_FALSE);
+ }
+ next_msg_impl->next_msg.ops->free = sandesha2_in_memory_next_msg_mgr_free;
+ next_msg_impl->next_msg.ops->insert =
+ sandesha2_in_memory_next_msg_mgr_insert;
+ next_msg_impl->next_msg.ops->remove =
+ sandesha2_in_memory_next_msg_mgr_remove;
+ next_msg_impl->next_msg.ops->retrieve =
+ sandesha2_in_memory_next_msg_mgr_retrieve;
+ next_msg_impl->next_msg.ops->update =
+ sandesha2_in_memory_next_msg_mgr_update;
+ next_msg_impl->next_msg.ops->find =
+ sandesha2_in_memory_next_msg_mgr_find;
+ next_msg_impl->next_msg.ops->find_unique =
+ sandesha2_in_memory_next_msg_mgr_find_unique;
+ next_msg_impl->next_msg.ops->retrieve_all =
+ sandesha2_in_memory_next_msg_mgr_retrieve_all;
+
+ return &(next_msg_impl->next_msg);
+}
+
+axis2_status_t AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_free(
+ void *next_msg,
+ const axis2_env_t *env)
+{
+ sandesha2_in_memory_next_msg_mgr_impl_t *next_msg_impl = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ next_msg_impl = SANDESHA2_INTF_TO_IMPL(next_msg);
+
+ if(next_msg_impl->mutex)
+ {
+ axis2_thread_mutex_destry(next_msg_impl->mutex);
+ next_msg_impl->mutex = NULL;
+ }
+ if(next_msg_impl->table)
+ {
+ axis2_hash_free(next_msg_impl->table, env);
+ next_msg_impl->table = NULL;
+ }
+ if(next_msg_impl->values)
+ {
+ AXIS2_ARRAY_LIST_FREE(next_msg_impl->values, env);
+ next_msg_impl->values = NULL;
+ }
+
+
+ if((&(next_msg_impl->next_msg))->ops)
+ {
+ AXIS2_FREE(env->allocator, (&(next_msg_impl->next_msg))->ops);
+ (&(next_msg_impl->next_msg))->ops = NULL;
+ }
+
+ if(next_msg_impl)
+ {
+ AXIS2_FREE(env->allocator, next_msg_impl);
+ next_msg_impl = NULL;
+ }
+ return AXIS2_SUCCESS;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_insert(
+ sandesha2_in_memory_next_msg_mgr_t *next_msg,
+ const axis2_env_t *env,
+ sandesha2_next_msg_bean_t *bean)
+{
+ sandesha2_in_memory_next_msg_mgr_impl_t *next_msg_impl = NULL;
+ axis2_char_t *seq_id = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ next_msg_impl = SANDESHA2_INTF_TO_IMPL(next_msg);
+
+ axis2_thread_mutex_lock(next_msg_impl->mutex);
+
+ seq_id = SANDESHA2_NEXT_MSG_BEAN_GET_SEQUENCE_ID(bean, env);
+ if(!seq_id)
+ {
+ AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_KEY_IS_NULL, AXIS2_FAILURE);
+ axis2_thread_mutex_unlock(next_msg_impl->mutex);
+ return AXIS2_FALSE;
+ }
+ axis2_hash_set(next_msg_impl->table, seq_id, AXIS2_HASH_KEY_STRING, bean);
+ axis2_thread_mutex_unlock(next_msg_impl->mutex);
+
+ return AXIS2_TRUE;
+
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_remove(
+ sandesha2_in_memory_next_msg_mgr_t *next_msg,
+ const axis2_env_t *env,
+ axis2_char_t *seq_id)
+{
+ sandesha2_in_memory_next_msg_mgr_impl_t *next_msg_impl = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, seq_id, AXIS2_FALSE);
+ next_msg_impl = SANDESHA2_INTF_TO_IMPL(next_msg);
+
+ axis2_thread_mutex_lock(next_msg_impl->mutex);
+ axis2_hash_set(next_msg_impl->table, seq_id, AXIS2_HASH_KEY_STRING, NULL);
+ axis2_thread_mutex_unlock(next_msg_impl->mutex);
+
+ return AXIS2_TRUE;
+
+}
+
+sandesha2_next_msg_bean_t *AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_retrieve(
+ sandesha2_in_memory_next_msg_mgr_t *next_msg,
+ const axis2_env_t *env,
+ axis2_char_t *seq_id)
+{
+ sandesha2_in_memory_next_msg_mgr_impl_t *next_msg_impl = NULL;
+ sandesha2_next_msg_bean_t *bean = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, seq_id, AXIS2_FALSE);
+ next_msg_impl = SANDESHA2_INTF_TO_IMPL(next_msg);
+
+ axis2_thread_mutex_lock(next_msg_impl->mutex);
+ bean = (sandesha2_next_msg_bean_t *) axis2_hash_get(next_msg_impl->table,
+ seq_id, AXIS2_HASH_KEY_STRING);
+ axis2_thread_mutex_unlock(next_msg_impl->mutex);
+
+ return bean;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_update(
+ sandesha2_in_memory_next_msg_mgr_t *next_msg,
+ const axis2_env_t *env,
+ sandesha2_next_msg_bean_t *bean)
+{
+ sandesha2_in_memory_next_msg_mgr_impl_t *next_msg_impl = NULL;
+ axis2_char_t *seq_id = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ next_msg_impl = SANDESHA2_INTF_TO_IMPL(next_msg);
+
+ axis2_thread_mutex_lock(next_msg_impl->mutex);
+ seq_id = SANDESHA2_NEXT_MSG_BEAN_GET_SEQUENCE_ID(bean, env);
+ if(!seq_id)
+ {
+ axis2_thread_mutex_unlock(next_msg_impl->mutex);
+ return AXIS2_FALSE;
+ }
+ axis2_hash_set(next_msg_impl->table, seq_id, AXIS2_HASH_KEY_STRING, bean);
+ axis2_thread_mutex_unlock(next_msg_impl->mutex);
+ return AXIS2_TRUE;
+}
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_find(
+ sandesha2_in_memory_next_msg_mgr_t *next_msg,
+ const axis2_env_t *env,
+ sandesha2_next_msg_bean_t *bean)
+{
+ sandesha2_in_memory_next_msg_mgr_impl_t *next_msg_impl = NULL;
+ axis2_array_list_t *beans = NULL;
+ axis2_hash_index_t *i = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ next_msg_impl = SANDESHA2_INTF_TO_IMPL(next_msg);
+
+ axis2_thread_mutex_lock(next_msg_impl->mutex);
+ beans = axis2_array_list_create(env, 0);
+ if(!beans)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ axis2_thread_mutex_unlock(next_msg_impl->mutex);
+ return NULL;
+ }
+ if(!bean)
+ return beans;
+ for (i = axis2_hash_first (next_msg_impl->table, env); i;
+ i = axis2_hash_next (env, i))
+ {
+ sandesha2_next_msg_bean_t *temp = NULL;
+ void *v = NULL;
+ 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;
+
+ axis2_hash_this (i, NULL, NULL, &v);
+ temp = (sandesha2_next_msg_bean_t *) v;
+ next_msg_no = SANDESHA2_NEXT_MSG_BEAN_GET_NEXT_MSG_NO_TO_PROCESS(bean, env);
+ temp_next_msg_no = SANDESHA2_NEXT_MSG_BEAN_GET_NEXT_MSG_NO_TO_PROCESS(temp, env);
+ if(next_msg_no > 0 && (next_msg_no != temp_next_msg_no))
+ {
+ equal = AXIS2_FALSE;
+ }
+ seq_id = SANDESHA2_NEXT_MSG_BEAN_GET_SEQUENCE_ID(bean, env);
+ temp_seq_id = SANDESHA2_NEXT_MSG_BEAN_GET_SEQUENCE_ID(temp, env);
+ if(seq_id && temp_seq_id && 0 != AXIS2_STRCMP(seq_id, temp_seq_id))
+ {
+ equal = AXIS2_FALSE;
+ }
+ if(AXIS2_TRUE == equal)
+ {
+ AXIS2_ARRAY_LIST_ADD(beans, env, temp);
+ }
+
+ }
+ axis2_thread_mutex_unlock(next_msg_impl->mutex);
+
+ return beans;
+}
+
+sandesha2_next_msg_bean_t *AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_find_unique(
+ sandesha2_in_memory_next_msg_mgr_t *next_msg,
+ const axis2_env_t *env,
+ sandesha2_next_msg_bean_t *bean)
+{
+ sandesha2_in_memory_next_msg_mgr_impl_t *next_msg_impl = NULL;
+ axis2_array_list_t *beans = NULL;
+ int i = 0, size = 0;
+ sandesha2_next_msg_bean_t *ret = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ next_msg_impl = SANDESHA2_INTF_TO_IMPL(next_msg);
+
+ axis2_thread_mutex_lock(next_msg_impl->mutex);
+
+ beans = sandesha2_in_memory_next_msg_mgr_find(next_msg, env,
+ bean);
+ if(beans)
+ size = AXIS2_ARRAY_LIST_SIZE(beans, env);
+ if( size > 1)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Non-Unique result");
+ AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_NON_UNIQUE_RESULT,
+ AXIS2_FAILURE);
+ axis2_thread_mutex_unlock(next_msg_impl->mutex);
+ return NULL;
+ }
+ for(i = 0; i < size; i++)
+ {
+ ret = AXIS2_ARRAY_LIST_GET(beans, env, i);
+ break;
+ }
+
+ axis2_thread_mutex_unlock(next_msg_impl->mutex);
+
+ return ret;
+}
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_next_msg_mgr_retrieve_all(
+ sandesha2_in_memory_next_msg_mgr_t *next_msg,
+ const axis2_env_t *env)
+{
+ sandesha2_in_memory_next_msg_mgr_impl_t *next_msg_impl = NULL;
+ axis2_hash_index_t *i = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ next_msg_impl = SANDESHA2_INTF_TO_IMPL(next_msg);
+
+ axis2_thread_mutex_lock(next_msg_impl->mutex);
+ for (i = axis2_hash_first (next_msg_impl->table, env); i;
+ i = axis2_hash_next (env, i))
+ {
+ sandesha2_next_msg_bean_t *bean = NULL;
+ void *v = NULL;
+
+ axis2_hash_this (i, NULL, NULL, &v);
+ bean = (sandesha2_next_msg_bean_t *) v;
+ AXIS2_ARRAY_LIST_ADD(next_msg_impl->values, env, bean);
+ }
+
+ axis2_thread_mutex_unlock(next_msg_impl->mutex);
+
+ return next_msg_impl->values;
+}
+
Added: webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_sender_mgr.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_sender_mgr.c?rev=420702&view=auto
==============================================================================
--- webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_sender_mgr.c (added)
+++ webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_sender_mgr.c Mon Jul 10 21:08:10 2006
@@ -0,0 +1,698 @@
+/*
+ * 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_in_memory_sender_mgr.h>
+#include <sandesha2_constants.h>
+#include <sandesha2_error.h>
+#include <sandesha2_utils.h>
+#include <axis2_log.h>
+#include <axis2_hash.h>
+#include <axis2_thread.h>
+#include <axis2_property.h>
+
+typedef struct sandesha2_in_memory_sender_mgr_impl sandesha2_in_memory_sender_mgr_impl_t;
+
+/**
+ * @brief Sandesha Sequence Report Struct Impl
+ * Sandesha Sequence Report
+ */
+struct sandesha2_in_memory_sender_mgr_impl
+{
+ sandesha2_in_memory_sender_mgr_t sender;
+
+ axis2_hash_t *table;
+ axis2_thread_mutex_t *mutex;
+
+};
+
+#define SANDESHA2_INTF_TO_IMPL(sender) ((sandesha2_in_memory_sender_mgr_impl_t *) sender)
+
+axis2_status_t AXIS2_CALL
+sandesha2_in_memory_sender_mgr_free(
+ void *sender,
+ const axis2_env_t *envv);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_sender_mgr_insert(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ sandesha2_sender_bean_t *bean);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_sender_mgr_remove(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ axis2_char_t *msg_id);
+
+sandesha2_sender_bean_t *AXIS2_CALL
+sandesha2_in_memory_sender_mgr_retrieve(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ axis2_char_t *msg_id);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_sender_mgr_update(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ sandesha2_sender_bean_t *bean);
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_sender_mgr_find_by_internal_seq_id(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ axis2_char_t *internal_seq_id);
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_sender_mgr_find_by_sender_bean(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ sandesha2_sender_bean_t *bean);
+
+sandesha2_sender_bean_t *AXIS2_CALL
+sandesha2_in_memory_sender_mgr_find_unique(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ sandesha2_sender_bean_t *bean);
+
+sandesha2_sender_bean_t *AXIS2_CALL
+sandesha2_in_memory_sender_mgr_get_next_msg_to_send(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env);
+
+sandesha2_sender_bean_t *AXIS2_CALL
+sandesha2_in_memory_sender_mgr_retrieve_from_msg_ref_key(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ axis2_char_t *msg_ctx_ref_key);
+
+static axis2_status_t
+sandesha2_in_memory_sender_mgr_update_next_sending_time(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ sandesha2_sender_bean_t *bean);
+
+/*
+static axis2_array_list_t *
+sandesha2_in_memory_sender_mgr_find_beans_with_msg_no(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ axis2_array_list_t *list,
+ long msg_no);
+*/
+
+AXIS2_EXTERN sandesha2_in_memory_sender_mgr_t * AXIS2_CALL
+sandesha2_in_memory_sender_mgr_create(
+ const axis2_env_t *env,
+ axis2_ctx_t *ctx)
+{
+ sandesha2_in_memory_sender_mgr_impl_t *sender_impl = NULL;
+ axis2_property_t *property = NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+ sender_impl = AXIS2_MALLOC(env->allocator,
+ sizeof(sandesha2_in_memory_sender_mgr_impl_t));
+
+ sender_impl->table = NULL;
+ sender_impl->mutex = NULL;
+
+ sender_impl->sender.ops = AXIS2_MALLOC(env->allocator,
+ sizeof(sandesha2_in_memory_sender_mgr_ops_t));
+
+ sender_impl->mutex = axis2_thread_mutex_create(env->allocator,
+ AXIS2_THREAD_MUTEX_DEFAULT);
+ if(!sender_impl->mutex)
+ {
+ sandesha2_in_memory_sender_mgr_free(&(sender_impl->sender), env);
+ return NULL;
+ }
+
+ property = AXIS2_CTX_GET_PROPERTY(ctx, env,
+ SANDESHA2_BEAN_MAP_RETRANSMITTER, AXIS2_FALSE);
+ sender_impl->table = (axis2_hash_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
+ if(!sender_impl->table)
+ {
+ axis2_property_t *property = NULL;
+
+ property = axis2_property_create(env);
+ sender_impl->table = axis2_hash_make(env);
+ if(!property || !sender_impl->table)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ return NULL;
+ }
+ AXIS2_PROPERTY_SET_VALUE(property, env, sender_impl->table);
+ AXIS2_PROPERTY_SET_FREE_FUNC(property, env, sender_impl->sender.ops->free);
+ AXIS2_CTX_SET_PROPERTY(ctx, env, SANDESHA2_BEAN_MAP_RETRANSMITTER,
+ property, AXIS2_FALSE);
+ }
+ sender_impl->sender.ops->free = sandesha2_in_memory_sender_mgr_free;
+ sender_impl->sender.ops->insert =
+ sandesha2_in_memory_sender_mgr_insert;
+ sender_impl->sender.ops->remove =
+ sandesha2_in_memory_sender_mgr_remove;
+ sender_impl->sender.ops->retrieve =
+ sandesha2_in_memory_sender_mgr_retrieve;
+ sender_impl->sender.ops->update =
+ sandesha2_in_memory_sender_mgr_update;
+ sender_impl->sender.ops->find_by_internal_seq_id =
+ sandesha2_in_memory_sender_mgr_find_by_internal_seq_id;
+ sender_impl->sender.ops->find_by_sender_bean =
+ sandesha2_in_memory_sender_mgr_find_by_sender_bean;
+ sender_impl->sender.ops->find_unique =
+ sandesha2_in_memory_sender_mgr_find_unique;
+ sender_impl->sender.ops->get_next_msg_to_send =
+ sandesha2_in_memory_sender_mgr_get_next_msg_to_send;
+ sender_impl->sender.ops->retrieve_from_msg_ref_key =
+ sandesha2_in_memory_sender_mgr_retrieve_from_msg_ref_key;
+
+ return &(sender_impl->sender);
+}
+
+axis2_status_t AXIS2_CALL
+sandesha2_in_memory_sender_mgr_free(
+ void *sender,
+ const axis2_env_t *env)
+{
+ sandesha2_in_memory_sender_mgr_impl_t *sender_impl = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ sender_impl = SANDESHA2_INTF_TO_IMPL(sender);
+
+ if(sender_impl->mutex)
+ {
+ axis2_thread_mutex_destry(sender_impl->mutex);
+ sender_impl->mutex = NULL;
+ }
+ if(sender_impl->table)
+ {
+ axis2_hash_free(sender_impl->table, env);
+ sender_impl->table = NULL;
+ }
+
+ if((&(sender_impl->sender))->ops)
+ {
+ AXIS2_FREE(env->allocator, (&(sender_impl->sender))->ops);
+ (&(sender_impl->sender))->ops = NULL;
+ }
+
+ if(sender_impl)
+ {
+ AXIS2_FREE(env->allocator, sender_impl);
+ sender_impl = NULL;
+ }
+ return AXIS2_SUCCESS;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_sender_mgr_insert(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ sandesha2_sender_bean_t *bean)
+{
+ sandesha2_in_memory_sender_mgr_impl_t *sender_impl = NULL;
+ axis2_char_t *msg_id = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ sender_impl = SANDESHA2_INTF_TO_IMPL(sender);
+
+ axis2_thread_mutex_lock(sender_impl->mutex);
+
+ msg_id = SANDESHA2_SENDER_BEAN_GET_MSG_CONTEXT_REF_KEY(bean, env);
+ if(!msg_id)
+ {
+ AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_KEY_IS_NULL, AXIS2_FAILURE);
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+ return AXIS2_FALSE;
+ }
+ axis2_hash_set(sender_impl->table, msg_id, AXIS2_HASH_KEY_STRING, bean);
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+
+ return AXIS2_TRUE;
+
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_sender_mgr_remove(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ axis2_char_t *msg_id)
+{
+ sandesha2_in_memory_sender_mgr_impl_t *sender_impl = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, msg_id, AXIS2_FALSE);
+ sender_impl = SANDESHA2_INTF_TO_IMPL(sender);
+
+ axis2_thread_mutex_lock(sender_impl->mutex);
+ axis2_hash_set(sender_impl->table, msg_id, AXIS2_HASH_KEY_STRING, NULL);
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+
+ return AXIS2_TRUE;
+
+}
+
+sandesha2_sender_bean_t *AXIS2_CALL
+sandesha2_in_memory_sender_mgr_retrieve(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ axis2_char_t *msg_id)
+{
+ sandesha2_in_memory_sender_mgr_impl_t *sender_impl = NULL;
+ sandesha2_sender_bean_t *bean = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, msg_id, AXIS2_FALSE);
+ sender_impl = SANDESHA2_INTF_TO_IMPL(sender);
+
+ axis2_thread_mutex_lock(sender_impl->mutex);
+ bean = (sandesha2_sender_bean_t *) axis2_hash_get(sender_impl->table,
+ msg_id, AXIS2_HASH_KEY_STRING);
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+
+ return bean;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_sender_mgr_update(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ sandesha2_sender_bean_t *bean)
+{
+ sandesha2_in_memory_sender_mgr_impl_t *sender_impl = NULL;
+ axis2_char_t *msg_id = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ sender_impl = SANDESHA2_INTF_TO_IMPL(sender);
+
+ axis2_thread_mutex_lock(sender_impl->mutex);
+ msg_id = SANDESHA2_SENDER_BEAN_GET_MSG_CONTEXT_REF_KEY(bean, env);
+ if(!msg_id)
+ {
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+ return AXIS2_FALSE;
+ }
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+
+ return AXIS2_TRUE; /* No need to update. Being a reference does the job */
+}
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_sender_mgr_find_by_internal_seq_id(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ axis2_char_t *internal_seq_id)
+{
+ sandesha2_in_memory_sender_mgr_impl_t *sender_impl = NULL;
+ axis2_array_list_t *list = NULL;
+ axis2_hash_index_t *i = NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+ sender_impl = SANDESHA2_INTF_TO_IMPL(sender);
+
+ axis2_thread_mutex_lock(sender_impl->mutex);
+
+ list = axis2_array_list_create(env, 0);
+ if(!list)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+ return NULL;
+ }
+ if(!internal_seq_id || 0 == AXIS2_STRCMP(internal_seq_id, ""))
+ return list;
+ for (i = axis2_hash_first (sender_impl->table, env); i;
+ i = axis2_hash_next (env, i))
+ {
+ sandesha2_sender_bean_t *sender_bean = NULL;
+ void *v = NULL;
+ axis2_char_t *temp_internal_seq_id = NULL;
+
+ axis2_hash_this (i, NULL, NULL, &v);
+ sender_bean = (sandesha2_sender_bean_t *) v;
+ temp_internal_seq_id = SANDESHA2_SENDER_BEAN_GET_INTERNAL_SEQ_ID(
+ sender_bean, env);
+ if(internal_seq_id && temp_internal_seq_id && 0 == AXIS2_STRCMP(
+ internal_seq_id, temp_internal_seq_id))
+ {
+ AXIS2_ARRAY_LIST_ADD(list, env, sender_bean);
+ }
+
+ }
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+
+ return list;
+}
+
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_sender_mgr_find_by_sender_bean(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ sandesha2_sender_bean_t *bean)
+{
+ sandesha2_in_memory_sender_mgr_impl_t *sender_impl = NULL;
+ axis2_array_list_t *beans = NULL;
+ axis2_hash_index_t *i = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ sender_impl = SANDESHA2_INTF_TO_IMPL(sender);
+
+ axis2_thread_mutex_lock(sender_impl->mutex);
+ beans = axis2_array_list_create(env, 0);
+ if(!beans)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+ return NULL;
+ }
+ if(!bean)
+ {
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+ return beans;
+ }
+ for (i = axis2_hash_first (sender_impl->table, env); i;
+ i = axis2_hash_next (env, i))
+ {
+ sandesha2_sender_bean_t *temp = NULL;
+ void *v = NULL;
+ 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_bool_t is_resend = AXIS2_FALSE;
+ axis2_bool_t temp_is_resend = AXIS2_FALSE;
+
+ axis2_hash_this (i, NULL, NULL, &v);
+ temp = (sandesha2_sender_bean_t *) v;
+ ref_key = SANDESHA2_SENDER_BEAN_GET_MSG_CONTEXT_REF_KEY(bean, env);
+ temp_ref_key = SANDESHA2_SENDER_BEAN_GET_MSG_CONTEXT_REF_KEY(temp, env);
+ if(time_to_send > 0 && (time_to_send != temp_time_to_send))
+ {
+ add = AXIS2_FALSE;
+ }
+ ref_key = SANDESHA2_SENDER_BEAN_GET_MSG_CONTEXT_REF_KEY(bean, env);
+ temp_ref_key = SANDESHA2_SENDER_BEAN_GET_MSG_CONTEXT_REF_KEY(temp, env);
+ if(ref_key && temp_ref_key && 0 != AXIS2_STRCMP(ref_key, temp_ref_key))
+ {
+ add = AXIS2_FALSE;
+ }
+ msg_id = SANDESHA2_SENDER_BEAN_GET_MSG_ID(bean, env);
+ temp_msg_id = SANDESHA2_SENDER_BEAN_GET_MSG_ID(temp, 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(bean, env);
+ temp_internal_seq_id = SANDESHA2_SENDER_BEAN_GET_INTERNAL_SEQ_ID(temp,
+ 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(bean, env);
+ temp_msg_no = SANDESHA2_SENDER_BEAN_GET_MSG_NO(temp, env);
+ if(msg_no > 0 && (msg_no != temp_msg_no))
+ {
+ add = AXIS2_FALSE;
+ }
+ msg_type = SANDESHA2_SENDER_BEAN_GET_MSG_TYPE(bean, env);
+ temp_msg_type = SANDESHA2_SENDER_BEAN_GET_MSG_TYPE(temp, env);
+ if(msg_type != SANDESHA2_MSG_TYPE_UNKNOWN && (msg_type != temp_msg_type))
+ {
+ add = AXIS2_FALSE;
+ }
+ is_send = SANDESHA2_SENDER_BEAN_IS_SEND(bean, env);
+ temp_is_send = SANDESHA2_SENDER_BEAN_IS_SEND(temp, env);
+ if(is_send != temp_is_send)
+ {
+ add = AXIS2_FALSE;
+ }
+ is_resend = SANDESHA2_SENDER_BEAN_IS_RESEND(bean, env);
+ temp_is_resend = SANDESHA2_SENDER_BEAN_IS_RESEND(temp, env);
+ if(is_resend != temp_is_resend)
+ {
+ add = AXIS2_FALSE;
+ }
+ if(AXIS2_TRUE == add)
+ {
+ AXIS2_ARRAY_LIST_ADD(beans, env, temp);
+ }
+
+ }
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+
+ return beans;
+}
+
+sandesha2_sender_bean_t *AXIS2_CALL
+sandesha2_in_memory_sender_mgr_find_unique(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ sandesha2_sender_bean_t *bean)
+{
+ sandesha2_in_memory_sender_mgr_impl_t *sender_impl = NULL;
+ axis2_array_list_t *beans = NULL;
+ int i = 0, size = 0;
+ sandesha2_sender_bean_t *ret = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ sender_impl = SANDESHA2_INTF_TO_IMPL(sender);
+
+ axis2_thread_mutex_lock(sender_impl->mutex);
+
+ beans = sandesha2_in_memory_sender_mgr_find_by_sender_bean(sender, env,
+ bean);
+ if(beans)
+ size = AXIS2_ARRAY_LIST_SIZE(beans, env);
+ if( size > 1)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Non-Unique result");
+ AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_NON_UNIQUE_RESULT,
+ AXIS2_FAILURE);
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+ return NULL;
+ }
+ for(i = 0; i < size; i++)
+ {
+ ret = AXIS2_ARRAY_LIST_GET(beans, env, i);
+ break;
+ }
+
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+
+ return ret;
+}
+
+sandesha2_sender_bean_t *AXIS2_CALL
+sandesha2_in_memory_sender_mgr_get_next_msg_to_send(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env)
+{
+ sandesha2_in_memory_sender_mgr_impl_t *sender_impl = NULL;
+ long lowest_app_msg_no = 0;
+ axis2_hash_index_t *i = NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+ sender_impl = SANDESHA2_INTF_TO_IMPL(sender);
+
+ axis2_thread_mutex_lock(sender_impl->mutex);
+
+ for (i = axis2_hash_first (sender_impl->table, env); i;
+ i = axis2_hash_next (env, i))
+ {
+ sandesha2_sender_bean_t *temp = NULL;
+ void *v = NULL;
+ axis2_bool_t is_send = AXIS2_FALSE;
+
+ axis2_hash_this (i, NULL, NULL, &v);
+ temp = (sandesha2_sender_bean_t *) v;
+ is_send = SANDESHA2_SENDER_BEAN_IS_SEND(temp, env);
+ if(AXIS2_TRUE == is_send)
+ {
+ long time_to_send = 0;
+ long time_now = 0;
+
+ time_to_send = SANDESHA2_SENDER_BEAN_GET_TIME_TO_SEND(temp, env);
+ time_now = SANDESHA2_UTIL_GET_CURRENT_TIME_IN_MILLIS(env);
+ if(time_now >= time_to_send)
+ {
+ int msg_type = SANDESHA2_SENDER_BEAN_GET_MSG_TYPE(temp, env);
+ if(msg_type == SANDESHA2_MSG_TYPE_APPLICATION)
+ {
+ long msg_no = SANDESHA2_SENDER_BEAN_GET_MSG_NO(temp, env);
+ if(lowest_app_msg_no == 0 || msg_no < lowest_app_msg_no)
+ lowest_app_msg_no = msg_no;
+ }
+ }
+ }
+ }
+
+ for (i = axis2_hash_first (sender_impl->table, env); i;
+ i = axis2_hash_next (env, i))
+ {
+ sandesha2_sender_bean_t *temp = NULL;
+ void *v = NULL;
+ axis2_bool_t is_send = AXIS2_FALSE;
+
+ axis2_hash_this (i, NULL, NULL, &v);
+ temp = (sandesha2_sender_bean_t *) v;
+ is_send = SANDESHA2_SENDER_BEAN_IS_SEND(temp, env);
+ if(AXIS2_TRUE == is_send)
+ {
+ long time_to_send = 0;
+ long time_now = 0;
+
+ time_to_send = SANDESHA2_SENDER_BEAN_GET_TIME_TO_SEND(temp, env);
+ time_now = SANDESHA2_UTIL_GET_CURRENT_TIME_IN_MILLIS(env);
+ if(time_now >= time_to_send)
+ {
+ axis2_bool_t valid = AXIS2_FALSE;
+ int msg_type = SANDESHA2_SENDER_BEAN_GET_MSG_TYPE(temp, env);
+
+ if(msg_type == SANDESHA2_MSG_TYPE_APPLICATION)
+ {
+ long msg_no = SANDESHA2_SENDER_BEAN_GET_MSG_NO(temp, env);
+
+ if(msg_no == lowest_app_msg_no)
+ valid = AXIS2_TRUE;
+ }
+ else
+ valid = AXIS2_TRUE;
+ if(AXIS2_TRUE == valid)
+ {
+ sandesha2_in_memory_sender_mgr_update_next_sending_time(
+ sender, env, temp);
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+ return temp;
+ }
+ }
+ }
+ }
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+
+ return NULL;
+}
+
+static axis2_status_t
+sandesha2_in_memory_sender_mgr_update_next_sending_time(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ sandesha2_sender_bean_t *bean)
+{
+ return AXIS2_SUCCESS;
+}
+
+/*
+static axis2_array_list_t *
+sandesha2_in_memory_sender_mgr_find_beans_with_msg_no(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ axis2_array_list_t *list,
+ long msg_no)
+{
+ sandesha2_in_memory_sender_mgr_impl_t *sender_impl = NULL;
+ axis2_array_list_t *beans = NULL;
+ int i = 0, size =0;
+
+ AXIS2_ENV_CHECK(env, NULL);
+ AXIS2_PARAM_CHECK(env->error, list, NULL);
+ sender_impl = SANDESHA2_INTF_TO_IMPL(sender);
+
+ axis2_thread_mutex_lock(sender_impl->mutex);
+
+ beans = axis2_array_list_create(env, 0);
+ if(!beans)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+ return NULL;
+ }
+ size = AXIS2_ARRAY_LIST_SIZE(list, env);
+ for(i = 0; i < size; i++)
+ {
+ long msg_no_l = 0;
+ sandesha2_sender_bean_t *bean = NULL;
+
+ bean = (sandesha2_sender_bean_t *) AXIS2_ARRAY_LIST_GET(list,
+ env, i);
+ msg_no_l = SANDESHA2_SENDER_BEAN_GET_MSG_NO(bean, env);
+ if(msg_no_l == msg_no)
+ {
+ AXIS2_ARRAY_LIST_ADD(beans, env, bean);
+ }
+
+ }
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+
+ return beans;
+}
+*/
+
+sandesha2_sender_bean_t *AXIS2_CALL
+sandesha2_in_memory_sender_mgr_retrieve_from_msg_ref_key(
+ sandesha2_in_memory_sender_mgr_t *sender,
+ const axis2_env_t *env,
+ axis2_char_t *msg_ctx_ref_key)
+{
+ sandesha2_in_memory_sender_mgr_impl_t *sender_impl = NULL;
+ axis2_hash_index_t *i = NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+ AXIS2_PARAM_CHECK(env->error, msg_ctx_ref_key, NULL);
+ sender_impl = SANDESHA2_INTF_TO_IMPL(sender);
+
+ axis2_thread_mutex_lock(sender_impl->mutex);
+
+ for (i = axis2_hash_first (sender_impl->table, env); i;
+ i = axis2_hash_next (env, i))
+ {
+ sandesha2_sender_bean_t *bean = NULL;
+ axis2_char_t *msg_ctx_ref_key_l = NULL;
+ void *v = NULL;
+
+ axis2_hash_this (i, NULL, NULL, &v);
+ bean = (sandesha2_sender_bean_t *) v;
+ msg_ctx_ref_key_l = SANDESHA2_SENDER_BEAN_GET_MSG_CONTEXT_REF_KEY(bean, env);
+ if(msg_ctx_ref_key_l && 0 == AXIS2_STRCMP(msg_ctx_ref_key_l,
+ msg_ctx_ref_key))
+ {
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+ return bean;
+ }
+ }
+ axis2_thread_mutex_unlock(sender_impl->mutex);
+
+ return NULL;
+}
+
+
+
+
Added: webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_seq_property_mgr.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_seq_property_mgr.c?rev=420702&view=auto
==============================================================================
--- webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_seq_property_mgr.c (added)
+++ webservices/sandesha/trunk/c/src/storage/inmemory/in_memory_seq_property_mgr.c Mon Jul 10 21:08:10 2006
@@ -0,0 +1,534 @@
+/*
+ * 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_in_memory_seq_property_mgr.h>
+#include <sandesha2_constants.h>
+#include <sandesha2_error.h>
+#include <sandesha2_utils.h>
+#include <axis2_log.h>
+#include <axis2_hash.h>
+#include <axis2_thread.h>
+#include <axis2_property.h>
+
+typedef struct sandesha2_in_memory_seq_property_mgr_impl sandesha2_in_memory_seq_property_mgr_impl_t;
+
+/**
+ * @brief Sandesha Sequence Report Struct Impl
+ * Sandesha Sequence Report
+ */
+struct sandesha2_in_memory_seq_property_mgr_impl
+{
+ sandesha2_in_memory_seq_property_mgr_t seq_property;
+
+ axis2_hash_t *table;
+ axis2_array_list_t *values;
+ axis2_thread_mutex_t *mutex;
+
+};
+
+#define SANDESHA2_INTF_TO_IMPL(seq_property) ((sandesha2_in_memory_seq_property_mgr_impl_t *) seq_property)
+
+axis2_status_t AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_free(
+ void *seq_property,
+ const axis2_env_t *envv);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_insert(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ sandesha2_sequence_property_bean_t *bean);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_remove(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ axis2_char_t *seq_id,
+ axis2_char_t *name);
+
+sandesha2_sequence_property_bean_t *AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_retrieve(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ axis2_char_t *seq_id,
+ axis2_char_t *name);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_update(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ sandesha2_sequence_property_bean_t *bean);
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_find(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ sandesha2_sequence_property_bean_t *bean);
+
+sandesha2_sequence_property_bean_t *AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_find_unique(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ sandesha2_sequence_property_bean_t *bean);
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_retrieve_all(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env);
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_update_or_insert(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ sandesha2_sequence_property_bean_t *bean);
+
+static axis2_char_t *
+sandesha2_in_memory_seq_property_mgr_get_id(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ sandesha2_sequence_property_bean_t *bean);
+
+AXIS2_EXTERN sandesha2_in_memory_seq_property_mgr_t * AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_create(
+ const axis2_env_t *env,
+ axis2_ctx_t *ctx)
+{
+ sandesha2_in_memory_seq_property_mgr_impl_t *seq_property_impl = NULL;
+ axis2_property_t *property = NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+ seq_property_impl = AXIS2_MALLOC(env->allocator,
+ sizeof(sandesha2_in_memory_seq_property_mgr_impl_t));
+
+ seq_property_impl->table = NULL;
+ seq_property_impl->values = NULL;
+ seq_property_impl->mutex = NULL;
+
+ seq_property_impl->seq_property.ops = AXIS2_MALLOC(env->allocator,
+ sizeof(sandesha2_in_memory_seq_property_mgr_ops_t));
+
+ seq_property_impl->mutex = axis2_thread_mutex_create(env->allocator,
+ AXIS2_THREAD_MUTEX_DEFAULT);
+ if(!seq_property_impl->mutex)
+ {
+ sandesha2_in_memory_seq_property_mgr_free(&(seq_property_impl->seq_property), env);
+ return NULL;
+ }
+
+ property = AXIS2_CTX_GET_PROPERTY(ctx, env,
+ SANDESHA2_BEAN_MAP_SEQUENCE_PROPERTY, AXIS2_FALSE);
+ seq_property_impl->table = (axis2_hash_t *) AXIS2_PROPERTY_GET_VALUE(property, env);
+ if(!seq_property_impl->table)
+ {
+ axis2_property_t *property = NULL;
+
+ property = axis2_property_create(env);
+ seq_property_impl->table = axis2_hash_make(env);
+ if(!property || !seq_property_impl->table)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ return NULL;
+ }
+ AXIS2_PROPERTY_SET_VALUE(property, env, seq_property_impl->table);
+ AXIS2_PROPERTY_SET_FREE_FUNC(property, env, seq_property_impl->seq_property.ops->free);
+ AXIS2_CTX_SET_PROPERTY(ctx, env, SANDESHA2_BEAN_MAP_SEQUENCE_PROPERTY,
+ property, AXIS2_FALSE);
+ }
+ seq_property_impl->seq_property.ops->free = sandesha2_in_memory_seq_property_mgr_free;
+ seq_property_impl->seq_property.ops->insert =
+ sandesha2_in_memory_seq_property_mgr_insert;
+ seq_property_impl->seq_property.ops->remove =
+ sandesha2_in_memory_seq_property_mgr_remove;
+ seq_property_impl->seq_property.ops->retrieve =
+ sandesha2_in_memory_seq_property_mgr_retrieve;
+ seq_property_impl->seq_property.ops->update =
+ sandesha2_in_memory_seq_property_mgr_update;
+ seq_property_impl->seq_property.ops->find =
+ sandesha2_in_memory_seq_property_mgr_find;
+ seq_property_impl->seq_property.ops->find_unique =
+ sandesha2_in_memory_seq_property_mgr_find_unique;
+ seq_property_impl->seq_property.ops->retrieve_all =
+ sandesha2_in_memory_seq_property_mgr_retrieve_all;
+ seq_property_impl->seq_property.ops->update_or_insert =
+ sandesha2_in_memory_seq_property_mgr_update_or_insert;
+
+ return &(seq_property_impl->seq_property);
+}
+
+axis2_status_t AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_free(
+ void *seq_property,
+ const axis2_env_t *env)
+{
+ sandesha2_in_memory_seq_property_mgr_impl_t *seq_property_impl = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ seq_property_impl = SANDESHA2_INTF_TO_IMPL(seq_property);
+
+ if(seq_property_impl->mutex)
+ {
+ axis2_thread_mutex_destry(seq_property_impl->mutex);
+ seq_property_impl->mutex = NULL;
+ }
+ if(seq_property_impl->values)
+ {
+ AXIS2_ARRAY_LIST_FREE(seq_property_impl->values, env);
+ seq_property_impl->values = NULL;
+ }
+
+ if(seq_property_impl->table)
+ {
+ axis2_hash_free(seq_property_impl->table, env);
+ seq_property_impl->table = NULL;
+ }
+
+ if((&(seq_property_impl->seq_property))->ops)
+ {
+ AXIS2_FREE(env->allocator, (&(seq_property_impl->seq_property))->ops);
+ (&(seq_property_impl->seq_property))->ops = NULL;
+ }
+
+ if(seq_property_impl)
+ {
+ AXIS2_FREE(env->allocator, seq_property_impl);
+ seq_property_impl = NULL;
+ }
+ return AXIS2_SUCCESS;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_insert(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ sandesha2_sequence_property_bean_t *bean)
+{
+ sandesha2_in_memory_seq_property_mgr_impl_t *seq_property_impl = NULL;
+ axis2_char_t *seq_id = NULL;
+ axis2_char_t *id = NULL;
+ axis2_char_t *name = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ seq_property_impl = SANDESHA2_INTF_TO_IMPL(seq_property);
+
+ axis2_thread_mutex_lock(seq_property_impl->mutex);
+
+ seq_id = SANDESHA2_SEQUENCE_PROPERTY_BEAN_GET_SEQUENCE_ID(bean, env);
+ if(!seq_id)
+ {
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+ return AXIS2_FALSE;
+ }
+ name = SANDESHA2_SEQUENCE_PROPERTY_BEAN_GET_NAME(bean, env);
+ if(!name)
+ {
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+ return AXIS2_FALSE;
+ }
+ id = axis2_strcat(env, seq_id, ":", name, NULL);
+ axis2_hash_set(seq_property_impl->table, id, AXIS2_HASH_KEY_STRING, bean);
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+
+ return AXIS2_TRUE;
+
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_remove(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ axis2_char_t *seq_id,
+ axis2_char_t *name)
+{
+ sandesha2_in_memory_seq_property_mgr_impl_t *seq_property_impl = NULL;
+ sandesha2_sequence_property_bean_t *bean = NULL;
+ axis2_char_t *key = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, seq_id, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, name, AXIS2_FALSE);
+ seq_property_impl = SANDESHA2_INTF_TO_IMPL(seq_property);
+
+ axis2_thread_mutex_lock(seq_property_impl->mutex);
+
+ bean = sandesha2_in_memory_seq_property_mgr_retrieve(seq_property, env,
+ seq_id, name);
+ key = axis2_strcat(env, seq_id, ":", name, NULL);
+ axis2_hash_set(seq_property_impl->table, key, AXIS2_HASH_KEY_STRING, NULL);
+ AXIS2_FREE(env->allocator, key);
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+
+ return AXIS2_TRUE;
+
+}
+
+sandesha2_sequence_property_bean_t *AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_retrieve(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ axis2_char_t *seq_id,
+ axis2_char_t *name)
+{
+ sandesha2_in_memory_seq_property_mgr_impl_t *seq_property_impl = NULL;
+ sandesha2_sequence_property_bean_t *bean = NULL;
+ axis2_char_t *key = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, seq_id, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, name, AXIS2_FALSE);
+ seq_property_impl = SANDESHA2_INTF_TO_IMPL(seq_property);
+
+ axis2_thread_mutex_lock(seq_property_impl->mutex);
+
+ key = axis2_strcat(env, seq_id, ":", name, NULL);
+ bean = (sandesha2_sequence_property_bean_t *) axis2_hash_get(seq_property_impl->table,
+ key, AXIS2_HASH_KEY_STRING);
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+
+ return bean;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_update(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ sandesha2_sequence_property_bean_t *bean)
+{
+ sandesha2_in_memory_seq_property_mgr_impl_t *seq_property_impl = NULL;
+ axis2_char_t *id = NULL;
+ sandesha2_sequence_property_bean_t *bean_l = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ seq_property_impl = SANDESHA2_INTF_TO_IMPL(seq_property);
+
+ axis2_thread_mutex_lock(seq_property_impl->mutex);
+ id = sandesha2_in_memory_seq_property_mgr_get_id(seq_property, env, bean);
+ if(!id)
+ {
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+ return AXIS2_FALSE;
+ }
+ bean_l = axis2_hash_get(seq_property_impl->table, id,
+ AXIS2_HASH_KEY_STRING);
+ if(!bean_l)
+ {
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+ return AXIS2_FALSE;
+ }
+ axis2_hash_set(seq_property_impl->table, id,
+ AXIS2_HASH_KEY_STRING, bean);
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+
+ return AXIS2_TRUE;
+}
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_find(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ sandesha2_sequence_property_bean_t *bean)
+{
+ sandesha2_in_memory_seq_property_mgr_impl_t *seq_property_impl = NULL;
+ axis2_array_list_t *beans = NULL;
+ axis2_hash_index_t *i = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ seq_property_impl = SANDESHA2_INTF_TO_IMPL(seq_property);
+
+ axis2_thread_mutex_lock(seq_property_impl->mutex);
+ beans = axis2_array_list_create(env, 0);
+ if(!beans)
+ {
+ AXIS2_ERROR_SET(env->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+ return NULL;
+ }
+ if(!bean)
+ {
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+ return beans;
+ }
+ for (i = axis2_hash_first (seq_property_impl->table, env); i;
+ i = axis2_hash_next (env, i))
+ {
+ sandesha2_sequence_property_bean_t *temp = NULL;
+ void *v = NULL;
+ 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_hash_this (i, NULL, NULL, &v);
+ temp = (sandesha2_sequence_property_bean_t *) v;
+ seq_id = SANDESHA2_SEQUENCE_PROPERTY_BEAN_GET_SEQUENCE_ID(bean, env);
+ temp_seq_id = SANDESHA2_SEQUENCE_PROPERTY_BEAN_GET_SEQUENCE_ID(temp, env);
+ if(seq_id && temp_seq_id && 0 != AXIS2_STRCMP(seq_id, temp_seq_id))
+ {
+ equal = AXIS2_FALSE;
+ }
+ name = SANDESHA2_SEQUENCE_PROPERTY_BEAN_GET_NAME(bean, env);
+ temp_name = SANDESHA2_SEQUENCE_PROPERTY_BEAN_GET_NAME(temp, env);
+ if(name && temp_name && 0 != AXIS2_STRCMP(name, temp_name))
+ {
+ equal = AXIS2_FALSE;
+ }
+ value = SANDESHA2_SEQUENCE_PROPERTY_BEAN_GET_VALUE(bean, env);
+ temp_value = SANDESHA2_SEQUENCE_PROPERTY_BEAN_GET_VALUE(temp,
+ env);
+ if(value && temp_value && 0 != AXIS2_STRCMP(value, temp_value))
+ {
+ equal = AXIS2_FALSE;
+ }
+ if(AXIS2_TRUE == equal)
+ {
+ AXIS2_ARRAY_LIST_ADD(beans, env, temp);
+ }
+
+ }
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+
+ return beans;
+}
+
+sandesha2_sequence_property_bean_t *AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_find_unique(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ sandesha2_sequence_property_bean_t *bean)
+{
+ sandesha2_in_memory_seq_property_mgr_impl_t *seq_property_impl = NULL;
+ axis2_array_list_t *beans = NULL;
+ int i = 0, size = 0;
+ sandesha2_sequence_property_bean_t *ret = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ AXIS2_PARAM_CHECK(env->error, bean, AXIS2_FALSE);
+ seq_property_impl = SANDESHA2_INTF_TO_IMPL(seq_property);
+
+ axis2_thread_mutex_lock(seq_property_impl->mutex);
+
+ beans = sandesha2_in_memory_seq_property_mgr_find(seq_property, env,
+ bean);
+ if(beans)
+ size = AXIS2_ARRAY_LIST_SIZE(beans, env);
+ if( size > 1)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "Non-Unique result");
+ AXIS2_ERROR_SET(env->error, SANDESHA2_ERROR_NON_UNIQUE_RESULT,
+ AXIS2_FAILURE);
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+ return NULL;
+ }
+ for(i = 0; i < size; i++)
+ {
+ ret = AXIS2_ARRAY_LIST_GET(beans, env, i);
+ break;
+ }
+
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+
+ return ret;
+}
+
+axis2_array_list_t *AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_retrieve_all(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env)
+{
+ sandesha2_in_memory_seq_property_mgr_impl_t *seq_property_impl = NULL;
+ axis2_hash_index_t *i = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ seq_property_impl = SANDESHA2_INTF_TO_IMPL(seq_property);
+
+ axis2_thread_mutex_lock(seq_property_impl->mutex);
+ for (i = axis2_hash_first (seq_property_impl->table, env); i;
+ i = axis2_hash_next (env, i))
+ {
+ sandesha2_sequence_property_bean_t *bean = NULL;
+ void *v = NULL;
+
+ axis2_hash_this (i, NULL, NULL, &v);
+ bean = (sandesha2_sequence_property_bean_t *) v;
+ AXIS2_ARRAY_LIST_ADD(seq_property_impl->values, env, bean);
+ }
+
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+
+ return seq_property_impl->values;
+}
+
+axis2_bool_t AXIS2_CALL
+sandesha2_in_memory_seq_property_mgr_update_or_insert(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ sandesha2_sequence_property_bean_t *bean)
+{
+ sandesha2_in_memory_seq_property_mgr_impl_t *seq_property_impl = NULL;
+ axis2_char_t *id = NULL;
+ sandesha2_sequence_property_bean_t *bean_l = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ seq_property_impl = SANDESHA2_INTF_TO_IMPL(seq_property);
+
+ axis2_thread_mutex_lock(seq_property_impl->mutex);
+ id = sandesha2_in_memory_seq_property_mgr_get_id(seq_property, env, bean);
+ if(!id)
+ {
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+ return AXIS2_FALSE;
+ }
+ bean_l = axis2_hash_get(seq_property_impl->table, id,
+ AXIS2_HASH_KEY_STRING);
+ if(!bean_l)
+ {
+ axis2_hash_set(seq_property_impl->table, id,
+ AXIS2_HASH_KEY_STRING, bean);
+ }
+ axis2_hash_set(seq_property_impl->table, id,
+ AXIS2_HASH_KEY_STRING, bean);
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+
+ return AXIS2_TRUE;
+}
+
+static axis2_char_t *
+sandesha2_in_memory_seq_property_mgr_get_id(
+ sandesha2_in_memory_seq_property_mgr_t *seq_property,
+ const axis2_env_t *env,
+ sandesha2_sequence_property_bean_t *bean)
+{
+ sandesha2_in_memory_seq_property_mgr_impl_t *seq_property_impl = NULL;
+ axis2_char_t *seq_id = NULL;
+ axis2_char_t *name = NULL;
+ axis2_char_t *id = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FALSE);
+ seq_property_impl = SANDESHA2_INTF_TO_IMPL(seq_property);
+
+ axis2_thread_mutex_lock(seq_property_impl->mutex);
+ seq_id = SANDESHA2_SEQUENCE_PROPERTY_BEAN_GET_SEQUENCE_ID(bean, env);
+ name = SANDESHA2_SEQUENCE_PROPERTY_BEAN_GET_NAME(bean, env);
+ id = axis2_strcat(env, seq_id, ":", name, NULL);
+ axis2_thread_mutex_unlock(seq_property_impl->mutex);
+
+ return id;
+}
+
---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org