Package org.apache.sandesha2.storage.beanmanagers

Examples of org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr


    // Write the acks into the envelope
    ackRMMsgContext.addSOAPEnvelope();

    MessageContext ackMsgContext = ackRMMsgContext.getMessageContext();

    SenderBeanMgr retransmitterBeanMgr = storageManager.getSenderBeanMgr();

    String key = SandeshaUtil.getUUID();

    SenderBean ackBean = new SenderBean();
    ackBean.setMessageContextRefKey(key);
    ackBean.setMessageID(ackMsgContext.getMessageID());
    ackBean.setReSend(false);
    ackBean.setSequenceID(sequenceId);
    EndpointReference to = ackMsgContext.getTo();
    if (to != null)
      ackBean.setToAddress(to.getAddress());

    ackBean.setSend(true);
    ackMsgContext.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);

    ackBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);

    // removing old acks.
    SenderBean findBean = new SenderBean();
    findBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
    findBean.setSend(true);
    findBean.setReSend(false);
    findBean.setSequenceID(sequenceId);
    Collection<SenderBean> coll = retransmitterBeanMgr.find(findBean);
    Iterator<SenderBean> it = coll.iterator();

    while (it.hasNext()) {
      SenderBean oldAckBean = (SenderBean) it.next();
      if (oldAckBean.getTimeToSend() < timeToSend)
        timeToSend = oldAckBean.getTimeToSend();

      // removing the retransmitted entry for the oldAck
      retransmitterBeanMgr.delete(oldAckBean.getMessageID());

      // removing the message store entry for the old ack
      storageManager.removeMessageContext(oldAckBean.getMessageContextRefKey());
    }

    ackBean.setTimeToSend(timeToSend);

    ackMsgContext.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);

    // passing the message through sandesha2sender
    ackMsgContext.setProperty(Sandesha2Constants.SET_SEND_TO_TRUE, Sandesha2Constants.VALUE_TRUE);

    SandeshaUtil.executeAndStore(ackRMMsgContext, key, storageManager);

    // inserting the new ack.
    retransmitterBeanMgr.insert(ackBean);

    if (LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled())
      log.debug("Exit: AcknowledgementManager::addAckBeanEntry");
  }
View Full Code Here


        // Get a new transaction
        transaction = storageManager.getTransaction();
      }

      //lookup a sender bean
      SenderBeanMgr senderBeanMgr = storageManager.getSenderBeanMgr();

      //selecting the set of SenderBeans that suit the given criteria.
      findSenderBean.setSend(true);
      findSenderBean.setTransportAvailable(false);

      if (address != null)
        findSenderBean.setToAddress(address);

      if (identifier != null) {
        if (LoggingControl.isAnyTracingEnabled() && log.isDebugEnabled())
          log.debug("identifier set, this violates RSP " + identifier);
        findSenderBean.setSequenceID(identifier.getIdentifier());
      }

      SenderBean senderBean = null;
      boolean pending = false;
      while (true) {
        // Set the time to send field to be now
        findSenderBean.setTimeToSend(System.currentTimeMillis());

        //finding the beans that go with the criteria of the passed SenderBean
        //The reSend flag is ignored for this selection, so there is no need to
        //set it.
        Collection<SenderBean> collection = senderBeanMgr.find(findSenderBean);

        //removing beans that does not pass the resend test
        for (Iterator<SenderBean> it = collection.iterator(); it.hasNext();) {
          SenderBean bean = (SenderBean) it.next();
          if (!bean.isReSend() && bean.getSentCount() > 0)
View Full Code Here

   
    msgContext.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);

    senderBean.setReSend(false);

    SenderBeanMgr retramsmitterMgr = storageManager.getSenderBeanMgr();
   
    SandeshaUtil.executeAndStore(rmMsgCtx, key, storageManager);
 
    retramsmitterMgr.insert(senderBean);
 
    if (sequenceExists && !storageManager.hasUserTransaction(msgContext)) {

      String workId = msgContext.getMessageID()
          + senderBean.getTimeToSend();
View Full Code Here

    ConfigurationContext configCtx = msgCtx.getConfigurationContext();

    StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configCtx, configCtx
        .getAxisConfiguration());

    SenderBeanMgr retransmitterMgr = storageManager.getSenderBeanMgr();

    String outSequenceId = sequenceAck.getIdentifier().getIdentifier();
    RMSBean rmsBean = SandeshaUtil.getRMSBeanFromSequenceId(storageManager, outSequenceId);

    if(rmsBean==null){
      if (log.isDebugEnabled())
        log.debug("Exit: AcknowledgementProcessor::processAckHeader, Sequence bean not found");
      return;
    }

    if (outSequenceId == null || outSequenceId.length()==0) {
      String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.outSeqIDIsNull);
      log.debug(message);
      throw new SandeshaException(message);
    }
    // If the message type is terminate sequence, then there may be a piggy backed ACK for a
    // sequence that has been terminated
    if (rmMsgCtx.getMessageType()!=Sandesha2Constants.MessageTypes.TERMINATE_SEQ &&
        FaultManager.checkForSequenceTerminated(rmMsgCtx, outSequenceId, rmsBean, piggybackedAck)) {
      if (log.isDebugEnabled())
        log.debug("Exit: AcknowledgementProcessor::processAckHeader, Sequence terminated");
      return;
    }

    // Check that the sender of this Ack holds the correct token
    String internalSequenceId = rmsBean.getInternalSequenceID();
    SandeshaUtil.assertProofOfPossession(rmsBean, msgCtx, soapHeader);

    if(log.isDebugEnabled()) log.debug("Got Ack for RM Sequence: " + outSequenceId + ", internalSeqId: " + internalSequenceId);
    Iterator<Range> ackRangeIterator = sequenceAck.getAcknowledgementRanges().iterator();

    if (FaultManager.checkForInvalidAcknowledgement(rmMsgCtx, sequenceAck, storageManager, rmsBean, piggybackedAck)) {
      if (log.isDebugEnabled())
        log.debug("Exit: AcknowledgementProcessor::processAckHeader, Invalid Ack range ");
      return;
    }

    EndpointReference replyTo = rmsBean.getReplyToEndpointReference();
    boolean anonReplyTo = replyTo==null || replyTo.isWSAddressingAnonymous(); //if this is wsa anonymous
                                        //then we might be using replay

    // 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;

    boolean ackNeedsToSendInvalidFault = false; //if this ack includes a msg that we have not sent then
                          //we should try to send a fault back to the client
    Range firstInvalidRange = null;        //If there is a single invalid range then we set it here.
                          //If there is more than one we report the first invalid range

    //adding a MakeConnection for the response sequence if needed.
    if (rmsBean.getOfferedSequence() != null) {

      RMDBeanMgr rMDBeanMgr = storageManager.getRMDBeanMgr();
      RMDBean rMDBean = rMDBeanMgr.retrieve(outSequenceId);

      if (rMDBean!=null && rMDBean.isPollingMode()) {
        PollingManager manager = storageManager.getPollingManager();
        if(manager != null) manager.schedulePollingRequest(rMDBean.getSequenceID(), false);
      }
    }

    while(ackRangeIterator.hasNext()) {
      Range ackRange = (Range) ackRangeIterator.next();
      long lower = ackRange.lowerValue;
      long upper = ackRange.upperValue;
      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++){

            numberOfNewMessagesAcked++;
            SenderBean retransmitterBean = retransmitterMgr.retrieve(outSequenceId, messageNo);
            if (retransmitterBean != null && retransmitterBean.getMessageType()==Sandesha2Constants.MessageTypes.APPLICATION) {
              // Check we haven't got an Ack for an application message that hasn't been sent yet !
              if (retransmitterBean.getSentCount() == 0 ) {
                //invalid ack range
                if(!ackNeedsToSendInvalidFault){
                  ackNeedsToSendInvalidFault = true;
                  firstInvalidRange = newRanges[rangeIndex];
                  if (log.isDebugEnabled())
                    log.debug("unsent msg has been acked " + retransmitterBean);
                }
              }
              else{
                //delete the sender bean that has been validly acknowledged (unless
                //we use replay model)
                String storageKey = retransmitterBean.getMessageContextRefKey();

                boolean syncResponseNeeded = false;
                if (anonReplyTo) {
                  MessageContext applicationMessage = storageManager.retrieveMessageContext(storageKey, configCtx);
                  AxisOperation operation = applicationMessage.getAxisOperation();
                  if(operation!= null) {
                    int mep = operation.getAxisSpecificMEPConstant();
                    syncResponseNeeded = (mep == WSDLConstants.MEP_CONSTANT_OUT_IN);
                  }
                }


                if (!syncResponseNeeded) {
                  // removing the application message from the storage if there is no replay model
                  retransmitterMgr.delete(retransmitterBean.getMessageID());
                  storageManager.removeMessageContext(storageKey);
                }
              }
            }
          }//end for
View Full Code Here

   
    // Create an RMS on the service.
    StorageManager storageManager =
      SandeshaUtil.getSandeshaStorageManager(serverConfigContext, serverConfigContext.getAxisConfiguration());
   
    SenderBeanMgr senderMgr = storageManager.getSenderBeanMgr();
   
    // Create an RMS on the service.
    String ackMsgSeqID = SandeshaUtil.getUUID();
    String applicationMsgSeqID = SandeshaUtil.getUUID();
      
    setupRMSBean(ackMsgSeqID);
    RMDBean rmdBean = setupRMDBean(applicationMsgSeqID);
   
    SenderBean bean1 = getSenderBean(ackMsgSeqID, 1, 1);
    SenderBean bean2 = getSenderBean(ackMsgSeqID, 0, 2);
    SenderBean bean3 = getSenderBean(ackMsgSeqID, 1, 3);   

    // Create a transaction and insert the RMSBean
    Transaction tran = storageManager.getTransaction();
   
    senderMgr.insert(bean1);
    senderMgr.insert(bean2);
    senderMgr.insert(bean3);   
   
    tran.commit();
   
    // Open a connection to the endpoint, using the sequence ack as the action
    HttpURLConnection connection =
View Full Code Here

            transaction = storageManager.getTransaction();
          }

        }
      }
      SenderBeanMgr mgr = storageManager.getSenderBeanMgr();
      SenderBean senderBean = mgr.getNextMsgToSend(sequenceId);

      if (senderBean == null) {
        if (log.isDebugEnabled())
          log.debug("Exit: Sender::internalRun, no message for this sequence");
View Full Code Here

   * @throws SandeshaException
   */
  public static void terminateSendingSide (ConfigurationContext configContext, String sequenceID) throws SandeshaException {
    StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configContext);
    SequencePropertyBeanMgr sequencePropertyBeanMgr = storageManager.getSequencePropretyBeanMgr();
    SenderBeanMgr retransmitterBeanMgr = storageManager.getRetransmitterBeanMgr();
    CreateSeqBeanMgr createSeqBeanMgr = storageManager.getCreateSeqBeanMgr();
   
    SequencePropertyBean internalSequenceBean = sequencePropertyBeanMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
    if (internalSequenceBean==null)
      throw new SandeshaException ("TempSequence entry not found");
   
    String internalSequenceId = (String) internalSequenceBean.getValue();
   
    //removing retransmitterMgr entries
    SenderBean findRetransmitterBean = new SenderBean ();
    findRetransmitterBean.setInternalSequenceId(internalSequenceId);
    Collection collection = retransmitterBeanMgr.find(findRetransmitterBean);
    Iterator iterator = collection.iterator();
    while (iterator.hasNext()) {
      SenderBean retransmitterBean = (SenderBean) iterator.next();
      retransmitterBeanMgr.delete(retransmitterBean.getMessageId());
    }
   
    //removing the createSeqMgrEntry
    CreateSeqBean findCreateSequenceBean = new CreateSeqBean ();
    findCreateSequenceBean.setInternalSequenceId(internalSequenceId);
View Full Code Here

      RMMsgContext applicationRMMsgContext) throws SandeshaException {
    ConfigurationContext configurationContext = applicationRMMsgContext
        .getMessageContext().getConfigurationContext();
    StorageManager storageManager = SandeshaUtil
        .getSandeshaStorageManager(configurationContext);
    SenderBeanMgr retransmitterBeanMgr = storageManager
        .getRetransmitterBeanMgr();
    SequencePropertyBeanMgr sequencePropertyBeanMgr = storageManager
        .getSequencePropretyBeanMgr();

    SenderBean findBean = new SenderBean();

    Sequence sequence = (Sequence) applicationRMMsgContext
        .getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
    if (sequence == null)
      throw new SandeshaException(
          "Application message does not contain a sequence part");

    String sequenceId = sequence.getIdentifier().getIdentifier();

    SequencePropertyBean internalSequenceBean = sequencePropertyBeanMgr
        .retrieve(sequenceId,
            Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
    if (internalSequenceBean == null)
      throw new SandeshaException("Temp Sequence is not set");

    String internalSequenceId = (String) internalSequenceBean.getValue();
    findBean.setInternalSequenceId(internalSequenceId);
    findBean.setMessagetype(Sandesha2Constants.MessageTypes.ACK);

    Collection collection = retransmitterBeanMgr.find(findBean);
    Iterator it = collection.iterator();

    if (it.hasNext()) {
      SenderBean ackBean = (SenderBean) it.next();

      //deleting the ack entry.
      retransmitterBeanMgr.delete(ackBean.getMessageId());

      //Adding the ack to the application message
      MessageContext ackMsgContext = SandeshaUtil
          .getStoredMessageContext(ackBean.getKey());
      RMMsgContext ackRMMsgContext = MsgInitializer
View Full Code Here

      } catch (AxisFault e1) {
        throw new SandeshaException(e1.getMessage());
      }
    } else {

      SenderBeanMgr retransmitterBeanMgr = storageManager
          .getRetransmitterBeanMgr();

      String key = SandeshaUtil.storeMessageContext(ackMsgCtx);
      SenderBean ackBean = new SenderBean();
      ackBean.setKey(key);
      ackBean.setMessageId(ackMsgCtx.getMessageID());
      ackBean.setReSend(false);
      ackBean.setSend(true);
      ackBean.setMessagetype(Sandesha2Constants.MessageTypes.ACK);

      //the internalSequenceId value of the retransmitter Table for the
      // messages related to an incoming
      //sequence is the actual sequence ID
      ackBean.setInternalSequenceId(sequenceId);

      RMPolicyBean policyBean = (RMPolicyBean) rmMsgCtx
          .getProperty(Sandesha2Constants.WSP.RM_POLICY_BEAN);
      long ackInterval = PropertyManager.getInstance().getAcknowledgementInterval();
      if (policyBean != null) {
        ackInterval = policyBean.getAcknowledgementInaterval();
      }

      //Ack will be sent as stand alone, only after the retransmitter
      // interval.
      long timeToSend = System.currentTimeMillis() + ackInterval;
      ackBean.setTimeToSend(timeToSend);

      //removing old acks.
      SenderBean findBean = new SenderBean();
      findBean.setMessagetype(Sandesha2Constants.MessageTypes.ACK);
      findBean.setInternalSequenceId(sequenceId);
      Collection coll = retransmitterBeanMgr.find(findBean);
      Iterator it = coll.iterator();
      while (it.hasNext()) {
        SenderBean retransmitterBean = (SenderBean) it
            .next();
        retransmitterBeanMgr.delete(retransmitterBean.getMessageId());
      }

      //inserting the new ack.
      retransmitterBeanMgr.insert(ackBean);

      SandeshaUtil.startSenderIfStopped(configCtx);
    }

  }
View Full Code Here

      throw new SandeshaException("Context is null");

    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))
      throw new SandeshaException("OutSequenceId is null");

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

    if (internalSequenceBean == null || internalSequenceBean.getValue() == null)
      throw new SandeshaException("TempSequenceId is not set correctly");

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

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

    //Removing relatesTo - Some WSRM 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.setInternalSequenceId(internalSequenceId);
    Collection retransmitterEntriesOfSequence = retransmitterMgr
        .find(input);

    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());
      }
    }

    while (nackIterator.hasNext()) {
      Nack nack = (Nack) nackIterator.next();
View Full Code Here

TOP

Related Classes of org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr

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.