Hi
My use case scenario is a web app, where the OrientGraphFactory is
instanced as a Singleton Provider using Google Guice, and each use of
OrientGraph is bound to the ResuestScope, aka each request get a potential
different graph thread instance. I am the only user at the moment.
All Vertexes and Edges extends ORestricted, and the OrientGraphFactory is
created using a tenant user and password to limit visibility towards other
tenants.
I have a GroupDAO that has a method updateRoles that takes a Group and a
List of roles, and first remove all exiting edges between the Group and the
Roles, and then re-add the Edges.
@Override
void updateRoles(IGroup group, List<String> roles) {
try {
// 1.) Remove old connections
graph.getVertex(group.getId()).outE('member').remove()
// 2.) Add all new
Vertex vGroup = graph.getVertex(group.getId())
roles.each { String role ->
Vertex vRole = graph.getVertex(role)
Edge member = graph.addEdge(null, vGroup, vRole, "member");
log.info('log: role: {}, member: {}', role, member)
}
graph.commit()
} catch( Exception e ) {
log.error(e.getMessage(), e)
graph.rollback();
throw e
}
}
Using the web-flow of POST->redirect->GET, the get call after the update
will in turn call getRoles to get the updated list of Roles from the
database
@Override
List<IRole> getRoles(IGroup group) {
List<IRole> roles = []
graph.commit()
def result = graph.getVertex(group.getId()).outE('member').inV
while(result.hasNext()){
roles << OrientHelper.fromVertex(result.next(), Role.class)
}
return roles
}
OritentHelper.fromVertex is a helper class i use to reflect Vertex onto a
bean instance.
So to my actual problem(s):
1.) The get request contains a result that is not consistent. As each
request uses a different thread, and graph instance from the pool, it will
sometimes get the updated result, and sometimes the old result. The old
result does not go away until another update, but then the result reflect
the new updates, with the same problem. It seems like a cache issue to me.
2.) Using the Gremlin shell, the Edges never gets updated. It will keep
listing the old Edges until the graph is closed and reopened. The web
interface shows the updated Edges.
I am using OrientDb 2.0.2, Java 8, Linux and Groovy 2.3.7 on a remote
(localhost) connection. I am using Gremlin 2.6.0.
--
---
You received this message because you are subscribed to the Google Groups
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.