Package org.apache.sandesha2.wsrm

Examples of org.apache.sandesha2.wsrm.SequenceAcknowledgement


   
    RMMsgContext terminateSeqResponseRMMsg = RMMsgCreator
        .createTerminateSeqResponseMsg(terminateSeqRMMsg, outMessage);
   
     RMMsgContext ackRMMessage = AcknowledgementManager.generateAckMessage(terminateSeqRMMsg,sequenceID);
     SequenceAcknowledgement seqAck = (SequenceAcknowledgement) ackRMMessage.getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
     terminateSeqResponseRMMsg.setMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT,seqAck);
    
     terminateSeqResponseRMMsg.addSOAPEnvelope();
    
    
View Full Code Here


    } catch (AxisFault e3) {
      throw new SandeshaException(e3.getMessage());
    }
   
    //adding the ack part to the envelope.
    SequenceAcknowledgement sequenceAcknowledgement = (SequenceAcknowledgement) ackRMMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
 
    MessageContext closeSequenceMsg = rmMsgCtx.getMessageContext();
   
    MessageContext closeSequenceResponseMsg = null;
    closeSequenceResponseMsg = Utils.createOutMessageContext(closeSequenceMsg);
View Full Code Here

    if (ackRMMessageContext.getMessageType() != Sandesha2Constants.MessageTypes.ACK)
      return null;

    boolean invalidAck = false;
    String reason = null;
    SequenceAcknowledgement sequenceAcknowledgement = (SequenceAcknowledgement) ackRMMessageContext
        .getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
    List sequenceAckList = sequenceAcknowledgement
        .getAcknowledgementRanges();
    Iterator it = sequenceAckList.iterator();

    while (it.hasNext()) {
      AcknowledgementRange acknowledgementRange = (AcknowledgementRange) it
          .next();
      long upper = acknowledgementRange.getUpperValue();
      long lower = acknowledgementRange.getLowerValue();

      if (lower > upper) {
        invalidAck = true;
        reason = "The SequenceAcknowledgement is invalid. Lower value is larger than upper value";

      }
    }
   
    if (invalidAck) {
      FaultData data = new FaultData();
      int SOAPVersion = SandeshaUtil.getSOAPVersion(ackMessageContext.getEnvelope());
      if (SOAPVersion == Sandesha2Constants.SOAPVersion.v1_1)
        data.setCode(SOAP11Constants.FAULT_CODE_SENDER);
      else
        data.setCode(SOAP12Constants.FAULT_CODE_SENDER);

      data.setSubcode(Sandesha2Constants.SOAPFaults.Subcodes.INVALID_ACKNOWLEDGEMENT);
      data.setReason(reason);
     
      SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SOAPVersion);
      OMElement dummyElement = factory.createOMElement("dummyElem",null);
      sequenceAcknowledgement.toOMElement(dummyElement);
     
      OMElement sequenceAckElement = dummyElement.getFirstChildWithName(
          new QName (Sandesha2Constants.WSRM_COMMON.SEQUENCE_ACK));
      data.setDetail(sequenceAckElement);
View Full Code Here

  private static final Log log = LogFactory.getLog(ApplicationMsgProcessor.class );
 
  public void processInMessage(RMMsgContext rmMsgCtx) throws SandeshaException {

    //Processing for ack if any
    SequenceAcknowledgement sequenceAck = (SequenceAcknowledgement) rmMsgCtx
        .getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
    if (sequenceAck != null) {
      AcknowledgementProcessor ackProcessor = new AcknowledgementProcessor();
      ackProcessor.processInMessage(rmMsgCtx);
    }
View Full Code Here

    if (rmVersion==null)
      throw new SandeshaException ("Cant find the rmVersion of the given message");
   
    String rmNamespaceValue = SpecSpecificConstants.getRMNamespaceValue(rmVersion);
   
    SequenceAcknowledgement sequenceAck = new SequenceAcknowledgement(
        factory,rmNamespaceValue);
    Identifier id = new Identifier(factory,rmNamespaceValue);
    id.setIndentifer(sequenceId);
    sequenceAck.setIdentifier(id);


    StorageManager storageManager = SandeshaUtil
        .getSandeshaStorageManager(ctx);
    SequencePropertyBeanMgr seqPropMgr = storageManager
        .getSequencePropretyBeanMgr();

    SequencePropertyBean seqBean = seqPropMgr.retrieve(sequenceId,
        Sandesha2Constants.SequenceProperties.SERVER_COMPLETED_MESSAGES);
    String msgNoList = (String) seqBean.getValue();

    ArrayList ackRangeArrayList = SandeshaUtil.getAckRangeArrayList(
        msgNoList, factory,rmNamespaceValue);
    Iterator iterator = ackRangeArrayList.iterator();
    while (iterator.hasNext()) {
      AcknowledgementRange ackRange = (AcknowledgementRange) iterator
          .next();
      sequenceAck.addAcknowledgementRanges(ackRange);
    }
   
   
    SequencePropertyBean sequenceClosedBean = seqPropMgr.retrieve(sequenceId,Sandesha2Constants.SequenceProperties.SEQUENCE_CLOSED );
   
    if (sequenceClosedBean!=null && Sandesha2Constants.VALUE_TRUE.equals(sequenceClosedBean.getValue())) {
      //sequence is closed. so add the 'Final' part.
      if (SpecSpecificConstants.isAckFinalAllowed(rmVersion)) {
        AckFinal ackFinal = new AckFinal (factory,rmNamespaceValue);
        sequenceAck.setAckFinal(ackFinal);
      }
    }

    applicationMsg.setMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT,sequenceAck);
   
    sequenceAck.toOMElement(envelope.getHeader());
    applicationMsg
        .setAction(SpecSpecificConstants.getSequenceAcknowledgementAction(SandeshaUtil.getRMVersion(sequenceId,ctx)));
    applicationMsg
        .setSOAPAction(SpecSpecificConstants.getSequenceAcknowledgementSOAPAction(SandeshaUtil.getRMVersion(sequenceId,ctx)));
    applicationMsg.setMessageId(SandeshaUtil.getUUID());
View Full Code Here

  private static final Log log = LogFactory.getLog(AcknowledgementProcessor.class);
 
  public void processInMessage(RMMsgContext rmMsgCtx) throws SandeshaException {

    SequenceAcknowledgement sequenceAck = (SequenceAcknowledgement) rmMsgCtx
        .getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
    if (sequenceAck == null) {
      String message = "Sequence acknowledgement part is null";
      log.debug(message);
      throw new SandeshaException(message);
    }
   
    MessageContext msgCtx = rmMsgCtx.getMessageContext();
    ConfigurationContext configCtx = msgCtx.getConfigurationContext();
   
    //setting mustUnderstand to false.
    sequenceAck.setMustUnderstand(false);
    rmMsgCtx.addSOAPEnvelope();

    StorageManager storageManager = SandeshaUtil
        .getSandeshaStorageManager(rmMsgCtx.getMessageContext()
            .getConfigurationContext());
    SenderBeanMgr retransmitterMgr = storageManager
        .getRetransmitterBeanMgr();
    SequencePropertyBeanMgr seqPropMgr = storageManager
        .getSequencePropretyBeanMgr();



    Iterator ackRangeIterator = sequenceAck.getAcknowledgementRanges()
        .iterator();

    Iterator nackIterator = sequenceAck.getNackList().iterator();
    String outSequenceId = sequenceAck.getIdentifier().getIdentifier();
    if (outSequenceId == null || "".equals(outSequenceId)) {
      String message = "OutSequenceId is null";
      log.debug(message);
      throw new SandeshaException(message);
    }

    FaultManager faultManager = new FaultManager();
    RMMsgContext faultMessageContext = faultManager.checkForUnknownSequence(rmMsgCtx,outSequenceId);
    if (faultMessageContext != null) {
      ConfigurationContext configurationContext = msgCtx.getConfigurationContext();
      AxisEngine engine = new AxisEngine(configurationContext);
     
      try {
        engine.sendFault(faultMessageContext.getMessageContext());
      } catch (AxisFault e) {
        throw new SandeshaException ("Could not send the fault message",e);
      }
     
      return;
    }
   
    faultMessageContext = faultManager.checkForInvalidAcknowledgement(rmMsgCtx);
    if (faultMessageContext != null) {
      ConfigurationContext configurationContext = msgCtx.getConfigurationContext();
      AxisEngine engine = new AxisEngine(configurationContext);
     
      try {
        engine.sendFault(faultMessageContext.getMessageContext());
      } catch (AxisFault e) {
        throw new SandeshaException ("Could not send the fault message",e);
      }
     
      return;
    }
   
        String internalSequenceID = SandeshaUtil.getSequenceProperty(outSequenceId,Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID,configCtx);
   
        //updating the last activated time of the sequence.
    Transaction lastUpdatedTimeTransaction = storageManager.getTransaction();
    SequenceManager.updateLastActivatedTime(internalSequenceID,rmMsgCtx.getMessageContext().getConfigurationContext());
    lastUpdatedTimeTransaction.commit();
   
    //Starting transaction
    Transaction ackTransaction = storageManager.getTransaction();

    SequencePropertyBean internalSequenceBean = seqPropMgr.retrieve(
        outSequenceId, Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);

    if (internalSequenceBean == null || internalSequenceBean.getValue() == null) {
      String message = "TempSequenceId is not set correctly";
      log.debug(message);
      throw new SandeshaException(message);
    }

    String internalSequenceId = (String) internalSequenceBean.getValue();

    //Following happens in the SandeshaGlobal handler
    rmMsgCtx.getMessageContext()
        .setProperty(Sandesha2Constants.ACK_PROCSSED, "true");

    //Removing relatesTo - Some v1_0 endpoints tend to set relatesTo value for ack messages.
    //Because of this dispatching may go wrong. So we set relatesTo value to null for ackMessages.
    //(this happens in the SandeshaGlobal handler). Do this only if this is a standalone ACK.
//    if (rmMsgCtx.getMessageType() == Sandesha2Constants.MessageTypes.ACK)
//      rmMsgCtx.setRelatesTo(null);

    SenderBean input = new SenderBean();
    input.setSend(true);
    input.setReSend(true);
    Collection retransmitterEntriesOfSequence = retransmitterMgr
        .find(input);

    ArrayList ackedMessagesList = new ArrayList ();
    while (ackRangeIterator.hasNext()) {
      AcknowledgementRange ackRange = (AcknowledgementRange) ackRangeIterator
          .next();
      long lower = ackRange.getLowerValue();
      long upper = ackRange.getUpperValue();

      for (long messageNo = lower; messageNo <= upper; messageNo++) {
        SenderBean retransmitterBean = getRetransmitterEntry(
            retransmitterEntriesOfSequence, messageNo);
        if (retransmitterBean != null)
          retransmitterMgr.delete(retransmitterBean.getMessageID());
       
        ackedMessagesList.add(new Long (messageNo));
      }
    }

    while (nackIterator.hasNext()) {
      Nack nack = (Nack) nackIterator.next();
      long msgNo = nack.getNackNumber();

      //TODO - Process Nack
    }
   
    //setting acked message date.
    //TODO add details specific to each message.
    long noOfMsgsAcked = getNoOfMessagesAcked(sequenceAck.getAcknowledgementRanges().iterator());
    SequencePropertyBean noOfMsgsAckedBean = seqPropMgr.retrieve(outSequenceId,Sandesha2Constants.SequenceProperties.NO_OF_OUTGOING_MSGS_ACKED);
    boolean added = false;
   
    if (noOfMsgsAckedBean==null) {
      added = true;
      noOfMsgsAckedBean = new SequencePropertyBean ();
      noOfMsgsAckedBean.setSequenceID(outSequenceId);
      noOfMsgsAckedBean.setName(Sandesha2Constants.SequenceProperties.NO_OF_OUTGOING_MSGS_ACKED);
    }
   
    noOfMsgsAckedBean.setValue(Long.toString(noOfMsgsAcked));
   
    if (added)
      seqPropMgr.insert(noOfMsgsAckedBean);
    else
      seqPropMgr.update(noOfMsgsAckedBean);
   
   
    //setting the completed_messages list. This gives all the messages of the sequence that were acked.
    SequencePropertyBean allCompletedMsgsBean = seqPropMgr.retrieve(internalSequenceId,Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES);
    if (allCompletedMsgsBean==null) {
      allCompletedMsgsBean = new SequencePropertyBean ();
      allCompletedMsgsBean.setSequenceID(internalSequenceId);
      allCompletedMsgsBean.setName(Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES);
     
      seqPropMgr.insert(allCompletedMsgsBean);
    }
       
    String str = ackedMessagesList.toString();
    allCompletedMsgsBean.setValue(str);
   
    seqPropMgr.update(allCompletedMsgsBean);   
   
    //commiting transaction
    ackTransaction.commit();
   
    String lastOutMsgNoStr = SandeshaUtil.getSequenceProperty(internalSequenceId,Sandesha2Constants.SequenceProperties.LAST_OUT_MESSAGE_NO,configCtx);
    if (lastOutMsgNoStr!=null ) {
      long highestOutMsgNo = 0;
      if (lastOutMsgNoStr!=null) {
        highestOutMsgNo = Long.parseLong(lastOutMsgNoStr);
      }
     
      if (highestOutMsgNo>0) {
        boolean complete = AcknowledgementManager.verifySequenceCompletion (
        sequenceAck.getAcknowledgementRanges().iterator(),highestOutMsgNo);
     
        if (complete)
          TerminateManager.addTerminateSequenceMessage(rmMsgCtx, outSequenceId,internalSequenceId);
      }
    }
View Full Code Here

    String sequenceID = null;
    if (messageType == Sandesha2Constants.MessageTypes.APPLICATION) {
      Sequence sequence = (Sequence) rmMessageContext.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
      sequenceID = sequence.getIdentifier().getIdentifier();
    } else if (messageType == Sandesha2Constants.MessageTypes.ACK) {
      SequenceAcknowledgement sequenceAcknowledgement = (SequenceAcknowledgement) rmMessageContext
          .getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
      sequenceID = sequenceAcknowledgement.getIdentifier().getIdentifier();
    } else if (messageType == Sandesha2Constants.MessageTypes.ACK_REQUEST) {
      AckRequested ackRequested = (AckRequested) rmMessageContext
          .getMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST);
      sequenceID = ackRequested.getIdentifier().getIdentifier();
    } else if (messageType == Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE) {
View Full Code Here

   
    CreateSequence createSequence = (CreateSequence) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ);
    CreateSequenceResponse createSequenceResponse = (CreateSequenceResponse) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ_RESPONSE);
    TerminateSequence terminateSequence = (TerminateSequence) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.TERMINATE_SEQ);
    TerminateSequenceResponse terminateSequenceResponse = (TerminateSequenceResponse) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.TERMINATE_SEQ_RESPONSE);
    SequenceAcknowledgement sequenceAcknowledgement = (SequenceAcknowledgement) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
    Sequence sequence = (Sequence) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
    AckRequested ackRequest = (AckRequested) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST);
    CloseSequence closeSequence = (CloseSequence) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.CLOSE_SEQUENCE);
    CloseSequenceResponse closeSequenceResponse = (CloseSequenceResponse) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.CLOSE_SEQUENCE_RESPONSE);
   
    //Setting message type.
    if (createSequence != null) {
      rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.CREATE_SEQ);
    }else if (createSequenceResponse != null) {
      rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.CREATE_SEQ_RESPONSE);
      sequenceID = createSequenceResponse.getIdentifier().getIdentifier();
    }else if (terminateSequence != null) {
      rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.TERMINATE_SEQ);
      sequenceID = terminateSequence.getIdentifier().getIdentifier();
    }else if (terminateSequenceResponse != null) {
      rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.TERMINATE_SEQ_RESPONSE);
      sequenceID = terminateSequenceResponse.getIdentifier().getIdentifier();
    }else if (rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE) != null) {
      rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.APPLICATION);
      sequenceID = sequence.getIdentifier().getIdentifier();
    } else if (sequenceAcknowledgement != null) {
      rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.ACK);
      sequenceID = sequenceAcknowledgement.getIdentifier().getIdentifier();
    } else if (ackRequest != null) {
      rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.ACK_REQUEST);
      sequenceID = ackRequest.getIdentifier().getIdentifier();
    } else if (closeSequence != null) {
      rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE);
View Full Code Here

      .getSandeshaStorageManager(configCtx);
   
    //Processing for ack if available
    Transaction ackProcessTransaction = storageManager.getTransaction();
   
    SequenceAcknowledgement sequenceAck = (SequenceAcknowledgement) createSeqResponseRMMsgCtx
        .getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
    if (sequenceAck != null) {
      AcknowledgementProcessor ackProcessor = new AcknowledgementProcessor();
      ackProcessor.processInMessage(createSeqResponseRMMsgCtx);
    }
View Full Code Here

          String message = "Invalid ack message entry";
          log.debug(message);
          throw new SandeshaException(message);
        }

        SequenceAcknowledgement sequenceAcknowledgement = (SequenceAcknowledgement) ackRMMsgContext
            .getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
        rmMessageContext.setMessagePart(
            Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT,
            sequenceAcknowledgement);
View Full Code Here

TOP

Related Classes of org.apache.sandesha2.wsrm.SequenceAcknowledgement

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.