使用 Java 連線至 Neptune 資料庫執行個體 - Amazon Neptune

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Java 連線至 Neptune 資料庫執行個體

以下章節將逐步引導您完成連線到 Neptune 資料庫執行個體並使用 Apache Grimlin 用戶端執行 Gemlin 周遊的完整 Java 範例的執行過程。 TinkerPop

必須遵循與 Neptune 資料庫EC2執行個體位於相同虛擬私有雲 (VPC) 中的 Amazon 執行個體執行這些指示。

使用 Java 連線至 Neptune
  1. 在您的EC2實例上安裝阿帕奇 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
    • 如果您使用的AL2是 Amazon

      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 檔案。Replace (取代) 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()

SSL/小鬼 TLS Java 客戶端的配置

Neptune 需要默認啟用SSL/TLS。一般而言,如果 Java 驅動程式是使用 enableSsl(true) 設定的,它可以連線至 Neptune,而不必設定 trustStore()keyStore(),其中具有憑證的本機副本。早期版本的 TinkerPop 鼓勵使用keyCertChainFile()來配置本地存儲的.pem文件,但該文件已被棄用,並且在 3.5.x 之後不再可用。如果您是使用該設定,搭配使用 SFSRootCAG2.pem 的公有憑證,您現在可以移除本機副本。

不過,如果您連線的執行個體沒有透過其驗證公有憑證的網際網路連線,或者如果您使用的憑證不是公有的,則您可以採取下列步驟來設定本機憑證副本:

設定本機憑證副本以啟用SSL/TLS
  1. 從 Oracle 下載並安裝 keytool。這將使設定本機金鑰存放區更加容易。

  2. 下載 SFSRootCAG2.pem CA 證書(小靈 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();

    如果想要的話,您可以在組態檔案中執行相同的操作,就像您使用 Gemlin 主控台所做一樣:

    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 }}