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 2008/10/10 11:47:43 UTC
svn commit: r703370 - in /webservices/sandesha/trunk/c/src/msgprocessors:
app_msg_processor.c terminate_seq_msg_processor.c
Author: damitha
Date: Fri Oct 10 02:47:43 2008
New Revision: 703370
URL: http://svn.apache.org/viewvc?rev=703370&view=rev
Log:
Add code comments
Modified:
webservices/sandesha/trunk/c/src/msgprocessors/app_msg_processor.c
webservices/sandesha/trunk/c/src/msgprocessors/terminate_seq_msg_processor.c
Modified: webservices/sandesha/trunk/c/src/msgprocessors/app_msg_processor.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/msgprocessors/app_msg_processor.c?rev=703370&r1=703369&r2=703370&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/msgprocessors/app_msg_processor.c (original)
+++ webservices/sandesha/trunk/c/src/msgprocessors/app_msg_processor.c Fri Oct 10 02:47:43 2008
@@ -1741,8 +1741,6 @@
sandesha2_seq_property_mgr_t *seq_prop_mgr,
int mep)
{
- /*axis2_endpoint_ref_t *to_epr = NULL;
- axis2_endpoint_ref_t *temp_to_epr = NULL;*/
const axis2_char_t *reply_to_addr = NULL;
sandesha2_seq_property_bean_t *acks_to_bean = NULL;
axis2_char_t *acks_to_str = NULL;
@@ -1786,18 +1784,6 @@
return AXIS2_FAILURE;
}
- /*temp_to_epr = axis2_msg_ctx_get_to(msg_ctx, env);
- if(temp_to_epr)
- {
- const axis2_char_t *temp_to_addr = NULL;
-
- temp_to_addr = axis2_endpoint_ref_get_address(temp_to_epr, env);
- if(temp_to_addr)
- {
- to_epr = axis2_endpoint_ref_create(env, temp_to_addr);
- }
- }*/
-
reply_to_epr = axis2_msg_ctx_get_reply_to(msg_ctx, env);
if(reply_to_epr)
{
@@ -1826,14 +1812,13 @@
return AXIS2_FAILURE;
}
- is_anonymous_reply_to = !reply_to_addr || (reply_to_addr && sandesha2_utils_is_anon_uri(env, reply_to_addr));
- /*if(sandesha2_utils_is_rm_1_0_anonymous_acks_to(env, rm_version, acks_to_str)
- && is_anonymous_reply_to && !one_way)*/
+ is_anonymous_reply_to = !reply_to_addr || (reply_to_addr && sandesha2_utils_is_anon_uri(env,
+ reply_to_addr));
+
if(sandesha2_utils_is_anon_uri(env, acks_to_str) && is_anonymous_reply_to && !one_way)
{
- /* This means acknowledgment address is anomymous and RM version is 1.0. Flow comes to
- * this block only in the server side.
- * In other words this is RM 1.0 replay model in application server side. In this case
+ /* This means acknowledgment address is anomymous. Flow comes to this block only in the
+ * server side. In other words this is replay model in application server side. In this case
* we do not send the acknowledgment message here. Instead we send it in the message out path.
* See sandesha2_app_msg_processor_send_app_msg() code.
*/
@@ -1881,8 +1866,8 @@
ack_msg_ctx = sandesha2_msg_ctx_get_msg_ctx(ack_rm_msg_ctx, env);
/* If it is not one way message we piggyback the acknowledgment messages on the application messages
- * or terminate message. So here we store them in the database so that when the application/terminate
- * message sent it pick it up from the database to piggyback. See app_msg_send() function.
+ * or terminate message. So here we store them in the storage so that when the application/terminate
+ * message sent it pick it up from the storage to piggyback. See app_msg_send() function.
*/
if(!one_way)
{
@@ -1903,6 +1888,12 @@
key = axutil_uuid_gen(env);
ack_bean = sandesha2_sender_bean_create(env);
+ /* To find the outgoing sequence id we use the related message sent. We face this problem of
+ * finding the outgoing sequence id only in the application client side. As a solution when
+ * messages are sent from the application client side we store the
+ * SANDESHA2_SEQ_PROP_RELATED_MSG_ID property which can be used to retrieve the outgoing
+ * sequence id as follows.
+ */
relates_to = axis2_msg_ctx_get_relates_to(msg_ctx, env);
if(relates_to)
{
@@ -1939,6 +1930,9 @@
}
}
+ /* Store the sender bean for the acknowledgement message which can be used later to find and
+ * retrieve the acknowledgment message context from storage for piggybacking purposes.
+ */
sandesha2_sender_bean_set_msg_ctx_ref_key(ack_bean, env, key);
send_time = sandesha2_utils_get_current_time_in_millis(env);
sandesha2_sender_bean_set_time_to_send(ack_bean, env, send_time);
@@ -1974,17 +1968,11 @@
axis2_msg_ctx_set_property(ack_msg_ctx, env, SANDESHA2_MESSAGE_STORE_KEY, property);
}
- /*if(to_epr)
- {
- axis2_msg_ctx_set_reply_to(ack_msg_ctx, env, to_epr);
- }*/
-
/* If it is one way message in server side this is the only place we can send the acknowledgment.
* In all other cases we do not send the acknowledgment directly, but piggyback it on application
* messages or terminate sequence message.
*/
if(ack_rm_msg_ctx && one_way)
- /*if(ack_rm_msg_ctx)*/
{
axis2_engine_t *engine = NULL;
engine = axis2_engine_create(env, conf_ctx);
@@ -2004,9 +1992,7 @@
}
}
- /* We don't store the acknowledgment in memory. To indicate that it should be stored only in the
- * database we pass AXIS2_FALSE as last argument. This measure is taken to avoid memory corruption.
- */
+ /* Store the acknowledgement message context. */
sandesha2_storage_mgr_store_msg_ctx(storage_mgr, env, key, ack_msg_ctx, AXIS2_FALSE);
if(ack_rm_msg_ctx)
@@ -2014,7 +2000,7 @@
sandesha2_msg_ctx_free(ack_rm_msg_ctx, env);
}
- /* Since we have stored this in database and when piggybacking it is only taken from database
+ /* Since we have stored this in storage and when piggybacking it is only taken from storage
* we can free this now.
*/
if(ack_msg_ctx)
@@ -2814,6 +2800,10 @@
sandesha2_seq_property_bean_t *response_relates_to_bean = NULL;
const axis2_char_t *relates_to_value = axis2_relates_to_get_value(relates_to, env);
+ /* Store the related message id value of the out going applicatoin message. This value
+ * is used in the terminate sequence message processor at server side to find the
+ * highest outgoing message id related to the highestest incoming message id.
+ */
response_relates_to_bean = sandesha2_seq_property_bean_create_with_data(env,
internal_sequence_id, SANDESHA2_SEQ_PROP_HIGHEST_OUT_RELATES_TO,
(axis2_char_t *) relates_to_value);
@@ -2824,7 +2814,10 @@
sandesha2_seq_property_bean_free(response_relates_to_bean, env);
}
}
-
+
+ /* Set the last out message number(This messages number). This is used in creating the terminate
+ * sequence message to include the last message number.
+ */
sandesha2_app_msg_processor_set_last_out_msg_no(env, internal_sequence_id, msg_num, seq_prop_mgr);
to_bean = sandesha2_seq_property_mgr_retrieve(seq_prop_mgr, env, internal_sequence_id,
@@ -2871,7 +2864,6 @@
axis2_endpoint_ref_t *temp_to_epr = NULL;
temp_to_epr = axis2_endpoint_ref_create(env, new_to_str);
- /*sandesha2_msg_ctx_set_to(rm_msg_ctx, env, temp_to_epr);*/
if(to_epr)
{
axis2_endpoint_ref_free(to_epr, env);
@@ -2908,7 +2900,8 @@
msg_number = sandesha2_msg_number_create(env, rm_ns_val);
sandesha2_msg_number_set_msg_num(msg_number, env, msg_num);
sandesha2_seq_set_msg_num(seq, env, msg_number);
-
+
+ /* Setting the last message element in the sequence element if this is the last message */
if(axis2_msg_ctx_get_server_side(app_msg_ctx, env))
{
sandesha2_msg_ctx_t *req_rm_msg = NULL;
@@ -3020,6 +3013,9 @@
sandesha2_seq_property_bean_free(from_acks_to_bean, env);
}
+ /* Store the sender bean for this applicatoin message. This sender bean is used to search and
+ * retrieve the application message from the storage later.
+ */
app_msg_sender_bean = sandesha2_sender_bean_create(env);
sandesha2_sender_bean_set_internal_seq_id(app_msg_sender_bean, env, internal_sequence_id);
sandesha2_sender_bean_set_msg_ctx_ref_key(app_msg_sender_bean, env, storage_key);
@@ -3036,9 +3032,10 @@
is_svr_side = axis2_msg_ctx_get_server_side(app_msg_ctx, env);
/*
- * If server side and anonymous acknowledgment in RM 1.0. In other words this is RM 1.0 replay mode.
- * Note that in this case to_addr is NULL. In duplex mode to_addr cannot be NULL.
- * */
+ * If server side and anonymous acknowledgment. In other words this is replay mode.
+ * Note that in this case to_addr is NULL. In duplex mode to_addr cannot be NULL. We send
+ * the response application message in the back channel.
+ */
if(is_svr_side && sandesha2_utils_is_anon_uri(env, from_acks_to_addr) && (!to_addr ||
sandesha2_utils_is_anon_uri(env, to_addr)))
@@ -3067,12 +3064,14 @@
identifier = sandesha2_identifier_create(env, rm_ns_val);
sandesha2_identifier_set_identifier(identifier, env, rms_sequence_id);
sandesha2_seq_set_identifier(seq, env, identifier);
+ /* Add the sequence element in to the envelope. */
sandesha2_msg_ctx_set_sequence(rm_msg_ctx, env, seq);
+ sandesha2_msg_ctx_add_soap_envelope(rm_msg_ctx, env);
/* TODO add_ack_requested */
- sandesha2_msg_ctx_add_soap_envelope(rm_msg_ctx, env);
-
+
+ /* Add the acknowledgment message into the envelope*/
sandesha2_msg_creator_add_ack_msg(env, rm_msg_ctx, rmd_sequence_id, seq_prop_mgr);
if(req_rm_msg_ctx)
{
@@ -3170,7 +3169,11 @@
if(!is_svr_side && (!reply_to_addr || sandesha2_utils_is_anon_uri(env, reply_to_addr)))
{
- /* Client side and oneway */
+ /* Client side and oneway. We do not spawn new threads here but send the application
+ * message as the same thread as the application client thread. If the first send
+ * fails then we go into a loop and try resending until timeout or maximum number of times
+ * exceeded as specified in policy.
+ */
axis2_transport_out_desc_t *transport_out = NULL;
axis2_transport_sender_t *transport_sender = NULL;
sandesha2_sender_bean_t *sender_bean = NULL;
@@ -3182,6 +3185,7 @@
rms_sequence_bean = sandesha2_seq_property_mgr_retrieve(seq_prop_mgr, env,
internal_sequence_id, SANDESHA2_SEQUENCE_PROPERTY_RMS_SEQ_ID);
+ /* We will wait until the response for the create sequence message received. */
while(!rms_sequence_bean)
{
rms_sequence_bean = sandesha2_seq_property_mgr_retrieve(seq_prop_mgr, env,
@@ -3196,6 +3200,10 @@
sandesha2_seq_property_bean_free(rms_sequence_bean, env);
}
+ /* Store the outgoing sequence id using the message id of the applicatoin message. This is
+ * used in send_ack_if_reqd() function to determine the outgoing sequence id. Note that
+ * this is useful only in the application client side.
+ */
relates_to_bean = sandesha2_seq_property_bean_create_with_data(env, msg_id,
SANDESHA2_SEQ_PROP_RELATED_MSG_ID, rms_sequence_id);
if(relates_to_bean)
@@ -3217,6 +3225,7 @@
}
}
+ /* Add the acknowledgement element into the soap envelope */
if(!sandesha2_util_is_ack_already_piggybacked(env, rm_msg_ctx))
{
sandesha2_ack_mgr_piggyback_acks_if_present(env, rms_sequence_id, rm_msg_ctx, storage_mgr,
@@ -3226,11 +3235,12 @@
identifier = sandesha2_identifier_create(env, rm_ns_val);
sandesha2_identifier_set_identifier(identifier, env, rms_sequence_id);
sandesha2_seq_set_identifier(seq, env, identifier);
+ /* Add the sequence element into the soap envelope */
sandesha2_msg_ctx_set_sequence(rm_msg_ctx, env, seq);
+ sandesha2_msg_ctx_add_soap_envelope(rm_msg_ctx, env);
/* TODO add_ack_requested */
- sandesha2_msg_ctx_add_soap_envelope(rm_msg_ctx, env);
engine = axis2_engine_create(env, conf_ctx);
if(axis2_engine_resume_send(engine, env, app_msg_ctx))
@@ -3555,6 +3565,10 @@
sandesha2_seq_property_bean_free(rms_sequence_bean, env);
}
+ /* Store the outgoing sequence id using the message id of the applicatoin message. This is
+ * used in send_ack_if_reqd() function to determine the outgoing sequence id. Note that
+ * this is useful only in the application client side.
+ */
relates_to_bean = sandesha2_seq_property_bean_create_with_data(env, msg_id,
SANDESHA2_SEQ_PROP_RELATED_MSG_ID, rms_sequence_id);
if(relates_to_bean)
Modified: webservices/sandesha/trunk/c/src/msgprocessors/terminate_seq_msg_processor.c
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/c/src/msgprocessors/terminate_seq_msg_processor.c?rev=703370&r1=703369&r2=703370&view=diff
==============================================================================
--- webservices/sandesha/trunk/c/src/msgprocessors/terminate_seq_msg_processor.c (original)
+++ webservices/sandesha/trunk/c/src/msgprocessors/terminate_seq_msg_processor.c Fri Oct 10 02:47:43 2008
@@ -510,7 +510,7 @@
sandesha2_seq_property_bean_free(last_in_msg_bean, env);
}
- /* If an outbound message has already gone out witch relates to the highest in message id,
+ /* If an outbound message has already gone out which relates to the highest in message id,
* then we can terminate right away.
*/
highest_out_relates_to = sandesha2_utils_get_seq_property(env, rec_side_int_seq_id,
---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org