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@ \


Reply via email to