Author: chamikara
Date: Sun Nov 20 07:44:12 2005
New Revision: 345752

URL: http://svn.apache.org/viewcvs?rev=345752&view=rev
Log:
Ack piggybacking is working.
Acks get piggybacked to response messages if a message become available within 
the acknowledgement interval (otherwise acks are sent as standalone)

Added:
    
webservices/sandesha/trunk/src/org/apache/sandesha2/AcknowledgementManager.java
Modified:
    webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgContext.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java

Added: 
webservices/sandesha/trunk/src/org/apache/sandesha2/AcknowledgementManager.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/AcknowledgementManager.java?rev=345752&view=auto
==============================================================================
--- 
webservices/sandesha/trunk/src/org/apache/sandesha2/AcknowledgementManager.java 
(added)
+++ 
webservices/sandesha/trunk/src/org/apache/sandesha2/AcknowledgementManager.java 
Sun Nov 20 07:44:12 2005
@@ -0,0 +1,86 @@
+/*

+ * Copyright  1999-2004 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.

+ *

+ */

+

+package org.apache.sandesha2;

+

+import java.util.Collection;

+import java.util.Iterator;

+

+import org.apache.axis2.context.ConfigurationContext;

+import org.apache.axis2.context.MessageContext;

+import org.apache.sandesha2.storage.StorageManager;

+import org.apache.sandesha2.storage.beanmanagers.RetransmitterBeanMgr;

+import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;

+import org.apache.sandesha2.storage.beans.RetransmitterBean;

+import org.apache.sandesha2.storage.beans.SequencePropertyBean;

+import org.apache.sandesha2.util.MsgInitializer;

+import org.apache.sandesha2.util.SandeshaUtil;

+import org.apache.sandesha2.wsrm.IOMRMPart;

+import org.apache.sandesha2.wsrm.Sequence;

+import org.apache.sandesha2.wsrm.SequenceAcknowledgement;

+

+/**

+ * @author chamikara

+ * 

+ */

+public class AcknowledgementManager {

+

+       public static void piggybackAckIfPresent (RMMsgContext 
applicationRMMsgContext) throws SandeshaException {

+               ConfigurationContext configurationContext = 
applicationRMMsgContext.getMessageContext().getSystemContext();

+               StorageManager storageManager = 
SandeshaUtil.getSandeshaStorageManager(configurationContext);

+               RetransmitterBeanMgr retransmitterBeanMgr = 
storageManager.getRetransmitterBeanMgr();

+               SequencePropertyBeanMgr sequencePropertyBeanMgr = 
storageManager.getSequencePropretyBeanMgr();

+               

+               RetransmitterBean findBean = new RetransmitterBean ();

+               

+               Sequence sequence = (Sequence) 
applicationRMMsgContext.getMessagePart(Constants.MessageParts.SEQUENCE);

+               if (sequence==null)

+                       throw new SandeshaException ("Application message does 
not contain a sequence part");

+               

+               String sequenceId = sequence.getIdentifier().getIdentifier();

+               

+               SequencePropertyBean tempSequenceBean = 
sequencePropertyBeanMgr.retrieve(sequenceId,Constants.SequenceProperties.TEMP_SEQUENCE_ID);

+               if (tempSequenceBean==null)

+                       throw new SandeshaException ("Temp Sequence is not 
set");

+               

+               String tempSequenceId = (String) tempSequenceBean.getValue();

+               findBean.setTempSequenceId(tempSequenceId);

+               findBean.setMessagetype(Constants.MessageTypes.ACK);

+               

+               Collection collection = retransmitterBeanMgr.find(findBean);

+               Iterator it = collection.iterator();

+               

+               if (it.hasNext()) {

+                       RetransmitterBean ackBean = (RetransmitterBean) 
it.next();

+                       

+                       //deleting the ack entry.

+                       retransmitterBeanMgr.delete(ackBean.getMessageId());

+                       

+                       //Adding the ack to the application message

+                       MessageContext ackMsgContext = 
SandeshaUtil.getStoredMessageContext(ackBean.getKey());

+                       RMMsgContext ackRMMsgContext = 
MsgInitializer.initializeMessage(ackMsgContext);

+                       if 
(ackRMMsgContext.getMessageType()!=Constants.MessageTypes.ACK)

+                               throw new SandeshaException ("Invalid ack 
message entry");

+                       

+                       SequenceAcknowledgement sequenceAcknowledgement = 
(SequenceAcknowledgement) 
ackRMMsgContext.getMessagePart(Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);

+                       
applicationRMMsgContext.setMessagePart(Constants.MessageParts.SEQ_ACKNOWLEDGEMENT,sequenceAcknowledgement);

+                       

+                       applicationRMMsgContext.addSOAPEnvelope();

+               }

+               

+       }

+}


Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgContext.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgContext.java?rev=345752&r1=345751&r2=345752&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgContext.java 
(original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgContext.java Sun 
Nov 20 07:44:12 2005
@@ -29,6 +29,7 @@
 import org.apache.axis2.context.AbstractContext;

 import org.apache.axis2.context.MessageContext;

 import org.apache.axis2.soap.SOAPEnvelope;

+import org.apache.axis2.soap.SOAPProcessingException;

 import org.apache.sandesha2.util.SOAPAbstractFactory;

 import org.apache.sandesha2.wsrm.IOMRMElement;

 import org.apache.sandesha2.wsrm.IOMRMPart;

@@ -63,14 +64,18 @@
                //MsgInitializer.populateRMMsgContext(ctx,this);

        }

 

-       public void addSOAPEnvelope() throws AxisFault {

+       public void addSOAPEnvelope() throws SandeshaException {

                int SOAPVersion = Constants.SOAPVersion.v1_1;

                

                if (!msgContext.isSOAP11()) 

                        SOAPVersion = Constants.SOAPVersion.v1_2;

                

                if (msgContext.getEnvelope() == null) {

-                       
msgContext.setEnvelope(SOAPAbstractFactory.getSOAPFactory(SOAPVersion).getDefaultEnvelope());

+                       try {

+                               
msgContext.setEnvelope(SOAPAbstractFactory.getSOAPFactory(SOAPVersion).getDefaultEnvelope());

+                       } catch (AxisFault e) {

+                               throw new SandeshaException (e.getMessage());

+                       }

                }

 

                SOAPEnvelope envelope = msgContext.getEnvelope();


Modified: 
webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java?rev=345752&r1=345751&r2=345752&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java 
(original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/workers/Sender.java Sun 
Nov 20 07:44:12 2005
@@ -24,6 +24,7 @@
 import org.apache.axis2.context.ServiceContext;

 import org.apache.axis2.engine.AxisEngine;

 import org.apache.axis2.soap.SOAPEnvelope;

+import org.apache.sandesha2.AcknowledgementManager;

 import org.apache.sandesha2.Constants;

 import org.apache.sandesha2.RMMsgContext;

 import org.apache.sandesha2.SandeshaException;

@@ -89,6 +90,11 @@
                                                                                
                        .getMessageType())

                                                                        + "' 
message.");

                                                        }

+                                               }

+                                               

+                                               if 
(rmMsgCtx.getMessageType()==Constants.MessageTypes.APPLICATION) {

+                                                       //piggybacking if an 
ack if available for the same sequence.

+                                                       
AcknowledgementManager.piggybackAckIfPresent(rmMsgCtx);

                                                }

                                                

                                                try {




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to