sessionId, ipPort, this.controlPort);
searchThreads.add(search);
}
// Wait until we get an answer
WinstoneSession answer = null;
String senderThread = null;
boolean finished = false;
while (!finished) {
// Loop through all search threads. If finished, exit, otherwise
// sleep
List finishedThreads = new ArrayList();
for (Iterator i = searchThreads.iterator(); i.hasNext();) {
ClusterSessionSearch searchThread = (ClusterSessionSearch) i
.next();
if (!searchThread.isFinished())
continue;
else if (searchThread.getResult() == null)
finishedThreads.add(searchThread);
else {
answer = searchThread.getResult();
senderThread = searchThread.getAddressPort();
}
}
// Remove finished threads
for (Iterator i = finishedThreads.iterator(); i.hasNext();)
searchThreads.remove(i.next());
if (searchThreads.isEmpty() || (answer != null))
finished = true;
else
try {
Thread.sleep(100);
} catch (InterruptedException err) {
}
}
// Once we have an answer, terminate all search threads
for (Iterator i = searchThreads.iterator(); i.hasNext();) {
ClusterSessionSearch searchThread = (ClusterSessionSearch) i.next();
searchThread.destroy();
}
if (answer != null) {
answer.activate(webAppConfig);
Logger.log(Logger.DEBUG, CLUSTER_RESOURCES,
"SimpleCluster.SessionTransferredFrom", senderThread);
}
return answer;
}