DB2 Everyplace 是 IBM 普適運算解決方案的核心組件,它讓銷售人員、稽核人員、技術支援工程師、醫師等高機動性專業人員,能在辦公室外隨時存取關鍵業務數據。該產品最大亮點在於對各類行動裝置的廣泛支援,本文將深入探討如何針對 MIDP (Mobile Information Device Profile) 相關裝置,開發基於 DB2 Everyplace 的應用程式。
同步資料來源與 DB2 Everyplace 同步伺服器建議部署於不同實體機器,但為開發測試方便,本文採用單機環境:
注意:實際大量數據生產環境中,同步資料來源與同步伺服器應分開部署。同步資料來源可採用 DB2 UDB、Oracle、MS SQL Server 等,但 DB2 Everyplace 同步伺服器本身僅支援 DB2 UDB V7.2.x 版本。
目標裝置需預先安裝 DB2 Everyplace 同步客戶端軟體與 WebSphere Micro Environment (WME) V5.5 執行環境。
採用 WebSphere Studio Device Developer (WSDD) V5.0 作為整合開發環境 (IDE),搭配 WebSphere Micro Environment (WME) V5.5 作為執行測試環境。WSDD 專為行動裝置開發設計,可作為 WebSphere Studio Application Developer 的外掛模組使用。
MIDP (Mobile Information Device Profile) 定義了針對行動資訊裝置 (主要為智慧型手機與具無線通訊功能的 PDA) 的圖形介面、輸入處理、持久化儲存、無線網路連線上的訊息處理 (如簡訊)、安全性等 API,並充分考量螢幕大小與記憶體限制。本文假設讀者已具備基礎 MIDP 開發知識。
DB2 Everyplace V8.1 官方文件主要針對 Sun Wireless Toolkit (WTK) 環境、Apache Tomcat 4.0.x 應用伺服器、一般 MIDP 手機裝置。但實務專案中,作者成功驗證了在 WME 5.5 環境、WebSphere Application Server V4.0.2、Pocket PC / Palm OS 裝置 上運行,並相容於 WTK 手機模擬器。
執行腳本 \\DB2Everyplace\\Server\\installableAPPS\\nt\\dsy_was40_install.bat,在 WebSphere 節點下建立應用程式伺服器。指令格式:
dsy_was40_install.bat "WAS安裝目錄" "WAS節點名" "%DSYINSTDIR%" "%DSYSQLLIBINSTDIR%"
常見問題排解:若 IBM_WS_Admin 服務無法啟動,通常因 WAS 需使用 JDBC 2.0。解決步驟:停止「DB2 UDB JDBC Applet Server 服務」→ 執行 SQLLIB\\Java12\\usejdbc2.bat 升級 JDBC → 重啟該服務。
安裝「IBM DB2 Everyplace 企業應用程式」至步驟 1 建立的應用程式伺服器,並重新產生 Web 伺服器外掛模組。
在應用程式伺服器屬性中進行關鍵設定:
修改完成後點擊「更新」儲存。
手動配置業務邏輯 Servlet:
FilterServlet.jar 至 ...\\IBM_DB2_Everyplace.war\\WEB-INF\\libweb.xml,在 <servlet> 區塊加入:<servlet id="Servlet_20"><servlet-name>MIDP Filter Servlet</servlet-name><servlet-class>com.ibm.mobileservices.servlet.ServletDriver</servlet-class></servlet>
<servlet-mapping> 區塊加入:<servlet-mapping id="ServletMapping_20"><servlet-name>MIDP Filter Servlet</servlet-name><url-pattern>/db2efilter/*</url-pattern></servlet-mapping>
瀏覽器訪問 https://syncservername:9080/db2e/db2eFilter,若顯示成功畫面即表示配置完成。
將 WME 5.5 部署至目標裝置,詳細步驟請參閱 WSDD 線上文件。
DB2 Everyplace 為 MIDP 提供獨立的同步引擎介面,基本呼叫步驟如下:
com.ibm.mobileservices.isync.*, com.ibm.mobileservices.isync.event.*, com.ibm.mobileservices.isync.midp.*ISyncListener 介面的 eventIssued 方法以捕獲同步事件MIDPISyncProvider 實例SynchronizationService) 實例ConfigurationStore) 實例SynchronizationDriver) 實例MIDPISyncProvider 資源完整範例程式碼請參閱附件 1。
MIDP 裝置採用 RMS (Record Management System) 作為持久化儲存。DB2 Everyplace V8.1 在 RMS 基礎上封裝了更易用的 FastRecordStore 介面,核心概念:
FastRecordStore 實例對應一張資料表TableMetaData 物件描述結構描述MIDPISyncProvider 取得資料表結構描述物件 (TableMetaData)FastRecordStore)FastRecordEnumeration 遍歷記錄TableMetaData 操作每筆記錄,常用串流類別:ByteArrayInputStream, DataInputStream, ByteArrayOutputStream, DataOutputStream
每筆記錄開頭有一個旗標位元組 (Flag Byte),初始為 0,開發者可設為 ISync.ROW_ADDED, ISync.ROW_CHANGED, ISync.ROW_DELETED 等值,同步引擎依旗標執行插入/更新/刪除。欄位值依結構描述順序排列,可為空的欄位前會有一個布林旗標指示是否為 NULL。
本地儲存採用位元操作編碼:
詳細解析程式碼請參閱附件 2。