Я пытаюсь настроить транзакцию для клиента Gremlin, который не будет разрешать какие-либо изменяющие запросы (только для чтения).
Я знаю, что это возможно в JanusGraph или Titan с их API (с buildTransaction () как readOnly ()), однако для TinkerPop или Neptune я не нашел ничего похожего.
Я использую клиент на основе java-скрипта (сессионный):
Cluster cluster = Cluster.open();
Client client = cluster.connect('SessionID');
String mutatingQuery = "g.addV('Test')";
client.submit("g.tx().open()");
client.submit(mutatingQuery); // This should fail.
client.submit("g.tx().commit()");
Я знаю, что вы можете ограничить эти типы запросов со стороны сервера. Но возможно ли это и со стороны клиента? Я также не уверен, что это правильный подход к данной проблеме.
Изменить: я удаленно общаюсь с Gremlin Server через WebSocket, отправляя «сценарии».
Из Java я настраиваю кластер как:
Cluster cluster =
Cluster.build().addContactPoint(url).port(port).create();
А затем с помощью клиента отправлять запросы:
Client c= cluster.connect().init();
c.submit(query);
Я знаю о ReadOnlyStrategy, которую поддерживает Graph. Но я не нашел способа включить его с помощью описанного выше подхода, только из сценария конфигурации сервера. Есть ли другой способ ограничить отправляемый «запрос»?
Мой сервер настроен с использованием этого Groovy-скрипта по умолчанию:
globals << [g : graph.traversal()] // Could have used readOnly strategy here.
И мой клиент отправляет такие запросы:
c.submit("g.addV('test')"); // this should fail
Любые идеи?