Azure DocumentDB(2)小試 DocumentDB Node.js SDK << 前情
前情提要
在 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:
按下上次釘選在 Startboard 上的 Browse DocumentDB Account 白色方塊,或是按下畫面左邊的 Browse 按鈕,選取 DocumentDB accounts 選項,就會出現目前這個 Azure 帳號申請的所有 DocumentDB 帳號:
再按下上次申請的 DocumentDB 帳號,也就是畫面中的 monster ,就會看到 monster 帳號的詳細內容,比方說最近的使用狀況:
把 Blade 往下捲一捲,還可以看到這個帳號目前建立了幾個 Database,如果上次有跟著玩過一次 Node.js 範例的話,記得把 Database 刪除喔:
如果按下 Blade 上面藍色的 Quick start 圖示,就會再展開另一個 DocumentDB Quick Start 的 Blade,提供 DocumentDB 的各種資訊:
這時候請按下第一個部分 Start Coding 的 Get your URI and key 連結,記下 URI 與 Primary 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 程式,也提供一些管理的功能:
Javadoc 說明文件的位置是 http://dl.windowsazure.com/documentdb/javadoc/ :
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 :
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
- 有
BoundedStaleness 、Eventual 、Session 、與 Strong 四種
DocumentClient 類別
DocumentClient 類別:
- 代表 DocumentDB 的 Client 端
- 初始化的時候需要設定
ConnectionPolicy 與 ConsistencyLevel
- 提供 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 都已經新增成功:
網頁上 Database 與 Collection 名稱旁邊的資源 ID,就是剛剛印出來的 Self Link。
跟 MongoDB 不一樣的地方,就是 DocumentDB 可以用 SELECT * FROM c 這種很 SQL 的方式來查詢 Document,還記得嗎?
|