bluemix java_Bluemix 基础:将 SQL 数据库添加到您的 Java 应用程序中
概述
學習如何在 Bluemix 上創(chuàng)建一個 SQL 數據庫,并將其添加到您的 Java Web 應用程序中。探索一個數據驅動、動態(tài)生成的網絡商店,該商店會根據當前庫存水平來改變外觀。使用基于 Web 的 Bluemix SQL 數據庫控制臺查看和維護您的 SQL 數據庫。
本教程是 developerWorks 上的 “Bluemix 基礎” 教程系列的一部分。
您將在本教程中完成的任務
第 1 步. 下載代碼
第 2 步. 將 WAR 文件部署到 Bluemix
第 3 步. 創(chuàng)建一個 SQL Database 服務實例并將它綁定到您的應用程序中
第 4 步. 將該應用程序導入您的 Eclipse 工作區(qū)中
第 5 步. 檢查代碼結構
第 6 步. 創(chuàng)建一個啟用了數據的 WAR 并將它部署到 Bluemix
第 7 步. 使用 JPA 添加數據
第 8 步. 通過 Bluemix SQL 數據庫控制臺訪問 SQL 數據庫
第 9 步. 探索數據驅動的動態(tài)網站生成
其他 Bluemix 服務
測驗時間!
恭喜您 — 您已經完成了 Bluemix 基礎知識的學習!
讓我們開始吧。
在前一篇教程 “ 將大量服務添加到您的應用程序中 ” 中,您已經了解到,服務只是 Bluemix 或第三方合作伙伴托管的代碼,它們可以給您部署的 Bluemix 應用程序增添價值。
服務給您的應用程序帶來了強大的功能,比如數據庫、移動應用程序支持、分析、遺留系統(tǒng)集成和安全管理。從某種意義上講,它們就像是插件,您隨時可以向應用程序添加和綁定服務。
在可用的 Bluemix 服務中,數據庫服務是最常使用的。而 SQL Database 服務是最流行的 Web 應用程序附加功能之一。
為經典的三層架構設計的大部分 Web 應用程序(比如 Java EE 應用程序)都在第三層需要一個數據庫服務:
您的應用程序邏輯在無狀態(tài)的應用程序層運行,而數據存儲在數據庫層。此架構使您只需增加應用程序實例的數量,就可以將應用程序擴展到越來越多的用戶。
本教程將快速概述如何使用 Bluemix 將一個 SQL Database 服務添加到您的 Bluemix 應用程序中。
您將創(chuàng)建 SQL Database 服務的一個實例,并將它綁定到您的 Java 應用程序。然后,您將在數據庫中創(chuàng)建表(也稱為模式)并在其中填入數據。您將了解 Web 應用程序如何能夠根據數據庫中的數據來動態(tài)改變外觀。最后,您將使用 Bluemix 上的 IBM SQL 數據庫控制臺,用它作為訪問您的數據的替代方式。
完成本教程所需的知識
完成本教程所需的軟件
一個 Bluemix 帳戶(注冊您的 免費試用版帳戶 ,或者如果您已經有一個帳戶,請 登錄到 Bluemix )。
在您的計算機上安裝以下軟件:
最新的 Java 開發(fā)工具包 (JDK) 7 更新:Oracle Java SE 開發(fā)工具包 7u79 或 IBM Developer Kit for Linux, Java Edition 。(盡管一個 Java 運行時環(huán)境 [JRE] 已足以運行 Eclipse,但您需要一個完整的 JDK 才能兼容和運行您自己的 Java 代碼。)
Liberty 配置文件 V8.5.5.5(或更高版本)運行時: 您可以直接安裝它,也可以從 Eclipse 下載 Liberty 配置文件安裝程序。如果可以選擇的話,請選擇 web profile.EclipseLink 2.4.x JPA 2.0 support 。您可以從 Eclipse 安裝它。確保您為本教程安裝了 2.4.x,而不是更高的版本。
第 1 步. 下載代碼
單擊此按鈕下載示例 Java Web 應用程序 javasqltutorial.zip 的代碼:
將 javatutorial1.zip 保存到您的計算機并將其解壓縮,其中包括兩個文件:
lauren.war 是一個標準、可部署的 Java EE WAR 文件,它包含構成應用程序的 servlet、JSP 和配置。
llldbproject.zip 是一個 Eclipse 項目歸檔文件,它包含本教程中的完整的 Eclipse 項目。
第 2 步. 將 WAR 文件部署到 Bluemix
Bluemix 上的 SQL Database 服務提供了 IBM DB2 的一個實例,您可以在自己的應用程序中綁定這些實例并立即使用它們。目前的免費 beta 計劃提供了一個支持最多 10 個并發(fā)連接和 100 MB 的實例;其他計劃可提供至多 500 GB 和 100 個并發(fā)連接的選項。
您應該將該應用程序部署到 Bluemix,創(chuàng)建 SQL Database 服務的一個實例并將該實例綁定到應用程序。
如果尚未登錄 Bluemix,請從您的 OS 命令提示符運行以下命令進行登錄:
cf api https://api.ng.bluemix.net/
cf login
運行下面這條命令,將 lauren.war 部署到 Bluemix:
cf push your-app-name -p lauren.war
為應用程序選擇的名稱必須在 Bluemix 上是唯一的;換句話說,它不能被其他任何 Bluemix 用戶使用。如果該名稱(稱為 “route”)已被使用,您將得到一個錯誤。
在瀏覽器中打開 https:// your-app-name .mybluemix.net/ in 來試用您的應用程序,這是一個名為 Lauren's Lovely Landscapes 的簡單的網絡商店。在之前的教程中,您可能已熟悉該應用程序。該商店目前銷售三種印刷品;每種印刷品的頁面顯示了關聯的名稱、圖像和價格。但您會注意到,這個網絡商店中沒有列出任何印刷品!這是因為這個網絡商店將顯示來自某個數據庫的印刷品庫存,但此版本現在未連接到任何數據庫。您將在下一步中建立該連接。
第 3 步. 創(chuàng)建一個 SQL Database 服務實例并將它綁定到您的應用程序中
使用免費 beta 計劃創(chuàng)建 SQL Database 服務的一個實例,并將它命名為 “l(fā)aurenlandscapes”:
cf create-service sqldb sqldb_free laurenlandscapes
將這個 SQL Database 服務實例綁定到運行的應用程序:
cf bind-service your-app-name laurenlandscapes
盡管該數據庫服務現在已綁定到該應用程序,但應用程序中的代碼尚未使用該數據庫。接下來的幾步將創(chuàng)建一個新 WAR 文件,并將其部署到 Bluemix,以解決此問題。
第 4 步. 將該應用程序導入您的 Eclipse 工作區(qū)中
啟動 Eclipse IDE 并選擇 File > Import 。然后選擇 General > Existing Projects into Workspace 。
單擊 Select archive file 選項。
瀏覽到 llldbproject.zip 文件并選中它。
單擊 Finish 。
該項目現在已導入您的工作區(qū)中。您可以在左邊的 Enterprise Explorer 窗格中看到它的結構。您可以注意到,Markers 窗格中列出了各種問題。在學習本教程的剩余內容時,可以安全地忽略它們。
您將在下一步中熟悉該項目和代碼。
第 5 步. 檢查代碼結構
在 Eclipse 中打開您的項目,查看左邊的 Enterprise Explorer 窗格:
展開 Java Resources 查看 Java 源代碼文件。展開 WebContent 查看組成網站的兩個 JSP 文件。
您應該已經在前面的教程中熟悉了此代碼結構。
讓我們來復習一下,針對 Lauren's Lovely Landscapes 商店的一個頁面的 Web 請求首先經過 DispatchServlet,然后轉發(fā)到三個 JSP 頁面之一:alaska.jsp、antartica.jsp 或 australia.jsp,每種銷售的照片印刷品一個頁面。DispatchServlet 將一個 WebsiteTitle 對象附加到該請求,每個 JSP 頁面都使用 WebsiteTitle 來將標題設置為 Lauren's Lovely Landscapes。
您將注意到的一個區(qū)別是:每冊照片的 JSP 不再存在;現在有一個數據庫驅動的 printdisp.jsp 頁面來處理照片印刷品細節(jié)和定價的顯示。
點擊查看大圖
關閉 [x]
DispatchServlet 現在僅轉發(fā)以下兩個 JSP 中的一個:home.jsp 或or printdisp.jsp。針對主頁的請求會在附加一個印刷品列表后被轉發(fā)。然后,home.jsp 根據可用的印刷品來生成主頁。
如果用戶選中任何可用的印刷品,DispatchServlet 會將傳入的請求轉發(fā)給 printdisp.jsp,并向請求附加一個印刷品的信息。然后 printdisp.jsp 動態(tài)地生成該印刷品的標題、jpg 引用、描述和價格。
讓我們試一下。首先,您需要創(chuàng)建一個新的啟用了數據的 WAR,并將它部署到 Bluemix。
第 6 步. 創(chuàng)建一個啟用了數據的 WAR 并將它部署到 Bluemix
從部署的應用程序中獲取綁定的 SQL Database 服務實例的數據庫憑據。
cf env your-app-name
這將顯示可用于已部署的應用程序的環(huán)境變量。綁定的 SQL Database 服務的信息將顯示在 VCAP_SERVICES 中。查找以下類似代碼: "VCAP_SERVICES": {
"sqldb": [
{
"credentials": {
"db": "SQLDB",
"host": "75.126.1.1",
"hostname": "75.126.1.1",
"jdbcurl": "jdbc:db2://75.126.1.1:50000/SQLDB",
"password": "3pKxxxxxxx",
"port": 50000,
"uri": "db2://user1234:3pKxxxxxxx@75.126.1.1:50000/SQLDB",
"username": "user1234"
},
…
返回到 Eclipse 中,查找 persistence.xml 文件。您可能需要展開 JPA Content,或者查看 Java Resources > src > META-INF 下的內容。打開 persistence.xml 并修改以下屬性:
javax.persistence.jdbc.url
javax.persistence.jdbc.user
javax.persistence.jdbc.password
更改這些屬性值,使之與您的 VCAP_SERVICES 匹配。對于 javax.persistence.jdbc.url,確保僅修改了該屬性值的第一部分,將其替換為來自 VCAP_SERVICES 的 “jdbcurl” 字段。
這些更改會將數據庫訪問代碼鏈接到您創(chuàng)建的 SQL Database 服務實例。
重新構建項目。從 Eclipse 菜單中選擇 Project > Build All 。如果 “Build All” 是灰色的,請確保 Project > Build Automatically 未 選中。
在 Eclipse 中選擇 File > Export 來創(chuàng)建一個新 WAR 文件。然后,從菜單中選擇 Web > WAR File 。瀏覽到您想要放置 WAR 文件的目標文件夾,并將該文件命名為 “l(fā)aurendb.war”。單擊 Finish 生成該 WAR 文件。
將這個啟用了數據的 WAR 文件部署到 Bluemix:
cf push your-app-name -p laurendb.war
在瀏覽器中打開 https:// your-app-name .mybluemix.net/ 來試用您的應用程序。您會注意到,這個網絡商店中沒有列出任何印刷品!這是因為盡管您創(chuàng)建了 SQL Database 服務實例,并將其綁定到了應用程序,但它目前是空的。下一步將向數據庫添加數據并填充到商店中。
點擊查看大圖
關閉 [x]
第 7 步. 使用 JPA 添加數據
EclipseLink 為您的 Eclipse 添加了 Java Persistence API (JPA) 支持。對于本教程,您需要使用 EclipseLink 2.4.x 版,該版本兼容 jpa-2.0 — 這是唯一得到目前 Bluemix 上的 Liberty Profile 服務器可靠支持的版本。
JPA 自動化了在對象訪問調用與關系數據庫查詢之間轉換的單調的編碼工作。自動化方式是,在您創(chuàng)建的帶注釋的傳統(tǒng) Java 對象 (POJO) 與位于一個關系數據庫中的表中的行之間建立映射。
一個帶注釋的 POJO 在 JPA 中是一個實體。借助 JPA EntityManager,您可以填充 POJO 字段,然后持久保存它。這會在關聯的關系數據庫中實際寫入或更新行。您還可以借助 EntityManager,使用 POJO 的實例從表中抓取行。
對于這個網絡商店應用程序,Print.java(在 Java Resources > src > com.ibm.devworks.examples.lll 下)包含帶注釋的 POJO 定義,并表示 Lauren's 網絡商店中有貨的一個印刷品。這個類具有以下屬性,它們與數據庫字段具有一對一的映射關系:
POJO 與關系數據庫之間的鏈接已在 持久性單元 中介紹。您之前編輯的 persistence.xml 文件包含一個持久性單元的定義。除了 persistence.xml 之外,持久性單元可能還涉及其他映射文件。
title 是該印刷品的標題
description 是該印刷品的產品描述
imgsrc 是包含該印刷品的 JPEG 文件的名稱
price 是該印刷品的美分價格
quan 是目前庫存的該印刷品冊數
例如,Print.java 通過 @Entity 注釋從一個 POJO 轉換為一個 JPA 實體:
@Entity
public class Print implements Serializable {
@Id
@GeneratedValue
private long id;
private String title;
private String description;
private String imgsrc;
private float price;
private int quan;
private static final long serialVersionUID = 1L;
這個 POJO 直接對應于 SQL 數據庫中的一個 print 表。這個 POJO 的實例可映射到該表中的行。
數據定義語言或 DDL 通常為 SQL 數據庫采用 CREATE TABLE 語句。通過檢查一個實體(帶注釋的 POJO),然后生成一個 SQL 語句,JPA 可以自動生成關聯的 SQL 表。表和字段名稱可以通過更多注釋來自動或顯式地建立映射。
在 Eclipse 項目中,查找 Java Resources > src > com.ibm.devworks.example.java.lll > DataSeeder.java 。右鍵單擊該文件并選擇 Run As > Java Application
。這個類有一個 main() 方法,它:
丟棄數據庫中的所有現有的 print 表
根據帶注釋的 POJO 來創(chuàng)建 prints 表
使用三種印刷品的數據填充該表
所有上述操作都通過 DDL 在 JPA 中完成。例如,丟棄和創(chuàng)建表的代碼通過 EclipseLink 的 DDL 生成功能來創(chuàng)建:
propertiesMap.put(PersistenceUnitProperties.DDL_GENERATION,
PersistenceUnitProperties.DROP_AND_CREATE);
使用 Alaska 印刷品記錄填充 print 表的代碼類似于( em 是 JPA EntityManager): print = new Print();
print.setDescription("Lauren loves this photo even though she wasn't present when the
photo was taken. Her husband took this photo on a guys' weekend in Alaska.");
print.setTitle("Alaska");
print.setImgsrc("alaska.jpg");
print.setPrice(75);
print.setQuan(1);
em.persist(print);
在您的瀏覽器中重新加載 https:// your-app-name .mybluemix.net/。您現在應該看到商店中有貨的印刷品,但可以看到 Australia 印刷品使用紅色突出顯示,而且無法選中。這是因為該印刷品脫銷了。如果查看 DataSeeder.java 中的代碼,就會看到 Australia 印刷品的數量被設置為 0。
點擊查看大圖
關閉 [x]
第 8 步. 通過 Bluemix SQL 數據庫控制臺訪問 SQL 數據庫
登錄到您的 Bluemix 儀表板。
找到您創(chuàng)建的 laurenlandscapes SQL Database 服務。單擊左邊窗格中的 SERVICES 來展開它,選擇 laurenlandscapes 。
點擊查看大圖
關閉 [x]
單擊 Launch 按鈕。這會啟動您的實例來查看和操作它。在這里,可從 Excel 電子表格將數據加載到您的 SQL 數據庫中。
點擊查看大圖
關閉 [x]
現在單擊 Work with Tables ,然后選擇 PRINT 。在右邊窗格中選擇 Browse Data 。您現在會看到 print 表中的所有行,這些行是 DataSeeder 在第 7 步中插入的。
點擊查看大圖
關閉 [x]
第 9 步. 探索數據驅動的動態(tài)網站生成
在本教程的最后一步中,假設一批新的 Australia 印刷品已到貨,所以您需要更新數據庫中的可用數量。然后,您會看到網站在動態(tài)地發(fā)生變化,以包含新入庫的商品。
在 Eclipse 項目中,在 Java Resources > src > com.ibm.devworks.examples.java.lll 中查找 AddAustraliaPrint.java。
右鍵單擊 AddAustraliaPrint.java,然后選擇 Run As > Java Application 。這會將印刷品數量從 0 增加到 3。
在您的瀏覽器中重新加載 https:// your-app-name .mybluemix.net/。您現在已看到所有印刷品都有貨了!Australia 印刷品不再顯示為紅色。嘗試選擇它來查看細節(jié)。
AddAustraliaPrint.java 的操作方式類似于 DataSeeder.java。在一個 JPA 事務內,它抓取并尋找 Australia 印刷品,更新它的數量,然后將它持久保存回 SQL 數據庫中:
點擊查看代碼清單
關閉 [x]
List prints = em.createQuery("SELECT p FROM Print p ORDER BY p.id").getResultList();
for(Print print : prints ) {
if (print.getTitle().equals("Australia")) {
print.setQuan(3);
em.persist(print);
break;
}
}
em.getTransaction().commit();
em.close();
如果想知道 home.jsp 如何處理脫銷印刷品的動態(tài)呈現,您可在 JSP 中找到 JSTL 代碼 — 結合使用 outofstock CSS 樣式類來更改它的外觀:
${print.title} - (out of stock)
${print.title}
其他 Bluemix 服務
除了 SQL Database 服務之外,Bluemix 還提供了許多有趣的服務,它們可以給您的應用程序增添價值和特性。例如, IBM Watson 的許多學習和認知功能 現在都能夠以 Bluemix 服務的形式提供。您可能想瀏覽 Bluemix 服務目錄 ,想象您可添加到已部署的 Web 應用程序中的所有新特性。
測驗
測試您在本教程中學到的知識。答案在下方。
Bluemix 上的 SQL Database 服務獲得了哪項技術的實際支持:
Oracle 數據庫
MySQL 數據庫
Elasticsearch
IBM DB2
IBM Cloudant
帶注釋的 Java POJO 在 JPA 中稱為:
ORM
關系映射
實體管理器
實體
持久性單元
JPA 的全稱是:
Java Programming Authority
Java Persistence API
Java Python Algol
Java Persisted Archives
Java Persisting Adapter
定義 JPA 持久性單元的文件是:
jpa_config.xml
persistence.xml
unit.xml
server.xml
web.xml
通過 Bluemix SQL 數據庫控制臺,您可以:
將數據從 Excel 電子表格導入到 SQL 表中
查看加載到表中的數據
對加載到表中的數據運行查詢
查看 SQL 表的模式定義
上述所有選項
測驗的答案
1. d,2. d,3. b,4. b,5. e
結束語
在本教程中,您:
創(chuàng)建了一個 Bluemix SQL Database 服務實例
將該 SQL 數據庫實例綁定到了一個 Web 應用程序
使用 JPA 在 SQL 數據庫中創(chuàng)建了表并填充了行
配置了一個 Web 應用程序來使用 SQL Database 服務實例
通過 Bluemix SQL 數據庫控制臺管理了一個 SQL 數據庫并查看了數據
探索并了解了 JPA POJO 與關系數據庫的映射(對象-關系映射或 ORM)的力量
學習了如何創(chuàng)建數據驅動的動態(tài) Web 應用程序
本教程是 developerWorks 上的 “Bluemix 基礎” 教程系列的最后一篇!如果您已經完成了所有這些教程,那么您已經出師了!
要獲取穩(wěn)定的教程和技術資源流來幫助您繼續(xù)使用 Bluemix 進行學習、開發(fā)和連接,請參閱 developerWorks 上的Bluemix 頁面。
總結
以上是生活随笔為你收集整理的bluemix java_Bluemix 基础:将 SQL 数据库添加到您的 Java 应用程序中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL的常见命令
- 下一篇: head()函数python_Pytho