You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by ch...@apache.org on 2006/07/19 04:58:35 UTC
svn commit: r423350 [5/8] - in /webservices/sandesha/trunk/java: ./
src/org/apache/sandesha2/ src/org/apache/sandesha2/client/
src/org/apache/sandesha2/handlers/ src/org/apache/sandesha2/i18n/
src/org/apache/sandesha2/msgprocessors/ src/org/apache/sand...
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?rev=423350&r1=423349&r2=423350&view=diff
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java Tue Jul 18 19:58:31 2006
@@ -39,6 +39,8 @@
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.i18n.SandeshaMessageHelper;
+import org.apache.sandesha2.i18n.SandeshaMessageKeys;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
@@ -55,7 +57,7 @@
public class AcknowledgementManager {
private static Log log = LogFactory.getLog(AcknowledgementManager.class);
-
+
/**
* Piggybacks any available acks of the same sequence to the given
* application message.
@@ -63,9 +65,9 @@
* @param applicationRMMsgContext
* @throws SandeshaException
*/
- public static void piggybackAcksIfPresent(
- RMMsgContext rmMessageContext,StorageManager storageManager) throws SandeshaException {
-
+ public static void piggybackAcksIfPresent(RMMsgContext rmMessageContext, StorageManager storageManager)
+ throws SandeshaException {
+
ConfigurationContext configurationContext = rmMessageContext.getConfigurationContext();
SenderBeanMgr retransmitterBeanMgr = storageManager.getRetransmitterBeanMgr();
@@ -73,62 +75,61 @@
SenderBean findBean = new SenderBean();
- String sequnceID = SandeshaUtil.getSequenceIDFromRMMessage (rmMessageContext);
+ String sequnceID = SandeshaUtil.getSequenceIDFromRMMessage(rmMessageContext);
findBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
findBean.setSend(true);
findBean.setReSend(false);
-
+
String carrietTo = rmMessageContext.getTo().getAddress();
-
+
Collection collection = retransmitterBeanMgr.find(findBean);
-
+
Iterator it = collection.iterator();
-
- piggybackLoop:
- while (it.hasNext()) {
+ piggybackLoop: while (it.hasNext()) {
SenderBean ackBean = (SenderBean) it.next();
long timeNow = System.currentTimeMillis();
- if (ackBean.getTimeToSend() > timeNow) {
-// //Piggybacking will happen only if the end of ack interval (timeToSend) is not reached.
+ if (ackBean.getTimeToSend() > timeNow) {
+ // //Piggybacking will happen only if the end of ack interval
+ // (timeToSend) is not reached.
boolean disablePiggybacking = false;
if (disablePiggybacking)
continue piggybackLoop;
-
- MessageContext ackMsgContext = storageManager
- .retrieveMessageContext(ackBean.getMessageContextRefKey(),configurationContext);
-
- //wsa:To has to match for piggybacking.
+
+ MessageContext ackMsgContext = storageManager.retrieveMessageContext(ackBean.getMessageContextRefKey(),
+ configurationContext);
+
+ // wsa:To has to match for piggybacking.
String to = ackMsgContext.getTo().getAddress();
if (!carrietTo.equals(to)) {
continue piggybackLoop;
}
-
-// String ackSequenceID = ackBean.getSequenceID();
-
-// //sequenceID has to match for piggybacking
-// if (!ackSequenceID.equals(sequnceID)) {
-// continue piggybackLoop;
-// }
-
- //deleting the ack entry.
+
+ // String ackSequenceID = ackBean.getSequenceID();
+
+ // //sequenceID has to match for piggybacking
+ // if (!ackSequenceID.equals(sequnceID)) {
+ // continue piggybackLoop;
+ // }
+
+ // deleting the ack entry.
retransmitterBeanMgr.delete(ackBean.getMessageID());
- //Adding the ack to the application message
+ // Adding the ack to the application message
RMMsgContext ackRMMsgContext = MsgInitializer.initializeMessage(ackMsgContext);
if (ackRMMsgContext.getMessageType() != Sandesha2Constants.MessageTypes.ACK) {
- String message = "Invalid ack message entry";
+ String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.invalidAckMessageEntry,
+ ackRMMsgContext.toString());
log.debug(message);
throw new SandeshaException(message);
}
SequenceAcknowledgement sequenceAcknowledgement = (SequenceAcknowledgement) ackRMMsgContext
.getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
- rmMessageContext.setMessagePart(
- Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT,
+ rmMessageContext.setMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT,
sequenceAcknowledgement);
rmMessageContext.addSOAPEnvelope();
@@ -136,65 +137,74 @@
}
}
}
-
- /**this is used to get the acked messages of a sequence. If this is an outgoing message the sequenceIdentifier should
- * be the internal sequenceID.
+
+ /**
+ * this is used to get the acked messages of a sequence. If this is an
+ * outgoing message the sequenceIdentifier should be the internal
+ * sequenceID.
*
* @param sequenceIdentifier
* @param outGoingMessage
* @return
*/
- public static ArrayList getClientCompletedMessagesList (String sequenceID,SequencePropertyBeanMgr seqPropMgr) throws SandeshaException {
-
- //first trying to get it from the internal sequence id.
- SequencePropertyBean internalSequenceBean = seqPropMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
+ public static ArrayList getClientCompletedMessagesList(String sequenceID, SequencePropertyBeanMgr seqPropMgr)
+ throws SandeshaException {
+
+ // first trying to get it from the internal sequence id.
+ SequencePropertyBean internalSequenceBean = seqPropMgr.retrieve(sequenceID,
+ Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
String internalSequenceID = null;
- if (internalSequenceBean!=null)
+ if (internalSequenceBean != null)
internalSequenceID = internalSequenceBean.getValue();
-
+
SequencePropertyBean completedMessagesBean = null;
- if (internalSequenceID!=null)
- completedMessagesBean = seqPropMgr.retrieve(internalSequenceID,Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES);
-
- if (completedMessagesBean==null)
- completedMessagesBean = seqPropMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES);
-
+ if (internalSequenceID != null)
+ completedMessagesBean = seqPropMgr.retrieve(internalSequenceID,
+ Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES);
+
+ if (completedMessagesBean == null)
+ completedMessagesBean = seqPropMgr.retrieve(sequenceID,
+ Sandesha2Constants.SequenceProperties.CLIENT_COMPLETED_MESSAGES);
+
ArrayList completedMsgList = null;
- if (completedMessagesBean!=null) {
+ if (completedMessagesBean != null) {
completedMsgList = SandeshaUtil.getArrayListFromString(completedMessagesBean.getValue());
} else {
- String message = "Completed messages bean is null, for the sequence " + sequenceID;
- throw new SandeshaException (message);
+ String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.completedMsgBeanIsNull, sequenceID);
+ throw new SandeshaException(message);
}
-
+
return completedMsgList;
}
-
- public static ArrayList getServerCompletedMessagesList (String sequenceID,SequencePropertyBeanMgr seqPropMgr) throws SandeshaException {
-
+
+ public static ArrayList getServerCompletedMessagesList(String sequenceID, SequencePropertyBeanMgr seqPropMgr)
+ throws SandeshaException {
+
SequencePropertyBean completedMessagesBean = null;
- completedMessagesBean = seqPropMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.SERVER_COMPLETED_MESSAGES);
-
+ completedMessagesBean = seqPropMgr.retrieve(sequenceID,
+ Sandesha2Constants.SequenceProperties.SERVER_COMPLETED_MESSAGES);
+
ArrayList completedMsgList = null;
- if (completedMessagesBean!=null) {
- completedMsgList = SandeshaUtil.getArrayListFromMsgsString (completedMessagesBean.getValue());
+ if (completedMessagesBean != null) {
+ completedMsgList = SandeshaUtil.getArrayListFromMsgsString(completedMessagesBean.getValue());
} else {
- String message = "Completed messages bean is null, for the sequence " + sequenceID;
- throw new SandeshaException (message);
+ String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.completedMsgBeanIsNull, sequenceID);
+ throw new SandeshaException(message);
}
-
+
return completedMsgList;
}
-
- public static RMMsgContext generateAckMessage (RMMsgContext referenceRMMessage, String sequenceID, StorageManager storageManager)throws SandeshaException {
-
+
+ public static RMMsgContext generateAckMessage(RMMsgContext referenceRMMessage, String sequenceID,
+ StorageManager storageManager) throws SandeshaException {
+
MessageContext referenceMsg = referenceRMMessage.getMessageContext();
-
+
ConfigurationContext configurationContext = referenceRMMessage.getMessageContext().getConfigurationContext();
SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropertyBeanMgr();
-
- //Setting the ack depending on AcksTo.
+
+ // Setting the ack depending on AcksTo.
SequencePropertyBean acksToBean = seqPropMgr.retrieve(sequenceID,
Sandesha2Constants.SequenceProperties.ACKS_TO_EPR);
@@ -202,19 +212,18 @@
String acksToStr = acksTo.getAddress();
if (acksToStr == null)
- throw new SandeshaException(
- "acksToStr Seqeunce property is not set correctly");
-
+ throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.acksToStrNotSet));
+
AxisOperation ackOperation = null;
try {
ackOperation = AxisOperationFactory.getOperationDescription(WSDL20_2004Constants.MEP_URI_IN_ONLY);
} catch (AxisFault e) {
- throw new SandeshaException("Could not create the Operation");
+ throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.axisOperationError, e
+ .toString()), e);
}
- AxisOperation rmMsgOperation = referenceRMMessage.getMessageContext()
- .getAxisOperation();
+ AxisOperation rmMsgOperation = referenceRMMessage.getMessageContext().getAxisOperation();
if (rmMsgOperation != null) {
ArrayList outFlow = rmMsgOperation.getPhasesOutFlow();
if (outFlow != null) {
@@ -223,23 +232,26 @@
}
}
- MessageContext ackMsgCtx = SandeshaUtil.createNewRelatedMessageContext(
- referenceRMMessage, ackOperation);
- ackMsgCtx.setProperty(AddressingConstants.WS_ADDRESSING_VERSION,
- referenceMsg.getProperty(AddressingConstants.WS_ADDRESSING_VERSION)); //TODO do this in the RMMsgCreator
-
-
- ackMsgCtx.setProperty(Sandesha2Constants.APPLICATION_PROCESSING_DONE,"true");
-
+ MessageContext ackMsgCtx = SandeshaUtil.createNewRelatedMessageContext(referenceRMMessage, ackOperation);
+ ackMsgCtx.setProperty(AddressingConstants.WS_ADDRESSING_VERSION, referenceMsg
+ .getProperty(AddressingConstants.WS_ADDRESSING_VERSION)); // TODO
+ // do
+ // this
+ // in
+ // the
+ // RMMsgCreator
+
+ ackMsgCtx.setProperty(Sandesha2Constants.APPLICATION_PROCESSING_DONE, "true");
+
RMMsgContext ackRMMsgCtx = MsgInitializer.initializeMessage(ackMsgCtx);
ackRMMsgCtx.setRMNamespaceValue(referenceRMMessage.getRMNamespaceValue());
-
+
ackMsgCtx.setMessageID(SandeshaUtil.getUUID());
SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SandeshaUtil
.getSOAPVersion(referenceMsg.getEnvelope()));
-
- //Setting new envelope
+
+ // Setting new envelope
SOAPEnvelope envelope = factory.getDefaultEnvelope();
try {
ackMsgCtx.setEnvelope(envelope);
@@ -248,29 +260,30 @@
}
ackMsgCtx.setTo(acksTo);
-
- //adding the SequenceAcknowledgement part.
- RMMsgCreator.addAckMessage(ackRMMsgCtx, sequenceID,storageManager);
-
- ackMsgCtx.setProperty(MessageContext.TRANSPORT_IN,null);
- String addressingNamespaceURI = SandeshaUtil.getSequenceProperty(sequenceID,Sandesha2Constants.SequenceProperties.ADDRESSING_NAMESPACE_VALUE,storageManager);
+ // adding the SequenceAcknowledgement part.
+ RMMsgCreator.addAckMessage(ackRMMsgCtx, sequenceID, storageManager);
+
+ ackMsgCtx.setProperty(MessageContext.TRANSPORT_IN, null);
+
+ String addressingNamespaceURI = SandeshaUtil.getSequenceProperty(sequenceID,
+ Sandesha2Constants.SequenceProperties.ADDRESSING_NAMESPACE_VALUE, storageManager);
String anonymousURI = SpecSpecificConstants.getAddressingAnonymousURI(addressingNamespaceURI);
-
- ackMsgCtx.setProperty(AddressingConstants.WS_ADDRESSING_VERSION,addressingNamespaceURI);
-
+
+ ackMsgCtx.setProperty(AddressingConstants.WS_ADDRESSING_VERSION, addressingNamespaceURI);
+
if (anonymousURI.equals(acksTo.getAddress())) {
-// AxisEngine engine = new AxisEngine(ackRMMsgCtx.getMessageContext()
-// .getConfigurationContext());
+ // AxisEngine engine = new
+ // AxisEngine(ackRMMsgCtx.getMessageContext()
+ // .getConfigurationContext());
- //setting CONTEXT_WRITTEN since acksto is anonymous
+ // setting CONTEXT_WRITTEN since acksto is anonymous
if (referenceRMMessage.getMessageContext().getOperationContext() == null) {
- //operation context will be null when doing in a GLOBAL
+ // operation context will be null when doing in a GLOBAL
// handler.
try {
- AxisOperation op = AxisOperationFactory
- .getAxisOperation(WSDL20_2004Constants.MEP_CONSTANT_IN_OUT);
+ AxisOperation op = AxisOperationFactory.getAxisOperation(WSDL20_2004Constants.MEP_CONSTANT_IN_OUT);
OperationContext opCtx = new OperationContext(op);
referenceRMMessage.getMessageContext().setAxisOperation(op);
referenceRMMessage.getMessageContext().setOperationContext(opCtx);
@@ -280,48 +293,46 @@
}
referenceRMMessage.getMessageContext().getOperationContext().setProperty(
- org.apache.axis2.Constants.RESPONSE_WRITTEN,
- Constants.VALUE_TRUE);
+ org.apache.axis2.Constants.RESPONSE_WRITTEN, Constants.VALUE_TRUE);
+
+ referenceRMMessage.getMessageContext().setProperty(Sandesha2Constants.ACK_WRITTEN, "true");
- referenceRMMessage.getMessageContext().setProperty(
- Sandesha2Constants.ACK_WRITTEN, "true");
-
ackRMMsgCtx.getMessageContext().setServerSide(true);
return ackRMMsgCtx;
-
+
} else {
-/// Transaction asyncAckTransaction = storageManager.getTransaction();
+ // / Transaction asyncAckTransaction =
+ // storageManager.getTransaction();
- SenderBeanMgr retransmitterBeanMgr = storageManager
- .getRetransmitterBeanMgr();
+ SenderBeanMgr retransmitterBeanMgr = storageManager.getRetransmitterBeanMgr();
String key = SandeshaUtil.getUUID();
-
+
SenderBean ackBean = new SenderBean();
ackBean.setMessageContextRefKey(key);
ackBean.setMessageID(ackMsgCtx.getMessageID());
ackBean.setReSend(false);
ackBean.setSequenceID(sequenceID);
-
- //this will be set to true in the sender.
+
+ // this will be set to true in the sender.
ackBean.setSend(true);
-
- ackMsgCtx.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING,
- Sandesha2Constants.VALUE_FALSE);
-
+
+ ackMsgCtx.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
+
ackBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
- long ackInterval = SandeshaUtil.getPropertyBean(referenceMsg.getAxisOperation()).getAcknowledgementInaterval();
-
- //Ack will be sent as stand alone, only after the retransmitter
+ long ackInterval = SandeshaUtil.getPropertyBean(referenceMsg.getAxisOperation())
+ .getAcknowledgementInaterval();
+
+ // Ack will be sent as stand alone, only after the retransmitter
// interval.
long timeToSend = System.currentTimeMillis() + ackInterval;
- //removing old acks.
+ // removing old acks.
SenderBean findBean = new SenderBean();
findBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
-
- //this will be set to true in the sandesha2TransportSender.
+
+ // this will be set to true in the sandesha2TransportSender.
findBean.setSend(true);
findBean.setReSend(false);
Collection coll = retransmitterBeanMgr.find(findBean);
@@ -329,50 +340,51 @@
if (it.hasNext()) {
SenderBean oldAckBean = (SenderBean) it.next();
- timeToSend = oldAckBean.getTimeToSend(); //If there is an old ack. This ack will be sent in the old timeToSend.
-
- //removing the retransmitted entry for the oldAck
+ timeToSend = oldAckBean.getTimeToSend(); // If there is an
+ // old ack. This ack
+ // will be sent in
+ // the old
+ // timeToSend.
+
+ // removing the retransmitted entry for the oldAck
retransmitterBeanMgr.delete(oldAckBean.getMessageID());
-
- //removing the message store entry for the old ack
+
+ // removing the message store entry for the old ack
storageManager.removeMessageContext(oldAckBean.getMessageContextRefKey());
}
-
+
ackBean.setTimeToSend(timeToSend);
- storageManager.storeMessageContext(key,ackMsgCtx);
-
- //inserting the new ack.
+ storageManager.storeMessageContext(key, ackMsgCtx);
+
+ // inserting the new ack.
retransmitterBeanMgr.insert(ackBean);
-/// asyncAckTransaction.commit();
+ // / asyncAckTransaction.commit();
- //passing the message through sandesha2sender
- ackMsgCtx.setProperty(Sandesha2Constants.ORIGINAL_TRANSPORT_OUT_DESC,ackMsgCtx.getTransportOut());
- ackMsgCtx.setProperty(Sandesha2Constants.SET_SEND_TO_TRUE,Sandesha2Constants.VALUE_TRUE);
- ackMsgCtx.setProperty(Sandesha2Constants.MESSAGE_STORE_KEY,key);
- ackMsgCtx.setTransportOut(new Sandesha2TransportOutDesc ());
+ // passing the message through sandesha2sender
+ ackMsgCtx.setProperty(Sandesha2Constants.ORIGINAL_TRANSPORT_OUT_DESC, ackMsgCtx.getTransportOut());
+ ackMsgCtx.setProperty(Sandesha2Constants.SET_SEND_TO_TRUE, Sandesha2Constants.VALUE_TRUE);
+ ackMsgCtx.setProperty(Sandesha2Constants.MESSAGE_STORE_KEY, key);
+ ackMsgCtx.setTransportOut(new Sandesha2TransportOutDesc());
RMMsgContext ackRMMessageCtx = MsgInitializer.initializeMessage(ackMsgCtx);
-
- SandeshaUtil.startSenderForTheSequence(configurationContext,sequenceID);
- referenceMsg.pause();
+
+ SandeshaUtil.startSenderForTheSequence(configurationContext, sequenceID);
+ referenceMsg.pause();
return ackRMMessageCtx;
- }
+ }
}
-
- public static boolean verifySequenceCompletion(Iterator ackRangesIterator,
- long lastMessageNo) {
+
+ public static boolean verifySequenceCompletion(Iterator ackRangesIterator, long lastMessageNo) {
HashMap startMap = new HashMap();
while (ackRangesIterator.hasNext()) {
- AcknowledgementRange temp = (AcknowledgementRange) ackRangesIterator
- .next();
+ AcknowledgementRange temp = (AcknowledgementRange) ackRangesIterator.next();
startMap.put(new Long(temp.getLowerValue()), temp);
}
long start = 1;
boolean loop = true;
while (loop) {
- AcknowledgementRange temp = (AcknowledgementRange) startMap
- .get(new Long(start));
+ AcknowledgementRange temp = (AcknowledgementRange) startMap.get(new Long(start));
if (temp == null) {
loop = false;
continue;
Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java?rev=423350&r1=423349&r2=423350&view=diff
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java Tue Jul 18 19:58:31 2006
@@ -44,6 +44,8 @@
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.i18n.SandeshaMessageHelper;
+import org.apache.sandesha2.i18n.SandeshaMessageKeys;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.beanmanagers.CreateSeqBeanMgr;
import org.apache.sandesha2.storage.beanmanagers.NextMsgBeanMgr;
@@ -62,36 +64,35 @@
public class FaultManager {
- private static final Log log = LogFactory.getLog(FaultManager.class);
+ private static final Log log = LogFactory.getLog(FaultManager.class);
public FaultManager() {
}
/**
- * Check weather the CreateSequence should be refused and generate the fault if it should.
+ * Check weather the CreateSequence should be refused and generate the fault
+ * if it should.
*
* @param messageContext
* @return
* @throws SandeshaException
*/
- public RMMsgContext checkForCreateSequenceRefused(
- MessageContext createSequenceMessage, StorageManager storageManager) throws SandeshaException {
-
- if (log.isDebugEnabled())
- log.debug("Enter: FaultManager::checkForCreateSequenceRefused");
+ public RMMsgContext checkForCreateSequenceRefused(MessageContext createSequenceMessage,
+ StorageManager storageManager) throws SandeshaException {
- RMMsgContext createSequenceRMMsg = MsgInitializer
- .initializeMessage(createSequenceMessage);
+ if (log.isDebugEnabled())
+ log.debug("Enter: FaultManager::checkForCreateSequenceRefused");
+
+ RMMsgContext createSequenceRMMsg = MsgInitializer.initializeMessage(createSequenceMessage);
CreateSequence createSequence = (CreateSequence) createSequenceRMMsg
.getMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ);
if (createSequence == null)
- throw new SandeshaException(
- "Passed message does not have a CreateSequence part");
+ throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noCreateSeqParts));
ConfigurationContext context = createSequenceMessage.getConfigurationContext();
if (storageManager == null)
- throw new SandeshaException("Storage Manager is null");
+ throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.cannotGetStorageManager));
boolean refuseSequence = false;
String reason = "";
@@ -107,47 +108,51 @@
data.setSubcode(Sandesha2Constants.SOAPFaults.Subcodes.CREATE_SEQUENCE_REFUSED);
data.setReason(reason);
- if (log.isDebugEnabled())
- log.debug("Exit: FaultManager::checkForCreateSequenceRefused, refused sequence");
- return getFault(createSequenceRMMsg, data,createSequenceRMMsg.getAddressingNamespaceValue(),storageManager);
+ if (log.isDebugEnabled())
+ log.debug("Exit: FaultManager::checkForCreateSequenceRefused, refused sequence");
+ return getFault(createSequenceRMMsg, data, createSequenceRMMsg.getAddressingNamespaceValue(),
+ storageManager);
}
- if (log.isDebugEnabled())
- log.debug("Exit: FaultManager::checkForCreateSequenceRefused");
+ if (log.isDebugEnabled())
+ log.debug("Exit: FaultManager::checkForCreateSequenceRefused");
return null;
}
/**
- * Check weather the LastMessage number has been exceeded and generate the fault if it is.
+ * Check weather the LastMessage number has been exceeded and generate the
+ * fault if it is.
*
* @param msgCtx
* @return
*/
- public RMMsgContext checkForLastMsgNumberExceeded(RMMsgContext applicationRMMessage, StorageManager storageManager) throws SandeshaException {
- if (log.isDebugEnabled())
- log.debug("Enter: FaultManager::checkForLastMsgNumberExceeded");
+ public RMMsgContext checkForLastMsgNumberExceeded(RMMsgContext applicationRMMessage, StorageManager storageManager)
+ throws SandeshaException {
+ 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;
String reason = null;
- SequencePropertyBean lastMessageBean = seqPropMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.LAST_OUT_MESSAGE_NO);
- if (lastMessageBean!=null) {
+ SequencePropertyBean lastMessageBean = seqPropMgr.retrieve(sequenceID,
+ Sandesha2Constants.SequenceProperties.LAST_OUT_MESSAGE_NO);
+ if (lastMessageBean != null) {
long lastMessageNo = Long.parseLong(lastMessageBean.getValue());
- if (messageNumber>lastMessageNo) {
+ if (messageNumber > lastMessageNo) {
lastMessageNumberExceeded = true;
- reason = "The message number of the message '" + messageNumber + "' exceeded the last message number '" + lastMessageNo + "'"+
- "which was mentioned as last message in a previosly received application message";
+ reason = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.msgNumberLargerThanLastMsg, Long
+ .toString(messageNumber), Long.toString(lastMessageNo));
}
}
-
+
if (lastMessageNumberExceeded) {
- FaultData faultData = new FaultData ();
+ FaultData faultData = new FaultData();
faultData.setType(Sandesha2Constants.SOAPFaults.FaultType.LAST_MESSAGE_NO_EXCEEDED);
int SOAPVersion = SandeshaUtil.getSOAPVersion(applicationRMMessage.getSOAPEnvelope());
if (SOAPVersion == Sandesha2Constants.SOAPVersion.v1_1)
@@ -157,18 +162,18 @@
faultData.setSubcode(Sandesha2Constants.SOAPFaults.Subcodes.LAST_MESSAGE_NO_EXCEEDED);
faultData.setReason(reason);
- if (log.isDebugEnabled())
- log.debug("Exit: FaultManager::checkForLastMsgNumberExceeded, lastMessageNumberExceeded");
- return getFault(applicationRMMessage, faultData, applicationRMMessage.getAddressingNamespaceValue(),storageManager);
- }
-
- if (log.isDebugEnabled())
- log.debug("Exit: FaultManager::checkForLastMsgNumberExceeded");
- return null;
+ if (log.isDebugEnabled())
+ log.debug("Exit: FaultManager::checkForLastMsgNumberExceeded, lastMessageNumberExceeded");
+ return getFault(applicationRMMessage, faultData, applicationRMMessage.getAddressingNamespaceValue(),
+ storageManager);
+ }
+
+ if (log.isDebugEnabled())
+ log.debug("Exit: FaultManager::checkForLastMsgNumberExceeded");
+ return null;
}
- public RMMsgContext checkForMessageNumberRoleover(
- MessageContext messageContext) {
+ public RMMsgContext checkForMessageNumberRoleover(MessageContext messageContext) {
return null;
}
@@ -178,34 +183,33 @@
* predifined limit ( genenrates a Message Number Rollover fault)
*
* @param msgCtx
- * @return @throws
- * SandeshaException
+ * @return
+ * @throws SandeshaException
*/
- public RMMsgContext checkForUnknownSequence(RMMsgContext rmMessageContext, String sequenceID, StorageManager storageManager)
- throws SandeshaException {
- if (log.isDebugEnabled())
- log.debug("Enter: FaultManager::checkForUnknownSequence, " + sequenceID);
+ public RMMsgContext checkForUnknownSequence(RMMsgContext rmMessageContext, String sequenceID,
+ StorageManager storageManager) throws SandeshaException {
+ if (log.isDebugEnabled())
+ log.debug("Enter: FaultManager::checkForUnknownSequence, " + sequenceID);
MessageContext messageContext = rmMessageContext.getMessageContext();
-
+
CreateSeqBeanMgr createSeqMgr = storageManager.getCreateSeqBeanMgr();
int type = rmMessageContext.getMessageType();
-
+
boolean validSequence = true;
-
- if (type==Sandesha2Constants.MessageTypes.ACK ||
- type==Sandesha2Constants.MessageTypes.CREATE_SEQ_RESPONSE ||
- type==Sandesha2Constants.MessageTypes.TERMINATE_SEQ_RESPONSE ||
- type==Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE_RESPONSE) {
-
- CreateSeqBean createSeqFindBean = new CreateSeqBean ();
+
+ if (type == Sandesha2Constants.MessageTypes.ACK || type == Sandesha2Constants.MessageTypes.CREATE_SEQ_RESPONSE
+ || type == Sandesha2Constants.MessageTypes.TERMINATE_SEQ_RESPONSE
+ || type == Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE_RESPONSE) {
+
+ CreateSeqBean createSeqFindBean = new CreateSeqBean();
createSeqFindBean.setSequenceID(sequenceID);
-
+
Collection coll = createSeqMgr.find(createSeqFindBean);
- if (coll.size()==0) {
+ if (coll.size() == 0) {
validSequence = false;
}
-
+
} else {
NextMsgBeanMgr mgr = storageManager.getNextMsgBeanMgr();
@@ -221,19 +225,19 @@
break;
}
}
-
+
if (!contains)
validSequence = false;
}
-
+
String rmNamespaceValue = rmMessageContext.getRMNamespaceValue();
if (!validSequence) {
-
- if (log.isDebugEnabled())
- log.debug("Sequence not valid " + sequenceID);
- //Return an UnknownSequence error
+ if (log.isDebugEnabled())
+ log.debug("Sequence not valid " + sequenceID);
+
+ // Return an UnknownSequence error
int SOAPVersion = SandeshaUtil.getSOAPVersion(messageContext.getEnvelope());
FaultData data = new FaultData();
@@ -245,69 +249,69 @@
data.setSubcode(Sandesha2Constants.SOAPFaults.Subcodes.UNKNOWN_SEQUENCE);
SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SOAPVersion);
-// Identifier identifier = new Identifier(factory,rmNamespaceValue);
-// identifier.setIndentifer(sequenceID);
-// OMElement identifierOMElem = identifier.getOMElement();
-
- OMElement identifierElement = factory.createOMElement(Sandesha2Constants.WSRM_COMMON.IDENTIFIER,rmNamespaceValue, Sandesha2Constants.WSRM_COMMON.NS_PREFIX_RM);
+ // Identifier identifier = new Identifier(factory,rmNamespaceValue);
+ // identifier.setIndentifer(sequenceID);
+ // OMElement identifierOMElem = identifier.getOMElement();
+
+ OMElement identifierElement = factory.createOMElement(Sandesha2Constants.WSRM_COMMON.IDENTIFIER,
+ rmNamespaceValue, Sandesha2Constants.WSRM_COMMON.NS_PREFIX_RM);
data.setDetail(identifierElement);
-
- data.setReason("A sequence with the given sequenceID has NOT been established");
- if (log.isDebugEnabled())
- log.debug("Exit: FaultManager::checkForUnknownSequence");
-
- return getFault(rmMessageContext, data,rmMessageContext.getAddressingNamespaceValue(),storageManager);
+ data.setReason(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noSequenceEstablished, sequenceID));
+
+ if (log.isDebugEnabled())
+ log.debug("Exit: FaultManager::checkForUnknownSequence");
+
+ return getFault(rmMessageContext, data, rmMessageContext.getAddressingNamespaceValue(), storageManager);
}
- if (log.isDebugEnabled())
- log.debug("Exit: FaultManager::checkForUnknownSequence");
+ if (log.isDebugEnabled())
+ log.debug("Exit: FaultManager::checkForUnknownSequence");
return null;
}
/**
- * Check weather the Acknowledgement is invalid and generate a fault if it is.
+ * Check weather the Acknowledgement is invalid and generate a fault if it
+ * is.
*
* @param msgCtx
- * @return @throws
- * SandeshaException
+ * @return
+ * @throws SandeshaException
*/
- public RMMsgContext checkForInvalidAcknowledgement(RMMsgContext ackRMMessageContext,StorageManager storageManager)
+ public RMMsgContext checkForInvalidAcknowledgement(RMMsgContext ackRMMessageContext, StorageManager storageManager)
throws SandeshaException {
- if (log.isDebugEnabled())
- log.debug("Enter: FaultManager::checkForInvalidAcknowledgement");
+ if (log.isDebugEnabled())
+ log.debug("Enter: FaultManager::checkForInvalidAcknowledgement");
+
+ // check lower<=upper
+ // TODO acked for not-send message
- //check lower<=upper
- //TODO acked for not-send message
-
MessageContext ackMessageContext = ackRMMessageContext.getMessageContext();
if (ackRMMessageContext.getMessageType() != Sandesha2Constants.MessageTypes.ACK) {
- if (log.isDebugEnabled())
- log.debug("Exit: FaultManager::checkForInvalidAcknowledgement, MessageType not an ACK");
- return null;
- }
-
+ if (log.isDebugEnabled())
+ log.debug("Exit: FaultManager::checkForInvalidAcknowledgement, MessageType not an ACK");
+ return null;
+ }
+
boolean invalidAck = false;
String reason = null;
SequenceAcknowledgement sequenceAcknowledgement = (SequenceAcknowledgement) ackRMMessageContext
.getMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT);
- List sequenceAckList = sequenceAcknowledgement
- .getAcknowledgementRanges();
+ List sequenceAckList = sequenceAcknowledgement.getAcknowledgementRanges();
Iterator it = sequenceAckList.iterator();
while (it.hasNext()) {
- AcknowledgementRange acknowledgementRange = (AcknowledgementRange) it
- .next();
+ 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";
-
+ reason = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.ackInvalid, Long.toString(lower), Long
+ .toString(upper));
}
}
-
+
if (invalidAck) {
FaultData data = new FaultData();
int SOAPVersion = SandeshaUtil.getSOAPVersion(ackMessageContext.getEnvelope());
@@ -318,42 +322,45 @@
data.setSubcode(Sandesha2Constants.SOAPFaults.Subcodes.INVALID_ACKNOWLEDGEMENT);
data.setReason(reason);
-
+
SOAPFactory factory = SOAPAbstractFactory.getSOAPFactory(SOAPVersion);
- OMElement dummyElement = factory.createOMElement("dummyElem",null);
+ OMElement dummyElement = factory.createOMElement("dummyElem", null);
sequenceAcknowledgement.toOMElement(dummyElement);
-
- OMElement sequenceAckElement = dummyElement.getFirstChildWithName(
- new QName (Sandesha2Constants.WSRM_COMMON.SEQUENCE_ACK));
+
+ OMElement sequenceAckElement = dummyElement.getFirstChildWithName(new QName(
+ Sandesha2Constants.WSRM_COMMON.SEQUENCE_ACK));
data.setDetail(sequenceAckElement);
- if (log.isDebugEnabled())
- log.debug("Exit: FaultManager::checkForInvalidAcknowledgement, invalid ACK");
- return getFault(ackRMMessageContext, data,ackRMMessageContext.getAddressingNamespaceValue(),storageManager);
+ if (log.isDebugEnabled())
+ log.debug("Exit: FaultManager::checkForInvalidAcknowledgement, invalid ACK");
+ return getFault(ackRMMessageContext, data, ackRMMessageContext.getAddressingNamespaceValue(),
+ storageManager);
}
- if (log.isDebugEnabled())
- log.debug("Exit: FaultManager::checkForInvalidAcknowledgement");
+ if (log.isDebugEnabled())
+ log.debug("Exit: FaultManager::checkForInvalidAcknowledgement");
return null;
}
- public RMMsgContext checkForSequenceClosed ( RMMsgContext referenceRMMessage, String sequenceID, StorageManager storageManager) throws SandeshaException {
- if (log.isDebugEnabled())
- log.debug("Enter: FaultManager::checkForSequenceClosed, " + sequenceID);
+ public RMMsgContext checkForSequenceClosed(RMMsgContext referenceRMMessage, String sequenceID,
+ StorageManager storageManager) throws SandeshaException {
+ if (log.isDebugEnabled())
+ log.debug("Enter: FaultManager::checkForSequenceClosed, " + sequenceID);
- MessageContext referenceMessage = referenceRMMessage.getMessageContext();
+ MessageContext referenceMessage = referenceRMMessage.getMessageContext();
ConfigurationContext configCtx = referenceMessage.getConfigurationContext();
-
+
SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropertyBeanMgr();
-
+
boolean sequenceClosed = false;
String reason = null;
- SequencePropertyBean sequenceClosedBean = seqPropMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.SEQUENCE_CLOSED);
- if (sequenceClosedBean!=null && Sandesha2Constants.VALUE_TRUE.equals(sequenceClosedBean.getValue())) {
+ SequencePropertyBean sequenceClosedBean = seqPropMgr.retrieve(sequenceID,
+ Sandesha2Constants.SequenceProperties.SEQUENCE_CLOSED);
+ if (sequenceClosedBean != null && Sandesha2Constants.VALUE_TRUE.equals(sequenceClosedBean.getValue())) {
sequenceClosed = true;
- reason = "The sequence with the id " + sequenceID + " was closed previously. Cannot accept this message";
+ reason = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.cannotAcceptMsgAsSequenceClosed, sequenceID);
}
-
+
if (sequenceClosed) {
FaultData data = new FaultData();
int SOAPVersion = SandeshaUtil.getSOAPVersion(referenceMessage.getEnvelope());
@@ -365,69 +372,61 @@
data.setSubcode(Sandesha2Constants.SOAPFaults.Subcodes.SEQUENCE_CLOSED);
data.setReason(reason);
- if (log.isDebugEnabled())
- log.debug("Exit: FaultManager::checkForSequenceClosed, sequence closed");
- return getFault(referenceRMMessage, data, referenceRMMessage.getAddressingNamespaceValue(),storageManager);
- }
-
- if (log.isDebugEnabled())
- log.debug("Exit: FaultManager::checkForSequenceClosed");
+ if (log.isDebugEnabled())
+ log.debug("Exit: FaultManager::checkForSequenceClosed, sequence closed");
+ return getFault(referenceRMMessage, data, referenceRMMessage.getAddressingNamespaceValue(), storageManager);
+ }
+
+ if (log.isDebugEnabled())
+ log.debug("Exit: FaultManager::checkForSequenceClosed");
return null;
-
+
}
/**
- * Returns a RMMessageContext for the fault message. Data for generating the fault is given in the data parameter.
+ * Returns a RMMessageContext for the fault message. Data for generating the
+ * fault is given in the data parameter.
*
* @param referenceRMMsgContext
* @param data
* @return
* @throws SandeshaException
*/
- public RMMsgContext getFault(RMMsgContext referenceRMMsgContext,
- FaultData data, String addressingNamespaceURI,StorageManager storageManager) throws SandeshaException {
- if (log.isDebugEnabled())
- log.debug("Enter: FaultManager::getFault");
+ public RMMsgContext getFault(RMMsgContext referenceRMMsgContext, FaultData data, String addressingNamespaceURI,
+ StorageManager storageManager) throws SandeshaException {
+ if (log.isDebugEnabled())
+ log.debug("Enter: FaultManager::getFault");
try {
MessageContext referenceMessage = referenceRMMsgContext.getMessageContext();
ConfigurationContext configCtx = referenceRMMsgContext.getConfigurationContext();
-
- //This is to hack to remove NPE. TODO remove this.
- if (referenceMessage.getServiceGroupContext()==null) {
- ServiceGroupContext serviceGroupContext = new ServiceGroupContext (referenceMessage.getConfigurationContext(),referenceMessage.getAxisServiceGroup());
+
+ // This is to hack to remove NPE. TODO remove this.
+ if (referenceMessage.getServiceGroupContext() == null) {
+ ServiceGroupContext serviceGroupContext = new ServiceGroupContext(referenceMessage
+ .getConfigurationContext(), referenceMessage.getAxisServiceGroup());
referenceMessage.setServiceGroupContext(serviceGroupContext);
}
- if (referenceMessage.getServiceContext()==null) {
- ServiceContext serviceContext = new ServiceContext (
- referenceMessage.getAxisService(),
- referenceMessage.getServiceGroupContext());
+ if (referenceMessage.getServiceContext() == null) {
+ ServiceContext serviceContext = new ServiceContext(referenceMessage.getAxisService(), referenceMessage
+ .getServiceGroupContext());
referenceMessage.setServiceContext(serviceContext);
}
-
- //end hack
-
-
- MessageContext faultMsgContext = Utils
- .createOutMessageContext(referenceMessage);
-
- //setting contexts.
- faultMsgContext.setAxisServiceGroup(referenceMessage
- .getAxisServiceGroup());
+
+ // end hack
+
+ MessageContext faultMsgContext = Utils.createOutMessageContext(referenceMessage);
+
+ // setting contexts.
+ faultMsgContext.setAxisServiceGroup(referenceMessage.getAxisServiceGroup());
faultMsgContext.setAxisService(referenceMessage.getAxisService());
- faultMsgContext.setAxisServiceGroup(referenceMessage
- .getAxisServiceGroup());
- faultMsgContext.setServiceGroupContext(referenceMessage
- .getServiceGroupContext());
- faultMsgContext.setServiceGroupContextId(referenceMessage
- .getServiceGroupContextId());
- faultMsgContext.setServiceContext(referenceMessage
- .getServiceContext());
- faultMsgContext.setServiceContextID(referenceMessage
- .getServiceContextID());
+ faultMsgContext.setAxisServiceGroup(referenceMessage.getAxisServiceGroup());
+ faultMsgContext.setServiceGroupContext(referenceMessage.getServiceGroupContext());
+ faultMsgContext.setServiceGroupContextId(referenceMessage.getServiceGroupContextId());
+ faultMsgContext.setServiceContext(referenceMessage.getServiceContext());
+ faultMsgContext.setServiceContextID(referenceMessage.getServiceContextID());
- AxisOperation operation = AxisOperationFactory
- .getAxisOperation(WSDL20_2004Constants.MEP_CONSTANT_OUT_ONLY);
+ AxisOperation operation = AxisOperationFactory.getAxisOperation(WSDL20_2004Constants.MEP_CONSTANT_OUT_ONLY);
OperationContext operationContext = new OperationContext(operation);
@@ -438,20 +437,17 @@
if (referenceRMMsgContext.getMessageType() == Sandesha2Constants.MessageTypes.CREATE_SEQ) {
CreateSequence createSequence = (CreateSequence) referenceRMMsgContext
.getMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ);
- acksToStr = createSequence.getAcksTo().getAddress().getEpr()
- .getAddress();
+ acksToStr = createSequence.getAcksTo().getAddress().getEpr().getAddress();
} else {
- SequencePropertyBeanMgr seqPropMgr = storageManager
- .getSequencePropertyBeanMgr();
-
- //TODO get the acksTo value using the property key.
-
+ SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropertyBeanMgr();
+
+ // TODO get the acksTo value using the property key.
+
String sequenceId = data.getSequenceId();
- SequencePropertyBean acksToBean = seqPropMgr.retrieve(
- sequenceId, Sandesha2Constants.SequenceProperties.ACKS_TO_EPR);
+ SequencePropertyBean acksToBean = seqPropMgr.retrieve(sequenceId,
+ Sandesha2Constants.SequenceProperties.ACKS_TO_EPR);
if (acksToBean != null) {
- EndpointReference epr = new EndpointReference (acksToBean
- .getValue());
+ EndpointReference epr = new EndpointReference(acksToBean.getValue());
if (epr != null)
acksToStr = epr.getAddress();
}
@@ -459,25 +455,23 @@
String anonymousURI = SpecSpecificConstants.getAddressingAnonymousURI(addressingNamespaceURI);
- if (acksToStr != null
- && !acksToStr.equals(anonymousURI)) {
+ if (acksToStr != null && !acksToStr.equals(anonymousURI)) {
faultMsgContext.setTo(new EndpointReference(acksToStr));
}
int SOAPVersion = SandeshaUtil.getSOAPVersion(referenceMessage.getEnvelope());
- SOAPFaultEnvelopeCreator.addSOAPFaultEnvelope(faultMsgContext,SOAPVersion, data,referenceRMMsgContext.getRMNamespaceValue());
+ SOAPFaultEnvelopeCreator.addSOAPFaultEnvelope(faultMsgContext, SOAPVersion, data, referenceRMMsgContext
+ .getRMNamespaceValue());
RMMsgContext faultRMMsgCtx = MsgInitializer.initializeMessage(faultMsgContext);
- if (log.isDebugEnabled())
- log.debug("Exit: FaultManager::getFault");
+ if (log.isDebugEnabled())
+ log.debug("Exit: FaultManager::getFault");
return faultRMMsgCtx;
} catch (AxisFault e) {
throw new SandeshaException(e.getMessage());
}
}
-
-
}
Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MessageRetransmissionAdjuster.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MessageRetransmissionAdjuster.java?rev=423350&r1=423349&r2=423350&view=diff
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MessageRetransmissionAdjuster.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MessageRetransmissionAdjuster.java Tue Jul 18 19:58:31 2006
@@ -28,71 +28,75 @@
import org.apache.sandesha2.client.SandeshaClientConstants;
import org.apache.sandesha2.client.SandeshaListener;
import org.apache.sandesha2.client.SequenceReport;
+import org.apache.sandesha2.i18n.SandeshaMessageHelper;
+import org.apache.sandesha2.i18n.SandeshaMessageKeys;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.beans.SenderBean;
/**
- * This is used to adjust retransmission infoamation after each time the message is sent.
+ * This is used to adjust retransmission infoamation after each time the message
+ * is sent.
*/
public class MessageRetransmissionAdjuster {
private static final Log log = LogFactory.getLog(MessageRetransmissionAdjuster.class);
-
- public boolean adjustRetransmittion(
- SenderBean retransmitterBean,ConfigurationContext configContext,StorageManager storageManager) throws SandeshaException {
-
+
+ public boolean adjustRetransmittion(SenderBean retransmitterBean, ConfigurationContext configContext,
+ StorageManager storageManager) throws SandeshaException {
+
String storedKey = (String) retransmitterBean.getMessageContextRefKey();
if (storedKey == null)
- throw new SandeshaException ("Stored Key not present in the retransmittable message");
+ throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.storedKeyNotPresent));
- MessageContext messageContext = storageManager.retrieveMessageContext(storedKey,configContext);
+ MessageContext messageContext = storageManager.retrieveMessageContext(storedKey, configContext);
RMMsgContext rmMsgCtx = MsgInitializer.initializeMessage(messageContext);
-
+
String internalSequenceID = retransmitterBean.getInternalSequenceID();
String sequenceID = retransmitterBean.getSequenceID();
-
- //operation is the lowest level Sandesha2 could be attached.
+
+ // operation is the lowest level Sandesha2 could be attached.
SandeshaPropertyBean propertyBean = SandeshaUtil.getPropertyBean(messageContext.getAxisOperation());
-
+
retransmitterBean.setSentCount(retransmitterBean.getSentCount() + 1);
adjustNextRetransmissionTime(retransmitterBean, propertyBean);
int maxRetransmissionAttempts = propertyBean.getMaximumRetransmissionCount();
-
+
boolean timeOutSequence = false;
- if (maxRetransmissionAttempts>=0 && retransmitterBean.getSentCount() > maxRetransmissionAttempts)
- timeOutSequence = true;
-
- boolean sequenceTimedOut = SequenceManager.hasSequenceTimedOut(internalSequenceID, rmMsgCtx,storageManager);
+ if (maxRetransmissionAttempts >= 0 && retransmitterBean.getSentCount() > maxRetransmissionAttempts)
+ timeOutSequence = true;
+
+ boolean sequenceTimedOut = SequenceManager.hasSequenceTimedOut(internalSequenceID, rmMsgCtx, storageManager);
if (sequenceTimedOut)
timeOutSequence = true;
-
+
boolean continueSending = true;
if (timeOutSequence) {
stopRetransmission(retransmitterBean);
-
- //Only messages of outgoing sequences get retransmitted. So named following method according to that.
- finalizeTimedOutSequence (internalSequenceID,sequenceID, messageContext,storageManager);
+
+ // Only messages of outgoing sequences get retransmitted. So named
+ // following method according to that.
+ finalizeTimedOutSequence(internalSequenceID, sequenceID, messageContext, storageManager);
continueSending = false;
}
-
+
return continueSending;
}
/**
- * This sets the next time the message has to be retransmitted. This uses the base retransmission interval
- * and exponentialBackoff properties to calculate the correct time.
+ * This sets the next time the message has to be retransmitted. This uses
+ * the base retransmission interval and exponentialBackoff properties to
+ * calculate the correct time.
*
* @param retransmitterBean
* @param policyBean
* @return
*/
- private SenderBean adjustNextRetransmissionTime(
- SenderBean retransmitterBean, SandeshaPropertyBean propertyBean) {
+ private SenderBean adjustNextRetransmissionTime(SenderBean retransmitterBean, SandeshaPropertyBean propertyBean) {
-// long lastSentTime = retransmitterBean.getTimeToSend();
+ // long lastSentTime = retransmitterBean.getTimeToSend();
int count = retransmitterBean.getSentCount();
@@ -100,15 +104,14 @@
long newInterval = baseInterval;
if (propertyBean.isExponentialBackoff()) {
- newInterval = generateNextExponentialBackedoffDifference(count,
- baseInterval);
+ newInterval = generateNextExponentialBackedoffDifference(count, baseInterval);
}
long newTimeToSend = 0;
-
+
long timeNow = System.currentTimeMillis();
newTimeToSend = timeNow + newInterval;
-
+
retransmitterBean.setTimeToSend(newTimeToSend);
return retransmitterBean;
@@ -118,8 +121,7 @@
bean.setSend(false);
}
- private long generateNextExponentialBackedoffDifference(int count,
- long initialInterval) {
+ private long generateNextExponentialBackedoffDifference(int count, long initialInterval) {
long interval = initialInterval;
for (int i = 1; i < count; i++) {
interval = interval * 2;
@@ -127,18 +129,21 @@
return interval;
}
-
- private void finalizeTimedOutSequence (String internalSequenceID, String sequenceID ,MessageContext messageContext,StorageManager storageManager) throws SandeshaException {
+
+ private void finalizeTimedOutSequence(String internalSequenceID, String sequenceID, MessageContext messageContext,
+ StorageManager storageManager) throws SandeshaException {
ConfigurationContext configurationContext = messageContext.getConfigurationContext();
-
- configurationContext.setProperty(Sandesha2Constants.WITHIN_TRANSACTION,messageContext.getProperty(Sandesha2Constants.WITHIN_TRANSACTION));
- SequenceReport report = SandeshaClient.getOutgoingSequenceReport(internalSequenceID ,configurationContext);
- TerminateManager.timeOutSendingSideSequence(configurationContext,internalSequenceID, false,storageManager);
-
- SandeshaListener listener = (SandeshaListener) messageContext.getProperty(SandeshaClientConstants.SANDESHA_LISTENER);
- if (listener!=null) {
+
+ configurationContext.setProperty(Sandesha2Constants.WITHIN_TRANSACTION, messageContext
+ .getProperty(Sandesha2Constants.WITHIN_TRANSACTION));
+ SequenceReport report = SandeshaClient.getOutgoingSequenceReport(internalSequenceID, configurationContext);
+ TerminateManager.timeOutSendingSideSequence(configurationContext, internalSequenceID, false, storageManager);
+
+ SandeshaListener listener = (SandeshaListener) messageContext
+ .getProperty(SandeshaClientConstants.SANDESHA_LISTENER);
+ if (listener != null) {
listener.onTimeOut(report);
}
}
-}
\ No newline at end of file
+}
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?rev=423350&r1=423349&r2=423350&view=diff
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/MsgInitializer.java Tue Jul 18 19:58:31 2006
@@ -24,6 +24,8 @@
import org.apache.sandesha2.RMMsgContext;
import org.apache.sandesha2.Sandesha2Constants;
import org.apache.sandesha2.SandeshaException;
+import org.apache.sandesha2.i18n.SandeshaMessageHelper;
+import org.apache.sandesha2.i18n.SandeshaMessageKeys;
import org.apache.sandesha2.storage.StorageManager;
import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
import org.apache.sandesha2.storage.beans.SequencePropertyBean;
@@ -45,22 +47,22 @@
public class MsgInitializer {
/**
- * Called to create a rmMessageContext out of an message context. Finds out things like rm version and message type
- * as well.
+ * Called to create a rmMessageContext out of an message context. Finds out
+ * things like rm version and message type as well.
*
* @param ctx
* @param assumedRMNamespace
- * this is used for validation (to find out weather the rmNamespace of the current message
- * is equal to the regietered rmNamespace of the sequence).
- * If null validation will not happen.
+ * this is used for validation (to find out weather the
+ * rmNamespace of the current message is equal to the regietered
+ * rmNamespace of the sequence). If null validation will not
+ * happen.
*
* @return
* @throws SandeshaException
*/
- public static RMMsgContext initializeMessage(MessageContext ctx)
- throws SandeshaException {
+ public static RMMsgContext initializeMessage(MessageContext ctx) throws SandeshaException {
RMMsgContext rmMsgCtx = new RMMsgContext(ctx);
-
+
populateRMMsgContext(ctx, rmMsgCtx);
validateMessage(rmMsgCtx);
return rmMsgCtx;
@@ -72,123 +74,122 @@
* @param msgCtx
* @param rmMsgContext
*/
- private static void populateRMMsgContext(MessageContext msgCtx,
- RMMsgContext rmMsgContext) throws SandeshaException {
+ private static void populateRMMsgContext(MessageContext msgCtx, RMMsgContext rmMsgContext) throws SandeshaException {
- //if client side and the addressing version is not set. assuming the default addressing version
+ // if client side and the addressing version is not set. assuming the
+ // default addressing version
String addressingNamespace = (String) msgCtx.getProperty(AddressingConstants.WS_ADDRESSING_VERSION);
- if (addressingNamespace==null && !msgCtx.isServerSide())
+ if (addressingNamespace == null && !msgCtx.isServerSide())
addressingNamespace = AddressingConstants.Final.WSA_NAMESPACE;
-
+
RMElements elements = new RMElements(addressingNamespace);
elements.fromSOAPEnvelope(msgCtx.getEnvelope(), msgCtx.getWSAAction());
String rmNamespace = null;
-
+
if (elements.getCreateSequence() != null) {
- rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ,
- elements.getCreateSequence());
+ rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ, elements.getCreateSequence());
rmNamespace = elements.getCreateSequence().getNamespaceValue();
}
if (elements.getCreateSequenceResponse() != null) {
- rmMsgContext.setMessagePart(
- Sandesha2Constants.MessageParts.CREATE_SEQ_RESPONSE, elements
- .getCreateSequenceResponse());
+ rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.CREATE_SEQ_RESPONSE, elements
+ .getCreateSequenceResponse());
rmNamespace = elements.getCreateSequenceResponse().getNamespaceValue();
}
if (elements.getSequence() != null) {
- rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.SEQUENCE,
- elements.getSequence());
- rmNamespace = elements.getSequence().getNamespaceValue();
+ rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.SEQUENCE, elements.getSequence());
+ rmNamespace = elements.getSequence().getNamespaceValue();
}
if (elements.getSequenceAcknowledgement() != null) {
- rmMsgContext.setMessagePart(
- Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT, elements
- .getSequenceAcknowledgement());
+ rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.SEQ_ACKNOWLEDGEMENT, elements
+ .getSequenceAcknowledgement());
rmNamespace = elements.getSequenceAcknowledgement().getNamespaceValue();
}
if (elements.getTerminateSequence() != null) {
- rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.TERMINATE_SEQ,
- elements.getTerminateSequence());
+ rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.TERMINATE_SEQ, elements.getTerminateSequence());
rmNamespace = elements.getTerminateSequence().getNamespaceValue();
}
-
+
if (elements.getTerminateSequenceResponse() != null) {
- rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.TERMINATE_SEQ_RESPONSE,
- elements.getTerminateSequenceResponse());
+ rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.TERMINATE_SEQ_RESPONSE, elements
+ .getTerminateSequenceResponse());
rmNamespace = elements.getTerminateSequenceResponse().getNamespaceValue();
}
if (elements.getAckRequested() != null) {
- rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST,
- elements.getAckRequested());
+ rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST, elements.getAckRequested());
rmNamespace = elements.getAckRequested().getNamespaceValue();
}
-
+
if (elements.getCloseSequence() != null) {
- rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.CLOSE_SEQUENCE,
- elements.getCloseSequence());
+ rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.CLOSE_SEQUENCE, elements.getCloseSequence());
rmNamespace = elements.getCloseSequence().getNamespaceValue();
}
-
+
if (elements.getCloseSequenceResponse() != null) {
- rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.CLOSE_SEQUENCE_RESPONSE,
- elements.getCloseSequenceResponse());
+ rmMsgContext.setMessagePart(Sandesha2Constants.MessageParts.CLOSE_SEQUENCE_RESPONSE, elements
+ .getCloseSequenceResponse());
rmNamespace = elements.getCloseSequenceResponse().getNamespaceValue();
}
-
+
rmMsgContext.setRMNamespaceValue(rmNamespace);
-
+
String addressingNamespaceValue = elements.getAddressingNamespaceValue();
- if (addressingNamespaceValue!=null)
+ if (addressingNamespaceValue != null)
rmMsgContext.setAddressingNamespaceValue(addressingNamespaceValue);
}
/**
- * This is used to validate the message.
- * Also set an Message type. Possible types are given in the Sandesha2Constants.MessageTypes interface.
+ * This is used to validate the message. Also set an Message type. Possible
+ * types are given in the Sandesha2Constants.MessageTypes interface.
*
* @param rmMsgCtx
* @return
* @throws SandeshaException
*/
- private static boolean validateMessage(RMMsgContext rmMsgCtx)
- throws SandeshaException {
+ private static boolean validateMessage(RMMsgContext rmMsgCtx) throws SandeshaException {
ConfigurationContext configContext = rmMsgCtx.getMessageContext().getConfigurationContext();
AxisConfiguration axisConfiguration = configContext.getAxisConfiguration();
- StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configContext,axisConfiguration);
+ StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configContext, axisConfiguration);
SequencePropertyBeanMgr sequencePropertyBeanMgr = storageManager.getSequencePropertyBeanMgr();
-
+
String sequenceID = null;
-
- 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);
+
+ 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.
+ 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) {
+ } else if (createSequenceResponse != null) {
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.CREATE_SEQ_RESPONSE);
sequenceID = createSequenceResponse.getIdentifier().getIdentifier();
- }else if (terminateSequence != null) {
+ } else if (terminateSequence != null) {
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.TERMINATE_SEQ);
sequenceID = terminateSequence.getIdentifier().getIdentifier();
- }else if (terminateSequenceResponse != null) {
+ } else if (terminateSequenceResponse != null) {
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.TERMINATE_SEQ_RESPONSE);
sequenceID = terminateSequenceResponse.getIdentifier().getIdentifier();
- }else if (rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE) != null) {
+ } else if (rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE) != null) {
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.APPLICATION);
sequenceID = sequence.getIdentifier().getIdentifier();
} else if (sequenceAcknowledgement != null) {
@@ -196,41 +197,43 @@
sequenceID = sequenceAcknowledgement.getIdentifier().getIdentifier();
} else if (ackRequest != null) {
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.ACK_REQUEST);
- sequenceID = ackRequest.getIdentifier().getIdentifier();
+ sequenceID = ackRequest.getIdentifier().getIdentifier();
} else if (closeSequence != null) {
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE);
- sequenceID = closeSequence.getIdentifier().getIdentifier();
+ sequenceID = closeSequence.getIdentifier().getIdentifier();
} else if (closeSequenceResponse != null) {
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE_RESPONSE);
- sequenceID = closeSequenceResponse.getIdentifier().getIdentifier();
+ sequenceID = closeSequenceResponse.getIdentifier().getIdentifier();
} else
rmMsgCtx.setMessageType(Sandesha2Constants.MessageTypes.UNKNOWN);
String propertyKey = null;
- if (rmMsgCtx.getMessageContext().getFLOW()==MessageContext.IN_FLOW) {
+ if (rmMsgCtx.getMessageContext().getFLOW() == MessageContext.IN_FLOW) {
propertyKey = sequenceID;
} else {
- SequencePropertyBean internalSequenceIDBean = sequencePropertyBeanMgr.retrieve(sequenceID,Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
- if (internalSequenceIDBean!=null) {
+ SequencePropertyBean internalSequenceIDBean = sequencePropertyBeanMgr.retrieve(sequenceID,
+ Sandesha2Constants.SequenceProperties.INTERNAL_SEQUENCE_ID);
+ if (internalSequenceIDBean != null) {
propertyKey = internalSequenceIDBean.getValue();
}
}
-
- String rmNamespace = rmMsgCtx.getRMNamespaceValue();
- if (sequenceID!=null) {
- String specVersion = SandeshaUtil.getRMVersion(propertyKey,storageManager);
-
- String sequenceRMNamespace = null;
- if (specVersion!=null)
- sequenceRMNamespace = SpecSpecificConstants.getRMNamespaceValue(specVersion);
- if (sequenceRMNamespace!=null && rmNamespace!=null) {
- if (!sequenceRMNamespace.equals(rmNamespace)) {
- throw new SandeshaException ("Given message has rmNamespace value, which is different from the " +
- "reqistered namespace for the sequence");
- }
- }
- }
-
+
+ String rmNamespace = rmMsgCtx.getRMNamespaceValue();
+ if (sequenceID != null) {
+ String specVersion = SandeshaUtil.getRMVersion(propertyKey, storageManager);
+
+ String sequenceRMNamespace = null;
+ if (specVersion != null)
+ sequenceRMNamespace = SpecSpecificConstants.getRMNamespaceValue(specVersion);
+ if (sequenceRMNamespace != null && rmNamespace != null) {
+ if (!sequenceRMNamespace.equals(rmNamespace)) {
+ throw new SandeshaException(SandeshaMessageHelper.getMessage(
+ SandeshaMessageKeys.rmNamespaceNotMatchSequence, rmNamespace, sequenceRMNamespace,
+ sequenceID));
+ }
+ }
+ }
+
return true;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org