Author: mckierna
Date: Thu Jan 18 08:44:23 2007
New Revision: 497494
URL: http://svn.apache.org/viewvc?view=rev&rev=497494
Log:
http://issues.apache.org/jira/browse/SANDESHA2-65
Added:
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/utils/
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/utils/RangeStringTest.java
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/client/SandeshaClient.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMDBean.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMSBean.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/Range.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RangeString.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Invoker.java
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/SandeshaUtilTest.java
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/workers/ForceInboundDispatchTest.java
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/client/SandeshaClient.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/client/SandeshaClient.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/client/SandeshaClient.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/client/SandeshaClient.java
Thu Jan 18 08:44:23 2007
@@ -188,9 +188,10 @@
StorageManager storageManager) throws SandeshaException
{
report.setSequenceID(rmsBean.getSequenceID());
- List completedMessageList =
-
AcknowledgementManager.getClientCompletedMessagesList(rmsBean.getInternalSequenceID(),
rmsBean.getSequenceID(),
- storageManager);
+ List completedMessageList = AcknowledgementManager.
+
getClientCompletedMessageRanges(rmsBean.getInternalSequenceID(),
+ rmsBean.getSequenceID(),
+
storageManager).getContainedElementsAsNumbersList();
Iterator iter = completedMessageList.iterator();
while (iter.hasNext()) {
@@ -985,8 +986,10 @@
SequenceReport sequenceReport = new SequenceReport();
- ArrayList completedMessageList =
AcknowledgementManager.getServerCompletedMessagesList(sequenceID,
- storageManager);
+ List completedMessageList = AcknowledgementManager.
+ getServerCompletedMessageRanges(
+ sequenceID,
+
storageManager).getContainedElementsAsNumbersList();
Iterator iter = completedMessageList.iterator();
while (iter.hasNext()) {
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
Thu Jan 18 08:44:23 2007
@@ -17,8 +17,6 @@
package org.apache.sandesha2.handlers;
-import java.util.List;
-
import org.apache.axiom.soap.SOAPBody;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axis2.AxisFault;
@@ -39,6 +37,8 @@
import org.apache.sandesha2.storage.Transaction;
import org.apache.sandesha2.storage.beans.RMDBean;
import org.apache.sandesha2.util.MsgInitializer;
+import org.apache.sandesha2.util.Range;
+import org.apache.sandesha2.util.RangeString;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.wsrm.Sequence;
@@ -180,7 +180,8 @@
RMDBean rmdBean =
SandeshaUtil.getRMDBeanFromSequenceId(storageManager, propertyKey);
if (rmdBean != null) {
if
(rmdBean.getServerCompletedMessages() != null) {
- if
(rmdBean.getServerCompletedMessages().contains(new Long(msgNo)))
+ if
(rmdBean.getServerCompletedMessages().isMessageNumberInRanges(msgNo))
+ //this msg is in a
completed range
drop = true;
}
@@ -197,11 +198,11 @@
log.debug(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.emptyLastMsg));
drop = true;
- List
serverCompletedMsgs = rmdBean.getServerCompletedMessages();
-
- // Add this
message to the completed range
-
serverCompletedMsgs.add(new Long(msgNo));
+ RangeString
serverCompletedMsgs = rmdBean.getServerCompletedMessages();
+ // Add this
message to the completed ranges
+
serverCompletedMsgs.addRange(new Range(msgNo));
+ // Update with
the new ranges
rmdBean.setServerCompletedMessages(serverCompletedMsgs);
// TODO correct
the syntac into '[received msgs]'
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
Thu Jan 18 08:44:23 2007
@@ -17,7 +17,6 @@
package org.apache.sandesha2.msgprocessors;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
@@ -46,6 +45,8 @@
import org.apache.sandesha2.storage.beans.SenderBean;
import org.apache.sandesha2.util.AcknowledgementManager;
import org.apache.sandesha2.util.FaultManager;
+import org.apache.sandesha2.util.Range;
+import org.apache.sandesha2.util.RangeString;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.util.TerminateManager;
import org.apache.sandesha2.wsrm.AcknowledgementRange;
@@ -140,26 +141,31 @@
input.setInternalSequenceID(sequencePropertyKey);
Collection retransmitterEntriesOfSequence =
retransmitterMgr.find(input);
- ArrayList ackedMessagesList = new ArrayList();
- boolean removedSenderBean = false;
+ RangeString ackedMessagesRanges = new RangeString(); //keep
track of the ranges in the ack msgs
+ long numberOfNewMessagesAcked = 0;
+
while (ackRangeIterator.hasNext()) {
AcknowledgementRange ackRange = (AcknowledgementRange)
ackRangeIterator.next();
long lower = ackRange.getLowerValue();
long upper = ackRange.getUpperValue();
- if(log.isDebugEnabled()) log.debug("Ack Range: " +
lower + " - " + upper);
+
+ if(log.isDebugEnabled())
+ log.debug("Ack Range: " + lower + " - " +
upper);
+ //add this new range to the ongoing string
+ ackedMessagesRanges.addRange(new Range(lower, upper));
+
for (long messageNo = lower; messageNo <= upper;
messageNo++) {
SenderBean retransmitterBean =
getRetransmitterEntry(retransmitterEntriesOfSequence, messageNo);
if (retransmitterBean != null) {
+ //this is a new ack range, not just the
repeat of a previous one
retransmitterMgr.delete(retransmitterBean.getMessageID());
// removing the application message
from the storage.
String storageKey =
retransmitterBean.getMessageContextRefKey();
storageManager.removeMessageContext(storageKey);
- removedSenderBean = true;
+ numberOfNewMessagesAcked++;
}
-
- ackedMessagesList.add(new Long(messageNo));
}
}
@@ -187,11 +193,14 @@
// setting acked message date.
// TODO add details specific to each message.
- // Set the completed message list, but only if we have actually
removed a SenderBean
- // It is possible for the ACK messages arrive out of sequence
- if (removedSenderBean) {
- rmsBean.setClientCompletedMessages(ackedMessagesList);
- long noOfMsgsAcked = ackedMessagesList.size();
+ // We overwrite the previous client completed message ranges
with the
+ // latest view, but only if it is an update i.e. contained a new
+ // ack range (which is because we do not previous acks arriving
late
+ // to break us)
+ if (numberOfNewMessagesAcked>0) {
+ rmsBean.setClientCompletedMessages(ackedMessagesRanges);
+ long noOfMsgsAcked =
+ rmsBean.getNumberOfMessagesAcked() +
numberOfNewMessagesAcked;
rmsBean.setNumberOfMessagesAcked(noOfMsgsAcked);
}
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
Thu Jan 18 08:44:23 2007
@@ -45,6 +45,7 @@
import org.apache.sandesha2.storage.beans.RMDBean;
import org.apache.sandesha2.storage.beans.SenderBean;
import org.apache.sandesha2.util.MsgInitializer;
+import org.apache.sandesha2.util.RangeString;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.util.SpecSpecificConstants;
import org.apache.sandesha2.wsrm.Accept;
@@ -199,7 +200,7 @@
String rmSpecVersion =
createSeqResponseRMMsgCtx.getRMSpecVersion();
rMDBean.setRMVersion(rmSpecVersion);
- rMDBean.setServerCompletedMessages(new ArrayList());
+ rMDBean.setServerCompletedMessages(new RangeString());
RMDBeanMgr rmdBeanMgr = storageManager.getRMDBeanMgr();
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
Thu Jan 18 08:44:23 2007
@@ -19,7 +19,6 @@
import java.util.Collection;
import java.util.Iterator;
-import java.util.List;
import javax.xml.namespace.QName;
@@ -52,6 +51,8 @@
import org.apache.sandesha2.util.AcknowledgementManager;
import org.apache.sandesha2.util.FaultManager;
import org.apache.sandesha2.util.MsgInitializer;
+import org.apache.sandesha2.util.Range;
+import org.apache.sandesha2.util.RangeString;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.wsrm.Sequence;
@@ -171,11 +172,11 @@
bean.setHighestInMessageNumber(msgNo);
}
- // Get the server completed messages list
- List serverCompletedMessages =
bean.getServerCompletedMessages();
-
- // If the message in the list of completed
- boolean msgNoPresentInList =
serverCompletedMessages.contains(new Long(msgNo));
+ // Get the server completed message ranges list
+ RangeString serverCompletedMessageRanges =
bean.getServerCompletedMessages();
+ // See if the message is in the list of completed ranges
+ boolean msgNoPresentInList =
+
serverCompletedMessageRanges.isMessageNumberInRanges(msgNo);
if (msgNoPresentInList
&&
(Sandesha2Constants.QOS.InvocationType.DEFAULT_INVOCATION_TYPE ==
Sandesha2Constants.QOS.InvocationType.EXACTLY_ONCE)) {
@@ -187,7 +188,7 @@
if (!msgNoPresentInList)
{
- serverCompletedMessages.add(new Long(msgNo));
+ serverCompletedMessageRanges.addRange(new Range(msgNo));
}
// Update the RMD bean
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMDBean.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMDBean.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMDBean.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMDBean.java
Thu Jan 18 08:44:23 2007
@@ -17,7 +17,7 @@
package org.apache.sandesha2.storage.beans;
-import java.util.List;
+import org.apache.sandesha2.util.RangeString;
/**
* This bean is used at the receiving side (of both server and client)
@@ -43,17 +43,16 @@
private String lastInMessageId;
/**
- * For incoming sequences this gives the msg no's of the messages that
were
- * received (may be an ack was sent - depending on the policy)
+ * For incoming sequences this gives the msg ranges of the messages that
+ * have been received (and also possibly an ack was sent, depending on
the policy)
*/
- private List serverCompletedMessages = null;
+ private RangeString serverCompletedMessages = null;
/**
* For IN_ORDER sequences, we can have finite ranges of messages that
can be
- * delivered out of order. These are maintained as a String that is
consistent
- * with the form described in org.apache.sandesha2.util.RangeString
+ * delivered out of order. These are maintained as a RangeString
*/
- private String outOfOrderRanges = null;
+ private RangeString outOfOrderRanges = null;
/**
* Comment for <code>nextMsgNoToProcess</code>
@@ -122,11 +121,11 @@
this.highestInMessageNumber = highestInMessageNumber;
}
- public List getServerCompletedMessages() {
+ public RangeString getServerCompletedMessages() {
return serverCompletedMessages;
}
- public void setServerCompletedMessages(List serverCompletedMessages) {
+ public void setServerCompletedMessages(RangeString
serverCompletedMessages) {
this.serverCompletedMessages = serverCompletedMessages;
}
@@ -138,11 +137,11 @@
this.lastInMessageId = lastInMessageId;
}
- public String getOutOfOrderRanges() {
+ public RangeString getOutOfOrderRanges() {
return outOfOrderRanges;
}
- public void setOutOfOrderRanges(String outOfOrderRanges) {
+ public void setOutOfOrderRanges(RangeString outOfOrderRanges) {
this.outOfOrderRanges = outOfOrderRanges;
}
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMSBean.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMSBean.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMSBean.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/RMSBean.java
Thu Jan 18 08:44:23 2007
@@ -17,7 +17,7 @@
package org.apache.sandesha2.storage.beans;
-import java.util.List;
+import org.apache.sandesha2.util.RangeString;
/**
* This bean is used at the sending side (of both server and client)
@@ -69,10 +69,10 @@
private String highestOutRelatesTo = null;
/**
- * For out going sequences this gives the messages that were sent and
that were successfully
+ * For out going sequences this gives the message ranges that were sent
and that were successfully
* acked by the other end point.
*/
- private List clientCompletedMessages = null;
+ private RangeString clientCompletedMessages = null;
private String transportTo;
@@ -224,11 +224,11 @@
rmsFlags |= NEXT_MSG_NUM_FLAG;
}
- public List getClientCompletedMessages() {
+ public RangeString getClientCompletedMessages() {
return clientCompletedMessages;
}
- public void setClientCompletedMessages(List clientCompletedMessages) {
+ public void setClientCompletedMessages(RangeString
clientCompletedMessages) {
this.clientCompletedMessages = clientCompletedMessages;
}
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
Thu Jan 18 08:44:23 2007
@@ -17,11 +17,9 @@
package org.apache.sandesha2.util;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
-import java.util.List;
import javax.xml.namespace.QName;
@@ -159,10 +157,10 @@
* @param outGoingMessage
* @return
*/
- public static List getClientCompletedMessagesList(String
internalSequenceID, String sequenceID, StorageManager storageManager)
+ public static RangeString getClientCompletedMessageRanges(String
internalSequenceID, String sequenceID, StorageManager storageManager)
throws SandeshaException {
if (log.isDebugEnabled())
- log.debug("Enter:
AcknowledgementManager::getClientCompletedMessagesList " + internalSequenceID +
", " + sequenceID);
+ log.debug("Enter:
AcknowledgementManager::getClientCompletedMessageRanges " + internalSequenceID
+ ", " + sequenceID);
RMSBean rmsBean =
SandeshaUtil.getRMSBeanFromSequenceId(storageManager, sequenceID);
@@ -173,17 +171,17 @@
throw e;
}
- List completedMsgList = rmsBean.getClientCompletedMessages();
+ RangeString completedMsgRanges =
rmsBean.getClientCompletedMessages();
if (log.isDebugEnabled())
- log.debug("Exit:
AcknowledgementManager::getClientCompletedMessagesList");
- return completedMsgList;
+ log.debug("Exit:
AcknowledgementManager::getClientCompletedMessageRanges");
+ return completedMsgRanges;
}
- public static ArrayList getServerCompletedMessagesList(String
sequenceID, StorageManager storageManager)
+ public static RangeString getServerCompletedMessageRanges(String
sequenceID, StorageManager storageManager)
throws SandeshaException {
if (log.isDebugEnabled())
- log.debug("Enter:
AcknowledgementManager::getServerCompletedMessagesList " + sequenceID);
+ log.debug("Enter:
AcknowledgementManager::getServerCompletedMessageRanges " + sequenceID);
RMDBean rmdBean =
SandeshaUtil.getRMDBeanFromSequenceId(storageManager, sequenceID);
@@ -195,8 +193,8 @@
}
if (log.isDebugEnabled())
- log.debug("Exit:
AcknowledgementManager::getServerCompletedMessagesList");
- return (ArrayList)rmdBean.getServerCompletedMessages();
+ log.debug("Exit:
AcknowledgementManager::getServerCompletedMessageRanges");
+ return rmdBean.getServerCompletedMessages();
}
public static RMMsgContext generateAckMessage(RMMsgContext
referenceRMMessage, String sequencePropertyKey ,String sequenceId,
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/Range.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/Range.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/Range.java
(original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/Range.java
Thu Jan 18 08:44:23 2007
@@ -17,6 +17,8 @@
package org.apache.sandesha2.util;
+import java.io.Serializable;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.sandesha2.i18n.SandeshaMessageHelper;
@@ -25,12 +27,22 @@
/**
* Data structure to represent a range of values from lowerValue->upperValue
inclusive.
*/
-public class Range {
+public class Range implements Serializable{
+
+ private static final long serialVersionUID = 1701339894096240940L;
private static final Log log = LogFactory.getLog(Range.class);
long lowerValue;
long upperValue;
+
+ /**
+ * Create a range for a single number
+ * @param value
+ */
+ public Range(long value){
+ this(value, value);
+ }
/**
*
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RangeString.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RangeString.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RangeString.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RangeString.java
Thu Jan 18 08:44:23 2007
@@ -17,6 +17,7 @@
package org.apache.sandesha2.util;
+import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
@@ -34,13 +35,21 @@
* Also performs task such as aggregation of ranges
*
*/
-public class RangeString {
+public class RangeString implements Serializable{
+ private static final long serialVersionUID = -3487094584241136861L;
/**
* Each entry in this map is a range
* The key to each range entry is range.lowerValue
*/
- private Map rangeMap;
+ private final Map rangeMap;
+
+ /**
+ * Creates an empty range string
+ */
+ public RangeString(){
+ this(null);
+ }
/**
* Expects a String of the form
@@ -80,24 +89,77 @@
return null;
}
- private Range getRangeImmediatelyAbove(long msgNumber){
- //see if there is a range that starts imemdiately
- //above the specified number
- long targetRange = msgNumber + 1;
- return (Range)rangeMap.get(new Long(targetRange));
+ /**
+ * If the passed in evelopeRange encompasses several ranges, these are
+ * removed from the map
+ * @param currentRange
+ * @return
+ */
+ private void cleanUpRangesEnveloped(Range envelopeRange){
+ //see if there are any ranges that start at some point between
+ //immediately above the start of the envelope range up to
+ //its end
+ long startOfRangeLookup = envelopeRange.lowerValue + 1;
+ long endOfRangeLookup = envelopeRange.upperValue;
+ for(long i=startOfRangeLookup; i<=endOfRangeLookup; i++){
+ Range removedRange = (Range)rangeMap.remove(new
Long(i)); //remove if there is anything present
+ if(removedRange!=null &&
removedRange.upperValue>envelopeRange.upperValue){
+ //this range started in our envelope but
stretched out beyond it so we
+ //can absorb its upper value
+ envelopeRange.upperValue =
removedRange.upperValue;
+ }
+ }
+ }
+
+ /**
+ * Looks to see if there is a range that starts immediately above
+ * this one. If so, that range is returned
+ * @param targetRange
+ * @return
+ */
+ private Range getRangeImmediatelyAbove(Range targetRange){
+ return (Range)rangeMap.get(new Long(targetRange.upperValue +
1));
}
public boolean isMessageNumberInRanges(long messageNumber){
+ if(getRangeForMessageNumber(messageNumber)!=null){
+ return true;
+ }
+ else{
+ return false;
+ }
+ }
+
+ public Range getRangeForMessageNumber(long messageNumber){
Range below = getNextRangeBelow(messageNumber);
if(below!=null){
if(below.rangeContainsValue(messageNumber)){
//this range contains our value
- return true;
+ return below;
}
}
//if we made it here then we are not in any ranges
+ return null;
+ }
+
+ /**
+ * Returns true if the numbers are contained in a single range
+ * @param interestedRange
+ * @return
+ */
+ public boolean isRangeCompleted(Range interestedRange){
+ Range containingRange =
getNextRangeBelow(interestedRange.lowerValue);
+ if(containingRange!=null){
+ //so we know there is a range below us, check to see if
it
+ //stretches to us or over above us
+
if(containingRange.upperValue>=interestedRange.upperValue){
+ //it does, so this range is contained
+ return true;
+ }
+ }
+ //either their was no range at all or it did not reach high
enough
return false;
}
@@ -106,11 +168,7 @@
* @return a String of the form [x1,y1][x2,y2]...[xn,yn]
*/
public String toString(){
- //iterate the rangeList creating an on-going string
- Set keySet = rangeMap.keySet();
- //sort the set
- List sortedList = new LinkedList(keySet);
- Collections.sort(sortedList);
+ List sortedList = getSortedKeyList();
String returnString = "";
for(int i=0; i<sortedList.size(); i++){
returnString = returnString +
(rangeMap.get(sortedList.get(i))).toString();
@@ -120,34 +178,48 @@
}
/**
- * Returns a list string of the form
- * [x1,x2,x3....xn] listing each discrete number contained in all of
the ranges
- * in order
+ * @return ordered array of each range object in the string
*/
- public String getContainedElementsAsListString(){
- //iterate the rangeList creating an on-going string
+ public Range[] getRanges(){
+ List sortedKeyList = getSortedKeyList();
+ Range[] ranges = new Range[sortedKeyList.size()];
+ for(int i=0; i<ranges.length; i++){
+ ranges[i] = (Range)rangeMap.get(sortedKeyList.get(i));
+ }
+ return ranges;
+ }
+
+
+ private List getSortedKeyList(){
Set keySet = rangeMap.keySet();
//sort the set
List sortedList = new LinkedList(keySet);
Collections.sort(sortedList);
- String returnString = "[";
- for(int i=0; i<sortedList.size(); i++){
- Range r = (Range)rangeMap.get(sortedList.get(i));
- for(long l=r.lowerValue; l<=r.upperValue;l++){
- if(i==0 && l==r.lowerValue){
- //first time does not need leading ','
- returnString += l;
- }
- else{
- returnString += "," + l;
- }
+ return sortedList;
+ }
+
+ /**
+ * Returns a List of the form
+ * [x1,x2,x3....xn] listing each discrete number contained in all of
the ranges
+ * in order
+ * NOTE: inefficient, should be avoided
+ */
+ public List getContainedElementsAsNumbersList(){
+ List returnList = new LinkedList();
+ Range[] ranges = getRanges();
+ for(int i=0; i<ranges.length; i++){
+ for(long current = ranges[i].lowerValue;
current<=ranges[i].upperValue; current++){
+ returnList.add(new Long(current));
}
}
-
- return returnString + "]";
+ return returnList;
}
public void addRange(Range r){
+
+ Range finalRange = r; //we use this to keep track of the final
range
+ //as we might aggregate this new range with existing ranges
+
//first we try to aggregate existing ranges
boolean rangeAdded = false;
long indexKey = r.lowerValue;
@@ -160,11 +232,17 @@
//we do not quit yet, as maybe this has plugged
a gap between
//an upper range. But we should mark the range
as added.
rangeAdded = true;
+ finalRange = below; //as below now encompasses
both ranges agrregated together
+ }
+ else if(below.upperValue > r.lowerValue){
+ //the range below extends over this one - this
range
+ //is already complete, so we do not need to add
it at all.
+ return;
}
}
//see if we can extend another range down
- Range above = getRangeImmediatelyAbove(r.upperValue);
+ Range above = getRangeImmediatelyAbove(r);
if(above!=null){
//we can extend this down
//first remove it. Then we will either add it under its
new key or
@@ -174,13 +252,16 @@
if(rangeAdded){
//we extend down and up - join two ranges
together
//Sicne we have removed the upper, we simply do
not add it again and set the
- //lower range to encompass both of them
+ //below range to encompass both of them
below.upperValue = above.upperValue;
+ //NOTE: finalRange has already been set when
extending up
}
else{
- //we did extend up but we did not extend down.
Add the upper range back under its new key
+ //we did not extend up but we can extend down.
+ //Add the upper range back under its new key
rangeAdded = true;
rangeMap.put(new Long(above.lowerValue), above);
+ finalRange = above;
}
}
@@ -188,11 +269,16 @@
if(!rangeAdded){
//if we got here and did not add a range then we need
to
//genuinely add a new range object
- rangeMap.put(new Long(r.lowerValue), r);
+ rangeMap.put(new Long(r.lowerValue), r);
}
-
+
+ //finally, we go through the new range we have added to make
sure it
+ //does not now encompass any smaller ranges that were there
before (but
+ //that could not be extended up or down)
+ cleanUpRangesEnveloped(finalRange);
}
+
}
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
Thu Jan 18 08:44:23 2007
@@ -22,9 +22,7 @@
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
-import java.util.StringTokenizer;
import javax.xml.namespace.QName;
import javax.xml.stream.FactoryConfigurationError;
@@ -118,86 +116,29 @@
}
/**
- * Used to convert a message number list (a comma seperated list of
message
- * numbers) into a set of AcknowledgementRanges. This breaks the list,
sort
- * the items and group them to create the AcknowledgementRange objects.
+ * Used to convert a RangeString into a set of AcknowledgementRanges.
*
* @param msgNoStr
* @param factory
* @return
* @throws SandeshaException
*/
- public static ArrayList getAckRangeArrayList(List completedMessages,
String rmNamespaceValue)
+ public static ArrayList getAckRangeArrayList(RangeString
completedMessageRanges, String rmNamespaceValue)
throws SandeshaException {
- ArrayList ackRanges = new ArrayList();
+ ArrayList ackRanges = new ArrayList(); //the final ack ranges
that we will build up
- ArrayList sortedMsgNoArrayList =
getSortedMsgNoArrayList(completedMessages);
-
- Iterator iterator = sortedMsgNoArrayList.iterator();
- long lower = 0;
- long upper = 0;
- boolean completed = true;
-
- while (iterator.hasNext()) {
- Long tempLng = (Long) iterator.next();
- long temp = tempLng.longValue();
- if (lower == 0) {
- lower = temp;
- upper = temp;
- completed = false;
- } else if (temp == (upper + 1)) {
- upper = temp;
- completed = false;
- } else {
- // add ackRange (lower,upper)
- AcknowledgementRange ackRange = new
AcknowledgementRange(rmNamespaceValue);
- ackRange.setLowerValue(lower);
- ackRange.setUpperValue(upper);
- ackRanges.add(ackRange);
-
- lower = temp;
- upper = temp;
- completed = false;
- }
- }
-
- if (!completed) {
+ Range[] ranges = completedMessageRanges.getRanges();
+ for(int i=0; i<ranges.length; i++){
AcknowledgementRange ackRange = new
AcknowledgementRange(rmNamespaceValue);
- ackRange.setLowerValue(lower);
- ackRange.setUpperValue(upper);
- ackRanges.add(ackRange);
- completed = true;
+ ackRange.setLowerValue(ranges[i].lowerValue);
+ ackRange.setUpperValue(ranges[i].upperValue);
+ ackRanges.add(ackRange);
}
-
+
return ackRanges;
}
- public static ArrayList getSortedMsgNoArrayList(List list) {
-
- ArrayList sortedList = new ArrayList();
-
- long max = 0;
- Iterator it1 = list.iterator();
- while (it1.hasNext()) {
- Long tempLng = (Long) it1.next();
- long temp = tempLng.longValue();
- if (temp > max)
- max = temp;
- }
-
- int item = 0;
- for (long i = 1; i <= max; i++) {
- Long temp = new Long(i);
- if (list.contains(temp)) {
- sortedList.add(item, temp);
- item++;
- }
- }
-
- return sortedList;
- }
-
public static void startSenderForTheSequence(ConfigurationContext
context, String sequenceID) throws SandeshaException {
if (log.isDebugEnabled())
log.debug("Enter:
SandeshaUtil::startSenderForTheSequence , context " + context + ", sequenceID "
+ sequenceID);
@@ -295,19 +236,6 @@
return false;
}
- public static ArrayList getSplittedMsgNoArraylist(String str) {
-
- StringTokenizer tokenizer = new StringTokenizer(str, ",");
-
- ArrayList results = new ArrayList();
-
- while (tokenizer.hasMoreTokens()) {
- results.add(tokenizer.nextToken());
- }
-
- return results;
- }
-
public static String getServerSideIncomingSeqIdFromInternalSeqId(String
internalSequenceId)
throws SandeshaException {
@@ -689,26 +617,6 @@
return retArr;
}
- public static ArrayList getArrayListFromMsgsString(String str) {
-
- if (str == null || "".equals(str))
- return new ArrayList();
-
- ArrayList retArr = new ArrayList();
-
- StringTokenizer tokenizer = new StringTokenizer(str, ",");
-
- while (tokenizer.hasMoreElements()) {
- String nextToken = tokenizer.nextToken();
- if (nextToken != null && !"".equals(nextToken)) {
- Long lng = new Long(nextToken);
- retArr.add(lng);
- }
- }
-
- return retArr;
- }
-
public static String getInternalSequenceID(String to, String
sequenceKey) {
if (to == null && sequenceKey == null)
return null;
@@ -864,15 +772,16 @@
StorageManager storageManager) throws SandeshaException
{
RMSBean rmsBean =
SandeshaUtil.getRMSBeanFromInternalSequenceId(storageManager,
sequencePropertyKey);
- List ackedMsgsList = rmsBean.getClientCompletedMessages();
-
+
+ RangeString ackedMsgRanges =
rmsBean.getClientCompletedMessages();
long smallestMsgNo = 1;
- for (long tempMsgNo = smallestMsgNo; tempMsgNo <=
highestInMsgNo; tempMsgNo++) {
- if (!ackedMsgsList.contains(new Long(tempMsgNo)))
- return false;
+ Range interestedRange = new Range(smallestMsgNo,
highestInMsgNo);
+ boolean allComplete = false;
+ if(ackedMsgRanges.isRangeCompleted(interestedRange)){
+ allComplete = true;
}
-
- return true; // all message upto the highest have been acked.
+ return allComplete;
+
}
public static SandeshaPolicyBean getPropertyBean (AxisDescription
axisDescription) throws SandeshaException {
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SequenceManager.java
Thu Jan 18 08:44:23 2007
@@ -8,7 +8,6 @@
import java.net.URI;
import java.net.URISyntaxException;
-import java.util.ArrayList;
import javax.xml.namespace.QName;
@@ -89,7 +88,7 @@
MessageContext createSeqContext =
createSequenceMsg.getMessageContext();
ConfigurationContext configurationContext =
createSeqContext.getConfigurationContext();
- rmdBean.setServerCompletedMessages(new ArrayList());
+ rmdBean.setServerCompletedMessages(new RangeString());
rmdBean.setReplyToEPR(to.getAddress());
rmdBean.setAcksToEPR(acksTo.getAddress());
@@ -243,8 +242,8 @@
}
- // New up the client completed messages list
- rmsBean.setClientCompletedMessages(new ArrayList());
+ // New up the client completed message ranges list
+ rmsBean.setClientCompletedMessages(new RangeString());
// saving transportTo value;
String transportTo = (String)
firstAplicationMsgCtx.getProperty(Constants.Configuration.TRANSPORT_URL);
Modified:
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Invoker.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Invoker.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
---
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Invoker.java
(original)
+++
webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/Invoker.java
Thu Jan 18 08:44:23 2007
@@ -134,14 +134,14 @@
RangeString
rangeString = null;
if(rMDBean.getOutOfOrderRanges()==null){
//insert a new blank one one
-
rangeString = new RangeString("");
+
rangeString = new RangeString();
}
else{
-
rangeString = new RangeString(rMDBean.getOutOfOrderRanges());
+
rangeString = rMDBean.getOutOfOrderRanges();
}
//update the
range String with the new value
rangeString.addRange(r);
-
rMDBean.setOutOfOrderRanges(rangeString.toString());
+
rMDBean.setOutOfOrderRanges(rangeString);
}
rmdBeanMgr.update(rMDBean);
@@ -177,8 +177,7 @@
RMDBean rmdBean =
SandeshaUtil.getRMDBeanFromSequenceId(storageManager, sequenceID);
if(rmdBean != null && rmdBean.getOutOfOrderRanges() != null){
- String sequenceRanges = rmdBean.getOutOfOrderRanges();
- RangeString rangeString = new
RangeString(sequenceRanges);
+ RangeString rangeString = rmdBean.getOutOfOrderRanges();
//we now have the set of ranges that can be delivered
out of order.
//Look for any invokable message that lies in one of
those ranges
InvokerBean selector = new InvokerBean();
Modified:
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/SandeshaUtilTest.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/SandeshaUtilTest.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
---
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/SandeshaUtilTest.java
(original)
+++
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/SandeshaUtilTest.java
Thu Jan 18 08:44:23 2007
@@ -20,6 +20,8 @@
import java.util.ArrayList;
import java.util.Iterator;
+import org.apache.sandesha2.util.Range;
+import org.apache.sandesha2.util.RangeString;
import org.apache.sandesha2.util.SandeshaUtil;
import org.apache.sandesha2.wsrm.AcknowledgementRange;
@@ -59,16 +61,17 @@
}
- public void testGetAckRangeArrayList () throws SandeshaException {
- ArrayList msgNumberArr = new ArrayList();
- msgNumberArr.add(new Long(3));
- msgNumberArr.add(new Long(6));
- msgNumberArr.add(new Long(1));
- msgNumberArr.add(new Long(5));
- msgNumberArr.add(new Long(8));
- msgNumberArr.add(new Long(2));
+ public void testGetAckRangesFromRangeStringOutOfOrder()throws
SandeshaException{
- ArrayList list =
SandeshaUtil.getAckRangeArrayList(msgNumberArr,Sandesha2Constants.SPEC_2005_02.NS_URI);
+ RangeString rangeString = new RangeString();
+ rangeString.addRange(new Range(3));
+ rangeString.addRange(new Range(6));
+ rangeString.addRange(new Range(1));
+ rangeString.addRange(new Range(5));
+ rangeString.addRange(new Range(8));
+ rangeString.addRange(new Range(2));
+
+ ArrayList list =
SandeshaUtil.getAckRangeArrayList(rangeString,Sandesha2Constants.SPEC_2005_02.NS_URI);
assertNotNull(list);
assertEquals(list.size(),3);
@@ -91,6 +94,81 @@
assertNotNull(ackRange);
assertEquals(ackRange.getLowerValue(),8);
assertEquals(ackRange.getUpperValue(),8);
+
+ assertFalse(it.hasNext());
+ }
+
+ public void testGetAckRangesFromRangeStringGapFilling () throws
SandeshaException {
+ //build a range string to represent the completed messages
+ RangeString rangeString = new RangeString();
+ rangeString.addRange(new Range(1,3));
+ rangeString.addRange(new Range(4));
+ //insert a gap - number 5 is missing
+ rangeString.addRange(new Range(6));
+ //insert a gap - 7 and 8 are missing
+ rangeString.addRange(new Range(9, 10));
+
+ ArrayList list =
SandeshaUtil.getAckRangeArrayList(rangeString,Sandesha2Constants.SPEC_2005_02.NS_URI);
+ assertNotNull(list);
+ //we expect 3 ranges: [1-4] [6] [9-10]
+ assertEquals(list.size(),3);
+
+ Iterator it = list.iterator();
+ AcknowledgementRange ackRange = null;
+
+ ackRange = (AcknowledgementRange) it.next();
+ assertNotNull(ackRange);
+ assertEquals(ackRange.getLowerValue(),1);
+ assertEquals(ackRange.getUpperValue(),4);
+
+ ackRange = null;
+ ackRange = (AcknowledgementRange) it.next();
+ assertNotNull(ackRange);
+ assertEquals(ackRange.getLowerValue(),6);
+ assertEquals(ackRange.getUpperValue(),6);
+
+ ackRange = null;
+ ackRange = (AcknowledgementRange) it.next();
+ assertNotNull(ackRange);
+ assertEquals(ackRange.getLowerValue(),9);
+ assertEquals(ackRange.getUpperValue(),10);
+
+ assertFalse(it.hasNext());
+
+ //ok, now plug a gap at msg 5
+ rangeString.addRange(new Range(5));
+ list =
SandeshaUtil.getAckRangeArrayList(rangeString,Sandesha2Constants.SPEC_2005_02.NS_URI);
+ assertNotNull(list);
+ //we expect 2 ranges: [1-6] [9-10]
+ it = list.iterator();
+ ackRange = null;
+
+ ackRange = (AcknowledgementRange) it.next();
+ assertNotNull(ackRange);
+ assertEquals(ackRange.getLowerValue(),1);
+ assertEquals(ackRange.getUpperValue(),6);
+
+ ackRange = null;
+ ackRange = (AcknowledgementRange) it.next();
+ assertNotNull(ackRange);
+ assertEquals(ackRange.getLowerValue(),9);
+ assertEquals(ackRange.getUpperValue(),10);
+
+ assertFalse(it.hasNext());
+
+ //plug all of the gaps - 7 and 8
+ rangeString.addRange(new Range(8));
+ rangeString.addRange(new Range(7,8));
+ list =
SandeshaUtil.getAckRangeArrayList(rangeString,Sandesha2Constants.SPEC_2005_02.NS_URI);
+ assertNotNull(list);
+ //we expect 1 ranges: [1-10]
+ it = list.iterator();
+ ackRange = null;
+
+ ackRange = (AcknowledgementRange) it.next();
+ assertNotNull(ackRange);
+ assertEquals(ackRange.getLowerValue(),1);
+ assertEquals(ackRange.getUpperValue(),10);
assertFalse(it.hasNext());
}
Added:
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/utils/RangeStringTest.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/utils/RangeStringTest.java?view=auto&rev=497494
==============================================================================
---
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/utils/RangeStringTest.java
(added)
+++
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/utils/RangeStringTest.java
Thu Jan 18 08:44:23 2007
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2004,2005 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.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import org.apache.sandesha2.SandeshaTestCase;
+
+import com.ibm.jvm.util.ByteArrayOutputStream;
+
+public class RangeStringTest extends SandeshaTestCase{
+
+
+ public RangeStringTest(String s){
+ super(s);
+ }
+
+ public void testStringToRangeAndBack(){
+
+ //our expected range is missing 6, 9, 10 and 11 and ends at 12
+ String finalRangeString = "[0,5][7,8][12,12]";
+
+ RangeString rString = new RangeString(finalRangeString);
+ assertTrue(rString.isMessageNumberInRanges(0));
+ assertTrue(rString.isMessageNumberInRanges(1));
+ assertTrue(rString.isMessageNumberInRanges(2));
+ assertTrue(rString.isMessageNumberInRanges(3));
+ assertTrue(rString.isMessageNumberInRanges(4));
+ assertTrue(rString.isMessageNumberInRanges(5));
+
+ assertFalse(rString.isMessageNumberInRanges(6));
+
+ assertTrue(rString.isMessageNumberInRanges(7));
+ assertTrue(rString.isMessageNumberInRanges(8));
+
+ assertFalse(rString.isMessageNumberInRanges(9));
+ assertFalse(rString.isMessageNumberInRanges(10));
+ assertFalse(rString.isMessageNumberInRanges(11));
+
+ assertTrue(rString.isMessageNumberInRanges(12));
+
+ //now just check some boundary conditions
+ assertFalse(rString.isMessageNumberInRanges(13));
+ assertFalse(rString.isMessageNumberInRanges(-1));
+
+ //now we get the string representation back
+ assertEquals(finalRangeString, rString.toString());
+
+ }
+
+
+ public void testGrowingRange(){
+ //start of missing msgs 2-9
+ String msgs = "[1,1][10,10]";
+
+ RangeString rString = new RangeString(msgs);
+ rString.addRange(new Range(2,2)); //msg 2 arrives
+ rString.addRange(new Range(8,9)); //msgs 8 and 9 arrive
+ rString.addRange(new Range(6,6)); // msg 6 arrives
+ rString.addRange(new Range(3,5)); //msgs 3,4 and 5 arrive
+ rString.addRange(new Range(3,4)); //msgs 3,4 are duplicated
+ rString.addRange(new Range(7,7)); //finally msg 7
+
+ //all msgs have now arrived
+ assertEquals("[1,10]", rString.toString());
+
+ //all messages are duplicated
+ rString.addRange(new Range(1,10));
+ //cehck we handle duplicates
+ assertEquals("[1,10]", rString.toString());
+ }
+
+ public void testSerialize()throws Exception{
+ String msgRange = "[1,100]";
+ RangeString r = new RangeString(msgRange);
+ //serialize
+ ByteArrayOutputStream memoryBuffer = new
ByteArrayOutputStream();
+ ObjectOutputStream serializer = new
ObjectOutputStream(memoryBuffer);
+ serializer.writeObject(r);
+ serializer.flush();
+ //deserialize
+ ObjectInputStream inStrm = new ObjectInputStream(new
ByteArrayInputStream(memoryBuffer.toByteArray()));
+ RangeString newRangeString = (RangeString)inStrm.readObject();
+ assertEquals(msgRange, newRangeString.toString());
+ }
+
+
+}
\ No newline at end of file
Modified:
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/workers/ForceInboundDispatchTest.java
URL:
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/workers/ForceInboundDispatchTest.java?view=diff&rev=497494&r1=497493&r2=497494
==============================================================================
---
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/workers/ForceInboundDispatchTest.java
(original)
+++
webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/workers/ForceInboundDispatchTest.java
Thu Jan 18 08:44:23 2007
@@ -84,7 +84,7 @@
//also check that the sequence has an out of order gap
that contains msg 2
assertNotNull(rMDBean.getOutOfOrderRanges());
- RangeString rangeString = new
RangeString(rMDBean.getOutOfOrderRanges());
+ RangeString rangeString = rMDBean.getOutOfOrderRanges();
assertTrue(rangeString.isMessageNumberInRanges(2));
t.commit();
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]