As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Usar o cliente do Java para conectar-se a uma instância de banco de dados do Neptune
A seção a seguir mostra a execução de uma amostra completa de Java que se conecta a uma instância de banco de dados Neptune e executa uma travessia do Gremlin usando o cliente Apache Gremlin. TinkerPop
Essas instruções devem ser seguidas em uma EC2 instância da Amazon na mesma nuvem privada virtual (VPC) da sua instância de banco de dados Neptune.
Como conectar-se ao Neptune usando o Java
-
Instale o Apache Maven na sua EC2 instância. Primeiro, insira o seguinte para adicionar um repositório com um pacote do Maven:
sudo wget https://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
Insira o seguinte para definir o número da versão para os pacotes:
sudo sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo
Em seguida, use yum para instalar Maven:
sudo yum install -y apache-maven
-
Instale o Java. As bibliotecas do Gremlin precisam do Java 8 ou 11. Você pode instalar o Java 11 da seguinte maneira:
-
Se você estiver usando o Amazon Linux 2 (AL2)
: sudo amazon-linux-extras install java-openjdk11
-
Se você estiver usando o Amazon Linux 2023 (AL2023):
sudo yum install java-11-amazon-corretto-devel
-
Para outras distribuições, use qualquer uma das seguintes opções que seja apropriada:
sudo yum install java-11-openjdk-devel
ou:
sudo apt-get install openjdk-11-jdk
-
-
Defina o Java 11 como o tempo de execução padrão na sua EC2 instância: insira o seguinte para definir o Java 8 como o tempo de execução padrão na sua EC2 instância:
sudo /usr/sbin/alternatives --config java
Quando solicitado, insira o número do Java 11.
-
Crie um diretório denominado
gremlinjava
:mkdir gremlinjava cd gremlinjava
-
No diretório
gremlinjava
, crie um arquivopom.xml
e abra-o em um editor de texto:nano pom.xml
-
Copie o seguinte no arquivo
pom.xml
e salve-o:<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd"> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <modelVersion>4.0.0</modelVersion> <groupId>com.amazonaws</groupId> <artifactId>GremlinExample</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>GremlinExample</name> <url>https://maven.apache.org</url> <dependencies> <dependency> <groupId>org.apache.tinkerpop</groupId> <artifactId>gremlin-driver</artifactId> <version>
3.7.2
</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.tinkerpop/gremlin-groovy (Not needed for TinkerPop version 3.5.2 and up) <dependency> <groupId>org.apache.tinkerpop</groupId> <artifactId>gremlin-groovy</artifactId> <version>3.7.2</version> </dependency> --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jdk14</artifactId> <version>1.7.25</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.3</version> <configuration> <executable>java</executable> <arguments> <argument>-classpath</argument> <classpath/> <argument>com.amazonaws.App</argument> </arguments> <mainClass>com.amazonaws.App</mainClass> <complianceLevel>1.11</complianceLevel> <killAfter>-1</killAfter> </configuration> </plugin> </plugins> </build> </project>nota
Se estiver modificando um projeto existente do Maven, a dependência necessária será destacada no código anterior.
-
Crie subdiretórios para o código-fonte de exemplo (
src/main/java/com/amazonaws/
) digitando o seguinte na linha de comando:mkdir -p
src/main/java/com/amazonaws/
-
No diretório
src/main/java/com/amazonaws/
, crie um arquivo denominadoApp.java
e abra-o em um editor de texto.nano
src/main/java/com/amazonaws/App.java
-
Copie o seguinte no arquivo
App.java
.your-neptune-endpoint
Substitua pelo endereço da sua instância de banco de dados Neptune. Não inclua o prefixohttps://
no métodoaddContactPoint
.nota
Para obter informações sobre como localizar o nome do host da instância de banco de dados do Neptune, consulte Conectar-se a endpoints do Amazon Neptune.
package com.amazonaws; import org.apache.tinkerpop.gremlin.driver.Cluster; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import static org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal; import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; import org.apache.tinkerpop.gremlin.structure.T; public class App { public static void main( String[] args ) { Cluster.Builder builder = Cluster.build(); builder.addContactPoint("
your-neptune-endpoint
"); builder.port(8182); builder.enableSsl(true); Cluster cluster = builder.create(); GraphTraversalSource g = traversal().withRemote(DriverRemoteConnection.using(cluster)); // Add a vertex. // Note that a Gremlin terminal step, e.g. iterate(), is required to make a request to the remote server. // The full list of Gremlin terminal steps is at https://tinkerpop.apache.org/docs/current/reference/#terminal-steps g.addV("Person").property("Name", "Justin").iterate(); // Add a vertex with a user-supplied ID. g.addV("Custom Label").property(T.id, "CustomId1").property("name", "Custom id vertex 1").iterate(); g.addV("Custom Label").property(T.id, "CustomId2").property("name", "Custom id vertex 2").iterate(); g.addE("Edge Label").from(__.V("CustomId1")).to(__.V("CustomId2")).iterate(); // This gets the vertices, only. GraphTraversal t = g.V().limit(3).elementMap(); t.forEachRemaining( e -> System.out.println(t.toList()) ); cluster.close(); } }Para obter ajuda na conexão com o Neptune com SSL/TLS (o que é obrigatório), consulte Configuração de SSL/TLS.
-
Compile e execute o exemplo usando o seguinte comando do Maven:
mvn compile exec:exec
O exemplo anterior retorna um mapa da chave e dos valores de cada propriedade dos dois primeiros vértices no gráfico usando a travessia g.V().limit(3).elementMap()
. Para consultar outro elemento, substitua-a por outra travessia do Gremlin com um dos métodos de término adequado.
nota
A parte final da consulta do Gremlin, .toList()
, é necessária para enviar a travessia ao servidor para avaliação. Se você não incluir esse método ou outro método equivalente, a consulta não será enviada à instância de banco de dados do Neptune.
Você também deve associar uma terminação adequada ao adicionar um vértice ou uma borda, por exemplo, ao usar a etapa addV( )
.
Os seguintes métodos enviam a consulta à instância de banco de dados do Neptune:
toList()
toSet()
next()
nextTraverser()
iterate()
Configuração de SSL/TLS para o cliente Java do Gremlin
O Neptune exige que o SSL/TLS esteja habilitado por padrão. Normalmente, se o driver Java estiver configurado com enableSsl(true)
, ele poderá se conectar ao Neptune sem precisar configurar um trustStore()
ou um keyStore()
com uma cópia local de um certificado. As versões anteriores do TinkerPop incentivavam o uso do keyCertChainFile()
para configurar um .pem
arquivo armazenado localmente, mas isso se tornou obsoleto e não está mais disponível após a versão 3.5.x. Se você estava usando essa configuração com um certificado público, usando SFSRootCAG2.pem
, agora você pode remover a cópia local.
No entanto, se a instância com a qual você está se conectando não tiver conexão com a Internet para verificar um certificado público, ou se o certificado utilizado não for público, siga estas etapas para configurar uma cópia do certificado local:
Configurar uma cópia de certificado local para habilitar SSL/TLS
-
Baixe e instale o keytool
da Oracle. Isso facilitará muito a configuração do armazenamento de chaves local. -
Baixe um certificado CA
SFSRootCAG2.pem
(o SDK Java do Gremlin exige um certificado para verificar o certificado remoto):wget https://www.amazontrust.com/repository/SFSRootCAG2.pem
-
Crie um armazenamento de chaves em JKS ou PKCS12 formato. Este exemplo usa JKS. Responda às perguntas que se seguem no prompt. A senha que você criar aqui será necessária posteriormente:
keytool -genkey -alias
(host name)
-keyalg RSA -keystore server.jks -
Importe o arquivo
SFSRootCAG2.pem
que você baixou para o repositório de chaves recém-criado:keytool -import -keystore server.jks -file .pem
-
Configure o objeto
Cluster
programaticamente:Cluster cluster = Cluster.build("
(your neptune endpoint)
") .port(8182
) .enableSSL(true) .keyStore(‘server.jks’) .keyStorePassword("(the password from step 2)
") .create();Se desejar, você poderá fazer o mesmo em um arquivo de configuração, como faria com o console do Gremlin:
hosts: [
(your neptune endpoint)
] port:8182
connectionPool: { enableSsl: true, keyStore: server.jks, keyStorePassword:(the password from step 2)
} serializer: { className: org.apache.tinkerpop.gremlin.util.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }}