【摘 要】針對存在的移動ERP辦公業(yè)務(wù)需求,設(shè)計(jì)一種基于數(shù)據(jù)訪問中間件的移動ERP協(xié)同辦公系統(tǒng)平臺。
【關(guān)鍵詞】數(shù)據(jù)訪問中間件;移動ERP;協(xié)同辦公; JSON
本文設(shè)計(jì)一種基于數(shù)據(jù)訪問中間件的移動ERP協(xié)同辦公系統(tǒng)平臺。
一、數(shù)據(jù)訪問中間件
數(shù)據(jù)訪問中間件是位于應(yīng)用程序和數(shù)據(jù)庫之間的一類服務(wù)程序,主要用于實(shí)現(xiàn)應(yīng)用程序與本地或異地的同異構(gòu)數(shù)據(jù)源的數(shù)據(jù)交換,即屏蔽數(shù)據(jù)庫底層細(xì)節(jié)問題。
考慮移動應(yīng)用開發(fā)的復(fù)雜性及移動終端系統(tǒng)與計(jì)算機(jī)集成的復(fù)雜性,本文選擇數(shù)據(jù)訪問中間件作為移動ERP與異地ERP數(shù)據(jù)庫進(jìn)行數(shù)據(jù)通信的橋梁。
二、移動ERP協(xié)同辦公平臺框架設(shè)計(jì)
本文設(shè)計(jì)的基于數(shù)據(jù)訪問中間件的移動ERP協(xié)同辦公平臺框架采用三層架構(gòu):移動客戶端、應(yīng)用服務(wù)器端和數(shù)據(jù)庫服務(wù)器端。中間件有多項(xiàng)實(shí)現(xiàn)技術(shù),其中Web服務(wù)技術(shù)是基于SOAP等技術(shù),使用的都是標(biāo)準(zhǔn)的協(xié)議,如HTTP、TCP/IP等,因此Web服務(wù)可以非常簡便的方式進(jìn)行遠(yuǎn)程傳輸。而J2EE是一個開放的、基于標(biāo)準(zhǔn)的開發(fā)和部署平臺,主要用于在服務(wù)器端開發(fā)可伸縮、可遷移、以數(shù)據(jù)庫為核心的企業(yè)級應(yīng)用[3]。因此本文設(shè)計(jì)基于Web服務(wù)的解決方案,采用J2EE開發(fā)移動ERP協(xié)同辦公平臺的數(shù)據(jù)訪問中間件。
三、數(shù)據(jù)訪問中間件服務(wù)接口層設(shè)計(jì)
(一)接收請求
當(dāng)移動ERP客戶端通過HTTP協(xié)議發(fā)送數(shù)據(jù)請求時(shí),服務(wù)接口接收請求,并調(diào)用HttpServletRequest對象來獲取請求數(shù)據(jù)。
(二)解析請求
服務(wù)接口判斷請求的類型,若是查詢請求則生成相應(yīng)SELECT語句,調(diào)用數(shù)據(jù)處理層數(shù)據(jù)查詢類訪問ERP數(shù)據(jù)庫查詢數(shù)據(jù);若是操作請求則生成相應(yīng)的INSERT、UPDATE、DELETE語句,調(diào)用數(shù)據(jù)處理類操作ERP數(shù)據(jù)庫處理相應(yīng)業(yè)務(wù)請求。
(三)數(shù)據(jù)格式轉(zhuǎn)換
JSON是一種輕量級的數(shù)據(jù)交換格式,其數(shù)據(jù)量小可減少占用的帶寬,使跨平臺數(shù)據(jù)傳輸變得相對容易[4] 。數(shù)據(jù)格式轉(zhuǎn)換模塊負(fù)責(zé)將返回結(jié)果數(shù)據(jù)轉(zhuǎn)換為JSON格式,并返回給移動ERP終端。
將ResultSet結(jié)果集轉(zhuǎn)化為JSON格式的關(guān)鍵代碼如下:
// 定義JSON數(shù)組、對象
JSONArray myArray = new JSONArray();
JSONObject jsonObj = new JSONObject();
// 使用ResultSetMetaData獲取列信息
ResultSetMetaData metaData = rs.getMetaData();
int colCount = metaData.getColumnCount();
// 遍歷ResultSet中數(shù)據(jù)
while (rs.next()) {
// 遍歷每一列
for (int i = 1; i <= colCount; i++) {
String colName =metaData.getColumnLabel(i);
String value = rs.getString(colName);
jsonObj.put(colName, value); }
myArray.put(jsonObj); }
return myArray.toString();
四、數(shù)據(jù)訪問中間件數(shù)據(jù)處理層設(shè)計(jì)
采用ArrayList對象進(jìn)行封裝。
1) 數(shù)據(jù)查詢
DataMid類提供getResultSet方法查詢數(shù)據(jù),其關(guān)鍵代碼如下:
//調(diào)用getConnection()方法連接指定數(shù)據(jù)庫
Connection conn= getConnection();
//實(shí)例化PreparedStatement對象,使用executeQuery()方法執(zhí)行select查詢并返回結(jié)果集
PreparedStatement pstm=conn.prepareStatement(sql);
if (paras != 1) {
Object obj[] = paras.toArray();
for (int i = 0; i < obj.length; i++) {
if (obj[i] instanceof String) {
pstm.setString(i+1, (String) obj[i]); }
}
}
ResultSet rs = pstm.executeQuery();
return rs;
2) 數(shù)據(jù)處理
DataMid類提供handleData方法處理數(shù)據(jù),其關(guān)鍵代碼如下:
int n = 0;
//調(diào)用getConnection()方法連接指定數(shù)據(jù)庫
Connection conn= getConnection();
//實(shí)例化PreparedStatement對象,使用executeUpdate ()方法執(zhí)行insert、update、delete語句
PreparedStatement pstm=conn.prepareStatement(sql);
if (paras != 1) {
Object obj[] = paras.toArray();
for (int i = 0; i < obj.length; i++) {
if (obj[i] instanceof String) {
pstm.setString(i+1, (String) obj[i]); }
}
}
int n = pstm.executeUpdate();
return n;
五、結(jié)論
實(shí)驗(yàn)證明本文設(shè)計(jì)的基于數(shù)據(jù)訪問中間件的移動ERP協(xié)同辦公平臺框架可以解決遠(yuǎn)程跨平臺移動ERP應(yīng)用程序與異構(gòu)或同構(gòu)數(shù)據(jù)源之間的通信問題,采用JSON格式交換數(shù)據(jù)有效解決了移動應(yīng)用受帶寬限制及網(wǎng)絡(luò)流量低的問題,為實(shí)現(xiàn)ERP協(xié)同辦公數(shù)據(jù)和信息的有效共享提供了一種行之有效的途徑,在一定程度上完善了移動ERP協(xié)同辦公系統(tǒng)的體系結(jié)構(gòu)。
參考文獻(xiàn):
[1]蔣曉丹,丁霞軍,張妞. 數(shù)據(jù)訪問中間件在移動學(xué)習(xí)平臺的研究與設(shè)計(jì).福建電腦,2013,29(2):22-23.
[2]胡錦麗.一種基于json的modbus遠(yuǎn)程通信實(shí)現(xiàn)方式[J].機(jī)電技術(shù),2014,38(2):36-39.
[3] 陳銳浩. 基于Android平臺的移動課件的設(shè)計(jì)及制作[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2013,30(3):55-58.
基金項(xiàng)目:國家科技支撐計(jì)劃課題(2012BAF12B15)