wait();
this.wait();
  protected void waitForAndReturnResults(String queryId,                                         PrintWriter out, boolean xml)  {    class ChangeListener implements SubscriptionListener    {      public QueryResultAdapter changedQra = null;      public synchronized void waitForChange () {          try {            wait();          }          catch (InterruptedException bla) { }      }      public synchronized void subscriptionChanged(Subscription s)      {          Enumeration changedList =            ((IncrementalSubscription)s).getChangedList();          if (changedList.hasMoreElements())          {            changedQra = (QueryResultAdapter)changedList.nextElement();            if (allClustersResponded(changedQra)) {              //System.out.println("All clusters checked in");              notify();            } else {              //System.out.println("Still waiting for some clusters");            }          }      }      private boolean allClustersResponded(QueryResultAdapter qra) {        Set responded = qra.getRawResultSet().getRespondingClusters();        Enumeration enum = qra.getQuery().getSourceClusters();        while (enum.hasMoreElements())          if (!responded.contains(enum.nextElement()))            return false;        return true;      }    }    ChangeListener cl = new ChangeListener();    UnaryPredicate queryMonitor = new QuerySeeker(queryId);    Subscription s = null;    try {        blackboard.openTransaction();        s = blackboard.subscribe(queryMonitor);        subscriptionMonitorSupport.setSubscriptionListener(s, cl);    } finally {        synchronized (cl) {              // synchronized (cl) is necessary in the rare case that the agg is done             // before I get to the waitForChange()            blackboard.closeTransaction();            // wait for a publish change event on the query result adapter            // and then get and return result set            cl.waitForChange();        }    }    unsubscribe(s);    if (xml)    {      out.println(cl.changedQra.getResultSet().toXml());    }    else    {      printQueryReportPage(cl.changedQra, out);    }    removeQuery(cl.changedQra);  }