图不支持事务

Graph does not support transactions

我已经在 gremlin 上尝试了两个交易案例-java。

第一个案例:

@Bean
public Cluster gremlinCluster()
{
    return Cluster.build()
            .addContactPoint(GREMLIN_ENDPOINT)
            .port(GREMLIN_PORT)
            .enableSsl(GREMLIN_SSL_ENABLED)
            .create();
} 
...
@Bean
public GraphTraversalSource gremlinGraph(Cluster gremlinCluster)
{
    return traversal().withRemote(DriverRemoteConnection.using(gremlinCluster, "g"));
}
...
GraphTraversalSource graph;
...

final Transaction tx = graph.tx();
...

它给出错误:java.lang.UnsupportedOperationException: Graph does not support transactions

第二个案例:

    String sessionId = UUID.randomUUID().toString();
    Client client = cluster.connect(sessionId);
    client.submit("g.addV('App').property('appId', 1)");
    client.submit("graph error query");
    client.close();
    ...
    graph.V().has("App", "appId", 1).next(); => It gives value

在第二种情况下,预期情况是:

  1. 回滚将起作用。
  2. return graph.V().has("App", "appId", 1).next();.
  3. 无结果

但是,回滚不起作用。

有什么建议吗?如何在gremlin-java?

上实现交易

关于你的第一个案例,请问你用的是什么图数据库?例如,如果 graph 是一个 TinkerGraph,那么您可以预料到该错误,因为它根本不支持它们:

gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> graph.features().graph().supportsTransactions()
==>false
gremlin> g = traversal().withRemote(DriverRemoteConnection.using("localhost",8182,"g"))
==>graphtraversalsource[emptygraph[empty], standard]
gremlin> g.graph
==>emptygraph[empty]
gremlin> g.graph.features().graph().supportsTransactions()
==>false

对于第二种情况,您在会话中发送脚本。如果您使用的图表不支持事务(即在第一种情况下给您错误的同一图表),那么我怀疑您的更改是在执行第一个请求时有效提交的,因为没有事务到打开或关闭。当然,值得注意的是,对于支持事务的图形,您可以使用 section.

中描述的会话管理事务来实现按请求自动提交功能。

您可能会发现此 entire section 参考文档有助于理解不同使用环境中的各种交易模式。