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 2007/12/21 07:41:40 UTC

svn commit: r606115 - in /webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2: msgprocessors/MakeConnectionProcessor.java workers/WorkerLock.java

Author: chamikara
Date: Thu Dec 20 22:41:39 2007
New Revision: 606115

URL: http://svn.apache.org/viewvc?rev=606115&view=rev
Log:
Fixed a bug in MakeConnectionProcessor.replyToPoll().
It was allowing two requests to manipulate the same response message simultaneously. Now we use wait, notify methods to avoid this scenario.

Modified:
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
    webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/WorkerLock.java

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java?rev=606115&r1=606114&r2=606115&view=diff
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java Thu Dec 20 22:41:39 2007
@@ -53,7 +53,9 @@
 import org.apache.sandesha2.util.MsgInitializer;
 import org.apache.sandesha2.util.SandeshaUtil;
 import org.apache.sandesha2.util.SpecSpecificConstants;
+import org.apache.sandesha2.workers.SandeshaThread;
 import org.apache.sandesha2.workers.SenderWorker;
+import org.apache.sandesha2.workers.WorkerLock;
 import org.apache.sandesha2.wsrm.Address;
 import org.apache.sandesha2.wsrm.Identifier;
 import org.apache.sandesha2.wsrm.MakeConnection;
@@ -251,7 +253,28 @@
 				}
 			}
 		}
+		
 		if(continueSending){
+
+			SandeshaThread sender = storageManager.getSender();
+			WorkerLock lock = sender.getWorkerLock();
+			
+			String workId = matchingMessage.getMessageID();
+			while (lock.isWorkPresent(workId)) {
+				try {
+					//wait on the lock.
+					lock.wait();
+				} catch (InterruptedException e) {
+					e.printStackTrace();
+				}
+			}
+			
+			SenderWorker worker = new SenderWorker (pollMessage.getConfigurationContext(), matchingMessage, pollMessage.getRMSpecVersion());
+			worker.setLock(lock);
+			worker.setWorkId(workId);
+
+			lock.addWork(workId, worker);
+			
 			setTransportProperties (returnMessage, pollMessage);
 			
 			// Link the response to the request
@@ -273,7 +296,7 @@
 			//This will allow Sandesha2 to consider both of following senarios equally.
 			//  1. A message being sent by the Sender thread.
 			//  2. A message being sent as a reply to an MakeConnection.
-			SenderWorker worker = new SenderWorker (pollMessage.getConfigurationContext(), matchingMessage, pollMessage.getRMSpecVersion());
+	
 			worker.setMessage(returnRMMsg);
 			worker.run();			
 			

Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/WorkerLock.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/WorkerLock.java?rev=606115&r1=606114&r2=606115&view=diff
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/WorkerLock.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/workers/WorkerLock.java Thu Dec 20 22:41:39 2007
@@ -46,6 +46,10 @@
 	public synchronized void removeWork (String work) {
 		if(log.isDebugEnabled()) log.debug("Enter: WorkerLock::removeWork " + work);
 		locks.remove(work);
+		
+		//wake up some thread that is waiting on this lock.
+		this.notify();
+		
 		if(log.isDebugEnabled()) log.debug("Exit: WorkerLock::removeWork");
 	}
 	



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