]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.procore/src/fi/vtt/simantics/procore/internal/DirectQuerySupportImpl.java
Fix for empty cancelled write transactions leaving scheduled updates
[simantics/platform.git] / bundles / org.simantics.db.procore / src / fi / vtt / simantics / procore / internal / DirectQuerySupportImpl.java
index 9d6b019e4a2d22de5a3954f77f125abde174a468..7f27a0261a0dd97f45cca02e79da1e5805fcd2af 100644 (file)
@@ -8,6 +8,7 @@ import org.simantics.db.Resource;
 import org.simantics.db.common.procedure.wrapper.NoneToAsyncProcedure;
 import org.simantics.db.common.procedure.wrapper.SyncToAsyncProcedure;
 import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.exception.NoSingleResultException;
 import org.simantics.db.impl.ClusterI;
 import org.simantics.db.impl.ClusterI.ClusterTypeEnum;
 import org.simantics.db.impl.ForEachObjectContextProcedure;
@@ -30,10 +31,13 @@ import org.simantics.db.procore.cluster.ResourceTableSmall;
 import org.simantics.db.procore.cluster.ValueTableSmall;
 import org.simantics.db.request.AsyncRead;
 import org.simantics.db.service.DirectQuerySupport;
-import org.simantics.utils.datastructures.Callback;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class DirectQuerySupportImpl implements DirectQuerySupport {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(DirectQuerySupportImpl.class);
+
        final private SessionImplSocket session;
        
        DirectQuerySupportImpl(SessionImplSocket session) {
@@ -484,14 +488,9 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
                if(subject < 0) {
 
                        if(!SessionImplSocket.areVirtualStatementsLoaded(session.virtualGraphServerSupport, subject, predicate)) {
-                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject, predicate, new Callback<ReadGraphImpl>()  {
-
-                                       @Override
-                                       public void run(ReadGraphImpl graph) {
-                                               getRelatedValue4(graph, subject, context, procedure);
-                                       }
-                                       
-                               });
+                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject, predicate,
+                                   g -> getRelatedValue4(g, subject, context, procedure)
+                               );
                                return;
                        }
                        
@@ -524,28 +523,16 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
                
         final org.simantics.db.procore.cluster.ClusterImpl cluster = session.clusterTable.getClusterByResourceKey(subject);
         if(!cluster.isLoaded()) {
-               cluster.load(session.clusterTranslator, new Runnable() {
-
-                               @Override
-                               public void run() {
-                                       getRelatedValue4(graph, subject, context, procedure);
-                               }
-                       
-               });
+               cluster.load(session.clusterTranslator, () -> getRelatedValue4(graph, subject, context, procedure));
                return;
         }
         
         if(cluster.hasVirtual() && session.virtualGraphServerSupport.virtuals.contains(subject)) {
                        
                        if(!SessionImplSocket.areVirtualStatementsLoaded(session.virtualGraphServerSupport, subject, predicate)) {
-                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject, predicate, new Callback<ReadGraphImpl>()  {
-
-                                       @Override
-                                       public void run(ReadGraphImpl graph) {
-                                               getRelatedValue4(graph, subject, context, procedure);
-                                       }
-                                       
-                               });
+                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject, predicate,
+                                   g -> getRelatedValue4(g, subject, context, procedure)
+                               );
                                return;
                        }
                
@@ -578,14 +565,9 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
                if(subject < 0) {
 
                        if(!SessionImplSocket.areVirtualStatementsLoaded(session.virtualGraphServerSupport, subject)) {
-                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject, new Callback<ReadGraphImpl>()  {
-
-                                       @Override
-                                       public void run(ReadGraphImpl graph) {
-                                               getValue4(graph, containerCluster, subject, procedure);
-                                       }
-                                       
-                               });
+                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject, 
+                                   g -> getValue4(g, containerCluster, subject, procedure)
+                           );
                                return;
                        }
                        
@@ -627,14 +609,9 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
         if(cluster.hasVirtual() && session.virtualGraphServerSupport.virtuals.contains(subject)) {
 
                        if(!SessionImplSocket.areVirtualStatementsLoaded(session.virtualGraphServerSupport, subject)) {
-                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject, new Callback<ReadGraphImpl>()  {
-
-                                       @Override
-                                       public void run(ReadGraphImpl graph) {
-                                               getValue4(graph, containerCluster, subject, procedure);
-                                       }
-                                       
-                               });
+                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject,
+                           g -> getValue4(g, containerCluster, subject, procedure)
+                           );
                                return;
                        }
                
@@ -682,14 +659,9 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
                if(subject < 0) {
 
                        if(!SessionImplSocket.areVirtualStatementsLoaded(session.virtualGraphServerSupport, subject)) {
-                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject, new Callback<ReadGraphImpl>()  {
-
-                                       @Override
-                                       public void run(ReadGraphImpl graph) {
-                                               getValue4(graph, containerCluster, subject, context, procedure);
-                                       }
-                                       
-                               });
+                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject,
+                                   g -> getValue4(g, containerCluster, subject, context, procedure)
+                           );
                                return;
                        }
                        
@@ -731,14 +703,9 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
         if(cluster.hasVirtual() && session.virtualGraphServerSupport.virtuals.contains(subject)) {
 
                        if(!SessionImplSocket.areVirtualStatementsLoaded(session.virtualGraphServerSupport, subject)) {
-                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject, new Callback<ReadGraphImpl>()  {
-
-                                       @Override
-                                       public void run(ReadGraphImpl graph) {
-                                               getValue4(graph, containerCluster, subject, context, procedure);
-                                       }
-                                       
-                               });
+                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject,
+                                    g -> getValue4(g, containerCluster, subject, context, procedure)
+                           );
                                return;
                        }
                
@@ -813,7 +780,7 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
                        int so = cluster.getSingleObject(subject, procedure, session.clusterTranslator);
                        if(so == 0) {
                                if(result == 0) {
-                                       procedure.exception(graph, new DatabaseException("No objects " + subject + " " + procedure.predicateKey));
+                                       procedure.exception(graph, new NoSingleResultException("No objects " + subject + " " + procedure.predicateKey, result));
 //                                     graph.dec();
                                } else {
                                        getValue4(graph, cluster, result, context, procedure);
@@ -822,13 +789,13 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
                                if(result == 0) {
                                        getValue4(graph, cluster, so, context, procedure);
                                } else {
-                                       procedure.exception(graph, new DatabaseException("Multiple objects"));
+                                       procedure.exception(graph, new NoSingleResultException("Multiple objects for " + subject + " " + procedure.predicateKey, result));
 //                                     graph.dec();
                                }
                        }
 
                } catch (DatabaseException e) {
-                       e.printStackTrace();
+                       LOGGER.error("Could not compute related value for subject {} with predicate {}", subject, procedure.predicateKey);
                }
                
        }
@@ -842,14 +809,9 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
                if(subject < 0) {
 
                        if(!SessionImplSocket.areVirtualStatementsLoaded(session.virtualGraphServerSupport, subject, predicate)) {
-                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject, predicate, new Callback<ReadGraphImpl>()  {
-
-                                       @Override
-                                       public void run(ReadGraphImpl graph) {
-                                               getRelatedValue4(graph, subject, procedure);
-                                       }
-                                       
-                               });
+                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject, predicate,
+                                   g -> getRelatedValue4(g, subject, procedure)
+                           );
                                return;
                        }
                        
@@ -896,14 +858,9 @@ public class DirectQuerySupportImpl implements DirectQuerySupport {
         if(cluster.hasVirtual() && session.virtualGraphServerSupport.virtuals.contains(subject)) {
                        
                        if(!SessionImplSocket.areVirtualStatementsLoaded(session.virtualGraphServerSupport, subject, predicate)) {
-                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject, predicate, new Callback<ReadGraphImpl>()  {
-
-                                       @Override
-                                       public void run(ReadGraphImpl graph) {
-                                               getRelatedValue4(graph, subject, procedure);
-                                       }
-                                       
-                               });
+                           SessionImplSocket.loadVirtualStatements(session.virtualGraphServerSupport, graph, subject, predicate,
+                                   g -> getRelatedValue4(graph, subject, procedure)
+                           );
                                return;
                        }