You have to iterate inside the or at least a transaction Von meinem iPhone gesendet
> Am 19.08.2016 um 20:25 schrieb Howard Lander <how...@renci.org>: > > Hi all > Hi all > > Thanks in advance for the attention and any suggestions. I hope my > explanation of the issue is clear enough. > > As noted in the subject line, I'm upgrading my java based project to Version > 3 of the embedded API. Unfortunately, I'm getting the following error: > > SEVERE: exception in hasNext: The statement has been closed. > > Code is below, but here's the explanation. In order to provide a layer of > isolation in between my application code and the database code (in this case > Neo4j), I'm using the DAO pattern. I'm assigning the ResourceIterator I'm > getting back from the findNodes call to a variable in the user level iterator > I'm defining. According to this page > (https://neo4j.com/docs/java-reference/current/javadocs/org/neo4j/graphdb/Transaction.html) > > > "All ResourceIterables that where returned from operations executed inside a > transaction will be automatically closed when the transaction is committed or > rolled back. Note however, that the ResourceIterator should be closed as soon > as possible if you don't intend to exhaust the iterator" > > That's clear enough and seems to explain why I am getting the exception. But > there has to be some way to return an iterator for later use. At least I hope > so. The other choice that comes to mind would be to store all of the nodes > in user memory so my user level interface can iterate through them, and that > would be a bit problematic. I'll note that this code (which used to use the > GlobalGraphOperations class) worked in Neo4j 2. but maybe that was a bug in > Neo4j 2? Note that I have tried not closing the transaction (or even using a > transaction at all). > > Any ideas? > > > Here's the actual source of the problem: It's in my definition of an iterator > for the user visible structure representing nodes. > > public boolean hasNext() { > // Wrap the neo4j iterator > boolean hasN = false; > GraphDatabaseService theDB = Neo4jDAOFactory.getTheNetworkDB(); > Transaction tx = theDB.beginTx(); > try { > hasN = nodeIterator.hasNext(); > } catch (Exception e) { > // should send this back using the message logs eventually > this.logger.log (Level.SEVERE, "exception in hasNext: " + > e.getMessage(), e); > } finally { > tx.close(); > } > return hasN; > } > > But it doesn't make sense without also looking at: > > public Iterator<NetworkNodeTransferObject> > getNetworkNodes(String nameSpace, String key, Object value){ > > Neo4jNetworkNodeDAOIterator theIterator = null; > GraphDatabaseService theDB = Neo4jDAOFactory.getTheNetworkDB(); > Transaction tx = theDB.beginTx(); > try { > > Label newLabel = Label.label(nameSpace); > Iterator<Node> neo4jNodeList = theDB.findNodes(newLabel, key, > value); > theIterator = new Neo4jNetworkNodeDAOIterator(); > theIterator.nodeIterator = neo4jNodeList; > } catch (Exception e) { > // should send this back using the message logs eventually > this.logger.log (Level.SEVERE, "exception in getNetworkNodes: " + > e.getMessage(), e); > } finally { > tx.close(); > } > > return theIterator; > } > > Thanks > Howard > > -- > You received this message because you are subscribed to the Google Groups > "Neo4j" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to neo4j+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Neo4j" group. To unsubscribe from this group and stop receiving emails from it, send an email to neo4j+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.