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