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