Author: chamikara Date: Tue Sep 12 03:31:59 2006 New Revision: 442552 URL: http://svn.apache.org/viewvc?view=rev&rev=442552 Log: Added a method 'getPropertyKey' to SandeshaUtil which will extract the correct property key from a message context. Used this in Sandesha Handlers. ApplicationMessage processor was modified to set some entries in message context, to be used by other handlers or service impl.
Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java?view=diff&rev=442552&r1=442551&r2=442552 ============================================================================== --- webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java (original) +++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java Tue Sep 12 03:31:59 2006 @@ -530,4 +530,10 @@ SPEC_2005_02.NS_URI, SPEC_2006_08.NS_URI }; + + public interface MessageContextProperties{ + public String INTERNAL_SEQUENCE_ID = "Sandesha2InternalSequenceId"; + String SEQUENCE_ID = "WSRMSequenceId"; + String MESSAGE_NUMBER = "WSRMMessageNumber"; + } } 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=442552&r1=442551&r2=442552 ============================================================================== --- webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java (original) +++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java Tue Sep 12 03:31:59 2006 @@ -234,15 +234,13 @@ Sequence sequence = (Sequence) rmMsgContext.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE); String sequenceId = null; - if (sequence != null) { - sequenceId = sequence.getIdentifier().getIdentifier(); - } - long msgNo = sequence.getMessageNumber().getMessageNumber(); + + String propertyKey = SandeshaUtil.getPropertyKey(rmMsgContext); - if (sequenceId != null && msgNo > 0) { + if (propertyKey != null && msgNo > 0) { SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropertyBeanMgr(); - SequencePropertyBean receivedMsgsBean = seqPropMgr.retrieve(sequenceId, + SequencePropertyBean receivedMsgsBean = seqPropMgr.retrieve(propertyKey, Sandesha2Constants.SequenceProperties.SERVER_COMPLETED_MESSAGES); if (receivedMsgsBean != null) { String receivedMsgStr = receivedMsgsBean.getValue(); Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java?view=diff&rev=442552&r1=442551&r2=442552 ============================================================================== --- webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java (original) +++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java Tue Sep 12 03:31:59 2006 @@ -37,6 +37,7 @@ import org.apache.sandesha2.storage.Transaction; import org.apache.sandesha2.util.MsgInitializer; import org.apache.sandesha2.util.SandeshaUtil; +import org.apache.sandesha2.wsrm.Sequence; /** * This is invoked in the inFlow of an RM endpoint. This is responsible for @@ -108,7 +109,6 @@ RMMsgContext rmMsgCtx = null; try { rmMsgCtx = MsgInitializer.initializeMessage(msgCtx); - } catch (SandeshaException ex) { String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.cannotInnitMessage); log.debug(message); Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?view=diff&rev=442552&r1=442551&r2=442552 ============================================================================== --- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java (original) +++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java Tue Sep 12 03:31:59 2006 @@ -289,6 +289,11 @@ boolean inOrderInvocation = SandeshaUtil.getPropertyBean( msgCtx.getConfigurationContext().getAxisConfiguration()).isInOrder(); + + //setting properties for the messageContext + rmMsgCtx.setProperty(Sandesha2Constants.MessageContextProperties.SEQUENCE_ID,sequenceId); + rmMsgCtx.setProperty(Sandesha2Constants.MessageContextProperties.MESSAGE_NUMBER,new Long (msgNo)); + if (inOrderInvocation) { SequencePropertyBean incomingSequenceListBean = (SequencePropertyBean) seqPropMgr.retrieve( @@ -495,6 +500,11 @@ if (lastAppMessage != null && "true".equals(lastAppMessage)) lastMessage = true; } + + if (internalSequenceId!=null) + rmMsgCtx.setProperty(Sandesha2Constants.MessageContextProperties.INTERNAL_SEQUENCE_ID,internalSequenceId); + + String propertyKey = SandeshaUtil.getPropertyKey(rmMsgCtx); /* * checking weather the user has given the messageNumber (most of the 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=442552&r1=442551&r2=442552 ============================================================================== --- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java (original) +++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java Tue Sep 12 03:31:59 2006 @@ -391,4 +391,8 @@ return false; } + + public static void addFinalAcknowledgement () { + + } } Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java?view=diff&rev=442552&r1=442551&r2=442552 ============================================================================== --- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java (original) +++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java Tue Sep 12 03:31:59 2006 @@ -243,17 +243,11 @@ } } else rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.UNKNOWN); + + if (sequenceID!=null) + rmMsgCtx.setProperty(Sandesha2Constants.MessageContextProperties.SEQUENCE_ID,sequenceID); - String propertyKey = null; - if (rmMsgCtx.getMessageContext().getFLOW() == MessageContext.IN_FLOW) { - propertyKey = sequenceID; - } else { - SequencePropertyBean internalSequenceIDBean = sequencePropertyBeanMgr.retrieve(sequenceID, - Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID); - if (internalSequenceIDBean != null) { - propertyKey = internalSequenceIDBean.getValue(); - } - } + String propertyKey = SandeshaUtil.getPropertyKey(rmMsgCtx); //In case of ack messages RM Namespace is decided based on the sequenceId of the first //sequence Ack. In other words Sandesha2 does not expect to receive two SequenceAcknowledgements Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java?view=diff&rev=442552&r1=442551&r2=442552 ============================================================================== --- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java (original) +++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java Tue Sep 12 03:31:59 2006 @@ -672,10 +672,14 @@ applicationMsg.setMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT, sequenceAck); sequenceAck.toOMElement(envelope.getHeader()); - applicationMsg.setAction(SpecSpecificConstants.getSequenceAcknowledgementAction(SandeshaUtil.getRMVersion( - sequenceId, storageManager))); - applicationMsg.setSOAPAction(SpecSpecificConstants.getSequenceAcknowledgementSOAPAction(SandeshaUtil - .getRMVersion(sequenceId, storageManager))); + + if (applicationMsg.getWSAAction()==null) { + applicationMsg.setAction(SpecSpecificConstants.getSequenceAcknowledgementAction(SandeshaUtil.getRMVersion( + sequenceId, storageManager))); + applicationMsg.setSOAPAction(SpecSpecificConstants.getSequenceAcknowledgementSOAPAction(SandeshaUtil + .getRMVersion(sequenceId, storageManager))); + } + applicationMsg.setMessageId(SandeshaUtil.getUUID()); } 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=442552&r1=442551&r2=442552 ============================================================================== --- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java (original) +++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java Tue Sep 12 03:31:59 2006 @@ -952,4 +952,48 @@ throw new SandeshaException(message,e); } } + + /**This returns the Key used when store SequencePropertyBeans for the passed message. + * For the sending side this will be the internal sequence ID. + * For the receiving side this is the sequenceId. + * + * @param rmMsgContext + * @return + */ + + public static String getPropertyKey (RMMsgContext rmMsgContext) { + String sequenceId = (String) rmMsgContext.getProperty(Sandesha2Constants.MessageContextProperties.SEQUENCE_ID); + String internalSequenceId = (String) rmMsgContext.getProperty(Sandesha2Constants.MessageContextProperties.INTERNAL_SEQUENCE_ID); + + String propertyKey = null; + + int type = rmMsgContext.getMessageType(); + int flow = rmMsgContext.getMessageContext().getFLOW(); + + if (flow==MessageContext.OUT_FLOW) { + if (type==Sandesha2Constants.MessageTypes.UNKNOWN) + propertyKey = internalSequenceId; + } else if (flow==MessageContext.IN_FLOW) { + if (isSequenceResponseMessageType(type)) + propertyKey = internalSequenceId; + else + propertyKey = sequenceId; + } + + //TODO handler faults + + return propertyKey; + } + + private static boolean isSequenceResponseMessageType (int messageType) { + if (messageType==Sandesha2Constants.MessageTypes.CREATE_SEQ_RESPONSE || + messageType==Sandesha2Constants.MessageTypes.ACK || + messageType==Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE_RESPONSE || + messageType==Sandesha2Constants.MessageTypes.TERMINATE_SEQ_RESPONSE) { + + return true; + } else { + return false; + } + } } Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java?view=diff&rev=442552&r1=442551&r2=442552 ============================================================================== --- webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java (original) +++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java Tue Sep 12 03:31:59 2006 @@ -29,6 +29,7 @@ import org.apache.sandesha2.util.AcknowledgementManager; import org.apache.sandesha2.util.MessageRetransmissionAdjuster; import org.apache.sandesha2.util.MsgInitializer; +import org.apache.sandesha2.util.RMMsgCreator; import org.apache.sandesha2.util.SandeshaUtil; import org.apache.sandesha2.util.TerminateManager; import org.apache.sandesha2.wsrm.TerminateSequence; @@ -103,8 +104,11 @@ // String sequenceID = sequence.getIdentifier().getIdentifier(); // } - // checking weather this message can carry piggybacked acks - if (isAckPiggybackableMsgType(messageType)) { +// if (AcknowledgementManager.ackRequired (rmMsgCtx)) { +// RMMsgCreator.addAckMessage(rmMsgCtx); + + //} else + if (isAckPiggybackableMsgType(messageType)) { // checking weather this message can carry piggybacked acks // piggybacking if an ack if available for the same // sequence. // TODO do piggybacking based on wsa:To --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]