I'm using the Java driver (4.1) and I need the guarantees of the named graph operations, but I need to do several of these higher level operations in a transaction.
Say for instance I want to add several vertices to a collection in one go, and I want to rollback all operations upon any failure. If I'm using the Java driver, what I'd like is to do something like this:
db.beginTransaction() ; // this method doesn't exist
db.graph("myGraph").vertexCollection(vertexCollectionName1).insertVertex(a);
db.graph("myGraph").vertexCollection(vertexCollectionName1).insertVertex(b);
db.graph("myGraph").vertexCollection(vertexCollectionName2).insertVertex(c);
// ...so on...
db.executeTransaction(); // rollback all on failure, this method doesn't exist
I'm not very keen on doing the work in JavaScript, but if I understand correctly, the analogue to what I want may look like something like this, as a JS function run inside a transaction (using Java driver, but specifying JS function--hardcoded, no params):
String action = "function (params) { "
+ "var graph_module = require('@arangodb/general-graph');"
+ "var graph = graph_module._graph('myGraph');"
+ "graph.collection1.save({name: 'a'});"
+ "graph.collection1.save({name: 'b'});"
+ "graph.collection2.save({name: 'c'});"
// ...so on...
+ "}";
db.transaction(action, String.class, options); // request through Java driver
I may want to mix in some other edge updates, deletes--all done at a high level through the graph module--in a single transaction. My question is, can I get what I want, and is this the right way?
I haven't tried the above JS transaction, yet, but I'm looking for guidance before darting down blind alleys.