Azure DocumentDB(3)小試 DocumentDB Java SDK by MonsterSupreme | CodeData
top

Azure DocumentDB(3)小試 DocumentDB Java SDK

分享:

Azure DocumentDB(2)小試 DocumentDB Node.js SDK << 前情

DocumentDB_01

前情提要

Azure DocumentDB(2)小試 DocumentDB Node.js SDK 中,我們簡單地介紹了一下,如何透過 Azure DocumentDB 的 Node.js SDK,在 DocumentDB 上新增 Database、新增 Collection,與新增 Document。今天,我們要繼續帶著大家寫點程式,透過 Azure DocumentDB 前一陣子公布的 Java SDK,把上次的程式用 Java 改寫一遍。

基本資料

連上 Microsoft Azure 的 Management Preview Portal

Azure Management Preview Portal

按下上次釘選在 Startboard 上的 Browse DocumentDB Account 白色方塊,或是按下畫面左邊的 Browse 按鈕,選取 DocumentDB accounts 選項,就會出現目前這個 Azure 帳號申請的所有 DocumentDB 帳號:

DocumentDB Accounts

再按下上次申請的 DocumentDB 帳號,也就是畫面中的 monster,就會看到 monster 帳號的詳細內容,比方說最近的使用狀況:

Account Summary 1

把 Blade 往下捲一捲,還可以看到這個帳號目前建立了幾個 Database,如果上次有跟著玩過一次 Node.js 範例的話,記得把 Database 刪除喔:

Account Summary 2

如果按下 Blade 上面藍色的 Quick start 圖示,就會再展開另一個 DocumentDB Quick Start 的 Blade,提供 DocumentDB 的各種資訊:

Quick Start

這時候請按下第一個部分 Start Coding 的 Get your URI and key 連結,記下 URI 與 Primary Key:

URI and Key

monster 帳號來說:

  • URI 是 http://monster.documents.azure.com:443/
  • Primary Key 是 G60G..........................==
  • Secondary Key 是 hSK8........................==

Primary Key 與 Secondary Key 只要記一組就可以。

Java SDK

2014 年 12 月,Azure DocumentDB 在 GitHub 上頭公布了 Microsoft Azure DocumentDB Java SDK,不只可以撰寫 DocumentDB 的 CRUD 程式,也提供一些管理的功能:

Java SDK 01

Javadoc 說明文件的位置是 http://dl.windowsazure.com/documentdb/javadoc/

Java SDK 02

Maven 的 Dependency 寫法如下,目前最新是 0.9.4 版:

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-documentdb</artifactId>
    <version>0.9.4</version>
</dependency>

Gradle 的寫法如下:

dependencies {
    compile "com.microsoft.azure:azure-documentdb:0.9.4"
}

Java SDK 最基本的切入點,就是底下這幾個 Java 類別:

  • DocumentClient 類別
  • Database 類別
  • DocumentCollection 類別
  • Document 類別

底層搭配使用的 JSONObject 類別,是 Douglas Crockford 提供的 JSON-java 專案裡頭的 org.json.JSONObject

JSONObject

Database 類別

Database 類別:

  • 代表一個 DocumentDB 的 Database,定義或使用 Database 的時候都需要用到
  • 透過 JSON 字串或 JSONObject 進行初始化,也可以透過 Setter 分別設定

DocumentCollection 類別

DocumentCollection 類別:

  • 代表 Database 裡頭的某一個 Collection,定義或使用 Collection 的時候都需要用到
  • 過 JSON 字串或 JSONObject 進行初始化,也可以透過 Setter 分別設定

Document 類別

Document 類別:

  • 代表一個 Document,定義或使用 Document 的時候都需要用到
  • 過 JSON 字串或 JSONObject 進行初始化,也可以透過 Getter/Setter 存取內容

ConnectionPolicy 類別

ConnectionPolicy 類別:

  • 代表 Client 端的 Connection Policy
  • static ConnectionPolicy GetDefault():如果不需調整的話,直接取得預設的 Connection Policy 即可

ConsistencyLevel 列舉

ConnectionPolicy 類別:

  • 代表 Client 端支援的 Consistency Level
  • BoundedStalenessEventualSession、與 Strong 四種

DocumentClient 類別

DocumentClient 類別:

  • 代表 DocumentDB 的 Client 端
  • 初始化的時候需要設定 ConnectionPolicyConsistencyLevel
  • 提供 CRUD 相關功能

建立 Java 應用程式

Java SDK 最簡單的使用方式,就是建立一個普通的 Java 應用程式,比方說底下的 hellojavasdk,順便規劃一下套件名稱:

$ mkdir hellojavasdk
$ cd hellojavasdk
$ mkdir -p src/main/java/com/monster/client

如果以 Gradle 做為 Build Tool 的話,就在 hellojavasdk 目錄下新增 build.gradle 檔案,內容如下:

apply plugin: "java"
apply plugin: "application"

mainClassName = "com.monster.client.JavaClient"

jar {
    baseName = "hellojavasdk"
    version = "1.0"
}

repositories {
    mavenCentral()
}

dependencies {
    compile "com.microsoft.azure:azure-documentdb:0.9.4"
}

task wrapper(type: Wrapper) {
    gradleVersion = "2.3"
}

然後在 client 目錄下新增 JavaClient 檔案,內容如下:

package com.monster.client;

import com.microsoft.azure.documentdb.*;

public class JavaClient {
    private static final String URI = "http://monster.documents.azure.com:443/";
    private static final String KEY = "G60G..................................==";
    private static final String DATABASE_ID = "cities";
    private static final String COLLECTION_ID = "zips";

    public static void main(String[] args) {
        try {
            // Database Definition
            Database dbDefinition = new Database();
            dbDefinition.setId(DATABASE_ID);

            // Collection Definition
            DocumentCollection collectionDefinition = new DocumentCollection();
            collectionDefinition.setId(COLLECTION_ID);

            // Document Definition
            Document docDefinition = new Document();
            docDefinition.set("id", "67423");
            docDefinition.set("city", "BEVERLY");
            docDefinition.set("loc", new double[] {-97.981785, 38.984416});
            docDefinition.set("pop", 389);
            docDefinition.set("state", "KS");

            // Create DocumentDB Client
            DocumentClient client =
                new DocumentClient(URI, KEY, ConnectionPolicy.GetDefault(), ConsistencyLevel.Session);

            // Creeate Database, Collection, and Document
            Database db = client.createDatabase(dbDefinition, null).getResource();
            System.out.println("Database created: " + db.getSelfLink());

            DocumentCollection collection =
                client.createCollection(db.getSelfLink(), collectionDefinition, null).getResource();
            System.out.println("Collection created: " + collection.getSelfLink());

            Document doc =
                client.createDocument(collection.getSelfLink(), docDefinition, null, true).getResource();
            System.out.println("Document created: " + doc.toString());
        }
        catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }
}

整個專案的目錄架構如下:

$ tree
.
└── hellojavasdk
    ├── build.gradle
    └── src
        └── main
            └── java
                └── com
                    └── monster
                        └── client
                            └── JavaClient.java

7 directories, 2 files

執行 JavaClient 程式之後,Console 可以看到底下的訊息:

Executing: gradle :run

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:run
Database created: dbs/2WhQAA==/
Collection created: dbs/2WhQAA==/colls/2WhQAOMCQwA=/
Document created: {"pop":389,"loc":[-97.981785,38.984416],"_attachments":"attachments/","_rid":"2WhQAOMCQwABAAAAAAAAAA==",
"city":"BEVERLY","id":"67423","state":"KS","_self":"dbs/2WhQAA==/colls/2WhQAOMCQwA=/docs/2WhQAOMCQwABAAAAAAAAAA==/",
"_etag":"\"00000400-0000-0000-0000-54fd223a0000\"","_ts":1425875514}

BUILD SUCCESSFUL

Total time: 4.423 secs

Database 與 Collection 印出的內容,就是前面程式所謂的 Self Link。

連上 Microsoft Azure 的 Management Preview Portal,也可以看到 cities Database 與 zips Collection 都已經新增成功:

Portal 02

網頁上 Database 與 Collection 名稱旁邊的資源 ID,就是剛剛印出來的 Self Link。

跟 MongoDB 不一樣的地方,就是 DocumentDB 可以用 SELECT * FROM c 這種很 SQL 的方式來查詢 Document,還記得嗎?

Portal 03

分享:
按讚!加入 CodeData Facebook 粉絲群

相關文章

留言

留言請先。還沒帳號註冊也可以使用FacebookGoogle+登錄留言

關於作者

目前從事教育訓練工作。自認為會的技術不多,但是學不會的也不多,最擅長把老闆交代的工作,以及找不到老師教的技術,想辦法變成自己的專長。

熱門論壇文章

熱門技術文章