chamikara 2005/04/27 00:08:50
Modified: sandesha/src/org/apache/sandesha RMMessageContext.java
sandesha/src/org/apache/sandesha/client
ClientStorageManager.java
sandesha/src/org/apache/sandesha/server RMInvoker.java
ServerStorageManager.java
sandesha/src/org/apache/sandesha/storage/dao
ISandeshaDAO.java SandeshaDatabaseDAO.java
SandeshaQueueDAO.java
sandesha/src/org/apache/sandesha/storage/queue
SandeshaQueue.java
sandesha/src/org/apache/sandesha/util RMMessageCreator.java
Log:
The classes were changed to set different message ids for different
retransmissions of the create seq message.
Revision Changes Path
1.27 +12 -1
ws-fx/sandesha/src/org/apache/sandesha/RMMessageContext.java
Index: RMMessageContext.java
===================================================================
RCS file:
/home/cvs/ws-fx/sandesha/src/org/apache/sandesha/RMMessageContext.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- RMMessageContext.java 26 Apr 2005 03:24:50 -0000 1.26
+++ RMMessageContext.java 27 Apr 2005 07:08:49 -0000 1.27
@@ -23,6 +23,7 @@
import org.apache.commons.logging.Log;
import org.apache.sandesha.ws.rm.RMHeaders;
+import java.util.ArrayList;
import java.util.Iterator;
/**
@@ -50,12 +51,22 @@
private String replyTo = null;
private boolean responseReceived = false;
private boolean ackReceived = false;
+
private String acksTo = null;
private String to = null;
private static final Log log =
LogFactory.getLog(RMMessageContext.class.getName());
-
+ private ArrayList msgIdList = new ArrayList ();
+
+ public void addToMsgIdList(String msgId){
+ msgIdList.add(msgId);
+ }
+
+ public ArrayList getMessageIdList(){
+ return msgIdList;
+ }
+
public String getTo() {
return to;
}
1.27 +9 -2
ws-fx/sandesha/src/org/apache/sandesha/client/ClientStorageManager.java
Index: ClientStorageManager.java
===================================================================
RCS file:
/home/cvs/ws-fx/sandesha/src/org/apache/sandesha/client/ClientStorageManager.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- ClientStorageManager.java 7 Mar 2005 05:34:34 -0000 1.26
+++ ClientStorageManager.java 27 Apr 2005 07:08:49 -0000 1.27
@@ -162,11 +162,17 @@
* This will be used by the SimpleAxisServer and the Sender to set the
* proper sequenceID
*/
- public boolean setApprovedOutSequence(String oldOutsequenceId, String
newOutSequenceId) {
+ public boolean setApprovedOutSequence(String createSeqId, String
newOutSequenceId) {
boolean done = false;
- String sequenceID =
accessor.getSequenceOfOutSequence(oldOutsequenceId);
+ String oldOutsequenceId =
accessor.getFirstCreateSequenceMsgId(createSeqId);
+ if(oldOutsequenceId==null){
+ return false;
+ }
+
+ String sequenceID =
accessor.getSequenceOfOutSequence(oldOutsequenceId);
+
if (sequenceID == null) {
log.error(Constants.ErrorMessages.SET_APPROVED_OUT_SEQ);
return false;
@@ -175,6 +181,7 @@
accessor.setOutSequenceApproved(sequenceID, true);
accessor.removeCreateSequenceMsg(oldOutsequenceId);
return true;
+
}
/**
1.22 +6 -1
ws-fx/sandesha/src/org/apache/sandesha/server/RMInvoker.java
Index: RMInvoker.java
===================================================================
RCS file:
/home/cvs/ws-fx/sandesha/src/org/apache/sandesha/server/RMInvoker.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- RMInvoker.java 12 Apr 2005 02:15:32 -0000 1.21
+++ RMInvoker.java 27 Apr 2005 07:08:50 -0000 1.22
@@ -101,7 +101,12 @@
UUIDGen uuid = UUIDGenFactory.getUUIDGen();
String id = uuid.nextUUID();
-
storageManager.setTemporaryOutSequence(rmMsgContext.getSequenceID(),
Constants.UUID + id);
+
+ String msgIdStr = Constants.UUID + id;
+ rmMsgContext.addToMsgIdList(msgIdStr);
+
+
+
storageManager.setTemporaryOutSequence(rmMsgContext.getSequenceID(), msgIdStr);
SOAPEnvelope createSequenceEnvelope =
EnvelopeCreator.createCreateSequenceEnvelope(id,
rmMsgContext, Constants.SERVER);
1.24 +4 -6
ws-fx/sandesha/src/org/apache/sandesha/server/ServerStorageManager.java
Index: ServerStorageManager.java
===================================================================
RCS file:
/home/cvs/ws-fx/sandesha/src/org/apache/sandesha/server/ServerStorageManager.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- ServerStorageManager.java 7 Mar 2005 05:34:35 -0000 1.23
+++ ServerStorageManager.java 27 Apr 2005 07:08:50 -0000 1.24
@@ -202,19 +202,17 @@
accessor.setOutSequenceApproved(sequenceId, false);
}
- public boolean setApprovedOutSequence(String oldOutsequenceId, String
newOutSequenceId) {
+ public boolean setApprovedOutSequence(String createSeqId, String
newOutSequenceId) {
- boolean done = false;
- String sequenceID =
accessor.getSequenceOfOutSequence(oldOutsequenceId);
+ String oldOutsequenceId =
accessor.getFirstCreateSequenceMsgId(createSeqId);
+ String sequenceID =
accessor.getSequenceOfOutSequence(oldOutsequenceId);
if (sequenceID == null) {
-
+ log.error(Constants.ErrorMessages.SET_APPROVED_OUT_SEQ);
return false;
}
accessor.setOutSequence(sequenceID, newOutSequenceId);
accessor.setOutSequenceApproved(sequenceID, true);
-
- //Deleting create sequence message from the priority queue.
accessor.removeCreateSequenceMsg(oldOutsequenceId);
return true;
}
1.8 +2 -0
ws-fx/sandesha/src/org/apache/sandesha/storage/dao/ISandeshaDAO.java
Index: ISandeshaDAO.java
===================================================================
RCS file:
/home/cvs/ws-fx/sandesha/src/org/apache/sandesha/storage/dao/ISandeshaDAO.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- ISandeshaDAO.java 28 Feb 2005 13:26:06 -0000 1.7
+++ ISandeshaDAO.java 27 Apr 2005 07:08:50 -0000 1.8
@@ -119,5 +119,7 @@
public boolean isAllOutgoingTerminateSent();
public boolean isAllIncommingTerminateReceived();
+
+ public String getFirstCreateSequenceMsgId(String createSeqId);
}
\ No newline at end of file
1.8 +7 -0
ws-fx/sandesha/src/org/apache/sandesha/storage/dao/SandeshaDatabaseDAO.java
Index: SandeshaDatabaseDAO.java
===================================================================
RCS file:
/home/cvs/ws-fx/sandesha/src/org/apache/sandesha/storage/dao/SandeshaDatabaseDAO.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- SandeshaDatabaseDAO.java 28 Feb 2005 13:26:06 -0000 1.7
+++ SandeshaDatabaseDAO.java 27 Apr 2005 07:08:50 -0000 1.8
@@ -30,6 +30,13 @@
public class SandeshaDatabaseDAO implements ISandeshaDAO {
+ /* (non-Javadoc)
+ * @see
org.apache.sandesha.storage.dao.ISandeshaDAO#getFirstCreateSequenceMsgId(java.lang.String)
+ */
+ public String getFirstCreateSequenceMsgId(String createSeqId) {
+ // TODO Auto-generated method stub
+ return null;
+ }
private static final Log log =
LogFactory.getLog(SandeshaDatabaseDAO.class.getName());
public void setAckReceived(String seqId, long msgNo) {
1.9 +5 -0
ws-fx/sandesha/src/org/apache/sandesha/storage/dao/SandeshaQueueDAO.java
Index: SandeshaQueueDAO.java
===================================================================
RCS file:
/home/cvs/ws-fx/sandesha/src/org/apache/sandesha/storage/dao/SandeshaQueueDAO.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- SandeshaQueueDAO.java 28 Feb 2005 13:26:06 -0000 1.8
+++ SandeshaQueueDAO.java 27 Apr 2005 07:08:50 -0000 1.9
@@ -468,5 +468,10 @@
SandeshaQueue sq = SandeshaQueue.getInstance();
sq.setTerminateReceived(seqId);
}
+
+ public String getFirstCreateSequenceMsgId(String createSeqId) {
+ SandeshaQueue sq = SandeshaQueue.getInstance();
+ return sq.getFirstCreateSequenceMsgId(createSeqId);
+ }
}
1.11 +84 -12
ws-fx/sandesha/src/org/apache/sandesha/storage/queue/SandeshaQueue.java
Index: SandeshaQueue.java
===================================================================
RCS file:
/home/cvs/ws-fx/sandesha/src/org/apache/sandesha/storage/queue/SandeshaQueue.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- SandeshaQueue.java 12 Apr 2005 02:15:33 -0000 1.10
+++ SandeshaQueue.java 27 Apr 2005 07:08:50 -0000 1.11
@@ -18,19 +18,19 @@
package org.apache.sandesha.storage.queue;
import org.apache.axis.components.logger.LogFactory;
+import org.apache.axis.components.uuid.UUIDGen;
+import org.apache.axis.components.uuid.UUIDGenFactory;
+import org.apache.axis.message.addressing.AddressingHeaders;
+import org.apache.axis.message.addressing.MessageID;
+import org.apache.axis.types.URI;
import org.apache.commons.logging.Log;
import org.apache.sandesha.Constants;
import org.apache.sandesha.RMMessageContext;
import org.apache.sandesha.ws.rm.AcknowledgementRange;
import org.apache.sandesha.ws.rm.SequenceAcknowledgement;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.Vector;
+import java.util.*;
+
/*
* Created on Aug 4, 2004 at 4:49:49 PM
@@ -285,11 +285,63 @@
Date d = new Date();
long currentTime = d.getTime();
if (currentTime >= lastSentTime +
Constants.RETRANSMISSION_INTERVAL) {
- tempMsg.setLastSentTime(currentTime);
- msg = tempMsg;
- break forLoop;
+
+ //EDITED FOR MSG NO REPITITION
+ String oldOutSeqId, newOutSeqId;
+
+ String oldCreateSeqId =
tempMsg.getMessageID().toString();
+ UUIDGen uuidGen =
UUIDGenFactory.getUUIDGen();
+ String uuid = uuidGen.nextUUID();
+
+
+ String newCreateSeqId = Constants.UUID +
uuid;
+ tempMsg.setMessageID(newCreateSeqId);
+
+ oldOutSeqId = oldCreateSeqId;
+ newOutSeqId = newCreateSeqId;
+
+
+ //MessageContext msgContext =
tempMsg.getMsgContext();
+ //String toAddress =
tempMsg.getOutGoingAddress();
+
+ try {
+ AddressingHeaders addrHeaders = new
AddressingHeaders(tempMsg.getMsgContext().getRequestMessage().getSOAPEnvelope());
+ addrHeaders.setMessageID(new
MessageID(new URI(newCreateSeqId)));
+
addrHeaders.toEnvelope(tempMsg.getMsgContext().getRequestMessage().getSOAPEnvelope());
+
+
+
+ //SOAPEnvelope resEnvelope =
EnvelopeCreator.createCreateSequenceEnvelope(uuid, tempMsg, Constants.CLIENT);
+ //MessageContext createSeqMsgContext
= tempMsg.getMsgContext(); //new MessageContext(msgContext.getAxisEngine());
+
+
//createSeqMsgContext.setRequestMessage(new Message(resEnvelope));
+
//tempMsg.setMsgContext(createSeqMsgContext);
+
+ //changing the out sequence to the
messageid of new create sequence.
+ //String seqId =
getSequenceOfOutSequence(oldOutSeqId);
+ //setOutSequence(seqId,newOutSeqId);
+ tempMsg.setLastSentTime(currentTime);
+ msg = tempMsg;
+
+ if (msg != null) {
+
msg.addToMsgIdList(msg.getMessageID().toString());
+ List msgIdList =
msg.getMessageIdList();
+ Iterator it =
msgIdList.iterator();
+
+ }
+
+ break forLoop;
+
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+
+ //END EDITED
+
+
}
break;
+
default:
highPriorityQueue.remove(i);
queueBin.put(tempMsg.getMessageID(),
tempMsg);
@@ -299,6 +351,8 @@
}
}
}
+
+
return msg;
}
@@ -423,7 +477,6 @@
}
public String getSequenceOfOutSequence(String outSequence) {
-
if (outSequence == null) {
return null;
}
@@ -547,7 +600,8 @@
int size = highPriorityQueue.size();
for (int i = 0; i < size; i++) {
RMMessageContext msg = (RMMessageContext)
highPriorityQueue.get(i);
- if (msg.getMessageID().equals(messageId)) {
+ String tempMsgId = (String) msg.getMessageIdList().get(0);
+ if (tempMsgId.equals(messageId)) {
highPriorityQueue.remove(i);
queueBin.put(messageId, msg);
return;
@@ -886,6 +940,24 @@
ics.setTerminateReceived(true);
}
+ public String getFirstCreateSequenceMsgId(String createSeqId) {
+
+ synchronized (highPriorityQueue) {
+
+ Iterator it = highPriorityQueue.iterator();
+ while (it.hasNext()) {
+ RMMessageContext msg = (RMMessageContext) it.next();
+ boolean contains =
msg.getMessageIdList().contains(createSeqId);
+ if (contains) {
+ return ((String) msg.getMessageIdList().get(0));
+ }
+ }
+ }
+
+ return null;
+
+ }
+
}
1.10 +5 -1
ws-fx/sandesha/src/org/apache/sandesha/util/RMMessageCreator.java
Index: RMMessageCreator.java
===================================================================
RCS file:
/home/cvs/ws-fx/sandesha/src/org/apache/sandesha/util/RMMessageCreator.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- RMMessageCreator.java 26 Apr 2005 03:24:50 -0000 1.9
+++ RMMessageCreator.java 27 Apr 2005 07:08:50 -0000 1.10
@@ -42,8 +42,12 @@
//Create the RMMessageContext to hold the create Sequence Request.
RMMessageContext createSeqRMMsgContext = new RMMessageContext();
- createSeqRMMsgContext.setMessageID(Constants.UUID + uuid);
+
+ String msgId = Constants.UUID + uuid;
+ createSeqRMMsgContext.setMessageID(msgId);
+ createSeqRMMsgContext.addToMsgIdList(msgId);
+
MessageContext msgContext = rmMsgCtx.getMsgContext();
String toAddress = rmMsgCtx.getOutGoingAddress();