]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - tests/org.simantics.db.tests/src/org/simantics/db/tests/performance/read/HierarchicalNames.java
Multiple reader thread support for db client
[simantics/platform.git] / tests / org.simantics.db.tests / src / org / simantics / db / tests / performance / read / HierarchicalNames.java
index 18d6ce537940607764bf3b291b2606d323feb64a..088f15667d6044d344985c66afe24b3a356f1bba 100644 (file)
@@ -21,6 +21,7 @@ import org.simantics.db.Session;
 import org.simantics.db.VirtualGraph;
 import org.simantics.db.WriteGraph;
 import org.simantics.db.WriteOnlyGraph;
+import org.simantics.db.common.request.AsyncReadRequest;
 import org.simantics.db.common.request.ReadRequest;
 import org.simantics.db.common.request.WriteOnlyResultRequest;
 import org.simantics.db.common.request.WriteResultRequest;
@@ -28,6 +29,9 @@ import org.simantics.db.exception.AssumptionException;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.procedure.AsyncMultiProcedure;
 import org.simantics.db.procedure.AsyncProcedure;
+import org.simantics.db.procedure.SyncContextProcedure;
+import org.simantics.db.procedure.SyncMultiProcedure;
+import org.simantics.db.procedure.SyncProcedure;
 import org.simantics.db.request.AsyncRead;
 import org.simantics.db.request.Read;
 import org.simantics.db.service.ClusterBuilder;
@@ -688,7 +692,7 @@ public class HierarchicalNames {
                }
        }
        
-       public static Read<Object> readAsync(final Resource resource) {
+       public static AsyncRead<Object> readAsync(final Resource resource) {
                
                if(VALIDATE) {
                        for(int i=0;i<244*64*64;i++) criteria.add("name");
@@ -697,46 +701,46 @@ public class HierarchicalNames {
 
                class Process {
 
-                       final AsyncMultiProcedure<Resource> structure;
-                       final AsyncProcedure<String> names;
+                       final SyncMultiProcedure<Resource> structure;
+                       final SyncProcedure<String> names;
                        
-                       Process(ReadGraph graph, Resource resource) {
+                       Process(ReadGraph graph, Resource resource) throws DatabaseException {
 
                                final Layer0 L0 = Layer0.getInstance(graph);
                                final DirectQuerySupport dqs = graph.getService(DirectQuerySupport.class);
                                final QueryControl control = graph.getService(QueryControl.class);
                                
-                               names = dqs.compilePossibleRelatedValue(graph, L0.HasName, new AsyncProcedure<String>() {
+                               names = dqs.compilePossibleRelatedValue(graph, L0.HasName, new SyncProcedure<String>() {
 
                                        @Override
-                                       public void execute(AsyncReadGraph graph, String name) {
+                                       public void execute(ReadGraph graph, String name) {
                                                if(VALIDATE) validation.add(name);
 //                                             System.err.println("af=" + name);
                                        }
 
                                        @Override
-                                       public void exception(AsyncReadGraph graph, Throwable throwable) {
+                                       public void exception(ReadGraph graph, Throwable throwable) {
                                                throwable.printStackTrace();
                                        }
 
                                });
                                
-                               structure = dqs.compileForEachObject(graph, L0.ConsistsOf, new AsyncMultiProcedure<Resource>() {
+                               structure = dqs.compileForEachObject(graph, L0.ConsistsOf, new SyncMultiProcedure<Resource>() {
 
                                        @Override
-                                       public void execute(AsyncReadGraph graph, Resource child) {
-                                               if(control.scheduleByCluster(graph, child, this)) {
+                                       public void execute(ReadGraph graph, Resource child) {
+                                               //if(control.scheduleByCluster(graph, child, this)) {
                                                        dqs.forEachObjectCompiled(graph, child, structure);
                                                        dqs.forPossibleRelatedValueCompiled(graph, child, names);
-                                               }
+                                               //}
                                        }
 
                                        @Override
-                                       public void finished(AsyncReadGraph graph) {
+                                       public void finished(ReadGraph graph) {
                                        }
 
                                        @Override
-                                       public void exception(AsyncReadGraph graph, Throwable throwable) {
+                                       public void exception(ReadGraph graph, Throwable throwable) {
                                                throwable.printStackTrace();
                                        }
 
@@ -749,12 +753,16 @@ public class HierarchicalNames {
                        
                }
                
-               return new ReadRequest() {
+               return new AsyncReadRequest() {
                        
                        @Override
-                       public void run(ReadGraph graph) {
+                       public void run(AsyncReadGraph graph) {
 
-                               new Process(graph, resource);
+                               try {
+                                       new Process(graph, resource);
+                               } catch (DatabaseException e) {
+                                       e.printStackTrace();
+                               }
 
                        }
                        
@@ -767,12 +775,12 @@ public class HierarchicalNames {
                graph.forPossibleRelatedValue(resource, L0.HasName, FastStringBinding.INSTANCE, procedure2);
        }
 
-       public static ReadRequest readAsync2(final Resource resource) {
+       public static AsyncReadRequest readAsync2(final Resource resource) {
 
-               return new ReadRequest() {
+               return new AsyncReadRequest() {
 
                        @Override
-                       public void run(ReadGraph graph) {
+                       public void run(AsyncReadGraph graph) {
 
                                final Layer0 L0 = Layer0.getInstance(graph);
                                
@@ -825,21 +833,22 @@ public class HierarchicalNames {
        
        public static void readAsyncTypesLoop(final DirectQuerySupport dqs, final Layer0 L0, AsyncReadGraph graph, final Resource resource, final RelationInfo consistsOf, final AsyncMultiProcedure<Resource> procedure, final RelationInfo name, final Serializer serializer, final AsyncProcedure<String> procedure2) {
                
-               dqs.forPossibleType(graph, resource, new AsyncProcedure<Resource>() {
+               dqs.forPossibleDirectType(graph, resource, dqs, new SyncContextProcedure<DirectQuerySupport, Resource>() {
 
                        @Override
-                       public void execute(AsyncReadGraph graph, Resource type) {
+                       public void execute(ReadGraph graph, DirectQuerySupport dqs, Resource type) {
                                
 //                             System.err.println("affa");
                                
-                               graph.asyncRequest(new TypeSetAndString(type), new AsyncProcedure<Pair<Set<Resource>, String>>() {
+                               try {
+                                       graph.syncRequest(new TypeSetAndString(type), new SyncProcedure<Pair<Set<Resource>, String>>() {
 
-                                       @Override
-                                       public void execute(AsyncReadGraph graph, Pair<Set<Resource>, String> typeInfo) {
-                                               
-                                               Set<Resource> types = typeInfo.first;
-                                               if(types.contains(L0.Ontology)) {
+                                               @Override
+                                               public void execute(ReadGraph graph, Pair<Set<Resource>, String> typeInfo) {
                                                        
+                                                       Set<Resource> types = typeInfo.first;
+                                                       if(types.contains(L0.Ontology)) {
+                                                               
 //                                                     dqs.forPossibleRelatedValue(graph, resource, name, serializer, new AsyncProcedure<String>() {
 //
 //                                                             @Override
@@ -852,25 +861,28 @@ public class HierarchicalNames {
 //                                                             }
 //                                                             
 //                                                     });
+                                                               
+                                                       } else if (types.contains(L0.Library)) {
+                                                               //dqs.forEachObject(graph, resource, consistsOf, procedure);
+                                                       }
                                                        
-                                               } else if (types.contains(L0.Library)) {
-                                                       //dqs.forEachObject(graph, resource, consistsOf, procedure);
                                                }
-                                               
-                                       }
 
-                                       @Override
-                                       public void exception(AsyncReadGraph graph, Throwable throwable) {
-                                       }
-                                       
-                               });
+                                               @Override
+                                               public void exception(ReadGraph graph, Throwable throwable) {
+                                               }
+                                               
+                                       });
+                               } catch (DatabaseException e) {
+                                       e.printStackTrace();
+                               }
                                
                        }
 
                        @Override
-                       public void exception(AsyncReadGraph graph, Throwable throwable) {
+                       public void exception(ReadGraph graph, Throwable throwable) {
                        }
-                       
+
                });
                
                
@@ -895,7 +907,12 @@ public class HierarchicalNames {
 
                                                @Override
                                                public void perform(AsyncReadGraph graph, AsyncProcedure<RelationInfo> procedure) {
-                                                       dqs.forRelationInfo(graph, L0.ConsistsOf, procedure);
+                                                       try {
+                                                               RelationInfo ri = dqs.getRelationInfo(graph, L0.ConsistsOf);
+                                                               procedure.execute(graph, ri);
+                                                       } catch (DatabaseException e) {
+                                                               procedure.exception(graph, e);
+                                                       }
                                                }
 
                                @Override
@@ -913,7 +930,12 @@ public class HierarchicalNames {
 
                                                @Override
                                                public void perform(AsyncReadGraph graph, AsyncProcedure<RelationInfo> procedure) {
-                                                       dqs.forRelationInfo(graph, L0.HasName, procedure);
+                                                       try {
+                                                               RelationInfo ri = dqs.getRelationInfo(graph, L0.HasName);
+                                                               procedure.execute(graph, ri);
+                                                       } catch (DatabaseException e) {
+                                                               procedure.exception(graph, e);
+                                                       }
                                                }
 
                                @Override