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 ga...@apache.org on 2007/02/23 06:48:12 UTC

svn commit: r510839 - in /webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors: ApplicationMsgProcessor.java MakeConnectionProcessor.java

Author: gatfora
Date: Thu Feb 22 21:48:11 2007
New Revision: 510839

URL: http://svn.apache.org/viewvc?view=rev&rev=510839
Log:
Fix duplicate RMSBean error from SenderWorker which is caused when 2 sends happen at the same time targetting the same end point, which causes 2 RMSBeans to be created by the setupNewClientSequence which have the same InternalSequenceId, also reworked some trace from MakeConnectionProcessor

Modified:
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java

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=510839&r1=510838&r2=510839
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java Thu Feb 22 21:48:11 2007
@@ -39,6 +39,7 @@
 import org.apache.sandesha2.security.SecurityManager;
 import org.apache.sandesha2.security.SecurityToken;
 import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.beanmanagers.RMSBeanMgr;
 import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
 import org.apache.sandesha2.storage.beans.RMDBean;
 import org.apache.sandesha2.storage.beans.RMSBean;
@@ -217,28 +218,25 @@
 
 		String outSequenceID = null;
 
-		boolean sendCreateSequence = false;
-		if (rmsBean == null) { // out sequence will be set for the
-										// server side, in the case of an offer.
-			sendCreateSequence = true; // message number being one and not
-											// having an out sequence, implies
-											// that a create sequence has to be
-											// send.
+		if (rmsBean == null) { 
+			// SENDING THE CREATE SEQUENCE.
+			synchronized (RMSBeanMgr.class) {
+				// There is a timing window where 2 sending threads can hit this point
+				// at the same time and both will create an RMSBean to the same endpoint
+				// with the same internal sequenceid
+				// Check that someone hasn't created the bean
+				rmsBean = SandeshaUtil.getRMSBeanFromInternalSequenceId(storageManager, internalSequenceId);
+				
+				// if first message - setup the sending side sequence - both for the
+				// server and the client sides.
+				if (rmsBean == null) {
+					rmsBean = SequenceManager.setupNewClientSequence(msgContext, internalSequenceId, storageManager);
+					rmsBean = addCreateSequenceMessage(rmMsgCtx, rmsBean, storageManager);
+				}
+			}
+		
 		} else {
 			outSequenceID = rmsBean.getSequenceID();
-		}
-
-		// SENDING THE CREATE SEQUENCE.
-		if (sendCreateSequence) {
-
-			// if first message - setup the sending side sequence - both for the
-			// server and the client sides.
-			rmsBean = SequenceManager.setupNewClientSequence(msgContext, internalSequenceId, storageManager);
-			rmsBean = addCreateSequenceMessage(rmMsgCtx, rmsBean, storageManager);
-		}
-		
-		if (rmsBean == null) {
-			rmsBean = SandeshaUtil.getRMSBeanFromInternalSequenceId(storageManager, internalSequenceId);
 		}
 		
 		// the message number that was last used.

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java?view=diff&rev=510839&r1=510838&r2=510839
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java Thu Feb 22 21:48:11 2007
@@ -46,7 +46,7 @@
 	 * This is processed using a SenderWorker. 
 	 */
 	public boolean processInMessage(RMMsgContext rmMsgCtx) throws AxisFault {
-		if(log.isDebugEnabled()) log.debug("Entry: MakeConnectionProcessor::processInMessage");
+		if(log.isDebugEnabled()) log.debug("Enter: MakeConnectionProcessor::processInMessage " + rmMsgCtx.getSOAPEnvelope().getBody());
 
 		MakeConnection makeConnection = (MakeConnection) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.MAKE_CONNECTION);
 		Address address = makeConnection.getAddress();
@@ -109,6 +109,7 @@
 		
 		replyToPoll(rmMsgCtx, senderBean, storageManager, pending, makeConnection.getNamespaceValue());
 		
+		if(log.isDebugEnabled()) log.debug("Exit: MakeConnectionProcessor::processInMessage");
 		return false;
 	}
 	
@@ -119,7 +120,7 @@
 			String namespace)
 	throws AxisFault
 	{
-		if(log.isDebugEnabled()) log.debug("Entry: MakeConnectionProcessor::replyToPoll");
+		if(log.isDebugEnabled()) log.debug("Enter: MakeConnectionProcessor::replyToPoll");
 		TransportOutDescription transportOut = pollMessage.getMessageContext().getTransportOut();
 		if (transportOut==null) {
 			String message = SandeshaMessageHelper.getMessage(
@@ -173,7 +174,7 @@
 		messagePending.toSOAPEnvelope(returnMessage.getEnvelope());
 	}
 
-	public boolean processOutMessage(RMMsgContext rmMsgCtx) throws AxisFault {
+	public boolean processOutMessage(RMMsgContext rmMsgCtx) {
 		return false;
 	}
 



---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org