Usar o cliente do Java para conectar-se a uma instância de banco de dados do Neptune - Amazon Neptune

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 de 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
  1. 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
  2. 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
  3. 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.

  4. Crie um diretório denominado gremlinjava:

    mkdir gremlinjava cd gremlinjava
  5. No diretório gremlinjava, crie um arquivo pom.xml e abra-o em um editor de texto:

    nano pom.xml
  6. 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.6.5</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.6.5</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.

  7. 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/
  8. No diretório src/main/java/com/amazonaws/, crie um arquivo denominado App.java e abra-o em um editor de texto.

    nano src/main/java/com/amazonaws/App.java
  9. Copie o seguinte no arquivo App.java. Substituir your-neptune-endpoint com o endereço da sua instância de banco de dados Neptune. Não inclua o prefixo https:// no método addContactPoint.

    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.driver.Client; 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.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 Neptune SSL comTLS/(o que é obrigatório), consulte. SSL/TLSconfiguração

  10. 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()

SSL/TLSconfiguração para o cliente Gremlin Java

Neptune SSL requer queTLS/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:

Configurando uma cópia local do certificado para habilitarSSL/TLS
  1. Baixe e instale o keytool da Oracle. Isso facilitará muito a configuração do armazenamento de chaves local.

  2. Baixe o certificado SFSRootCAG2.pem CA (o Gremlin Java SDK exige um certificado para verificar o certificado remoto):

    wget https://www.amazontrust.com/repository/SFSRootCAG2.pem
  3. Crie um armazenamento de chaves em JKS qualquer um dos PKCS12 formatos. 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
  4. Importe o arquivo SFSRootCAG2.pem que você baixou para o repositório de chaves recém-criado:

    keytool -import -keystore server.jks -file .pem
  5. 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.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }}