Author: chamikara
Date: Tue Sep  6 03:13:55 2005
New Revision: 278965

URL: http://svn.apache.org/viewcvs?rev=278965&view=rev
Log:
Now Sandesha2 works with multi message sequences.  :)

Modified:
    webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgCreator.java
    
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java

Modified: webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgCreator.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgCreator.java?rev=278965&r1=278964&r2=278965&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgCreator.java 
(original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/RMMsgCreator.java Tue 
Sep  6 03:13:55 2005
@@ -31,6 +31,8 @@
 import org.apache.axis2.soap.SOAPFactory;

 import org.apache.axis2.wsdl.builder.wsdl4j.WSDL11MEPFinder;

 import org.apache.sandesha2.msgreceivers.RMMessageReceiver;

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

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

 import org.apache.sandesha2.util.SandeshaUtil;

 import org.apache.sandesha2.wsrm.Accept;

 import org.apache.sandesha2.wsrm.AckRequested;

@@ -126,13 +128,20 @@
                Identifier id = new Identifier ();

                id.setIndentifer(sequenceId);

                sequenceAck.setIdentifier(id);

-               AcknowledgementRange range = new AcknowledgementRange ();

+

+               //SequencePropertyBean seqPropBean = new SequencePropertyBean 
(newSequenceId,Constants.SEQ_PROPERTY_RECEIVED_MESSAGES,acksTo);

+               SequencePropertyBeanMgr beanMgr = new SequencePropertyBeanMgr 
(Constants.DEFAULT_STORAGE_TYPE);

+               SequencePropertyBean msgNosBean = (SequencePropertyBean) 
beanMgr.retrieve(sequenceId,Constants.SEQ_PROPERTY_RECEIVED_MESSAGES);

+               String msgNoList = (String) msgNosBean.getValue();

+               System.out.println ("Message No List:" + msgNoList);

                

-               //TODO correct below

-               range.setUpperValue(1);

-               range.setLowerValue(1);

+               AcknowledgementRange[] ackRangeArr = 
SandeshaUtil.getAckRangeArray(msgNoList);

                        

-               sequenceAck.addAcknowledgementRanges(range);

+               int length = ackRangeArr.length;

+               

+               for (int i=0;i<length;i++)

+                       sequenceAck.addAcknowledgementRanges(ackRangeArr[i]);

+               

                sequenceAck.toOMElement(envelope.getHeader());

                applicationMsg.setAction(Constants.WSRM.ACTION_SEQ_ACK);

                applicationMsg.setMessageId(SandeshaUtil.getUUID()); 


Modified: 
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?rev=278965&r1=278964&r2=278965&view=diff
==============================================================================
--- 
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
 (original)
+++ 
webservices/sandesha/trunk/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
 Tue Sep  6 03:13:55 2005
@@ -18,12 +18,15 @@
 

 import java.util.ArrayList;

 

+import org.apache.axis2.AxisFault;

 import org.apache.sandesha2.Constants;

 import org.apache.sandesha2.MsgInitializer;

 import org.apache.sandesha2.MsgValidator;

 import org.apache.sandesha2.RMMsgContext;

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

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

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

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

 import org.apache.sandesha2.wsrm.Sequence;

 

 /**

@@ -45,9 +48,19 @@
                SequencePropertyBean msgsBean = (SequencePropertyBean) 
mgr.retrieve( sequenceId,Constants.SEQ_PROPERTY_RECEIVED_MESSAGES);

                SequencePropertyBean acksToBean = (SequencePropertyBean) 
mgr.retrieve( sequenceId,Constants.SEQ_PROPERTY_ACKS_TO);

                

+               long msgNo = sequence.getMessageNumber().getMessageNumber();

+               if (msgNo==0)

+                       throw new MsgProcessorException ("Wrong message 
number");

                

                String messagesStr =  (String) msgsBean.getValue();

+               if (messagesStr!="" && messagesStr!=null)

+                       messagesStr = messagesStr + "," + Long.toString(msgNo);

+               else 

+                       messagesStr = Long.toString(msgNo);

                

+               msgsBean.setValue(messagesStr);

+               mgr.update(msgsBean);

+                       

                String acksToStr = null;

                try {

                    acksToStr = (String) acksToBean.getValue();

@@ -55,8 +68,8 @@
                        e.printStackTrace();

                }

        

-               System.out.println ("Messages received:" + 
Constants.SEQ_PROPERTY_RECEIVED_MESSAGES);

-               System.out.println ("Acks To:" + 
Constants.SEQ_PROPERTY_ACKS_TO);

+               System.out.println ("Messages received:" + messagesStr);

+               System.out.println ("Acks To:" + acksToStr);

                

                if (acksToStr==null || messagesStr==null)

                        throw new MsgProcessorException ("Seqeunce properties 
are not set correctly");


Modified: 
webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java
URL: 
http://svn.apache.org/viewcvs/webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java?rev=278965&r1=278964&r2=278965&view=diff
==============================================================================
--- webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java 
(original)
+++ webservices/sandesha/trunk/src/org/apache/sandesha2/util/SandeshaUtil.java 
Tue Sep  6 03:13:55 2005
@@ -16,7 +16,12 @@
  */

 package org.apache.sandesha2.util;

 

+import java.awt.datatransfer.StringSelection;

+import java.util.ArrayList;

+import java.util.StringTokenizer;

+

 import org.apache.axis2.om.impl.MIMEOutputUtils;

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

 

 /**

  * @author chamikara

@@ -28,5 +33,94 @@
        public static String getUUID () {

                String newSequenceID = "uuid:" + 
MIMEOutputUtils.getRandomStringOf18Characters();

                return newSequenceID;

+       }

+       

+       public static AcknowledgementRange[] getAckRangeArray (String msgNoStr) 
{

+               String[] msgNoStrs = msgNoStr.split(",");

+               long[] msgNos = getLongArr (msgNoStrs);

+               

+               long[] sortedMsgNos = sort (msgNos);

+               

+               int length = sortedMsgNos.length;

+               if (length==0)

+                       return null;

+               //for (int i=0;i<length;i++) 

+               //      System.out.println (sortedMsgNos[i]);

+               

+               ArrayList ackRanges = new ArrayList();

+               // upper = 0;

+               long lower = sortedMsgNos[0];

+               //long max = sortedMsgNos[sortedMsgNos.length];

+               long temp = sortedMsgNos[0];

+               

+               for (long i=1;i<length;i++) {

+                       int intI = (int) i;

+                       if ((sortedMsgNos[intI]==(temp+1)) || 
(sortedMsgNos[intI]==(temp))) {

+                               temp = sortedMsgNos[intI];

+                               continue;

+                       }

+                       

+                       

+                       AcknowledgementRange ackRange = new 
AcknowledgementRange ();

+                       ackRange.setLowerValue(lower);

+                       ackRange.setUpperValue(temp);

+                       ackRanges.add(ackRange);

+                       

+                       lower = sortedMsgNos[intI];

+                       temp = sortedMsgNos[intI];

+                       

+               }

+               

+               AcknowledgementRange ackRange = new AcknowledgementRange ();

+               ackRange.setLowerValue(lower);

+               ackRange.setUpperValue(temp);

+               ackRanges.add(ackRange);

+               

+               Object[] objs = ackRanges.toArray();

+               int l = objs.length;

+               AcknowledgementRange[] ackRangeArr = new AcknowledgementRange 
[l];

+               for (int i=0;i<l;i++) 

+                       ackRangeArr[i] = (AcknowledgementRange) objs[i];

+               

+               return ackRangeArr;

+       }

+//     TODO remove int from folowing methods. (to make them truly Long :) )

+       

+       

+       private static long[] sort(long[] input) {

+               int length = input.length;

+               

+               long temp = 0;

+               for (int i=0;i<length;i++) {

+                       temp = 0;

+                       for (int j=i;j<length;j++) {

+                               if (input[j] < input[i]) {

+                                       //swap

+                                       temp = input[i];

+                                       input[i] = input[j];

+                                       input[j] = temp;

+                               }

+                       }

+               }

+               

+               return input;

+       }

+       

+       

+       

+       private static long[] getLongArr(String[] strings) {

+               int length = strings.length;

+               long[] longs = new long[length];

+               for (int i=0;i<length;i++) {

+                       longs[i] = Long.parseLong(strings[i]);

+               }

+               

+               return longs;

+       }

+       

+       public static void main (String[] args) {

+               String msgList = "13,2,6,4,4,1,999,12,3";

+               getAckRangeArray( msgList);

+               

        }

 }




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

Reply via email to