Oh, that. Well, doing an operation on a Node/Relationship grabs a lock on that entity for that transaction. One operation which doesn't really do anything is to remove a non-existent property. It's just to make sure that a write lock is taken before entering a block of read-then-write-based-on-the-read-value. Functionality-wise it's required for those implementations to be thread-safe.
In other words: it's because there's no Transaction#acquireWriteLock(Node), which I'd really like to see pretty soon in there. 2011/6/30 Niels Hoogeveen <[email protected]> > > Hi Mattias, > I just looked through the code in neo4j-util and will try to port relevant > classes to graph-collections. I have one question, though. Several methods > make a call to "GraphDatabaseUtil.acquireWriteLock", which performs one > operation: the removal of the property "___dummy_property_for_locking___". I > don't see any place where this property is set. Can you explain this usage? > Niels > > > Date: Thu, 30 Jun 2011 20:50:42 +0200 > > From: [email protected] > > To: [email protected] > > Subject: Re: [Neo4j] graph-collections List class > > > > I have done a lot of these structures already, so before (re)doing a lot > of > > these structures take a look at: > > > https://svn.neo4j.org/components/utils/trunk/src/main/java/org/neo4j/util/(the > > old subversion repository, but the utils are quite up2date). Please > > take a look there and feel free to pull good implementations in to > > graph-collections. There are f.ex. queues (with workers picking items > from > > them), linked lists, limited-sized lists and more. > > > > 2011/6/30 Niels Hoogeveen <[email protected]> > > > > > > > > For neo4j.graph-collections.list.List I suggest the following. > > > The graph collections List class is an implementation of the > java.util.List > > > class, parameterized with Node, supporting all methods, except > subList(int > > > start, int end). > > > Whenever nodes need to be stored as a list, the List class can be used, > > > guaranteeing the List contract is maintained. > > > package org.neo4j.collections.list; > > > > > > import org.neo4j.collections.list.List; > > > import org.neo4j.graphdb.Node; > > > import org.neo4j.kernel.EmbeddedGraphDatabase; > > > import java.util.ArrayList; > > > import org.neo4j.graphdb.Transaction; > > > > > > public class Demo { > > > > > > public static void main(String[] args){ > > > > > > > > > > > > //create/load database > > > EmbeddedGraphDatabase graphDb = new > EmbeddedGraphDatabase( > > > "var/db" ); > > > > > > Transaction tx = graphDb.beginTx(); > > > > > > //create node representing the list > > > Node indexNode = graphDb.createNode(); > > > > > > //create list > > > List list = new List( indexNode, graphDb ); > > > > > > //create nodes to be added to the list > > > Node node1 = graphDb.createNode(); > > > Node node2 = graphDb.createNode(); > > > Node node3 = graphDb.createNode(); > > > Node node4 = graphDb.createNode(); > > > > > > //add nodes to the list one by one > > > list.add(node1); > > > list.add(node2); > > > list.add(node3); > > > list.add(node4); > > > > > > //remove entries by index > > > list.remove(3); > > > list.remove(2); > > > > > > //remove entries by node > > > list.remove(node2); > > > list.remove(node1); > > > > > > //add a collection of nodes to the list > > > ArrayList<Node> al1 = new ArrayList<Node>(); > > > al1.add(node1); > > > al1.add(node2); > > > al1.add(node3); > > > al1.add(node4); > > > > > > list.addAll(al1); > > > > > > //use the list in a for loop > > > for(Node n: list){ > > > System.out.println(n); > > > } > > > > > > //find first entry in the list containing a specific > node > > > list.indexOf(node2); > > > > > > //find last entry in the list containing a specific node > > > list.lastIndexOf(node2); > > > > > > //retain a collection of nodes from the list > > > ArrayList<Node> al2 = new ArrayList<Node>(); > > > al2.add(node1); > > > al2.add(node3); > > > al2.add(node4); > > > > > > list.retainAll(al2); > > > > > > //remove a collection of nodes from the list > > > ArrayList<Node> al3 = new ArrayList<Node>(); > > > al2.add(node3); > > > al2.add(node4); > > > > > > list.removeAll(al3); > > > > > > //delete the list > > > list.delete(); > > > > > > tx.success(); > > > tx.finish(); > > > } > > > } > > > > > > > > > > From: [email protected] > > > > Date: Thu, 30 Jun 2011 17:49:46 +0200 > > > > To: [email protected] > > > > Subject: Re: [Neo4j] graph-collections List class > > > > > > > > Guys, > > > > if you can write some illustrative test code for the different > > > > collections, I could undertake to put some documentation skeleton > into > > > > place that can be merged into the main manual and look like > > > > http://docs.neo4j.org/chunked/snapshot/. To start with, we could > have > > > > it separately though. > > > > > > > > WDYT? > > > > > > > > Cheers, > > > > > > > > /peter neubauer > > > > > > > > GTalk: neubauer.peter > > > > Skype peter.neubauer > > > > Phone +46 704 106975 > > > > LinkedIn http://www.linkedin.com/in/neubauer > > > > Twitter http://twitter.com/peterneubauer > > > > > > > > http://www.neo4j.org - Your high performance graph > > > database. > > > > http://startupbootcamp.org/ - Ă–resund - Innovation happens HERE. > > > > http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing > party. > > > > > > > > > > > > > > > > On Thu, Jun 30, 2011 at 5:28 PM, Niels Hoogeveen > > > > <[email protected]> wrote: > > > > > > > > > > Today I added a List class to the graph-collections repo: > > > > > > > > > https://github.com/peterneubauer/graph-collections/tree/master/src/main/java/org/neo4j/collections/list > > > > > The List class implements the java.util.List<Node> interface. > > > > > Niels > > > > > _______________________________________________ > > > > > Neo4j mailing list > > > > > [email protected] > > > > > https://lists.neo4j.org/mailman/listinfo/user > > > > > > > > > _______________________________________________ > > > > Neo4j mailing list > > > > [email protected] > > > > https://lists.neo4j.org/mailman/listinfo/user > > > > > > _______________________________________________ > > > Neo4j mailing list > > > [email protected] > > > https://lists.neo4j.org/mailman/listinfo/user > > > > > > > > > > > -- > > Mattias Persson, [[email protected]] > > Hacker, Neo Technology > > www.neotechnology.com > > _______________________________________________ > > Neo4j mailing list > > [email protected] > > https://lists.neo4j.org/mailman/listinfo/user > > _______________________________________________ > Neo4j mailing list > [email protected] > https://lists.neo4j.org/mailman/listinfo/user > -- Mattias Persson, [[email protected]] Hacker, Neo Technology www.neotechnology.com _______________________________________________ Neo4j mailing list [email protected] https://lists.neo4j.org/mailman/listinfo/user

