使用 Java 客户端连接到 Neptune 数据库实例 - Amazon Neptune

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Java 客户端连接到 Neptune 数据库实例

以下部分将引导您完成一个完整的 Java 示例的运行,该示例连接到 Neptune 数据库实例并使用 Apache Gremlin 客户端执行 Gremlin 遍历。 TinkerPop

必须从与您的 Neptune 数据库实例位于同一虚拟私有云 (VPC) 中的 Amazon EC2 实例中按照这些说明操作。

使用 Java 连接到 Neptune
  1. 在您的 EC2 实例上安装 Apache Maven。首先,输入以下命令以添加具有 Maven 程序包的存储库:

    sudo wget https://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

    输入以下命令以设置该程序包的版本号:

    sudo sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo

    然后,使用 yum 安装 Maven:

    sudo yum install -y apache-maven
  2. 安装 Java。Gremlin 库需要 Java 8 或 11。您可以按如下方式安装 Java 11:

    • 如果您使用的是 Amazon Linux 2 (AL2)

      sudo amazon-linux-extras install java-openjdk11
    • 如果您使用的是 Amazon Linux 2023 (AL2023)

      sudo yum install java-11-amazon-corretto-devel
    • 对于其它发行版,请使用以下适当的发行版:

      sudo yum install java-11-openjdk-devel

      或者:

      sudo apt-get install openjdk-11-jdk
  3. 将 Java 11 设置为 EC2 实例上的默认运行时系统:输入以下内容将 Java 8 设置为 EC2 实例上的默认运行时系统:

    sudo /usr/sbin/alternatives --config java

    在系统提示时,输入 Java 11 的版本号。

  4. 创建名为 gremlinjava 的新目录:

    mkdir gremlinjava cd gremlinjava
  5. gremlinjava 目录中,创建 pom.xml 文件,然后在文本编辑器中打开它:

    nano pom.xml
  6. 将以下内容复制到 pom.xml 文件中并保存它:

    <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>
    注意

    如果您要修改现有的 Maven 项目,则所需依赖项将在上述代码中突出显示。

  7. 通过在命令行中键入以下命令来为示例源代码创建子目录 (src/main/java/com/amazonaws/):

    mkdir -p src/main/java/com/amazonaws/
  8. src/main/java/com/amazonaws/ 目录中,创建名为 App.java 的文件,然后在文本编辑器中打开它。

    nano src/main/java/com/amazonaws/App.java
  9. 将以下内容复制到 App.java 文件中。your-neptune-endpoint替换为您的 Neptune 数据库实例的地址。请不要addContactPoint 方法中包括 https:// 前缀。

    注意

    有关查找 Neptune 数据库实例的主机名的信息,请参阅连接到 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(); } }

    有关使用 SSL/TLS(这是必需的)连接到 Neptune 的帮助,请参阅SSL/TLS 配置

  10. 使用以下 Maven 命令编译并运行示例:

    mvn compile exec:exec

上述示例通过使用 g.V().limit(3).elementMap() 遍历返回图形中前两个顶点的每个属性的键和值的映射。要查询其他内容,请将其替换为具有其中一种适当的结尾方法的其他 Gremlin 遍历。

注意

要将遍历提交到服务器进行评估,需要 Gremlin 查询的最后一部分 .toList()。如果您未包含该方法或其它等效方法,该查询将不会提交到 Neptune 数据库实例。

在添加顶点或边缘时,您还必须附加适当的结尾,例如当您使用 addV( ) 步骤时。

以下方法将查询提交到 Neptune 数据库实例:

  • toList()

  • toSet()

  • next()

  • nextTraverser()

  • iterate()

Gremlin Java 客户端的 SSL/TLS 配置

Neptune 要求默认情况下启用 SSL/TLS。通常,如果使用 enableSsl(true) 配置 Java 驱动程序,则它可以连接到 Neptune,而无需使用证书的本地副本设置 trustStore()keyStore()。早期版本的 TinkerPop 鼓励使用keyCertChainFile()来配置本地存储的.pem文件,但该文件已被弃用,在 3.5.x 之后不再可用。如果您通过 SFSRootCAG2.pem 将该设置与公有证书结合使用,则现在可以删除本地副本。

但是,如果您连接的实例没有用来验证公有证书的互联网连接,或者您使用的证书不是公有证书,则可以采取以下步骤来配置本地证书副本:

设置本地证书副本以启用 SSL/TLS
  1. 从 Oracle 下载并安装 keytool。这将使设置本地密钥存储变得容易得多。

  2. 下载 SFSRootCAG2.pem CA 证书(Gremlin Java SDK 需要证书来验证远程证书):

    wget https://www.amazontrust.com/repository/SFSRootCAG2.pem
  3. 以 JKS 或 PKCS12 格式创建密钥存储。此示例使用 JKS。根据提示回答接下来的问题。稍后将需要您在此处创建的密码:

    keytool -genkey -alias (host name) -keyalg RSA -keystore server.jks
  4. 将您下载 SFSRootCAG2.pem 的文件导入到新创建的密钥存储中:

    keytool -import -keystore server.jks -file .pem
  5. 以编程方式配置 Cluster 对象:

    Cluster cluster = Cluster.build("(your neptune endpoint)") .port(8182) .enableSSL(true) .keyStore(‘server.jks’) .keyStorePassword("(the password from step 2)") .create();

    如果您愿意,您可以在配置文件中做同样的事情,就像您在 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 }}