diff --git a/include/savan_publisher_mod.h b/include/savan_publisher_mod.h
index 35b03d1..bb54b05 100644
--- a/include/savan_publisher_mod.h
+++ b/include/savan_publisher_mod.h
@@ -27,6 +27,7 @@
#include <axis2_conf.h>
#include <axis2_msg_ctx.h>
#include <axiom_node.h>
+#include <savan_storage_mgr.h>
#ifdef __cplusplus
extern "C"
@@ -56,7 +57,8 @@
publish)(
savan_publisher_mod_t *publisher,
const axutil_env_t *env,
- void *msg_ctx);
+ void *msg_ctx,
+ savan_storage_mgr_t *storage_mgr);
};
@@ -73,11 +75,20 @@
* @return status of the operation
*/
AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
-savan_publisher_mod_create(
+savan_publisher_mod_create_with_conf(
const axutil_env_t *env,
axis2_conf_t *conf);
/**
+ * Create the savan publisher.
+ * @param env environment object
+ * @return status of the operation
+ */
+AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
+savan_publisher_mod_create(
+ const axutil_env_t *env);
+
+/**
* Deallocate the publisher.
* @param publisher
* @param env environment object
@@ -97,7 +108,8 @@
savan_publisher_mod_publish(
savan_publisher_mod_t *publishermod,
const axutil_env_t *env,
- void *msg_ctx);
+ void *msg_ctx,
+ savan_storage_mgr_t *storage_mgr);
/** @} */
#ifdef __cplusplus
diff --git a/src/msgreceivers/savan_msg_recv.c b/src/msgreceivers/savan_msg_recv.c
index abe8e9a..0772c34 100644
--- a/src/msgreceivers/savan_msg_recv.c
+++ b/src/msgreceivers/savan_msg_recv.c
@@ -114,15 +114,17 @@
axis2_conf_t *conf = NULL;
axis2_conf_ctx_t *conf_ctx = NULL;
savan_publisher_mod_t *pub_mod = NULL;
+ savan_storage_mgr_t *storage_mgr = NULL;
AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_msg_recv_handle_event");
conf_ctx = axis2_msg_ctx_get_conf_ctx(msg_ctx, env);
conf = axis2_conf_ctx_get_conf(conf_ctx, env);
- pub_mod = savan_publisher_mod_create(env, conf);
+ pub_mod = savan_publisher_mod_create_with_conf(env, conf);
- savan_publisher_mod_publish(pub_mod, env, msg_ctx);
+ storage_mgr = savan_util_get_storage_mgr(env, conf_ctx, conf);
+ savan_publisher_mod_publish(pub_mod, env, msg_ctx, storage_mgr);
savan_publisher_mod_free(pub_mod, env);
AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Exit:savan_msg_recv_handle_event");
diff --git a/src/publisher/common/publisher_mod.c b/src/publisher/common/publisher_mod.c
index 52c071b..4813fd6 100644
--- a/src/publisher/common/publisher_mod.c
+++ b/src/publisher/common/publisher_mod.c
@@ -37,8 +37,9 @@
savan_publisher_mod_publish(
savan_publisher_mod_t *publishermod,
const axutil_env_t *env,
- void *msg_ctx)
+ void *msg_ctx,
+ savan_storage_mgr_t *storage_mgr)
{
- publishermod->ops->publish(publishermod, env, msg_ctx);
+ publishermod->ops->publish(publishermod, env, msg_ctx, storage_mgr);
}
diff --git a/src/publisher/default/publisher_mod.c b/src/publisher/default/publisher_mod.c
index 998bfc3..09c3d37 100644
--- a/src/publisher/default/publisher_mod.c
+++ b/src/publisher/default/publisher_mod.c
@@ -60,7 +60,8 @@
savan_default_publisher_mod_publish(
savan_publisher_mod_t *publishermod,
const axutil_env_t *env,
- void *msg_ctx);
+ void *msg_ctx,
+ savan_storage_mgr_t *storage_mgr);
static axis2_status_t
savan_default_publisher_mod_publish_to_subscriber(
@@ -78,7 +79,7 @@
};
AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
-savan_publisher_mod_create(
+savan_publisher_mod_create_with_conf(
const axutil_env_t *env,
axis2_conf_t *conf)
{
@@ -99,6 +100,13 @@
return (savan_publisher_mod_t *) publishermodimpl;
}
+AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
+savan_publisher_mod_create(
+ const axutil_env_t *env)
+{
+ return NULL;
+}
+
AXIS2_EXTERN void AXIS2_CALL
savan_default_publisher_mod_free(
savan_publisher_mod_t *publishermod,
@@ -124,12 +132,12 @@
savan_default_publisher_mod_publish(
savan_publisher_mod_t *publishermod,
const axutil_env_t *env,
- void *msg_ctx)
+ void *msg_ctx,
+ savan_storage_mgr_t *storage_mgr)
{
savan_default_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 *path = NULL;
axis2_conf_ctx_t *client_conf_ctx = NULL;
@@ -145,7 +153,6 @@
AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "[savan] Entry:savan_default_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)
{
diff --git a/src/publisher/esb/publisher_mod.c b/src/publisher/esb/publisher_mod.c
index dd18ea8..673ad16 100644
--- a/src/publisher/esb/publisher_mod.c
+++ b/src/publisher/esb/publisher_mod.c
@@ -53,8 +53,7 @@
savan_publisher_mod_t *publishermod,
const axutil_env_t *env,
void *msg_ctx,
- savan_subscriber_t *subscriber,
- savan_filter_mod_t *filtermod);
+ savan_subscriber_t *subscriber);
AXIS2_EXTERN void AXIS2_CALL
savan_esb_publisher_mod_free(
@@ -65,7 +64,8 @@
savan_esb_publisher_mod_publish(
savan_publisher_mod_t *publishermod,
const axutil_env_t *env,
- void *msg_ctx);
+ void *msg_ctx,
+ savan_storage_mgr_t *storage_mgr);
static const savan_publisher_mod_ops_t savan_publisher_mod_ops =
{
@@ -75,6 +75,27 @@
AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
savan_publisher_mod_create(
+ const axutil_env_t *env)
+{
+ savan_esb_publisher_mod_t *publishermodimpl = NULL;
+
+ publishermodimpl = AXIS2_MALLOC(env->allocator, sizeof(savan_esb_publisher_mod_t));
+ if (!publishermodimpl)
+ {
+ AXIS2_HANDLE_ERROR(env, SAVAN_ERROR_FILTER_CREATION_FAILED, AXIS2_FAILURE);
+ return NULL;
+ }
+
+ memset ((void *) publishermodimpl, 0, sizeof(savan_esb_publisher_mod_t));
+
+ publishermodimpl->conf = NULL;
+ publishermodimpl->publishermod.ops = &savan_publisher_mod_ops;
+
+ return (savan_publisher_mod_t *) publishermodimpl;
+}
+
+AXIS2_EXTERN savan_publisher_mod_t * AXIS2_CALL
+savan_publisher_mod_create_with_conf(
const axutil_env_t *env,
axis2_conf_t *conf)
{
@@ -120,21 +141,19 @@
savan_esb_publisher_mod_publish(
savan_publisher_mod_t *publishermod,
const axutil_env_t *env,
- void *esb_ctx)
+ void *esb_ctx,
+ savan_storage_mgr_t *storage_mgr)
{
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)
{
@@ -158,13 +177,11 @@
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))
+ if(!savan_esb_publisher_mod_publish_to_subscriber(publishermod, env, esb_ctx, sub))
{
axis2_endpoint_ref_t *notifyto = savan_subscriber_get_notify_to(sub, env);
const axis2_char_t *address = NULL;
@@ -192,12 +209,10 @@
savan_publisher_mod_t *publishermod,
const axutil_env_t *env,
void *esb_ctx,
- savan_subscriber_t *subscriber,
- savan_filter_mod_t *filtermod)
+ savan_subscriber_t *subscriber)
{
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;
@@ -226,36 +241,8 @@
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);
- }
+ 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.*/
diff --git a/src/storage/inmemory/storage_mgr_inmemory.c b/src/storage/inmemory/storage_mgr_inmemory.c
index dd84de6..fea0c2b 100644
--- a/src/storage/inmemory/storage_mgr_inmemory.c
+++ b/src/storage/inmemory/storage_mgr_inmemory.c
@@ -24,3 +24,13 @@
return NULL;
}
+AXIS2_EXTERN savan_storage_mgr_t * AXIS2_CALL
+savan_storage_mgr_create_with_connection_info(
+ const axutil_env_t *env,
+ axis2_char_t *connection_string,
+ axis2_char_t *username,
+ axis2_char_t *password)
+{
+ return NULL;
+}
+
diff --git a/src/storage/service/service_storage_mgr.c b/src/storage/service/service_storage_mgr.c
index cb52708..53e226c 100644
--- a/src/storage/service/service_storage_mgr.c
+++ b/src/storage/service/service_storage_mgr.c
@@ -166,6 +166,15 @@
return (savan_storage_mgr_t *) storage_mgr_impl;
}
+AXIS2_EXTERN savan_storage_mgr_t * AXIS2_CALL
+savan_storage_mgr_create_with_connection_info(
+ const axutil_env_t *env,
+ axis2_char_t *connection_string,
+ axis2_char_t *username,
+ axis2_char_t *password)
+{
+}
+
AXIS2_EXTERN void AXIS2_CALL
savan_service_storage_mgr_free(
savan_storage_mgr_t *storage_mgr,
diff --git a/src/storage/sqlite/storage_mgr.c b/src/storage/sqlite/storage_mgr.c
index e6fd558..3a47fa7 100644
--- a/src/storage/sqlite/storage_mgr.c
+++ b/src/storage/sqlite/storage_mgr.c
@@ -159,6 +159,16 @@
return (savan_storage_mgr_t *) storage_mgr_impl;
}
+AXIS2_EXTERN savan_storage_mgr_t * AXIS2_CALL
+savan_storage_mgr_create_with_connection_info(
+ const axutil_env_t *env,
+ axis2_char_t *connection_string,
+ axis2_char_t *username,
+ axis2_char_t *password)
+{
+ return NULL;
+}
+
AXIS2_EXTERN void AXIS2_CALL
savan_sqlite_storage_mgr_free(
savan_storage_mgr_t *storage_mgr,