Package org.apache.sandesha2.util

Examples of org.apache.sandesha2.util.RangeString


          log.debug(message);
          throw new SandeshaException(message);
        }
   
        // 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) {
          serverCompletedMessageRanges.addRange(new Range(msgNo));
         
          storageManager.getRMDBeanMgr().update(bean);
        }
        else {
          
View Full Code Here


                //so as to include our latest view of this outOfOrder range.
                //We do that here (rather than once at the end) so that we reamin
                //transactionally consistent
                Range r = new Range(firstMessageInOutOfOrderWindow,highestMsgNumberInvoked);
                   
                RangeString rangeString = null;
                if(rMDBean.getOutOfOrderRanges()==null){
                  //insert a new blank one one
                  rangeString = new RangeString();
                }
                else{
                  rangeString = rMDBean.getOutOfOrderRanges();
                }
                //update the range String with the new value
                rangeString.addRange(r);
                rMDBean.setOutOfOrderRanges(rangeString);
              }
             
              rmdBeanMgr.update(rMDBean);
            }
View Full Code Here

      log.debug("Enter: InOrderInvoker::addOutOfOrderInvokerBeansToList " + sequenceID + ", " + list);
   
    RMDBean rmdBean = SandeshaUtil.getRMDBeanFromSequenceId(storageManager, sequenceID);
   
    if(rmdBean != null && rmdBean.getOutOfOrderRanges() != null){
      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();
      selector.setSequenceID(sequenceID);
      Iterator invokerBeansIterator =
        storageManager.getInvokerBeanMgr().find(selector).iterator();
     
      while(invokerBeansIterator.hasNext()){
        InvokerBean invokerBean = (InvokerBean)invokerBeansIterator.next();
       
        if(rangeString.isMessageNumberInRanges(invokerBean.getMsgNo())){
          //an invoker bean that has not been deleted and lies in an out
          //or order range - we can add this to the list
          list.add(invokerBean);
        }
      }
View Full Code Here

   
    String rmVersion = rmMsgCtx.getRMSpecVersion();
   
    // Compare the clientCompletedMessages with the range we just got, to work out if there
    // is any new information in this ack message
    RangeString completedMessages = rmsBean.getClientCompletedMessages();
    long numberOfNewMessagesAcked = 0;

    while(ackRangeIterator.hasNext()) {
      AcknowledgementRange ackRange = (AcknowledgementRange) ackRangeIterator.next();
      long lower = ackRange.getLowerValue();
      long upper = ackRange.getUpperValue();
      Range ackedRange = new Range(lower, upper);
      // Quick check to see if the whole range is already covered
      if(!completedMessages.isRangeCompleted(ackedRange)) {
        //we now know that this range is complete so we update it. This should aggregate the
        //ranges together and tell us which numbers are newly acked
        Range[] newRanges = completedMessages.addRange(ackedRange).getRanges();
       
        // We now take each newly acked message in turn and see if we need to update a sender bean
        for (int rangeIndex=0; rangeIndex < newRanges.length; rangeIndex++) {
          //now work on each newly acked message in this range
          for(long messageNo = newRanges[rangeIndex].lowerValue; messageNo<=newRanges[rangeIndex].upperValue; messageNo++){
View Full Code Here

      }
     
      if (toEPR!=null)
        rMDBean.setToAddress(toEPR.getAddress());
     
      rMDBean.setServerCompletedMessages(new RangeString());
      RMDBeanMgr rmdBeanMgr = storageManager.getRMDBeanMgr();

      // Store the security token for the offered sequence
      rMDBean.setSecurityTokenData(rmsBean.getSecurityTokenData());
     
View Full Code Here

          rMSBean.setToEPR(rmdBean.getToEPR());
          rMSBean.setAcksToEPR(rmdBean.getToEPR())// The acks need to flow back into this endpoint
          rMSBean.setReplyToEPR(rmdBean.getReplyToEPR());
          rMSBean.setLastActivatedTime(System.currentTimeMillis());
          rMSBean.setRMVersion(rmdBean.getRMVersion());
          rMSBean.setClientCompletedMessages(new RangeString());
 
          // Setting sequence properties for the outgoing sequence.
          // Only will be used by the server side response path. Will
          // be wasted properties for the client side.
           
View Full Code Here

   
  }
 
  public void testGetAckRangesFromRangeStringOutOfOrder()throws SandeshaException{
   
    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);
   
View Full Code Here

    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;
View Full Code Here

  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());
   
  }
View Full Code Here

 
  public void testGrowingRange(){
    //start of missing msgs 2-9
    String msgs = "[1,1][10,10]";
   
    RangeString rString = new RangeString(msgs);
   
    //msg 2 arrives
    {
      Range ackedMsgRange = new Range(1,2);
      Range[] newRanges = rString.addRange(ackedMsgRange).getRanges();
      assertEquals(newRanges.length,1);
      assertEquals(newRanges[0],new Range(2,2));
    }
   
    //msgs 8 and 9 arrive
    {
      Range ackedMsgRange = new Range(8,9);
      Range[] newRanges = rString.addRange(ackedMsgRange).getRanges();
      assertEquals(newRanges.length,1);
      assertEquals(newRanges[0],ackedMsgRange);
    }
   
    // msg 6 arrives
    {
      Range ackedMsgRange = new Range(6,6);
      Range[] newRanges = rString.addRange(ackedMsgRange).getRanges();
      assertEquals(newRanges.length,1);
      assertEquals(newRanges[0],ackedMsgRange);
    }
   
    //msgs 3,4 and 5 arrive
    {
      Range ackedMsgRange = new Range(1,5);
      Range[] newRanges = rString.addRange(ackedMsgRange).getRanges();
      assertEquals(newRanges.length,1);
      assertEquals(newRanges[0],new Range(3,5));
    }
   
    //msgs 3,4 are duplicated
    {
      Range ackedMsgRange = new Range(3,4);
      Range[] newRanges = rString.addRange(ackedMsgRange).getRanges();
      assertEquals(newRanges.length,0); //no new information
    }
   
    //finally msg 7
    {
      Range ackedMsgRange = new Range(7,7);
      Range[] newRanges = rString.addRange(ackedMsgRange).getRanges();
      assertEquals(newRanges.length,1);
      assertEquals(newRanges[0],ackedMsgRange);
    }
   
    //all msgs have now arrived
    assertEquals("[1,10]", rString.toString());
   
    //all messages are duplicated - ensure this is detected
    assertEquals(rString.addRange(new Range(1,10)).getRanges().length, 0)
    //check we handle duplicates i.e. the string is still correct
    assertEquals("[1,10]", rString.toString());
  }
View Full Code Here

TOP

Related Classes of org.apache.sandesha2.util.RangeString

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.