林志鵬
(福建林業職業技術學院 自動化工程系,福建 南平 353000)
古樹名木是活化石、活文物,隱藏著豐富的相關歷史人化資源,對發展旅游經濟具有巨大的經濟和文化價值。現階段下,各省市初步建立相應的古樹名木信息數據庫,但未進入下一步綜合利用這些數據庫,在實際中這些寶貴資源都是孤零零地存在,因此可以開發利用它的寶貴資源、宣傳介紹它們的價值,建成風格獨異的新景點。本文提出建立基于Web Service技術的古樹名木電子導游系統,利用已建立的各省市古樹名木數據庫,在安卓平臺下進行系統開發,通過開發利用,使人們更有意識地保護稀有古樹名木資源。
在國內,文獻[7]有比較多的學者在各個大小城市都建立有相應的古樹名木數據庫,并進行相關研究,取得初步的成果,文獻[9]闡述了古樹名木數據采集,并在此基礎上,建立起相應的管理信息系統,主要是針對林業專家的。文獻[5]主要分析了手機平臺下,要集成分布式的異構數據庫中存在的變化數據同步問題,研究出如何有效解決此問題的方法。文獻[6]闡述了采用安卓手機平臺下實現信息系統開發,主要講述了手機端與服務器數據的通信,這些研究雖有借鑒意義,但未對共享數據的有效獲取上進行優化研究,因此為本文的研究指明了方向。
上面文獻的分析,可見現研究階段主要在于各省市古樹名木電子導游系統的數據采集、管理問題,而本文著重在古樹名木數據的集成交換問題,為將分布式古樹名木數據庫數據實現集成、交互、獲取,提出了基于WebService和Android技術開發古樹名木數據庫下的電子導游系統APP,本系統是對現階段已有的各省市古樹名木系統,和古樹名木數據庫管理系統的補充擴展,對行業發展、古樹名木的開發利用具有相應價值。
古樹名木下的電子導游系統是基于Android開發的系統,主要功能包括:首頁印象,以古樹名木的照片為主題,可切換古樹名木導游省市,并大致瀏覽該省市下的著名古樹名木景點,為用戶提供一個古樹名木導游資源。附近模塊,用戶到達相應省市旅游地的著名古樹名木景點、周邊酒店、以及特色人文美食等推薦、古樹名木歷史文化傳說介紹并包含古樹名木搜索功能。古樹名木導游攻略,了解該省市的已有古樹名木歷史文化、特產等導游攻略,還有推薦的旅行日志。地圖服務,古樹名木的GPS衛星定位服務,可查找用戶當前位置的古樹名木周邊分布、周邊銀行、購物等場所的位置,線路設計,用戶可根據自己的喜好,設計適合自己旅行的古樹名木游覽線路。天氣查詢,可查詢當前省市的天氣情況,方便為出行做準備。

圖1 功能模塊Figure 1 Function module
系統總體由Android手機電子導游客戶端、古樹名木中心數據庫、基于WebService技術的各省市異構古樹名木數據庫3個組成部分。安卓手機平臺下的電子導游系統提供給操作用戶的接口,它通過WebService技術訪問古樹名木數據庫中心服務器,而古樹名木數據庫服務器中心,通過WebService技術的連接與各省市異構數據庫進行相關的獲取數據操作。系統架構如圖1所示。

圖2 系統總體設計Figure 2 Overall design of the system
1.2.1 基于WebService的分布式異構古樹名木數據庫同步設計
(1)各省市古樹名木異構數據庫
各省市已經建立的異構數據庫是計算機網絡,利用對不同省市的若干古樹名木數據庫系統的集合共享,可以達到不同省市古樹名木數據庫之間數據的共享訪問的目的,減少數據初始階段的投入,為系統開發準備充足的數據源。
(2)古樹名木中心服務器
古樹名木中心服務器其主要作用是用來存儲和管理各省市古樹名木數據庫的同步數據信息,并為電子導游系統提供共享數據,它首先為各個省市古樹名木數據庫結構,制定一套統一的數據結構標準,對各省市同步上來的數據進行清洗和合并,當用戶提出訪問請求時,系統提供相應的操作接口對古樹名木中心數據庫進行訪問,而各個省市古樹名木數據庫的數據發生改變時,按統一的數據結構標準及時同步到古樹名木中心數據庫中。保證電子導游系統訪問數據與各省市古樹名木數據庫的一致性。
(3)基于WebService分布式異構古樹名木數據庫同步方法
WebService開發技術是一個與平臺無關的應用程序開發技術,它基于XML、SOAP語言標準,為各平臺下的應用程序開發統一提供標準化的服務。其在技術搭建過程,從邏輯結構上可以分為服務層、應用邏輯層和數據訪問層。其中服務層是其核心服務部分。WebService技術為本古樹名木電子導游系統在服務層提供了函數調用和服務描述功能;在應用邏輯層上為處理古樹名木電子導游系統的業務邏輯提供業務處理功能;在數據庫訪問層上為古樹名木電子導游系統提供用戶訪問古樹名木中心數據庫的功能,并將各省市的古樹名木更新數據,同步到古樹名木中心數據庫中。
其中古樹名木數據同步操作是將當前各省市的古樹名木狀態數據進行回傳到古樹名木中心數據庫結點,并用統一的數據結構進行清洗數據,再進行轉換后,更新進入到古樹名木中心數據庫,保持數據的統一,提供給電子導游系統訪問的一致性。在具體操作中可分成三個步驟,第1步驟完成各省市古樹名木數據的的變化捕捉,第2步驟完成古樹名木數據的轉換,第3步驟完成古樹名木數據轉移的操作步驟。其中在第1個步驟中,為及時能捕捉到各省市的古樹名木數據的變化,可以使用數據庫的觸發器法,還有應用程序插件技術的API法,結合使用數據庫的日志表法、快照法等。在使用過程中,要清楚各自的優缺點,可以單獨用,也可兩個一起用。比如使用的數據庫系統類型是SQLServer,可使用其支持的觸發器技術比較方便,且該技術有自動捕捉數據操縱事件的能力。但若全部采用此技術又會遇到不適配的情況,因為有部分數據庫管理系統它是不支持觸發器技術和日志機制的,此時對數據的變化獲取,可結合日志表方法還有插件API技術來完成該操作,使其具備通用的同步操作,達到更好解決這個問題。
古樹名木電子導游系統的各省市數據庫與古樹名木的中心數據庫間需要進行同步操作,當用戶在進行相關的數據庫數據更新操作時,如果兩者使用的數據庫管理系統都支持觸發器操作,那么其同步操作就比較容易,可以將更改的數據放在相關的日志表中,設置相關的定時器,進行調用同步函數來完成數據同步的操作。若有某省市的古樹名木數據庫管理系統不支持觸發器技術,則需考慮采用API插件技術,即可將古樹名木數據庫的類型、相關表以及變更的古樹名木數據,先進行捕獲后,在操作事務提交前添加到控制變更表中,再利用定時器觸發同步函數來完成變更數據的同步操作。在進行古樹名木數據同步操作時,還要考慮數據標準的匹配、清洗、轉換,這些具體的方法可參考其他相關文獻。
1.2.2 系統WebService服務器端架構設計
古樹名木下的電子導游系統開發研究中,系統總體設計上需對各省市的古樹名木數據庫進行對接,而這些數據庫具有兩個重要特性:分布性和異構性。為此系統需要引入WebService技術來解決具有這兩種特性的數據庫同步問題。因此對古樹名木中心數據庫的服務器端的技術要求嚴格。在基于.net平臺下,中心數據庫服務的架構可采用MVC三層架構軟件思想,MVC框架現成代碼結構包含:Model(.cs類文件)+View(aspx 頁面)+Control(aspx.cs代碼文件),分別對應著表現層(MVC)、業務邏輯層Business、持久層DAO來實現古樹名木下電子導游系統的三層架構。其中aspx頁面用于顯示古樹名木數據庫數據,Service接口用于實現古樹名木電子導游系統業務邏輯處理。Model類負責與古樹名木數據庫表字段的映射,實現處理Business層請求的數據結果,目的是為了解耦和,增加系統的可擴展性。
2.1.1 Android手機電子導游系統實現
本系統是在Eclipse的開發環境下,使用Java語言進行開發,基于Android平臺的開發環境,主要是搭建在以下環 境下:ADT22.3.0,Android4.0.3,Eclipse 3.4以上,JDK1.6.1,windowsXP。最后開發完成的功能示意圖如圖3:

圖3 開發功能示意圖Figure 3 Development functional sketch diagram
古樹名木電子導游系統的項目功能主要包含以下幾大模塊:
首頁印象:以印象為主題,可切換古樹名木所在的城市,并大致瀏覽該城市中的古樹名木,為用戶提供一個大概印象。
附近模塊:用戶所在地的古樹名木,酒店,以及特色美食等推薦、介紹并包含搜索功能。
本地導游攻略:了解該地區所在城市的鄉土文化,特產等導游攻略,推薦的旅行游記。
地圖服務:GPS衛星定位服務,可查找用戶當前位置的周邊銀行,購物等場所的位置,線路設計中,用戶可根據自己喜好,設計適合自己的旅行線路。
天氣查詢:可即時查詢古樹名木所在城市的當前天氣情況,方便為出行做準備。[1]
2.1.2 電子導游與古樹名木數據庫服務器端的網絡數據傳輸
由于手機古樹名木電子導游客戶端的古樹、名木、酒店、美食、天氣等信息來自于服務器端,Android客戶端需要通過網絡通信與服務器端進行連接。An droid平臺需通過標準Java接口、網絡接口以及A-pache接口三種方法來訪問網絡。這些接口在聯網時都需要等待服務器端的響應,若服務器的響應時間超過5秒鐘,Android手機端就會出現應用程序響應錯誤,要解決此問題,可以在主線程中創建一個新線程來進行聯網,當有數據請求連接操作時,通過調用Handle對象中的SendMessage方法,將數據傳遞給主線程中的HandleMessage方法并更新UI。古樹名木下的電子導游系統有很多功能需要訪問服務器,如獲取各省市古樹名木、酒店信息、美食信息、天氣信息等功能,在Android客戶端都會創建多個新線程來處理相應的聯網請求,此時新線程數達到一定的數目后,會使系統的性能受到很大影響,因未對線程的使用與否進行有效管理,現加上線程池技術,對線程的創建和銷毀進行有效管理,使資源的時間和空間學浪費問題得到比較好的解決,從而提高系統響應速度性能。本文在Android客戶端采用線程池方法處理服務器端聯網請求的流程圖如下圖3所示:

圖4 服務器端與Android端數據網絡數據傳輸Figure 4 Data transmission between server and Android terminal data network
電子導游客戶端與古樹名木中心數據庫服務器的網絡數據傳輸流程是:
(1)先定義一個線程池對象Travel,用于存放古樹名木電子導游客戶端對服務器端的聯網請求數據,并初始化線程池最值MAXThreads。
(2)當有提交新請求客戶端線程時,判斷當前線程池大小PoolSize,是否小于最值MaxThreads。
(3)如果是小于最值,則將當前新聯網線程加入線程池對象中,然后啟動該新線程進行相應的聯網操作。
(4)否則進一步判斷,線程池中是否當前有閑置線程,如果有,則啟動該閑置線程進行相應的聯網操作。如果沒有,則只好將當前聯網線程放入相應的線程等待隊列中,再轉入第2步。
(5)Travel線程池中的線程執行相應的聯網請求后,將返回的服務器端古樹名木數據,再次返回給Android古樹名木電子導游客戶端,并顯示出來,結束流程。
2.2.1 WebService服務器服務框架調用
Android電子導游系統調用古樹名木中心數據庫的Web Service服務是實現的難點,注重解決分布式異構數據庫系統之間多用戶并發訪問延遲的問題。[4]在Android古樹名木電子導游系統的開發中,并不能直接對Web Service進行編程,需要調用KSOAP2開發包來輔助完成。在Web Service中利用SOAP協議調用許多可以自定義的API接口,我們通過對API接口的編程就能夠實現對多個用戶的訪問請求、遠程數據庫的響應進行協調與管理。具體來說是開始時創建HttpSETransport傳輸對象,傳入Web Service服務器地址,實例化相關的ObjectSoapt對象,傳入所要調用Web Service的命名空間、Web Service方法名,通過調用HttpSETransport對象的call()方法調用遠程Web Service服務,獲取從服務器端返回的SOAP響應消息,然后解析從服務器端返回的SOAP響應消息,顯示出得到的服務器端數據。
2.2.2 古樹名木數據庫同步數據捕獲過程
針對各省市的分布式異構古樹名木數據庫,設計不同的數據庫同步捕獲數據方法,從而獲取相關不同結構的數據,為了結構各省市古樹名木數據庫系統自身的特點和屬性,可以統一采用API法日志表法,結合觸發器技術配合完成各省市古樹名木數據捕獲。對于支持觸發器功能的省市古樹名木數據庫系統就采用觸發器技術,當有不支持的情況出現,則采用API中間件技術來實現捕獲古樹名木數據。
API中間件技術實現捕獲數據難度在于,怎樣編寫相應的古樹名木數據庫操作功能的中間件,而其編寫復雜且易出問題,本文采用.Net平臺中的MVC面向對象編程技術來實現中間件編程。在古樹名木數據庫數據捕獲中關注怎樣獲取對古樹名木數據庫相關操作的信息,在MVC中對數據庫的操作是系統的關注點,通常在異構環境下使用WebService來訪問數據庫是一種通用的方法,而WebService在本質上就是對MVC的數據庫操作進行了封裝,由此系統關注點轉化為WebService對數據庫的操作上。當對各省市數據庫進行DML操作時需要調用MVC中的Model層cs文件,保存save、更新ChangeOrSave以及刪除delete方法,為了能捕獲這些操作,需要在相應的方法編程上定義捕獲通知,通知的類型有前置、返回后、拋出異常后還有環繞型的通知類型,前置通知是指連接點需要連接前置前就執行此通知,拋出異常后通知是指當數據庫操作連接異常后執行此通知。而本系統在對捕獲古樹名木數據庫操作時采用了返回后通知,是在古樹名木數據庫連接點正常完成后,將操作類型、操作表和變更的古樹名木數據等通知信息,插入到增量日志表中,并依據日志記錄信息通過定時器來調取同步函數實現同步操作,最后完成時還要刪除相應的日志表記錄動作。
本次實驗要模擬Android客戶端對服務器端的訪問,對比真實的聯網請求,設置了普通聯網下跟線程池聯網請求下,當電子導游系統訪問古樹名木中心數據庫時,兩者的性能數據對比,采用iTestin移動App自動化云測試軟件,它支持功能測試、UI測試、性能測試、穩定性測試、壓力測試,返回包括日志和截圖的詳細測試報告,可結合Testin云測平臺500多款4600多部終端批量驗證功能點。客戶端:華為榮耀Honor4X。服務器端:Windows2008Server,Web服務器 IIS7.0,數據庫 SQL Server2008。測試步驟:(1)點擊手機電子導游系統附近—>古樹名木景點如圖3界面功能所示;(2)點擊古樹名木景點后聯網請求中心數據庫服務器獲取最近的古樹名木景點數據。實驗結果如表1所示:

表1 并發訪問延遲測試結果Table 1 Concurrent access latency test results
從表1可以看出,Android客戶端采用線程池方式聯網時,不論是在平均值還是在最大值都明顯優于采用變通方式聯網時所耗費的網絡延遲,以及傳輸的數據總量。
本文提出了基于WebService和Android技術的古樹名木電子導游系統的設計與實現。在Android手機端,用戶通過安裝App快速訪問各省市的古樹名木景點導游數據信息,提高了各省市的古樹名木數據庫的使用率,使古樹名木的價值走入尋常百姓,增強百姓對古樹名木的保護意識。同時Android電子導游客戶端聯網請求古樹名木中心數據庫時采用WebService服務,將各省市的數據庫進行聯結,并采用線程池的方法進行手機端訪問,提高了系統的整體性能。對于分布式異構數據庫采用了不同的數據捕獲方法,整個系統架構方案對其他類似應用的開發具有借鑒意義。
[1]林志鵬.古樹名木下的電子導游系統開發[J].武夷學院學報(自然科學版),2017,36(3):61-66.
[2]代品宣,李震,盧超,等.基于Android的校園導游和定位系統設計與實現[J].江蘇科技大學學報(自然科學版),2015,29(4):378-381.
[3]嚴志雁.陳桂鵬.基于XML和Web Service的農產品溯源數據交換技術設計與應用[J].江西農業學報,2016,28(11):80-84.
[4]魏晉.Web Service在基于.Net架構的招聘報名管理系統向Android系統拓展開發中的設計與應用 [J]軟件工程,2017,20(1):40-42.
[5]張弓.基于Android與Web Service的危廢轉移管理系統的設計與實現[J].佛山科學技術學院學報,2016,34(1):68-73.
[6]羅國濤,裴廣.基于Web Service和Android的C/S+B/S結構手機電影系統[J].計算機應用與軟件,2015,32(9):328-333.
[7]王云錦,趙志宏.基于Web Service的Android客戶端與Web服務端數據交互實現 [J].信息化建設,2016(8):120-121.
[8]丁向鵬,方陸明.基于移動終端的古樹名木采集系統開發與應用[J].信息與電腦,2016(21):130-133
[9]WANG C L,SHE Z B.Research on Ancient and Famous Trees Monitoring and Management Based on Internet of Things[J].Computer Engineering,2015,41(5):316-321.
[10]薄芳芳.基于BPR的古樹名木智能信息化管理系統研究[J].安徽農業科學,2016,44(32):204-206.
[11]尹小俊.顏建輝.吳允平.基于物聯網技術的古樹名木環境監測系統[J].微型機與應用,2016,35(10):63-66.