Я пытаюсь настроить транзакцию для клиента Gremlin, который не будет разрешать любые изменяющиеся запросы (только для чтения).
Мне известно, что это возможно в JanusGraph или Titan с их API (с buildTransaction () как readOnly ()), однако для TinkerPop или Neptune я не нашел ничего подобного.
IЯ использую клиент на основе сценария 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 я настраиваю кластерas:
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
Есть идеи?