Package org.apache.sandesha2.wsrm

Examples of org.apache.sandesha2.wsrm.Sequence


      return msgCtxPaused;
    }

    StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(msgCtx.getConfigurationContext(),msgCtx.getConfigurationContext().getAxisConfiguration());
    SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropertyBeanMgr();
    Sequence sequence = (Sequence) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
    String sequenceId = sequence.getIdentifier().getIdentifier();
   
    String propertyKey = SandeshaUtil.getSequencePropertyKey(rmMsgCtx);
   
    // Check that both the Sequence header and message body have been secured properly
    SequencePropertyBean tokenBean = seqPropMgr.retrieve(propertyKey, Sandesha2Constants.SequenceProperties.SECURITY_TOKEN);
    if(tokenBean != null) {
      SecurityManager secManager = SandeshaUtil.getSecurityManager(msgCtx.getConfigurationContext());
     
      QName seqName = new QName(rmMsgCtx.getRMNamespaceValue(), Sandesha2Constants.WSRM_COMMON.SEQUENCE);
     
      SOAPEnvelope envelope = msgCtx.getEnvelope();
      OMElement body = envelope.getBody();
      OMElement seqHeader = envelope.getHeader().getFirstChildWithName(seqName);
     
      SecurityToken token = secManager.recoverSecurityToken(tokenBean.getValue());
     
      secManager.checkProofOfPossession(token, seqHeader, msgCtx);
      secManager.checkProofOfPossession(token, body, msgCtx);
    }
   
    //RM will not send sync responses. If sync acks are there this will be
    // made true again later.
    if (rmMsgCtx.getMessageContext().getOperationContext() != null) {
      rmMsgCtx.getMessageContext().getOperationContext().setProperty(Constants.RESPONSE_WRITTEN,
          Constants.VALUE_FALSE);
    }
   
    // setting acked msg no range
    ConfigurationContext configCtx = rmMsgCtx.getMessageContext().getConfigurationContext();
    if (configCtx == null) {
      String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.configContextNotSet);
      log.debug(message);
      throw new SandeshaException(message);
    }

    FaultManager faultManager = new FaultManager();
    SandeshaException fault = faultManager.checkForUnknownSequence(rmMsgCtx, sequenceId, storageManager);
    if (fault != null) {
      throw fault;
    }

    // setting mustUnderstand to false.
    sequence.setMustUnderstand(false);
    rmMsgCtx.addSOAPEnvelope();

    // throwing a fault if the sequence is closed.
    fault = faultManager.checkForSequenceClosed(rmMsgCtx, sequenceId, storageManager);
    if (fault != null) {
      throw fault;
    }

    fault = faultManager.checkForLastMsgNumberExceeded(rmMsgCtx, storageManager);
    if (fault != null) {
      throw fault;
    }

    // updating the last activated time of the sequence.
    SequenceManager.updateLastActivatedTime(propertyKey, storageManager);

    SequencePropertyBean msgsBean = seqPropMgr.retrieve(propertyKey,
        Sandesha2Constants.SequenceProperties.SERVER_COMPLETED_MESSAGES);

    long msgNo = sequence.getMessageNumber().getMessageNumber();
    if (msgNo == 0) {
      String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.invalidMsgNumber, Long
          .toString(msgNo));
      log.debug(message);
      throw new SandeshaException(message);
View Full Code Here


    if (log.isDebugEnabled())
      log.debug("Enter: ApplicationMsgProcessor::sendAckIfNeeded");

    String sequencePropertyKey = SandeshaUtil.getSequencePropertyKey(rmMsgCtx);
   
    Sequence sequence = (Sequence) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
    String sequenceId = sequence.getIdentifier().getIdentifier();
    ConfigurationContext configCtx = rmMsgCtx.getMessageContext().getConfigurationContext();
    if (configCtx == null)
      throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.configContextNotSet));

    RMMsgContext ackRMMsgCtx = AcknowledgementManager.generateAckMessage(rmMsgCtx, sequencePropertyKey ,sequenceId, storageManager);
View Full Code Here

        throw new SandeshaException(e);
      }

      RMMsgContext requestRMMsgCtx = MsgInitializer.initializeMessage(reqMsgCtx);

      Sequence reqSequence = (Sequence) requestRMMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
      if (reqSequence == null) {
        String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.seqPartIsNull);
        log.debug(message);
        throw new SandeshaException(message);
      }

      String incomingSeqId = reqSequence.getIdentifier().getIdentifier();
      if (incomingSeqId == null || "".equals(incomingSeqId)) {
        String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.incomingSequenceNotValidID, "''"
            + incomingSeqId + "''");
        log.debug(message);
        throw new SandeshaException(message);
      }

      long requestMsgNo = reqSequence.getMessageNumber().getMessageNumber();

      internalSequenceId = SandeshaUtil.getOutgoingSideInternalSequenceID(incomingSeqId);

     
      // deciding weather the last message.
      String requestLastMsgNoStr = SandeshaUtil.getSequenceProperty(incomingSeqId,
          Sandesha2Constants.SequenceProperties.LAST_IN_MESSAGE_NO, storageManager);
     
      if (requestLastMsgNoStr != null) {
        long requestLastMsgNo = Long.parseLong(requestLastMsgNoStr);
        if (requestLastMsgNo == requestMsgNo)
          lastMessage = true;
      }

    } else {
      // set the internal sequence id for the client side.
      EndpointReference toEPR = msgContext.getTo();
      if (toEPR == null || toEPR.getAddress() == null || "".equals(toEPR.getAddress())) {
        String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.toEPRNotValid, null);
        log.debug(message);
        throw new SandeshaException(message);
      }

      String to = toEPR.getAddress();
      String sequenceKey = (String) msgContext.getProperty(SandeshaClientConstants.SEQUENCE_KEY);
      internalSequenceId = SandeshaUtil.getInternalSequenceID(to, sequenceKey);

      String lastAppMessage = (String) msgContext.getProperty(SandeshaClientConstants.LAST_MESSAGE);
      if (lastAppMessage != null && "true".equals(lastAppMessage))
        lastMessage = true;
    }
   
    if (internalSequenceId!=null)
      rmMsgCtx.setProperty(Sandesha2Constants.MessageContextProperties.INTERNAL_SEQUENCE_ID,internalSequenceId);

    String sequencePropertyKey = SandeshaUtil.getSequencePropertyKey(rmMsgCtx);

    /*
     * checking weather the user has given the messageNumber (most of the
     * cases this will not be the case where the system will generate the
     * message numbers
     */

    // User should set it as a long object.
    Long messageNumberLng = (Long) msgContext.getProperty(SandeshaClientConstants.MESSAGE_NUMBER);

    long givenMessageNumber = -1;
    if (messageNumberLng != null) {
      givenMessageNumber = messageNumberLng.longValue();
      if (givenMessageNumber <= 0) {
        throw new SandeshaException(SandeshaMessageHelper.getMessage(
            SandeshaMessageKeys.msgNumberMustBeLargerThanZero, Long.toString(givenMessageNumber)));
      }
    }

    // the message number that was last used.
    long systemMessageNumber = getPreviousMsgNo(configContext, sequencePropertyKey, storageManager);

    // The number given by the user has to be larger than the last stored
    // number.
    if (givenMessageNumber > 0 && givenMessageNumber <= systemMessageNumber) {
      String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.msgNumberNotLargerThanLastMsg, Long
          .toString(givenMessageNumber));
      throw new SandeshaException(message);
    }

    // Finding the correct message number.
    long messageNumber = -1;
    if (givenMessageNumber > 0) // if given message number is valid use it.
                  // (this is larger than the last stored due
                  // to the last check)
      messageNumber = givenMessageNumber;
    else if (systemMessageNumber > 0) { // if system message number is valid
                      // use it.
      messageNumber = systemMessageNumber + 1;
    } else { // This is the first message (systemMessageNumber = -1)
      messageNumber = 1;
    }

    // A dummy message is a one which will not be processed as a actual
    // application message.
    // The RM handlers will simply let these go.
    String dummyMessageString = (String) msgContext.getOptions().getProperty(SandeshaClientConstants.DUMMY_MESSAGE);
    boolean dummyMessage = false;
    if (dummyMessageString != null && Sandesha2Constants.VALUE_TRUE.equals(dummyMessageString))
      dummyMessage = true;

    // saving the used message number
    if (!dummyMessage)
      setNextMsgNo(configContext, sequencePropertyKey, messageNumber, storageManager);

    // set this as the response highest message.
    SequencePropertyBean responseHighestMsgBean = new SequencePropertyBean(sequencePropertyKey,
        Sandesha2Constants.SequenceProperties.HIGHEST_OUT_MSG_NUMBER, new Long(messageNumber).toString());
    seqPropMgr.insert(responseHighestMsgBean);

    if (lastMessage) {

      SequencePropertyBean responseHighestMsgKeyBean = new SequencePropertyBean(sequencePropertyKey,
          Sandesha2Constants.SequenceProperties.HIGHEST_OUT_MSG_KEY, storageKey);

      SequencePropertyBean responseLastMsgKeyBean = new SequencePropertyBean(sequencePropertyKey,
          Sandesha2Constants.SequenceProperties.LAST_OUT_MESSAGE_NO, new Long(messageNumber).toString());

      seqPropMgr.insert(responseHighestMsgKeyBean);
      seqPropMgr.insert(responseLastMsgKeyBean);
    }

    boolean sendCreateSequence = false;

    SequencePropertyBean outSeqBean = seqPropMgr.retrieve(sequencePropertyKey,
        Sandesha2Constants.SequenceProperties.OUT_SEQUENCE_ID);

    // setting async ack endpoint for the server side. (if present)
    if (serverSide) {
//      String incomingSequenceID = SandeshaUtil.getServerSideIncomingSeqIdFromInternalSeqId(internalSequenceId);
      SequencePropertyBean incomingToBean = seqPropMgr.retrieve(sequencePropertyKey,
          Sandesha2Constants.SequenceProperties.TO_EPR);
      if (incomingToBean != null) {
        String incomingTo = incomingToBean.getValue();
        msgContext.setProperty(SandeshaClientConstants.AcksTo, incomingTo);
      }
    }

    // FINDING THE SPEC VERSION
    String specVersion = null;
    if (msgContext.isServerSide()) {
      // in the server side, get the RM version from the request sequence.
      MessageContext requestMessageContext;
      try {
        requestMessageContext = msgContext.getOperationContext().getMessageContext(
            AxisOperationFactory.MESSAGE_LABEL_IN_VALUE);
      } catch (AxisFault e) {
        throw new SandeshaException(e);
      }

      if (requestMessageContext == null) {
        throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.requestMsgContextNull));
      }

      RMMsgContext requestRMMsgCtx = MsgInitializer.initializeMessage(requestMessageContext);
     
      Sequence sequence = (Sequence) requestRMMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
      String requestSequenceID = sequence.getIdentifier().getIdentifier();
     
      String requestSideSequencePropertyKey = SandeshaUtil.getSequencePropertyKey(requestRMMsgCtx);
     
      SequencePropertyBean specVersionBean = seqPropMgr.retrieve(requestSideSequencePropertyKey,
          Sandesha2Constants.SequenceProperties.RM_SPEC_VERSION);
View Full Code Here

      throw new SandeshaException(SandeshaMessageHelper.getMessage(
          SandeshaMessageKeys.specVersionPropertyNotAvailable, internalSequenceId));

    String rmNamespaceValue = SpecSpecificConstants.getRMNamespaceValue(rmVersion);

    Sequence sequence = new Sequence(rmNamespaceValue);
    MessageNumber msgNumber = new MessageNumber(rmNamespaceValue);
    msgNumber.setMessageNumber(messageNumber);
    sequence.setMessageNumber(msgNumber);

    // setting last message
    if (msg.isServerSide()) {
      MessageContext requestMsg = null;

      requestMsg = msg.getOperationContext()
          .getMessageContext(OperationContextFactory.MESSAGE_LABEL_IN_VALUE);

      RMMsgContext reqRMMsgCtx = MsgInitializer.initializeMessage(requestMsg);
      Sequence requestSequence = (Sequence) reqRMMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
      if (requestSequence == null) {
        String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.requestSeqIsNull);
        log.debug(message);
        throw new SandeshaException(message);
      }

      if (requestSequence.getLastMessage() != null) {
        sequence.setLastMessage(new LastMessage(rmNamespaceValue));
      }

    } else {
      // client side
View Full Code Here

        MessageContext requestMsgCtx = msgCtx.getOperationContext().getMessageContext(
            OperationContextFactory.MESSAGE_LABEL_IN_VALUE);

                if (msgCtx.isServerSide()) { // for the server side
                    RMMsgContext reqRMMsgCtx = MsgInitializer.initializeMessage(requestMsgCtx);
                    Sequence sequencePart = (Sequence) reqRMMsgCtx
                                    .getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
                    if (sequencePart != null)
                            msgProcessor = new ApplicationMsgProcessor();// a rm intended message
                } else // if client side.
                    msgProcessor = new ApplicationMsgProcessor();
View Full Code Here

          if (highestOutMessage.getEnvelope() == null)
            throw new SandeshaException(SandeshaMessageHelper
                .getMessage(SandeshaMessageKeys.outMsgHasNoEnvelope));

          RMMsgContext highestOutRMMsg = MsgInitializer.initializeMessage(highestOutMessage);
          Sequence seqPartOfOutMsg = (Sequence) highestOutRMMsg
              .getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);

          if (seqPartOfOutMsg != null) {

            // response message of the last in message can be
            // considered as the last out message.
            highestOutMsgNo = seqPartOfOutMsg.getMessageNumber().getMessageNumber();
            SequencePropertyBean highestOutMsgBean = new SequencePropertyBean(
                responseSideSequencePropertyKey ,
                Sandesha2Constants.SequenceProperties.LAST_OUT_MESSAGE_NO, new Long(highestOutMsgNo)
                    .toString());
View Full Code Here

    boolean drop = false;   
   
    if (rmMsgContext.getMessageType() == Sandesha2Constants.MessageTypes.APPLICATION) {

      Sequence sequence = (Sequence) rmMsgContext.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
      String sequenceId = null;

      long msgNo = sequence.getMessageNumber().getMessageNumber();
     
      String propertyKey = SandeshaUtil.getSequencePropertyKey(rmMsgContext);

      if (propertyKey != null && msgNo > 0) {
        SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropertyBeanMgr();
        SequencePropertyBean receivedMsgsBean = seqPropMgr.retrieve(propertyKey,
            Sandesha2Constants.SequenceProperties.SERVER_COMPLETED_MESSAGES);
        if (receivedMsgsBean != null) {
          String receivedMsgStr = receivedMsgsBean.getValue();
          ArrayList msgNoArrList = SandeshaUtil.getSplittedMsgNoArraylist(receivedMsgStr);

          Iterator iterator = msgNoArrList.iterator();
          while (iterator.hasNext()) {
            String temp = (String) iterator.next();
            String msgNoStr = new Long(msgNo).toString();
            if (msgNoStr.equals(temp)) {
              drop = true;
            }
          }
        }

        if (drop == false) {
          // Checking for RM specific EMPTY_BODY LASTMESSAGE.
          SOAPBody body = rmMsgContext.getSOAPEnvelope().getBody();
          boolean emptyBody = false;
          if (body.getChildElements().hasNext() == false) {
            emptyBody = true;
          }

          if (emptyBody) {
            if (sequence.getLastMessage() != null) {
              log.debug(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.emptyLastMsg));
              drop = true;

              if (receivedMsgsBean == null) {
                receivedMsgsBean = new SequencePropertyBean(sequenceId,
View Full Code Here

      throws AxisFault {
    if (log.isDebugEnabled())
      log.debug("Enter: SandeshaGlobalInHandler::processDroppedMessage");

    if (rmMsgContext.getMessageType() == Sandesha2Constants.MessageTypes.APPLICATION) {
      Sequence sequence = (Sequence) rmMsgContext.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
      String sequenceId = null;

      if (sequence != null) {
        sequenceId = sequence.getIdentifier().getIdentifier();
      }

      SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropertyBeanMgr();
      SequencePropertyBean receivedMsgsBean = seqPropMgr.retrieve(sequenceId,
          Sandesha2Constants.SequenceProperties.SERVER_COMPLETED_MESSAGES);
View Full Code Here

      String s = invokerBean.getSequenceID();
      RMDBean rmdBean = rmdBeanMgr.retrieve(sequenceId);

     
      if (rmMsg.getMessageType() == Sandesha2Constants.MessageTypes.APPLICATION) {
        Sequence sequence = (Sequence) rmMsg
            .getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
       
        //TODO support WSRM 1.1 spce here ( there is no last message concept)
        if (sequence.getLastMessage() != null) {
          TerminateManager.cleanReceivingSideAfterInvocation(configurationContext, sequencePropertyKey, sequenceId, storageManager);
          // exit from current iteration. (since an entry
          // was removed)
         
          return;
View Full Code Here

   */
  public SandeshaException checkForLastMsgNumberExceeded(RMMsgContext applicationRMMessage, StorageManager storageManager)
      throws AxisFault {
    if (log.isDebugEnabled())
      log.debug("Enter: FaultManager::checkForLastMsgNumberExceeded");
    Sequence sequence = (Sequence) applicationRMMessage.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
    long messageNumber = sequence.getMessageNumber().getMessageNumber();
    String sequenceID = sequence.getIdentifier().getIdentifier();

    ConfigurationContext configCtx = applicationRMMessage.getMessageContext().getConfigurationContext();
    SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropertyBeanMgr();

    boolean lastMessageNumberExceeded = false;
View Full Code Here

TOP

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

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.