You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by ch...@apache.org on 2005/09/06 12:14:22 UTC

svn commit: r278965 - in /webservices/sandesha/trunk/src/org/apache/sandesha2: RMMsgCreator.java msgprocessors/ApplicationMsgProcessor.java util/SandeshaUtil.java

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: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org