Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/QueryManager.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/QueryManager.java28
1 files changed, 23 insertions, 5 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/QueryManager.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/QueryManager.java
index d2671bb16b..765f9703e7 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/QueryManager.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/QueryManager.java
@@ -14,6 +14,7 @@ package org.eclipse.emf.cdo.internal.server;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.util.CDOQueryInfo;
+import org.eclipse.emf.cdo.common.util.CDOQueryQueue;
import org.eclipse.emf.cdo.internal.server.bundle.OM;
import org.eclipse.emf.cdo.server.IQueryContext;
import org.eclipse.emf.cdo.server.IQueryHandler;
@@ -276,30 +277,47 @@ public class QueryManager extends Lifecycle implements InternalQueryManager
throw new IllegalStateException("Maximum number of results exceeded"); //$NON-NLS-1$
}
- queryResult.getQueue().add(object);
+ CDOQueryQueue<Object> queue = queryResult.getQueue();
+ queue.add(object);
+
return !cancelled && --resultCount > 0;
}
public void run()
{
+ CDOQueryQueue<Object> queue = queryResult.getQueue();
+
InternalSession session = queryResult.getView().getSession();
StoreThreadLocal.setSession(session);
try
{
started = true;
+
CDOQueryInfo info = queryResult.getQueryInfo();
resultCount = info.getMaxResults() < 0 ? Integer.MAX_VALUE : info.getMaxResults();
IQueryHandler handler = repository.getQueryHandler(info);
- handler.executeQuery(info, this);
+
+ try
+ {
+ handler.executeQuery(info, this);
+ }
+ catch (Throwable executionException)
+ {
+ // int xxx;
+ // ConcurrencyUtil.sleep(2000);
+
+ addResult(executionException);
+ return;
+ }
}
- catch (Throwable exception)
+ catch (Throwable initializationException)
{
- queryResult.getQueue().setException(exception);
+ queue.setException(initializationException);
}
finally
{
- queryResult.getQueue().close();
+ queue.close();
unregister(this);
StoreThreadLocal.release();
}

Back to the top