Author: damitha
Date: Mon Apr 6 17:01:26 2009
New Revision: 762416
URL: http://svn.apache.org/viewvc?rev=762416&view=rev
Log: (empty)
Modified:
webservices/savan/trunk/c/include/savan_constants.h
webservices/savan/trunk/c/include/savan_publisher_mod.h
webservices/savan/trunk/c/include/savan_storage_mgr.h
webservices/savan/trunk/c/src/Makefile.am
webservices/savan/trunk/c/src/core/Makefile.am
webservices/savan/trunk/c/src/handlers/savan_in_handler.c
webservices/savan/trunk/c/src/msgreceivers/Makefile.am
webservices/savan/trunk/c/src/publisher/common/publisher_mod.c
webservices/savan/trunk/c/src/publisher/default/Makefile.am
webservices/savan/trunk/c/src/publisher/esb/Makefile.am
webservices/savan/trunk/c/src/publisher/esb/publisher_mod.c
webservices/savan/trunk/c/src/storage/registry/storage_mgr.c
webservices/savan/trunk/c/src/util/Makefile.am
Modified: webservices/savan/trunk/c/include/savan_constants.h
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_constants.h?rev=762416&r1=762415&r2=762416&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_constants.h (original)
+++ webservices/savan/trunk/c/include/savan_constants.h Mon Apr 6 17:01:26 2009
@@ -142,6 +142,7 @@
#define SAVAN_INMEMORY_STORAGE "inmemory"
#define SAVAN_SERVICE_STORAGE "service"
#define SAVAN_REGISTRY_STORAGE "registry"
+#define SAVAN_MESSAGE_RECEIVER "savan_msgreceivers"
#define SAVAN_SUBS_MGR_ADD_SUBSCRIBER_URL
"http://ws.apache.org/axis2/c/subscription/add_subscriber"
#define SAVAN_SUBS_MGR_GET_SUBSCRIBER_URL
"http://ws.apache.org/axis2/c/subscription/add_subscriber"
Modified: webservices/savan/trunk/c/include/savan_publisher_mod.h
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_publisher_mod.h?rev=762416&r1=762415&r2=762416&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_publisher_mod.h (original)
+++ webservices/savan/trunk/c/include/savan_publisher_mod.h Mon Apr 6 17:01:26
2009
@@ -56,7 +56,7 @@
publish)(
savan_publisher_mod_t *publisher,
const axutil_env_t *env,
- axis2_msg_ctx_t *msg_ctx);
+ void *msg_ctx);
};
@@ -97,7 +97,7 @@
savan_publisher_mod_publish(
savan_publisher_mod_t *publishermod,
const axutil_env_t *env,
- axis2_msg_ctx_t *msg_ctx);
+ void *msg_ctx);
/** @} */
#ifdef __cplusplus
Modified: webservices/savan/trunk/c/include/savan_storage_mgr.h
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/include/savan_storage_mgr.h?rev=762416&r1=762415&r2=762416&view=diff
==============================================================================
--- webservices/savan/trunk/c/include/savan_storage_mgr.h (original)
+++ webservices/savan/trunk/c/include/savan_storage_mgr.h Mon Apr 6 17:01:26
2009
@@ -107,6 +107,14 @@
const axutil_env_t *env,
axis2_conf_t *conf);
+AXIS2_EXTERN savan_storage_mgr_t * AXIS2_CALL
+savan_storage_mgr_create_with_connection_info(
+ const axutil_env_t *env,
+ axis2_conf_t *conf,
+ axis2_char_t *connection_string,
+ axis2_char_t *username,
+ axis2_char_t *password);
+
/**
* Deallocate the storage.
* @param storage_mgr
Modified: webservices/savan/trunk/c/src/Makefile.am
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/Makefile.am?rev=762416&r1=762415&r2=762416&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/Makefile.am (original)
+++ webservices/savan/trunk/c/src/Makefile.am Mon Apr 6 17:01:26 2009
@@ -1,2 +1,2 @@
-SUBDIRS = handlers util subscribers filters storage publisher msgreceivers
client core $(SVC_DIR)
+SUBDIRS = handlers subscribers util filters storage publisher msgreceivers
client core $(SVC_DIR)
EXTRA_DIST=data
Modified: webservices/savan/trunk/c/src/core/Makefile.am
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/core/Makefile.am?rev=762416&r1=762415&r2=762416&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/core/Makefile.am (original)
+++ webservices/savan/trunk/c/src/core/Makefile.am Mon Apr 6 17:01:26 2009
@@ -12,7 +12,6 @@
libmod_savan_la_LIBADD = \
../handlers/libsavan_handlers.la\
- ../msgreceivers/libsavan_msgreceivers.la\
../subscribers/libsavan_subscribers.la\
../util/libsavan_util.la \
../storage/@SAVAN_STORAGE@/libsavan_storage.la
Modified: webservices/savan/trunk/c/src/handlers/savan_in_handler.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/handlers/savan_in_handler.c?rev=762416&r1=762415&r2=762416&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/handlers/savan_in_handler.c (original)
+++ webservices/savan/trunk/c/src/handlers/savan_in_handler.c Mon Apr 6
17:01:26 2009
@@ -160,8 +160,16 @@
if (to_msg_recv)
{
axis2_op_t *op = axis2_msg_ctx_get_op(msg_ctx, env);
- axis2_msg_recv_t* msg_recv = savan_msg_recv_create(env);
- axis2_op_set_msg_recv(op, env, msg_recv);
+ axis2_msg_recv_t* msg_recv = axis2_conf_get_msg_recv(conf, env,
SAVAN_MESSAGE_RECEIVER);
+ if(msg_recv)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "msg_recv not null");
+ axis2_op_set_msg_recv(op, env, msg_recv);
+ }
+ else
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "msg_recv null");
+ }
}
savan_sub_processor_free(processor, env);
Modified: webservices/savan/trunk/c/src/msgreceivers/Makefile.am
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/msgreceivers/Makefile.am?rev=762416&r1=762415&r2=762416&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/msgreceivers/Makefile.am (original)
+++ webservices/savan/trunk/c/src/msgreceivers/Makefile.am Mon Apr 6 17:01:26
2009
@@ -2,7 +2,10 @@
libsavan_msgreceivers_la_SOURCES = savan_msg_recv.c
-libsavan_msgreceivers_la_LIBADD = ../publisher/@SAVAN_PUBLISHER_LIB@
+libsavan_msgreceivers_la_LIBADD = ../publisher/@SAVAN_PUBLISHER_LIB@ \
+
../storage/@SAVAN_STORAGE@/libsavan_storage.la \
+
../util/libsavan_util.la
+
INCLUDES = -I$(top_builddir)/include \
@AXIS2INC@ \
Modified: webservices/savan/trunk/c/src/publisher/common/publisher_mod.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/publisher/common/publisher_mod.c?rev=762416&r1=762415&r2=762416&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/publisher/common/publisher_mod.c (original)
+++ webservices/savan/trunk/c/src/publisher/common/publisher_mod.c Mon Apr 6
17:01:26 2009
@@ -37,14 +37,8 @@
savan_publisher_mod_publish(
savan_publisher_mod_t *publishermod,
const axutil_env_t *env,
- axis2_msg_ctx_t *msg_ctx)
+ void *msg_ctx)
{
publishermod->ops->publish(publishermod, env, msg_ctx);
}
-AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
-savan_publisher_mod_create(
- const axutil_env_t *env,
- axis2_conf_t *conf)
-{
- return NULL;
-}
+
Modified: webservices/savan/trunk/c/src/publisher/default/Makefile.am
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/publisher/default/Makefile.am?rev=762416&r1=762415&r2=762416&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/publisher/default/Makefile.am (original)
+++ webservices/savan/trunk/c/src/publisher/default/Makefile.am Mon Apr 6
17:01:26 2009
@@ -1,9 +1,7 @@
noinst_LTLIBRARIES = libsavan_publisher_mod.la
libsavan_publisher_mod_la_SOURCES = publisher_mod.c
data_DATA=
-libsavan_publisher_mod_la_LIBADD =
$(top_builddir)/src/subscribers/libsavan_subscribers.la \
-
$(top_builddir)/src/util/libsavan_util.la \
-
../../storage/@SAVAN_STORAGE@/libsavan_storage.la \
+libsavan_publisher_mod_la_LIBADD = $(top_builddir)/src/util/libsavan_util.la \
../../filters/@SAVAN_FILTER_LIB@ \
../common/libsavan_common_publisher_mod.la
Modified: webservices/savan/trunk/c/src/publisher/esb/Makefile.am
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/publisher/esb/Makefile.am?rev=762416&r1=762415&r2=762416&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/publisher/esb/Makefile.am (original)
+++ webservices/savan/trunk/c/src/publisher/esb/Makefile.am Mon Apr 6 17:01:26
2009
@@ -1,7 +1,10 @@
noinst_LTLIBRARIES = libsavan_publisher_mod.la
libsavan_publisher_mod_la_SOURCES = publisher_mod.c
-libsavan_publisher_mod_la_LIBADD = ../common/libsavan_common_publisher_mod.la
-lxml2
+libsavan_publisher_mod_la_LIBADD =
+libsavan_publisher_mod_la_LIBADD = $(top_builddir)/src/util/libsavan_util.la \
+
../../filters/@SAVAN_FILTER_LIB@ \
+
../common/libsavan_common_publisher_mod.la
data_DATA=
@@ -12,6 +15,7 @@
@AXIOMINC@ \
@NEETHIINC@ \
@XPATHINC@ \
+ @ESBPUBINC@ \
@UTILINC@
EXTRA_DIST=
Modified: webservices/savan/trunk/c/src/publisher/esb/publisher_mod.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/publisher/esb/publisher_mod.c?rev=762416&r1=762415&r2=762416&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/publisher/esb/publisher_mod.c (original)
+++ webservices/savan/trunk/c/src/publisher/esb/publisher_mod.c Mon Apr 6
17:01:26 2009
@@ -30,6 +30,8 @@
#include <axiom_soap_envelope.h>
#include <axiom_element.h>
#include <axiom_node.h>
+#include <esb_sender.h>
+#include <esb_runtime.h>
/**
*
@@ -46,6 +48,14 @@
#define SAVAN_INTF_TO_IMPL(publishermod) ((savan_esb_publisher_mod_t *)
publishermod)
+static axis2_status_t
+savan_esb_publisher_mod_publish_to_subscriber(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env,
+ void *msg_ctx,
+ savan_subscriber_t *subscriber,
+ savan_filter_mod_t *filtermod);
+
AXIS2_EXTERN void AXIS2_CALL
savan_esb_publisher_mod_free(
savan_publisher_mod_t *publishermod,
@@ -55,7 +65,7 @@
savan_esb_publisher_mod_publish(
savan_publisher_mod_t *publishermod,
const axutil_env_t *env,
- axis2_msg_ctx_t *msg_ctx);
+ void *msg_ctx);
static const savan_publisher_mod_ops_t savan_publisher_mod_ops =
{
@@ -69,7 +79,6 @@
axis2_conf_t *conf)
{
savan_esb_publisher_mod_t *publishermodimpl = NULL;
- axis2_char_t *publisher_template_path = NULL;
publishermodimpl = AXIS2_MALLOC(env->allocator,
sizeof(savan_esb_publisher_mod_t));
if (!publishermodimpl)
@@ -80,17 +89,6 @@
memset ((void *) publishermodimpl, 0, sizeof(savan_esb_publisher_mod_t));
- publisher_template_path = savan_util_get_module_param(env, conf,
SAVAN_FILTER_TEMPLATE_PATH);
- if(!publisher_template_path)
- {
- savan_esb_publisher_mod_free((savan_publisher_mod_t *)
publishermodimpl, env);
- AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[savan] Publisher template
path not set");
- return NULL;
- }
-
- publishermodimpl->publisher_template_path = publisher_template_path;
-
- publishermodimpl->dialect = NULL;
publishermodimpl->conf = conf;
publishermodimpl->publishermod.ops = &savan_publisher_mod_ops;
@@ -107,12 +105,6 @@
AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan]
Entry:savan_esb_publisher_mod_free");
- if(publishermodimpl->dialect)
- {
- AXIS2_FREE(env->allocator, publishermodimpl->dialect);
- publishermodimpl->dialect = NULL;
- }
-
publishermodimpl->conf = NULL;
if(publishermodimpl)
@@ -128,15 +120,148 @@
savan_esb_publisher_mod_publish(
savan_publisher_mod_t *publishermod,
const axutil_env_t *env,
- axis2_msg_ctx_t *msg_ctx)
+ void *esb_ctx)
{
savan_esb_publisher_mod_t *publishermodimpl = NULL;
+ axutil_array_list_t *subs_store = NULL;
+ int i = 0, size = 0;
+ savan_storage_mgr_t *storage_mgr = NULL;
+ savan_filter_mod_t *filtermod = NULL;
+ axis2_char_t *filter = NULL;
+
publishermodimpl = SAVAN_INTF_TO_IMPL(publishermod);
AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan]
Entry:savan_esb_publisher_mod_publish");
+ storage_mgr = savan_util_get_storage_mgr(env, NULL,
publishermodimpl->conf);
+ axutil_allocator_switch_to_global_pool(env->allocator);
+ if(storage_mgr)
+ {
+ subs_store = savan_storage_mgr_retrieve_all_subscribers(storage_mgr,
env, filter);
+ }
+
+ if (!subs_store)
+ {
+ axutil_allocator_switch_to_local_pool(env->allocator);
+ AXIS2_LOG_WARNING(env->log, AXIS2_LOG_SI, "[savan] Subscriber store is
NULL");
+ }
+
+ size = axutil_array_list_size(subs_store, env);
+ for(i = 0; i < size; i++)
+ {
+ savan_subscriber_t *sub = NULL;
+
+ sub = (savan_subscriber_t *)axutil_array_list_get(subs_store, env, i);
+ if (sub)
+ {
+ axis2_char_t *id = savan_subscriber_get_id(sub, env);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Publishing
to:%s", id);
+
+ filtermod = savan_util_get_filter_module(env,
publishermodimpl->conf);
+ /* Ideally publishing to each subscriber should happen within a
thread for each
+ * subscriber. However until Axis2/C provide a good thread pool to
handle
+ * such tasks I use this sequential publishing to subscribers.
+ */
+ if(!savan_esb_publisher_mod_publish_to_subscriber(publishermod,
env, esb_ctx, sub,
+ filtermod))
+ {
+ axis2_endpoint_ref_t *notifyto =
savan_subscriber_get_notify_to(sub, env);
+ const axis2_char_t *address = NULL;
+
+ if(notifyto)
+ {
+ address = axis2_endpoint_ref_get_address(notifyto, env);
+ }
+
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+ "Publishing to the Data Sink:%s proviced by
subscriber:%s Failed. Check "\
+ "whether the Data Sink url is correct", address, id);
+ }
+ }
+ }
+
+ axutil_allocator_switch_to_local_pool(env->allocator);
+
+
AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan]
Exit:savan_esb_publisher_mod_publish");
- return AXIS2_FALSE;
+}
+
+static axis2_status_t
+savan_esb_publisher_mod_publish_to_subscriber(
+ savan_publisher_mod_t *publishermod,
+ const axutil_env_t *env,
+ void *esb_ctx,
+ savan_subscriber_t *subscriber,
+ savan_filter_mod_t *filtermod)
+{
+ axis2_status_t status = AXIS2_SUCCESS;
+ const axis2_char_t *address = NULL;
+ axis2_bool_t filter_apply = AXIS2_TRUE;
+ axis2_endpoint_ref_t *notifyto = NULL;
+ esb_rt_epr_t *epr = NULL;
+ axiom_soap_envelope_t *envelope = NULL;
+ axiom_soap_body_t *body = NULL;
+ axiom_node_t *body_node = NULL;
+ axiom_node_t *payload = NULL;
+ axis2_msg_ctx_t *msg_ctx = NULL;
+ msg_ctx = ((esb_ctx_t *) esb_ctx)->in_in_msg_ctx;
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan]
Entry:savan_esb_publisher_mod_publish_to_subscriber");
+
+ notifyto = savan_subscriber_get_notify_to(subscriber, env);
+ if(notifyto)
+ {
+ address = axis2_endpoint_ref_get_address(notifyto, env);
+ if(address)
+ {
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "[savan] Publishing
to:%s", address);
+ epr = esb_rt_epr_create(env);
+ epr->uri = axutil_strdup(env, address);
+ }
+ }
+
+ envelope = axis2_msg_ctx_get_soap_envelope(msg_ctx, env);
+ body = axiom_soap_envelope_get_body(envelope, env);
+ body_node = axiom_soap_body_get_base_node(body, env);
+ payload = axiom_node_get_first_element(body_node, env);
+
+ /* If this is a filtering request and we cannot find any filter module to
filter then error */
+ if(savan_subscriber_get_filter(subscriber, env) && !filtermod)
+ {
+ AXIS2_HANDLE_ERROR(env,
SAVAN_ERROR_FILTER_MODULE_COULD_NOT_BE_RETRIEVED, AXIS2_FAILURE);
+ return AXIS2_FAILURE;
+ }
+
+#ifdef SAVAN_FILTERING
+ /* If this is a filtering request and filter module is defined then filter
the request.
+ */
+ if(filtermod && savan_subscriber_get_filter(subscriber, env))
+ {
+ /* Apply the filter, and check whether it evaluates to success */
+ filter_apply = savan_filter_mod_apply(filtermod ,env, subscriber,
payload);
+ if(!filter_apply)
+ {
+ status = axutil_error_get_status_code(env->error);
+ if(AXIS2_SUCCESS != status)
+ {
+ axiom_node_detach(payload, env);
+ return status;
+ }
+ }
+ }
+#endif
+
+ if(filter_apply)
+ {
+ esb_send_on_out_only(env, epr, (esb_ctx_t *) esb_ctx);
+ }
+
+ axiom_node_detach(payload, env); /*insert this to prevent payload
corruption in subsequent
+ "publish" calls with some payload.*/
+
+ AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan]
Exit:savan_esb_publisher_mod_publish_to_subscriber");
+
+ return status;
}
Modified: webservices/savan/trunk/c/src/storage/registry/storage_mgr.c
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/storage/registry/storage_mgr.c?rev=762416&r1=762415&r2=762416&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/storage/registry/storage_mgr.c (original)
+++ webservices/savan/trunk/c/src/storage/registry/storage_mgr.c Mon Apr 6
17:01:26 2009
@@ -158,6 +158,42 @@
return (savan_storage_mgr_t *) storagemgrimpl;
}
+AXIS2_EXTERN savan_storage_mgr_t * AXIS2_CALL
+savan_storage_mgr_create_with_connection_info(
+ const axutil_env_t *env,
+ axis2_conf_t *conf,
+ axis2_char_t *connection_string,
+ axis2_char_t *username,
+ axis2_char_t *password)
+{
+ savan_registry_storage_mgr_t *storagemgrimpl = NULL;
+ axis2_status_t status = AXIS2_FAILURE;
+
+ storagemgrimpl = AXIS2_MALLOC(env->allocator,
sizeof(savan_registry_storage_mgr_t));
+ if (!storagemgrimpl)
+ {
+ AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_STORAGE_MANAGER_CREATION_FAILED,
AXIS2_FAILURE);
+ return NULL;
+ }
+
+ memset ((void *) storagemgrimpl, 0, sizeof(savan_registry_storage_mgr_t));
+
+ storagemgrimpl->remote_registry = NULL;
+ storagemgrimpl->reg_url = axutil_strdup(env, connection_string);
+ storagemgrimpl->username = axutil_strdup(env, username);
+ storagemgrimpl->password = axutil_strdup(env, password);
+ storagemgrimpl->conf = conf;
+ storagemgrimpl->storagemgr.ops = &storage_mgr_ops;
+
+ status = savan_registry_storage_mgr_init_resource((savan_storage_mgr_t *)
storagemgrimpl, env);
+ if(status != AXIS2_SUCCESS)
+ {
+ savan_registry_storage_mgr_free((savan_storage_mgr_t *)
storagemgrimpl, env);
+ return NULL;
+ }
+ return (savan_storage_mgr_t *) storagemgrimpl;
+}
+
AXIS2_EXTERN void AXIS2_CALL
savan_registry_storage_mgr_free(
savan_storage_mgr_t *storagemgr,
Modified: webservices/savan/trunk/c/src/util/Makefile.am
URL:
http://svn.apache.org/viewvc/webservices/savan/trunk/c/src/util/Makefile.am?rev=762416&r1=762415&r2=762416&view=diff
==============================================================================
--- webservices/savan/trunk/c/src/util/Makefile.am (original)
+++ webservices/savan/trunk/c/src/util/Makefile.am Mon Apr 6 17:01:26 2009
@@ -1,8 +1,10 @@
datadir=$(prefix)/modules/savan
-noinst_LTLIBRARIES = libsavan_util.la
+lib_LTLIBRARIES = libsavan_util.la
libsavan_util_la_SOURCES = savan_util.c error.c
+libsavan_util_la_LIBADD = ../subscribers/libsavan_subscribers.la
+
INCLUDES = -I$(top_builddir)/include \
@AXIOMINC@ \
@AXIS2INC@ \