Нет прямого API для получения этого списка, но есть обходной путь для его получения, если вы используете запрос на основе сценария и реализация вашего поставщика не запрещает это по соображениям безопасности (или просто не поддерживает его, учитывая способ он реализовал протокол). Короче говоря, я бы ожидал, что этот подход будет работать только с реализацией сервера Gremlin от TinkerPop, и если песочница безопасности отключена или настроена для разрешения доступа к задействованным классам.
Сервер Gremlin содержит ScriptEngine
экземпляр, обрабатывающий сценарии. У него есть «контекст», который доступен как переменная с тем же именем. Вы можете получить доступ к этой переменной с помощью:
gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Configured localhost/127.0.0.1:8182
gremlin> :remote console
==>All scripts will now be sent to Gremlin Server - [localhost/127.0.0.1:8182] - type ':remote console' to return to local mode
gremlin> context
==>org.apache.tinkerpop.gremlin.jsr223.GremlinScriptContext@c7ef4c5
Как только вы это получите, вы можете отфильтровать Graph
(или, что более вероятно, вы бы подобрали GraphTraversalSource
экземпляры) и получить имя, по которому оно известно на server:
gremlin> context.getBindings(javax.script.ScriptContext.GLOBAL_SCOPE).entrySet().findAll{it.value instanceof Graph}.key
==>graph
gremlin> context.getBindings(javax.script.ScriptContext.GLOBAL_SCOPE).entrySet().findAll{it.value instanceof GraphTraversalSource}.key
==>g
Как видите, он также хорошо работает с совместимым драйвером:
gremlin> cluster = Cluster.open()
==>localhost/127.0.0.1:8182
gremlin> client = cluster.connect()
==>org.apache.tinkerpop.gremlin.driver.Client$ClusteredClient@5408d4b3
gremlin> client.submit("context.getBindings(javax.script.ScriptContext.GLOBAL_SCOPE).entrySet().findAll{it.value instanceof GraphTraversalSource}.key").all().get()
==>result{object=g class=java.lang.String}