More information... I have also noticed that if I don't close the transaction (dataset.end()) it works. But, are the transactions garbage collected?
What is the different between using UNION and not using it internally for Jena? the other option is using RewindableResultSet, which somehow I want to avoid. But if this is the solution, I will go though all my ResultSets twice, one for retrieval (Rewindable creation) and another for analysing the data. On 27/02/2017 19:23, George News wrote: > Sorry I forgot to include the full exception > > Caused by: org.apache.jena.tdb.transaction.TDBTransactionException: Not in a > transaction > at > org.apache.jena.tdb.transaction.DatasetGraphTransaction.get(DatasetGraphTransaction.java:117) > at > org.apache.jena.tdb.transaction.DatasetGraphTransaction.get(DatasetGraphTransaction.java:50) > at > org.apache.jena.sparql.core.DatasetGraphWrapper.getR(DatasetGraphWrapper.java:61) > at > org.apache.jena.sparql.core.DatasetGraphWrapper.find(DatasetGraphWrapper.java:146) > at > org.apache.jena.sparql.core.GraphView.graphBaseFind(GraphView.java:121) > at org.apache.jena.graph.impl.GraphBase.find(GraphBase.java:255) > at > org.apache.jena.sparql.path.eval.PathEngine.graphFind2(PathEngine.java:205) > at > org.apache.jena.sparql.path.eval.PathEngine.graphFind(PathEngine.java:189) > at > org.apache.jena.sparql.path.eval.PathEngine.graphFind(PathEngine.java:171) > at org.apache.jena.sparql.path.eval.PathEngine.doOne(PathEngine.java:92) > at > org.apache.jena.sparql.path.eval.PathEvaluator.visit(PathEvaluator.java:57) > at org.apache.jena.sparql.path.P_Link.visit(P_Link.java:37) > at org.apache.jena.sparql.path.eval.PathEval.eval$(PathEval.java:68) > at org.apache.jena.sparql.path.eval.PathEval.eval$(PathEval.java:74) > at org.apache.jena.sparql.path.eval.PathEngine.eval(PathEngine.java:75) > at > org.apache.jena.sparql.path.eval.PathEngineSPARQL.ALP_1(PathEngineSPARQL.java:119) > at > org.apache.jena.sparql.path.eval.PathEngineSPARQL.doZeroOrMore(PathEngineSPARQL.java:92) > at > org.apache.jena.sparql.path.eval.PathEvaluator.visit(PathEvaluator.java:115) > at > org.apache.jena.sparql.path.P_ZeroOrMore1.visit(P_ZeroOrMore1.java:43) > at org.apache.jena.sparql.path.eval.PathEval.eval$(PathEval.java:68) > at org.apache.jena.sparql.path.eval.PathEval.eval$(PathEval.java:74) > at org.apache.jena.sparql.path.eval.PathEval.eval(PathEval.java:37) > at > org.apache.jena.sparql.path.PathLib.evalGroundedPath(PathLib.java:166) > at org.apache.jena.sparql.path.PathLib.execTriplePath(PathLib.java:133) > at org.apache.jena.sparql.path.PathLib.execTriplePath(PathLib.java:108) > at > org.apache.jena.sparql.engine.iterator.QueryIterPath.nextStage(QueryIterPath.java:47) > at > org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply.makeNextStage(QueryIterRepeatApply.java:108) > at > org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:65) > at > org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114) > at org.apache.jena.atlas.iterator.Iter$2.hasNext(Iter.java:265) > at > org.apache.jena.atlas.iterator.RepeatApplyIterator.hasNext(RepeatApplyIterator.java:45) > at > org.apache.jena.tdb.solver.SolverLib$IterAbortable.hasNext(SolverLib.java:195) > at org.apache.jena.atlas.iterator.Iter$2.hasNext(Iter.java:265) > at > org.apache.jena.sparql.engine.iterator.QueryIterPlainWrapper.hasNextBinding(QueryIterPlainWrapper.java:53) > at > org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114) > at > org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply.makeNextStage(QueryIterRepeatApply.java:101) > at > org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:65) > at > org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114) > at > org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply.makeNextStage(QueryIterRepeatApply.java:101) > at > org.apache.jena.sparql.engine.iterator.QueryIterRepeatApply.hasNextBinding(QueryIterRepeatApply.java:65) > at > org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114) > at > org.apache.jena.sparql.engine.iterator.QueryIterGroup$1.initializeIterator(QueryIterGroup.java:86) > at > org.apache.jena.atlas.iterator.IteratorDelayedInitialization.init(IteratorDelayedInitialization.java:40) > at > org.apache.jena.atlas.iterator.IteratorDelayedInitialization.hasNext(IteratorDelayedInitialization.java:50) > at > org.apache.jena.sparql.engine.iterator.QueryIterPlainWrapper.hasNextBinding(QueryIterPlainWrapper.java:53) > at > org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114) > at > org.apache.jena.sparql.engine.iterator.QueryIterProcessBinding.hasNextBinding(QueryIterProcessBinding.java:66) > at > org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114) > at > org.apache.jena.sparql.engine.iterator.QueryIterConvert.hasNextBinding(QueryIterConvert.java:58) > at > org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114) > at > org.apache.jena.sparql.engine.iterator.QueryIterDistinct.getInputNextUnseen(QueryIterDistinct.java:104) > at > org.apache.jena.sparql.engine.iterator.QueryIterDistinct.hasNextBinding(QueryIterDistinct.java:70) > at > org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114) > at java.util.Iterator.forEachRemaining(Iterator.java:115) > at org.apache.jena.atlas.data.DataBag.addAll(DataBag.java:94) > at > org.apache.jena.sparql.engine.iterator.QueryIterSort$SortedBindingIterator.initializeIterator(QueryIterSort.java:84) > at > org.apache.jena.atlas.iterator.IteratorDelayedInitialization.init(IteratorDelayedInitialization.java:40) > at > org.apache.jena.atlas.iterator.IteratorDelayedInitialization.hasNext(IteratorDelayedInitialization.java:50) > at > org.apache.jena.sparql.engine.iterator.QueryIterPlainWrapper.hasNextBinding(QueryIterPlainWrapper.java:53) > at > org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114) > at > org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:39) > at > org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114) > at > org.apache.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:39) > at > org.apache.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:114) > at > org.apache.jena.sparql.engine.ResultSetStream.hasNext(ResultSetStream.java:74) > at > org.apache.jena.sparql.engine.ResultSetCheckCondition.hasNext(ResultSetCheckCondition.java:55) > > > > > On 27/02/2017 19:18, George News wrote: >> Hi, >> >> I have a SELECT SPARQL query similar to the one below: >> >> |PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: >> <http://www.w3.org/2000/01/rdf-schema#> SELECT (count(distinct ?o) as >> ?count_o) (count(distinct ?device) as ?count_devices) WHERE { {?o >> rdf:type/rdfs:subClassOf CLASS1 .} UNION {?device >> rdf:type/rdfs:subClassOf CLASS2 .} } | >> >> If I execute it as it is, I get >> >> |org.apache.jena.tdb.transaction.TDBTransactionException: Not in a >> transaction | >> >> However if I execute it like >> >> |PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: >> <http://www.w3.org/2000/01/rdf-schema#> SELECT (count(distinct ?o) as >> ?count_observations) WHERE { {?o rdf:type/rdfs:subClassOf CLASS1 .} } | >> >> everything is working ok. It doesn’t matter if I use one or the other >> part of the union, as it works ok independently but not together. >> >> Any idea? Any help is more than welcome. >> >> Find below part of the code: >> >> |public SparqlResult executeSparql(String sparql) throws >> SparqlExecutionException { String queryString = sparql; Query query = >> QueryFactory.create(queryString); dataset.begin(ReadWrite.READ); try { >> QueryExecution qExec = QueryExecutionFactory.create(query, getModel()); >> // System.out.println(qExec.getQuery().serialize()); // >> System.out.println(qExec.getQuery().toString()); SparqlResult result; if >> (query.isSelectType()) { result = new SparqlResult(qExec.execSelect(), >> qExec); } else if (query.isDescribeType()) { result = new >> SparqlResult(qExec.execDescribe(), qExec); } else if (query.isAskType()) >> { result = new SparqlResult(qExec.execAsk(), qExec); } else if >> (query.isConstructType()) { result = new >> SparqlResult(qExec.execConstruct(), qExec); } else { throw new >> SparqlExecutionException("Unsupported query type: " + >> query.getQueryType()); } return result; } finally { dataset.end(); } >> private Map<String, Integer> getSummaryStatistics() { String queryString >> = "THE_ONE"; Map<String, Integer> statistics = new HashMap<>(); >> GlobalTripleStore gts = new GlobalTripleStore(); try (SparqlResult >> result = gts.executeSparql(queryString)) { ResultSet resultSet = >> (ResultSet) result.getResult(); while (resultSet.hasNext()) { >> QuerySolution sol = resultSet.next(); int devices = >> sol.get("count_devices").asLiteral().getInt(); int observations >> =sol.get("count_o").asLiteral().getInt(); statistics.put("devices", >> resources); statistics.put("o", observations); } } catch >> (SparqlExecutionException e) { // TODO Auto-generated catch block >> e.printStackTrace(); } return statistics; } | >> >> >> >> >
