版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 基于SSH的電信數(shù)據(jù)采集與整合</p><p><b> 序 言</b></p><p> 本課題采用由亞信公司提供的“電信用戶管理和計費系統(tǒng)NetCT OSS” 該系統(tǒng)是一個典型的基于Unix平臺、Mysql數(shù)據(jù)庫、Web界面,以Java語言實現(xiàn)的大型軟件項目,是為電信運營的IP計費服務(wù)的。該系統(tǒng)運行于Tomcat平臺,采用JavaEE架構(gòu)
2、、Struts框架,Hibernate、Spring技術(shù)及Mysql數(shù)據(jù)庫,并成功運行于Sun Solaris UNIX及Windows2000環(huán)境下。該系統(tǒng)主要分為用戶自服務(wù)管理模塊,管理員管理模塊,用戶管理等模塊,資費模塊,帳單和帳務(wù)模塊以及數(shù)據(jù)采集與整合模塊。本論文主要闡述的是該系統(tǒng)下的兩個模塊,數(shù)據(jù)采集與整合。</p><p> 數(shù)據(jù)采集與整合是整個系統(tǒng)的后臺實現(xiàn),功能是定期采集(采集系統(tǒng))原始計費日志
3、文件,并將采集的數(shù)據(jù)封裝整合,然后通過Socket將數(shù)據(jù)傳送到數(shù)據(jù)采集服務(wù)端;中數(shù)據(jù)采集服務(wù)端將數(shù)據(jù)保存到Mysql數(shù)據(jù)庫當(dāng)前時間所對應(yīng)的t_daily_x表中,最后周期性進行數(shù)據(jù)的整合(整合系統(tǒng))。</p><p> 該課題在設(shè)計中要解決的主要問題就是在采集過程中,如何解決數(shù)據(jù)匹配問題,如何將采集到的有效數(shù)據(jù)封裝成我們需要的結(jié)構(gòu)并輸出到網(wǎng)絡(luò)另一端,由接收端將數(shù)據(jù)插入到數(shù)據(jù)庫中,如何在數(shù)據(jù)庫中進行周期整合,產(chǎn)生
4、系統(tǒng)所需要的各個表。指導(dǎo)這些問題解決的思想就是文件讀寫、socket編程和UNIX下的作業(yè)操作。</p><p> 在設(shè)計中主要用到的語言以及技術(shù)主要是Java、jdbc。之所以選擇這些語言及技術(shù),一方面是因為在電信運營支撐系統(tǒng)中,安全性有著很關(guān)鍵的作用,安全性直接影響著整個系統(tǒng)的使用,另一方面是在Java語言中,已經(jīng)存在對日志文件讀取的各種方法,可以很方便的實現(xiàn)采集??紤]到數(shù)據(jù)采集與整合的這些諸多特點,所以在
5、做該子系統(tǒng)時選擇了Java、jdbc等語言和技術(shù)。</p><p><b> 第1章 概述</b></p><p> 1.1 課題的背景及意義</p><p> 隨著網(wǎng)絡(luò)的不斷發(fā)展,網(wǎng)絡(luò)幾乎進入了家家戶戶。查資料需要網(wǎng)絡(luò),看新聞需要網(wǎng)絡(luò),看電影需要網(wǎng)絡(luò),買東西也需要網(wǎng)絡(luò),網(wǎng)絡(luò)給人們帶來的方便無處不在,人們需要使用網(wǎng)絡(luò)的愿望也越來越大。無法
6、想象人們離開網(wǎng)絡(luò)會是什么樣的。現(xiàn)階段,要想上網(wǎng)就必須向網(wǎng)絡(luò)運營商申請代理服務(wù)器,隨之而產(chǎn)生的問題就是計費和管理問題。另一方面為了讓用戶更放心的使用網(wǎng)絡(luò)運營商的代理服務(wù)器,讓用戶隨時可以查詢自己的信息及使用情況,方便網(wǎng)絡(luò)運營商管理一系列的復(fù)雜事物,以及處理大量的數(shù)據(jù),我們設(shè)計了本系統(tǒng)。系統(tǒng)只針對電信運營商出租的實驗室,即服務(wù)器。</p><p> 《基于SSH電信系統(tǒng)》是利用J2EE平臺下的WEB技術(shù)設(shè)計和運行。
7、通過讀取服務(wù)器日志文件采集數(shù)據(jù)然后整和到數(shù)據(jù)庫中,供用戶和管理員使用.其中持久層采用封裝了JDBC的Hibernate框架,數(shù)據(jù)庫采用Mysql,利用Struts框架作為控制器,頁面顯示采用JSP技術(shù),并且用Spring框架整合Hibernate、Struts,完成企業(yè)級應(yīng)用。</p><p> 1.2 課題內(nèi)容及目標</p><p> 基于SSH的電信系統(tǒng)的后臺數(shù)據(jù)服務(wù)模塊分為數(shù)據(jù)采
8、集和數(shù)據(jù)整合模塊。數(shù)據(jù)采集模塊負責(zé)讀取數(shù)據(jù)服務(wù)器日志文件,并進行過濾,將符合要求的數(shù)據(jù)存入數(shù)據(jù)庫;數(shù)據(jù)整合端負責(zé)將數(shù)據(jù)庫中的原數(shù)據(jù)按年、月、日進行數(shù)據(jù)整合,并將整合后的數(shù)據(jù)存入數(shù)據(jù)庫中。</p><p> 1.3 開發(fā)及運行環(huán)境</p><p> 基于SSH的電信系統(tǒng)的后臺數(shù)據(jù)服務(wù)模塊在開發(fā)時采用C/S架構(gòu),使用Myeclipce6.0的運行環(huán)境;服務(wù)器和客戶機都采用Windows X
9、P操作系統(tǒng);數(shù)據(jù)庫服務(wù)器是Mysql5.0 ;</p><p> 第2章 系統(tǒng)分析和設(shè)計</p><p> 2.2系統(tǒng)設(shè)計思想 隨著網(wǎng)絡(luò)的不斷發(fā)展,網(wǎng)絡(luò)幾乎進入了家家戶戶。查資料需要網(wǎng)絡(luò),看新聞需要網(wǎng)絡(luò),看電影需要網(wǎng)絡(luò),買東西也需要網(wǎng)絡(luò),網(wǎng)絡(luò)給人們帶來的方便無處不在,人們需要使用網(wǎng)絡(luò)的愿望也越來越大。無法想象人們離開網(wǎng)絡(luò)會是什么樣的。現(xiàn)階段,要想上網(wǎng)就必須向網(wǎng)絡(luò)運營商申請代理
10、服務(wù)器,隨之而產(chǎn)生的問題就是計費和管理問題。另一方面為了讓用戶更放心的使用網(wǎng)絡(luò)運營商的代理服務(wù)器,讓用戶隨時可以查詢自己的信息及使用情況,方便網(wǎng)絡(luò)運營商管理一系列的復(fù)雜事物,以及處理大量的數(shù)據(jù),我們設(shè)計了本系統(tǒng)。系統(tǒng)只針對電信運營商出租的實驗室,即服務(wù)器。</p><p> 《基于ssh的電信計費系統(tǒng)》是利用J2EE平臺下的WEB技術(shù)設(shè)計和運行.通過采集數(shù)據(jù)然后整和到數(shù)據(jù)庫中,供用戶和管理員使用.其中持久層采用
11、封裝了JDBC的Hibernate框架,數(shù)據(jù)庫采用Oracle,利用Struts框架作為控制器,頁面顯示采用JSP技術(shù),并且用Spring框架整和Hibernate、Spring,完成企業(yè)級應(yīng)用。</p><p> 2.2系統(tǒng)功能描述:</p><p> WEB系統(tǒng)可供用戶和管理員查詢相關(guān)內(nèi)容。通過登錄該系統(tǒng),用戶可以完成查詢帳單,修改個人信息,瀏覽電信運營商提供的各種資費服務(wù)。管理員
12、可以完成查詢所有用戶帳單,修改管理員信息,對用戶進行管理(開通,關(guān)閉,刪除用戶帳號),對管理員進行管理(開通,關(guān)閉,刪除管理員帳號),修改資費項目,查看電信服務(wù)器運行情況。</p><p> 采集模塊每小時執(zhí)行一次,從日志文件中循環(huán)讀取數(shù)據(jù),過濾掉不符合要求的數(shù)據(jù),采集符合要求的數(shù)據(jù)并將數(shù)據(jù)封裝成bIDR結(jié)構(gòu)發(fā)送到中央服務(wù)器端。整合模塊根據(jù)采集到的數(shù)據(jù)進行整合并插入到各個表中,每小時執(zhí)行一次。</p>
13、;<p> 2.3 需求分析: </p><p><b> 各模塊功能:</b></p><p> 資費管理:增、刪、改、查資費信息(指定價格)</p><p> 管理員管理:增、刪、改、查管理員信息</p><p> 用戶管理:增、刪、改、查用戶信息(開通帳號,修改自身信息和需求)</p&
14、gt;<p> 帳單查詢:按月生成用戶月計費帳單</p><p> 帳務(wù)查詢:按月生成帳務(wù)月、年統(tǒng)計報表(對自己業(yè)務(wù)的查詢,對服務(wù)器查詢,管理)</p><p> 采集模塊:定期采集(次/小時)原始計費Log(wtmpx)文件,整理成bIDR數(shù)據(jù)清單,并上傳給中心處理系統(tǒng)。中心處理系統(tǒng)(接收系統(tǒng))偵聽并收集采集系統(tǒng)發(fā)送的數(shù)據(jù)信息bIDR,并將數(shù)據(jù)保存的數(shù)據(jù)庫表t_det
15、ail_X 。</p><p> 整合模塊:按小時合并清單表t_detail_X生成所有用戶計費數(shù)據(jù)日表t_day_X;</p><p> 按天合并日表t_day_X生成所有用戶計費數(shù)據(jù)月表t_month_X;</p><p> 按月合并月表t_month_X生成所有用戶計費數(shù)據(jù)年表t_year_X;</p><p> 按小時合并清單
16、表t_detail_X生成所有Lab_IP數(shù)據(jù)日表t_day;</p><p> 按天合并日表t_day生成所有Lab_ip數(shù)據(jù)月表t_month;</p><p> 按月合并月表t_month生成所有Lab_ip數(shù)據(jù)年表t_year;</p><p><b> 1、用戶管理需求:</b></p><p> 用戶
17、開通管理:管理用戶登陸Open Lab的帳號,包括帳號開通、暫停(加鎖)、恢復(fù)、刪除。</p><p> 用戶資料管理:管理用戶資料,包括姓名(單位)、身份證號碼、住址及資費信息等。</p><p> 用戶信息:ID,姓名、帳務(wù)帳號/密碼、Open Lab帳號/密碼、狀態(tài)(正常/暫停/關(guān)閉)、聯(lián)系電話、Email、開通日期、停止日期、付款方式(現(xiàn)金/郵寄/支票/轉(zhuǎn)帳/電子銀行)、證件號
18、碼、職業(yè)(學(xué)生/IT從業(yè)人員/非IT從業(yè)人員)、國籍(中國/美國/加拿大/日本/英國/澳大利亞/其他)、性別(男/女)、單位、聯(lián)系地址、郵政編碼。</p><p> 注意:本系統(tǒng)一個用戶對應(yīng)一個帳務(wù)帳號,可以對應(yīng)多個Open Lab帳號。</p><p> 2、管理員管理需求:</p><p> 管理員開通管理:管理用戶登陸NetCT OSS的帳號,包括帳號開
19、通、暫停(加鎖)、恢復(fù)、刪除。</p><p> 管理員資料管理:管理管理員資料,包括姓名、身份證號碼、住址等。</p><p> 管理員權(quán)限管理:改變管理員的各類權(quán)限。</p><p> 管理員信息:ID,姓名、帳號(一個)、密碼、狀態(tài)(正常/暫停/關(guān)閉)、聯(lián)系電話、Email、開通日期、停止日期、權(quán)限</p><p> 注意:一個
20、用戶對應(yīng)一個帳號。</p><p><b> 3、帳單管理需求:</b></p><p> 整合系統(tǒng)按月生成用戶月帳單。</p><p> 帳單信息 用戶標識信息:帳單ID,姓名、帳號、狀態(tài)(正常/暫停/關(guān)閉)、聯(lián)系電話、Email、開通日期.</p><p> 帳務(wù)信息:帳號、日期、登錄時長、本月費用<
21、/p><p> 帳單明細:登錄時間退出時間時長</p><p><b> 4、帳務(wù)管理需求:</b></p><p> 按月、年分別生成《月帳務(wù)信息統(tǒng)計報表》和《年帳務(wù)信息統(tǒng)計報表》。</p><p><b> 月帳務(wù)信息</b></p><p> 生成一個計費月周
22、期中,每一天的帳務(wù)信息。</p><p> 月帳務(wù)信息:日期時長費用</p><p><b> 年帳務(wù)信息</b></p><p> 生成一個計費年周期中,每一月的帳務(wù)信息。</p><p> 年帳務(wù)信息:月份時長費用</p><p><b> 5、資費管理需求:<
23、;/b></p><p> 用戶可以通過登錄系統(tǒng)來查詢電信公司所提供的一些資費信息,以方便用戶來使用。管理員通過登錄系統(tǒng)可以根據(jù)公司運營情況來向其中增、刪、改資費信息。</p><p> 資費信息:資費ID,資費名稱,月租,使用費,描述</p><p><b> 6、采集模塊需求:</b></p><p>
24、 所需系統(tǒng)文件:計費Log文件</p><p> 數(shù)據(jù)庫表 資料信息表:用戶信息、管理員信息、資費信息、URL信息</p><p> 數(shù)據(jù)存儲表:明細表、日表、月表、年表</p><p><b> 7、整合模塊需求:</b></p><p> 所需數(shù)據(jù)庫表:用戶消費明細表、日表、月表、年表</p>
25、<p> 產(chǎn)生數(shù)據(jù)庫表:服務(wù)器被使用量的日表、月表、年表</p><p><b> 業(yè)務(wù)模型:</b></p><p> 用戶首先通過3A服務(wù)器驗證后,可以使用出租實驗室,并記錄用戶的登錄與退出信息,信息經(jīng)過加工處理生成系統(tǒng)所需數(shù)據(jù)持久化在數(shù)據(jù)庫中,供管理和查詢,如下圖:</p><p> 2.4 系統(tǒng)概要設(shè)計</p&
26、gt;<p> 2.4.1 系統(tǒng)模塊劃分:</p><p> 該系統(tǒng)包括兩個子系統(tǒng):數(shù)據(jù)采集與整合系統(tǒng)與WEB系統(tǒng)。在數(shù)據(jù)采集與整合系統(tǒng)中又可分為數(shù)據(jù)采集模塊與數(shù)據(jù)整合模塊。</p><p> 數(shù)據(jù)采集與整合系統(tǒng)中的數(shù)據(jù)采集模塊主要功能是將電信服務(wù)器上的計費文件中所有用戶的消費記錄采集并且整理出來,然后插入到數(shù)據(jù)庫中。從功能上講,該系統(tǒng)共分為三個模塊,分別是采集模塊,入
27、庫模塊和網(wǎng)絡(luò)模塊。從部署運行方面講該采集系統(tǒng)分為客戶端和服務(wù)器端兩個部分。客戶端部署在電信服務(wù)器上,用于采集和整理計費文件中的原始記錄并把結(jié)果發(fā)送到服務(wù)器端。服務(wù)器端用于接收從客戶端發(fā)送過來的數(shù)據(jù),并持久化到數(shù)據(jù)庫中相應(yīng)的表中。數(shù)據(jù)整合模塊主要功能是將數(shù)據(jù)庫中的用戶原始的消費數(shù)據(jù)進行整合,形成可供用戶和管理查詢的帳單,如日清單,月報表,年報表,以及僅供管理員查詢的帳務(wù)清單,主要用于考察電信服務(wù)器的運行情況。該子系統(tǒng)是電信運營支撐系統(tǒng)中的
28、后臺實現(xiàn),也是WEB系統(tǒng)的依賴。</p><p> WEB系統(tǒng)是整個電信運營支撐系統(tǒng)的表現(xiàn),是和用戶進行交互的部分。該系統(tǒng)可供用戶和管理員查詢相關(guān)內(nèi)容。通過登錄該系統(tǒng),用戶可以完成查詢帳單,修改個人信息,瀏覽電信運營商提供的各種資費服務(wù)。管理員可以完成查詢所有用戶帳單,修改管理員信息,對用戶進行管理(開通,關(guān)閉,刪除用戶帳號),對管理員進行管理(開通,關(guān)閉,刪除管理員帳號),修改資費項目,查看電信服務(wù)器運行情況
29、。根據(jù)以上功能,該系統(tǒng)可分為六個模塊,用戶管理模塊,管理員管理模塊,用戶自服務(wù)模塊,帳單管理模塊,資費管理模塊,帳務(wù)管理模塊。</p><p> 2.4.2 業(yè)務(wù)流程圖:</p><p> 通過底層的采集與整合模塊將系統(tǒng)所需要的數(shù)據(jù)插入到數(shù)據(jù)庫當(dāng)中,供用戶及管理員使用。由圖可看出,用戶想使用Openlab服務(wù)器就必須通過3A服務(wù)器的驗證,驗證通過則允許使用并記錄日志。在web部分用戶可
30、以通過登錄系統(tǒng)來查詢及修改自己的信息,管理員可以管理相應(yīng)的信息。如用戶管理和計費管理</p><p> 2.4.3 總體架構(gòu)圖:</p><p> 采集系統(tǒng)解析日志文件中的信息,把對我們有用的信息采集回來,封裝成一個結(jié)構(gòu)傳輸?shù)街醒胩幚硐到y(tǒng),然后持久化到數(shù)據(jù)庫當(dāng)中,經(jīng)過整合這些數(shù)據(jù),再分別存儲到不同的表中,供系統(tǒng)使用。通過登錄系統(tǒng),用戶可完成相應(yīng)的操作,包括查詢自己的消費信息,修改自己的
31、一些信息等等。管理員則可對用戶、業(yè)務(wù)及服務(wù)器進行管理。</p><p> 2.4.4 課題相關(guān)模塊</p><p> 2.4.4.1 系統(tǒng)部署圖:</p><p> 下圖中“中央處理器”模塊包括:數(shù)據(jù)采集服務(wù)端、數(shù)據(jù)整合端,也包括存儲數(shù)據(jù)的數(shù)據(jù)庫。</p><p><b> 采集部署圖</b></p>
32、<p><b> 查詢和管理部署圖</b></p><p> 2.4.2.2 部署、用例與組件圖</p><p><b> 用例圖</b></p><p><b> 用例描述</b></p><p><b> 組件圖</b><
33、/p><p><b> 帳務(wù)管理模塊:</b></p><p><b> 用例圖</b></p><p><b> 用例描述</b></p><p><b> 組件圖</b></p><p> 2.5 課題設(shè)計思想:</
34、p><p> 本人所負責(zé)模塊的設(shè)計思想是從記錄有用戶登錄與退出信息的文件中讀取信息,并經(jīng)過解析,提取出有效信息,并封裝成我們所需要的結(jié)構(gòu),通過SOCKET編程將采集到的數(shù)據(jù)提交到中央處理系統(tǒng),經(jīng)過處理插入到數(shù)據(jù)庫的原始數(shù)據(jù)表中。然后經(jīng)過整合,分別整合成符合系統(tǒng)需求所需要的各個表中,供系統(tǒng)使用,如圖1:</p><p> 圖1:采集與整合設(shè)計模型</p><p>
35、2.6 課題詳細描述:</p><p> 用戶首先需要訪問3A服務(wù)器(Authentication:認證,Authorization:授權(quán),Accounting:記賬,UNIX系統(tǒng)本身就可以作為3A服務(wù)器),3A服務(wù)器根據(jù)其中事先已經(jīng)記錄的用戶名(UNIX下:/etc/shadow)及密碼(UNIX下:/etc/passwd)進行校驗。驗證通過則3A服務(wù)器允許用戶登錄。登錄成功后,用戶可以使用出租實驗室,并生成
36、一個LOG文件。同時將用戶的登錄與退出的所有信息記錄到文件中(UNIX系統(tǒng)中的/var/adm/wtmpx),該文件中記錄的數(shù)據(jù)包括用戶名,用戶ID,用戶IP,進程號,登錄類型,狀態(tài),時間,SESSION ID等信息,這些都是為后面的數(shù)據(jù)采集做準備。數(shù)據(jù)采集主要是解析3A服務(wù)器記錄的用戶上、下網(wǎng)數(shù)據(jù)形成用戶登錄數(shù)據(jù),通過SOCKET方式將數(shù)據(jù)從3A服務(wù)器發(fā)送至中央處理系統(tǒng),中央處理系統(tǒng)將收到的數(shù)據(jù)進行持久化處理保存到Mysql數(shù)據(jù)庫里對
37、應(yīng)的表(details_x:x代表一個月中的每一天)中。在這個過程中所要解決的問題有:(1)如何從文件中讀取數(shù)據(jù);(2)如何過濾并選擇對我們有用的數(shù)據(jù);(3)如何匹配同一個用于上、下網(wǎng)的信</p><p> 數(shù)據(jù)整合模塊,將details_x表中的數(shù)據(jù)整合到detaildays_x中,x代表一個月中的第幾天;將detaildays_x表中的數(shù)據(jù)整合到detailmonths_x表中,x代表一年中的第幾個月;將d
38、etailmonths_x表中的數(shù)據(jù)整合到detailyears_x表中,x代表每一個年。另一方面,將details_x表中的數(shù)據(jù)整合到detaildays,detailmonths,detailyears三個表中,這三個表分別存放的是每個服務(wù)器在一天、一個月以及一年中的使用量,這三張表只能供管理員來使用。這些操作需要在數(shù)據(jù)庫中通過寫存儲過程和定制作業(yè)來完成。</p><p> 需要說明的是上面的幾張表,det
39、aildays_x表是用戶計費數(shù)據(jù)日表(統(tǒng)計當(dāng)天每小時每個服務(wù)器上的每個用戶的總時長)每條數(shù)據(jù)記錄的是:一個服務(wù)器上的一個用戶某一小時的總時長對于一個服務(wù)器上的一個用戶,最多有24條記錄;detailmonths_x表是用戶計費數(shù)據(jù)月表(統(tǒng)計當(dāng)月每天每個服務(wù)器上的每個用戶的總時長)每條數(shù)據(jù)記錄的是:一個服務(wù)器上的一個用戶某一天的總時長對于一個服務(wù)器上的一個用戶,最多有31條記錄;detailyears_x表是用戶計費數(shù)據(jù)年表(統(tǒng)計當(dāng)年每
40、月每個服務(wù)器上的每個用戶的總時長)每條數(shù)據(jù)記錄的是:一個服務(wù)器上的一個用戶某一月份的總時長對于一個服務(wù)器上的一個用戶,最多有12條記錄。</p><p> 采集模塊從日志文件中采集數(shù)據(jù)并封裝成一個結(jié)構(gòu),然后將這個結(jié)構(gòu)傳送到中央處理系統(tǒng)中,然后插入到明細表中,如圖2左半部分所示。由采集模塊插入到數(shù)據(jù)庫中的數(shù)據(jù)是一些零碎的,比較詳細的記錄,這些數(shù)據(jù)對用戶來說是沒什么用處的,需要由整合模塊整合到各個表中以供用戶使用。
41、</p><p> 整合模塊首先將由采集模塊采集到的數(shù)據(jù)按服務(wù)器IP,用戶登錄IP和用戶名分組,然后將分組查詢到的數(shù)據(jù)統(tǒng)計后插入到天表中,進而再將天表中的數(shù)據(jù)整合到月表,月表中的數(shù)據(jù)整合到年表。需要說明的一點就是整合模塊將用戶消費的原始數(shù)據(jù)信息整合成了兩套表,一套表包括detaildays_x,detailmonths_x,detailyears_x。這些表供用戶使用,用來查詢自己的消費信息;另一套表包括det
42、aildays,detailmonths,detailyears。這套表供管理員來使用,用來統(tǒng)計各服務(wù)器的使用情況,為企業(yè)的決策提供依據(jù),如圖1右半部分所示。這兩套表是系統(tǒng)中資費管理模塊,帳單查詢模塊,帳務(wù)查詢模塊賴以運行的基礎(chǔ)。</p><p> 圖2:采集與整合數(shù)據(jù)流程</p><p><b> 2.5 數(shù)據(jù)庫設(shè)計</b></p><p&g
43、t; 數(shù)據(jù)庫設(shè)計是指對于一個給定的應(yīng)用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫模式,建立數(shù)據(jù)庫及應(yīng)用系統(tǒng),使之能夠有效地儲存數(shù)據(jù),滿足各種用戶的應(yīng)用需求.</p><p> 由于整個電信運營支撐系統(tǒng)的功能很復(fù)雜,并且要存取大量的數(shù)據(jù),因此簡單的使用文件來存儲和管理數(shù)據(jù)顯然是不明智的。因此,本系統(tǒng)采用Mysql數(shù)據(jù)庫來存儲和管理數(shù)據(jù)。根據(jù)系統(tǒng)需求分析需要創(chuàng)建以下的數(shù)據(jù)表來存儲數(shù)據(jù)。</p><p> 基
44、于SSH的電信系統(tǒng)的后臺數(shù)據(jù)的采集與整合模塊涉及到的數(shù)據(jù)庫設(shè)計:</p><p> 1、details_x表用于保存從采集系統(tǒng)傳過來的數(shù)據(jù),由中央處理系統(tǒng)負責(zé)插入到數(shù)據(jù)庫中。31張表</p><p> 2、detaildays_x表是用來統(tǒng)計用戶計費數(shù)據(jù)日表,31張表</p><p> 3、detailmoths_x表是用來統(tǒng)計用戶計費數(shù)據(jù)月表,12張表<
45、;/p><p> 4、detailyears_x表是用來統(tǒng)計用戶計費數(shù)據(jù)年表,2005-2014年10張表</p><p> 5、detaildays是用來存儲服務(wù)器一天之內(nèi)的被使用量,該表只能由管理員使用</p><p> 6、detailsmoths是用來存儲服務(wù)器一月之內(nèi)的被使用量,該表只能由管理員使用</p><p> 7、det
46、ailyears是用來存儲服務(wù)器一年之內(nèi)的被使用量,該表只能由管理員使用</p><p><b> 第3章 技術(shù)準備</b></p><p> 3.1 Java平臺標準版(Java 2 Platform,Enterprise Edition) </p><p> Java SE 以前稱為 J2SE。它允許開發(fā)和部署在桌面、服務(wù)器、嵌入式環(huán)
47、境和實時環(huán)境中使用的 Java 應(yīng)用程序。Java SE 包含了支持 Java Web 服務(wù)開發(fā)的類,并為 Java Platform,Enterprise Edition(Java EE)提供基礎(chǔ)。</p><p> 3.2 Java平臺企業(yè)版(Java 2 Platform,Enterprise Edition) </p><p> JavaEE是一種用來開發(fā)分布式企業(yè)軟件應(yīng)用系統(tǒng)
48、的平臺。Java語言從創(chuàng)生之日起,就獲得廣泛接納,經(jīng)歷了巨大的發(fā)展。越來越多的技術(shù)都成了Java平臺的一部分,為了適應(yīng)不同的需要也開發(fā)出了很多全新的API和標準。最終,Sun公司聯(lián)合了多家業(yè)界巨頭,在開放的Java社區(qū)組織名義下,把所有與企業(yè)開發(fā)相關(guān)的標準整合起來,構(gòu)成了JavaEE平臺。</p><p> 對于企業(yè),JavaEE平臺有很多優(yōu)勢:</p><p> JavaEE為企業(yè)級
49、運算的許多領(lǐng)域(比如數(shù)據(jù)庫連接、企業(yè)業(yè)務(wù)組件、面向消息的中間件(MOM)、Web相關(guān)組件、通信協(xié)議以及互操作性)設(shè)立了標準。</p><p> JavaEE促進人們基于開放的標準來開發(fā)軟件;如此構(gòu)建的系統(tǒng)實現(xiàn),出自名門、安全穩(wěn)固,因此JavaEE構(gòu)成了一種可靠的技術(shù)投資。</p><p> JavaEE是一種標準的開放平臺,基于此開發(fā)的軟件組建能夠在不同廠商的產(chǎn)品中相互移植,從而避免了
50、被一家廠商鎖定。</p><p> 在軟件開發(fā)過程中采用JavaEE能夠縮短開發(fā)周期,使產(chǎn)品盡快投放市場——這是因為,系統(tǒng)地很多底層架構(gòu)和基礎(chǔ)部分都已經(jīng)有產(chǎn)品廠商按照JavaEE規(guī)范標準實現(xiàn)出來了,因此大多數(shù)IT企業(yè)可以不再開發(fā)中間件,集中盡力構(gòu)建符合自己商業(yè)需要的應(yīng)用。</p><p> JavaEE提高了程序員的生產(chǎn)力,因為對于一個會Java語言的程序員來說很容易就能學(xué)會基于Jav
51、a語言的JavaEE技術(shù)。所有企業(yè)軟件開發(fā)能夠在JavaEE平臺上、利用Java語言完成。</p><p> JavaEE增進了現(xiàn)存各種異構(gòu)系統(tǒng)之間的互操作性。</p><p> 3.3 Java swing圖形界面</p><p> Swing是一個用于開發(fā)Java應(yīng)用程序用戶界面的開發(fā)工具包。它以抽象窗口工具包(AWT)為基礎(chǔ)使跨平臺應(yīng)用程序可以使用任何可
52、插拔的外觀風(fēng)格。Swing開發(fā)人員只用很少的代碼就可以利用Swing豐富、靈活的功能和模塊化組件來創(chuàng)建優(yōu)雅的用戶界面。 </p><p> 圖形用戶接口( GUI )庫最初的設(shè)計目的是讓程序員構(gòu)建一個通用的 GUI ,使其在所有的平臺上都能夠正常的顯示。但是比較遺憾的是 AWT 產(chǎn)生的是在各系統(tǒng)看來都同樣欠佳的圖形用戶接口, JAVA1.2 為老的 java1.0 AWT 添加了 java 基礎(chǔ)類( JFC )
53、,這是一個被稱為 “Swing” 的 GUI 的一部分。 Swing 是第二代 GUI 開發(fā)工具集, AWT 采用了與特定平臺相關(guān)的實現(xiàn),而絕大部分 Swing 組件卻不是。 Swing 是構(gòu)筑在 AWT 上層的一組 GUI 組件的集合,為了保證可移植性,它完全用 Java 語言編寫,與 AWT 相比, Swing 提供了更完整的組件,引入了許多新的特性和能力。 Swing 提供了更多的組件庫,如: JTable , JTree , J
54、combox 。 Swing 也增強了 AWT 中組件的功能。正是因為 Swing 具備了如此多的優(yōu)勢所以我們以后在開發(fā)中都使用 Swing 。 JComponent 類是 Swing 組件的基類,而 JComponent 繼承自 Container 類,因此,所有的 Swing 組件</p><p> 設(shè)計模式: 當(dāng)你解決一個問題時你不需要從頭做起,取而代之的是,你應(yīng)該參考過去的經(jīng)驗,或者向?qū)<易稍円庖?,設(shè)計
55、模式是一種方法,該方法以一種結(jié)構(gòu)化的形式提供專家意見。設(shè)計模式的靈感來自于建筑學(xué)設(shè)計模式。設(shè)計模式已經(jīng)成為文化的一部分,當(dāng)你談?wù)?MVC 或 “ 觀察者模式時 ” 全世界的程序員都明白你的意思,因而,模式已經(jīng)成為討論設(shè)計問題的有效方法。 Swing 采用了 mvc 模式, awt 事件模型采用了 “ 觀察者 ” 模式 。</p><p> MVC -【模型-視圖-控制器】模式: 該模式同其他許多設(shè)計模式一樣,都
56、遵循面向?qū)ο蟮脑O(shè)計中的一個基本原則:不讓對象具有太多的功能,如對于按鈕來說不要讓一個按鈕類完成所有的事情,替代的方法就是讓一個對象負責(zé)組件的觀感,而另一個對象負責(zé)存儲內(nèi)容, mvc 模式實現(xiàn)三個獨立的類: </p><p> 模型-存儲內(nèi)容; 視圖-顯示內(nèi)容; 控制器-處理用戶輸入 </p><p> mvc 模式明確規(guī)定了三個對象如何進行交互。模型存儲內(nèi)容,它沒有任何用戶界面。對于一
57、個按鈕來說,內(nèi)容非常簡單,它只是一組標志,用來說明按鈕是否按下,是否啟用等。對于一個文本框來說內(nèi)容稍稍復(fù)雜,它是容納當(dāng)前文本的一個字符串對象。這個內(nèi)容和視圖的內(nèi)容并不一致--如果內(nèi)容長度大于文本框的顯示長度,那么用戶只能看到的就是只有文本框顯示的那一部分。 </p><p> mvc 模式總結(jié):模型存儲完整內(nèi)容,視圖給出了內(nèi)容的可視化表示【完整或者不完整】,控制器負責(zé)處理用戶輸入事件,如鼠標點擊和鍵盤事件等,然
58、后它決定是否把這些事件轉(zhuǎn)化成對模型或視圖的改變??刂破髯饔门e例:如果用戶在一個文本框中按下了一個字符鍵,那么控制器就會調(diào)用模型中的 “ 插入字符 ” 命令,然后模型告訴視圖進行更新,而視圖永遠不會知道文本為什么改變了,但是如果用戶按下了一個光標鍵,那么控制器會通知視圖進行卷屏滾動。卷動視圖對實際文本不會有任何的影響,因此模型永遠不會知道該事件的發(fā)生。 Mvc 模式的一個優(yōu)點是 : 一個模型可以有多個視圖,其中每個視圖可以顯示完整內(nèi)容的不
59、同部分或不同方面。如果作為程序員來使用 Swing ,則不需要考慮 mvc 的體系結(jié)構(gòu),每個用戶界面元素都有一個包裝類(如 Jbutton 和 JTextField ),來保存模型和視圖。 </p><p> 3.3 JDBC技術(shù)介紹</p><p> JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API,可以
60、為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC為工具/數(shù)據(jù)庫開發(fā)人員提供了一個標準的API,據(jù)此可以構(gòu)建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠用純 Java API 編寫數(shù)據(jù)庫應(yīng)用程序,同時,JDBC也是個商標名。 </p><p> 有了JDBC,向各種關(guān)系數(shù)據(jù)發(fā)送SQL語句就是一件很容易的事。換言之,有了JDBC API,就不必為訪問Sybase數(shù)據(jù)庫專門寫一個程序,為訪
61、問Oracle數(shù)據(jù)庫又專門寫一個程序,或為訪問Informix數(shù)據(jù)庫又編寫另一個程序等等,程序員只需用JDBC API寫一個程序就夠了,它可向相應(yīng)數(shù)據(jù)庫發(fā)送SQL調(diào)用。同時,將Java語言和JDBC結(jié)合起來使程序員不必為不同的平臺編寫不同的應(yīng)用程序,只須寫一遍程序就可以讓它在任何平臺上運行,這也是Java語言“編寫一次,處處運行”的優(yōu)勢。 </p><p> Java數(shù)據(jù)庫連接體系結(jié)構(gòu)是用于Java應(yīng)用程序連接
62、數(shù)據(jù)庫的標準方法。JDBC對Java程序員而言是API,對實現(xiàn)與數(shù)據(jù)庫連接的服務(wù)提供商而言是接口模型。作為API,JDBC為程序開發(fā)提供標準的接口,并為數(shù)據(jù)庫廠商及第三方中間件廠商實現(xiàn)與數(shù)據(jù)庫的連接提供了標準方法。JDBC使用已有的SQL標準并支持與其它數(shù)據(jù)庫連接標準,如ODBC之間的橋接。JDBC實現(xiàn)了所有這些面向標準的目標并且具有簡單、嚴格類型定義且高性能實現(xiàn)的接口。 </p><p> Java 具有堅固
63、、安全、易于使用、易于理解和可從網(wǎng)絡(luò)上自動下載等特性,是編寫數(shù)據(jù)庫應(yīng)用程序的杰出語言。所需要的只是 Java應(yīng)用程序與各種不同數(shù)據(jù)庫之間進行對話的方法。而 JDBC 正是作為此種用途的機制。 </p><p> JDBC 是個"低級"接口,也就是說,它用于直接調(diào)用 SQL 命令。在這方面它的功能極佳,并比其它的數(shù)據(jù)庫連接 API 易于使用,但它同時也被設(shè)計為一種基礎(chǔ)接口,在它之上可以建立高級
64、接口和工具。高級接口是"對用戶友好的"接口,它使用的是一種更易理解和更為方便的 API,這種API在幕后被轉(zhuǎn)換為諸如 JDBC 這樣的低級接口。 </p><p> JDBC API 既支持數(shù)據(jù)庫訪問的兩層模型(C/S),同時也支持三層模型(B/S)。在兩層模型中,Java applet或應(yīng)用程序?qū)⒅苯优c數(shù)據(jù)庫進行對話。這將需要一個JDBC驅(qū)動程序來與所訪問的特定數(shù)據(jù)庫管理系統(tǒng)進行 通訊。用
65、戶的SQL語句被送往數(shù)據(jù)庫中,而其結(jié)果將被送回給用戶。數(shù)據(jù)庫可以位于另一臺計算機上,用戶通過網(wǎng)絡(luò)連接到上面。這就叫做客戶機/服務(wù)器配置,其中用戶的計算機為客戶機,提供數(shù)據(jù)庫的計算機為服務(wù)器。網(wǎng)絡(luò)可以是 Intranet(它可將公司職員連接起來),也可以是 Internet。 </p><p> 在三層模型中,命令先是被發(fā)送到服務(wù)的"中間層",然后由它將SQL 語句發(fā)送給數(shù)據(jù)庫。數(shù)據(jù)庫對 SQ
66、L 語句進行處理并將結(jié)果送回到中間層,中間層再將結(jié)果送回給用戶。MIS 主管們都發(fā)現(xiàn)三層模型很吸引人,因為可用中間層來控制對公司數(shù)據(jù)的訪問和可作的的更新的種類。中間層的另一個好處是,用戶可以利用易于使用的高級API,而中間層將把它轉(zhuǎn)換為相應(yīng)的低級調(diào)用。最后,許多情況下三層結(jié)構(gòu)可提供一些性能上的好處。 </p><p> 到目前為止,中間層通常都用 C 或 C++ 這類語言來編寫,這些語言執(zhí)行速度較快。然而,隨著
67、最優(yōu)化編譯器(它把 Java 字節(jié)代碼轉(zhuǎn)換為高效的特定于機器的代碼)的引入,用 Java 來實現(xiàn)中間層將變得越來越實際。這將是一個很大的進步,它使人們可以充分利用 Java 的諸多優(yōu)點(如堅固、多線程和安全等特征)。JDBC 對于從Java的中間層來訪問數(shù)據(jù)庫非常重要。</p><p> 用JDBC來實現(xiàn)訪問數(shù)據(jù)庫記錄可以采用下面的幾個步驟:1、 通過驅(qū)動器管理器獲取連接接口。2、 獲得Statement或
68、它的子類。3、 限制Statement中的參數(shù)。4、 執(zhí)行Statement。5、 查看返回的行數(shù)是否超出范圍。6、 關(guān)閉Statement。7、 處理其它的Statement8、 關(guān)閉連接接口。</p><p> 3.4 I/O數(shù)據(jù)流技術(shù)介紹</p><p> Java中對文件的操作是以流的方式進行的。流是Java內(nèi)存中的一組有序數(shù)據(jù)序列。Java將數(shù)據(jù)從源(文件、內(nèi)存、
69、鍵盤、網(wǎng)絡(luò))讀入到內(nèi)存中,形成了流,然后將這些流還可以寫到另外的目的地(文件、內(nèi)存、控制臺、網(wǎng)絡(luò)),之所以稱為流,是因為這個數(shù)據(jù)序列在不同時刻所操作的是源的不同部分。</p><p> 流的分類,Java的流分類比較豐富,剛接觸的人看了后會感覺很暈。流分類的方式很多:</p><p> 1、按照輸入的方向分,輸入流和輸出流,輸入輸出的參照對象是Java程序。</p>&l
70、t;p> 2、按照處理數(shù)據(jù)的單位不同分,字節(jié)流和字符流,字節(jié)流讀取的最小單位是一個字節(jié)(1byte=8bit),而字符流一次可以讀取一個字符(1char = 2byte = 16bit)。</p><p> 3、按照功能的不同分,分節(jié)點流和處理流,節(jié)點流是直接從一個源讀寫數(shù)據(jù)的流(這個流沒有經(jīng)過包裝和修飾),處理流是在對節(jié)點流封裝的基礎(chǔ)上的一種流,F(xiàn)ileInputStream是一個接點流,可以直接從文
71、件讀取數(shù)據(jù),但是BufferedInputStream可以包裝 FileInputStream,使得其有緩沖功能。</p><p> 其實除了以上三種分類外,還有一些常常聽到的一些分類比如:對象流、緩沖流、壓縮流、文件流等等。其實都是節(jié)點流和處理流的子分類。當(dāng)然你也可以創(chuàng)建新的流類型,只要你需要。</p><p> 3.5 socket技術(shù)介紹</p><p>
72、 SOCKET也就是所謂的套接字,簡單的說它是一個文件。它是使用標準Unix文件描述符和其它程序通訊的方式,Unix中的一切就是文件,程序在執(zhí)行任何形式的 I/O 的時候,程序是在讀或者寫一個文件描述符。一個文件描述符只是一個和打開的文件相關(guān)聯(lián)的整數(shù),這個文件可能是一個網(wǎng)絡(luò)連接,F(xiàn)IFO,管道,終端,磁盤上的文件或者什么其它的東西。</p><p> 這里的SOCKET就是一個特定的文件描述符,(稱之為Int
73、ernet 套接字)用于描述IP地址和端口,是一個通信鏈的句柄。應(yīng)用程序通常通過它向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求。</p><p> Internet 套接字分為多種形式,常見的有stream sockets流格式和datagram sockets數(shù)據(jù)報格式等。但經(jīng)常用的就是這兩種數(shù)據(jù)報套接節(jié)有時候也叫無連接套接字。</p><p> 由于數(shù)據(jù)采集是一個分布式的系統(tǒng),需要把各個出租的實
74、驗室(客戶端)上記錄包含用戶登錄與退出信息的數(shù)據(jù)定期采集并發(fā)送到中央處理系統(tǒng)(服務(wù)器端)進行整合,然后插入到數(shù)據(jù)庫中,所以需要用到SOCKET編程,這部分又是一個典型的C/S結(jié)構(gòu)。</p><p> 3.6 java多線程技術(shù)介紹</p><p> 線程是程序運行的基本執(zhí)行單元。當(dāng)操作系統(tǒng)(不包括單線程的操作系統(tǒng),如微軟早期的DOS)在執(zhí)行一個程序時,會在系統(tǒng)中建立一個進程,而在這個進
75、程中,必須至少建立一個線程(這個線程被稱為主線程)來作為這個程序運行的入口點。因此,在操作系統(tǒng)中運行的任何程序都至少有一個主線程。</p><p> 進程和線程是現(xiàn)代操作系統(tǒng)中兩個必不可少的運行模型。在操作系統(tǒng)中可以有多個進程,這些進程包括系統(tǒng)進程(由操作系統(tǒng)內(nèi)部建立的進程)和用戶進程(由用戶程序建立的進程);一個進程中可以有一個或多個線程。進程和進程之間不共享內(nèi)存,也就是說系統(tǒng)中的進程是在各自獨立的內(nèi)存空間中
76、運行的。而一個進程中的線可以共享系統(tǒng)分派給這個進程的內(nèi)存空間。</p><p> 線程不僅可以共享進程的內(nèi)存,而且還擁有一個屬于自己的內(nèi)存空間,這段內(nèi)存空間也叫做線程棧, 是在建立線程時由系統(tǒng)分配的,主要用來保存線程內(nèi)部所使用的數(shù)據(jù),如線程執(zhí)行函數(shù)中所定義的變量。</p><p> 注意:任何一個線程在建立時都會執(zhí)行一個函數(shù),這個函數(shù)叫做線程執(zhí)行函數(shù)。也可以將這個函數(shù)看做線程的入口點(
77、類似于程序中的main函數(shù))。無論使用什么語言或技術(shù)來建立線程,都必須執(zhí)行這個函數(shù)(這個函數(shù)的表現(xiàn)形式可能不一樣,但都會有一個這樣的函數(shù))。如在Windows中用于建立線程的API函數(shù)CreateThread的第三個參數(shù)就是這個執(zhí)行函數(shù)的指針。</p><p> 在操作系統(tǒng)將進程分成多個線程后,這些線程可以在操作系統(tǒng)的管理下并發(fā)執(zhí)行,從而大大提高了程序的運行效率。雖然線程的執(zhí)行從宏觀上看是多個線程同時執(zhí)行,但實
78、際上這只是操作系統(tǒng)的障眼法。由于一塊CPU同時只能執(zhí)行一條指令,因此,在擁有一塊CPU的計算機上不可能同時執(zhí)行兩個任務(wù)。而操作系統(tǒng)為了能提高程序的運行效率,在一個線程空閑時會撤下這個線程,并且會讓其他的線程來執(zhí)行,這種方式叫做線程調(diào)度。我們之所以從表面上看是多個線程同時執(zhí)行,是因為不同線程之間切換的時間非常短,而且在一般情況下切換非常頻繁。假設(shè)我們有線程A和B。在運行時,可能是A執(zhí)行了1毫秒后,切換到B后,B又執(zhí)行了1毫秒,然后又切換到
79、了A,A又執(zhí)行1毫秒。由于1毫秒的時間對于普通人來說是很難感知的,因此,從表面看上去就象A和B同時執(zhí)行一樣,但實際上A和B是交替執(zhí)行的。</p><p> 二、線程給我們帶來的好處</p><p> 如果能合理地使用線程,將會減少開發(fā)和維護成本,甚至可以改善復(fù)雜應(yīng)用程序的性能。如在GUI應(yīng)用程序中,還以通過線程的異步特性來更好地處理事件;在應(yīng)用服務(wù)器程序中可以通過建立多個線程來處理客戶
80、端的請求。線程甚至還可以簡化虛擬機的實現(xiàn),如Java虛擬機(JVM)的垃圾回收器(garbage collector)通常運行在一個或多個線程中。因此,使用線程將會從以下五個方面來改善我們的應(yīng)用程序:</p><p> 1. 充分利用CPU資源</p><p> 現(xiàn)在世界上大多數(shù)計算機只有一塊CPU。因此,充分利用CPU資源顯得尤為重要。當(dāng)執(zhí)行單線程程序時,由于在程序發(fā)生阻塞時CPU可
81、能會處于空閑狀態(tài)。這將造成大量的計算資源的浪費。而在程序中使用多線程可以在某一個線程處于休眠或阻塞時,而CPU又恰好處于空閑狀態(tài)時來運行其他的線程。這樣CPU就很難有空閑的時候。因此,CPU資源就得到了充分地利用。</p><p><b> 2. 簡化編程模型</b></p><p> 如果程序只完成一項任務(wù),那只要寫一個單線程的程序,并且按著執(zhí)行這個任務(wù)的步驟編
82、寫代碼即可。但要完成多項任務(wù),如果還使用單線程的話,那就得在在程序中判斷每項任務(wù)是否應(yīng)該執(zhí)行以及什么時候執(zhí)行。如顯示一個時鐘的時、分、秒三個指針。使用單線程就得在循環(huán)中逐一判斷這三個指針的轉(zhuǎn)動時間和角度。如果使用三個線程分另來處理這三個指針的顯示,那么對于每個線程來說就是指行一個單獨的任務(wù)。這樣有助于開發(fā)人員對程序的理解和維護。</p><p> 3. 簡化異步事件的處理</p><p>
83、; 當(dāng)一個服務(wù)器應(yīng)用程序在接收不同的客戶端連接時最簡單地處理方法就是為每一個客戶端連接建立一個線程。然后監(jiān)聽線程仍然負責(zé)監(jiān)聽來自客戶端的請求。如果這種應(yīng)用程序采用單線程來處理,當(dāng)監(jiān)聽線程接收到一個客戶端請求后,開始讀取客戶端發(fā)來的數(shù)據(jù),在讀完數(shù)據(jù)后,read方法處于阻塞狀態(tài),也就是說,這個線程將無法再監(jiān)聽客戶端請求了。而要想在單線程中處理多個客戶端請求,就必須使用非阻塞的Socket連接和異步I/O。但使用異步I/O方式比使用同步I/
84、O更難以控制,也更容易出錯。因此,使用多線程和同步I/O可以更容易地處理類似于多請求的異步事件。</p><p> 三、在Java中實現(xiàn)多線程 我們不妨設(shè)想,為了創(chuàng)建一個新的線程,我們需要做些什么?很顯然,我們必須指明這個線程所要執(zhí)行的代碼,而這就是在Java中實現(xiàn)多線程我們所需要做的一切! 真是神奇!Java是如何做到這一點的?通過類!作為一個完全面向?qū)ο蟮恼Z言,Java提供了類java.lang.T
85、hread來方便多線程編程,這個類提供了大量的方法來方便我們控制自己的各個線程,我們以后的討論都將圍繞這個類進行。 那么如何提供給 Java 我們要線程執(zhí)行的代碼呢?讓我們來看一看 Thread 類。Thread 類最重要的方法是run(),它為Thread類的方法start()所調(diào)用,提供我們的線程所要執(zhí)行的代碼。為了指定我們自己的代碼,只需要覆蓋它! 方法一:繼承 Thread 類,覆蓋方法 run(),我們在創(chuàng)建的 Thr
86、ead 類的子類中重寫 run() ,加入線程所要執(zhí)行的代碼即可。下面是一個例子: public class MyThread extends Thread{ int count= 1, number; public MyThread(int nu</p><p> new MyThread(i+1).start(); } } 這種方法簡單明了,符合大家的習(xí)慣,但是,它
87、也有一個很大的缺點,那就是如果我們的類已經(jīng)從一個類繼承(如小程序必須繼承自 Applet 類),則無法再繼承 Thread 類,這時如果我們又不想建立一個新的類,應(yīng)該怎么辦呢? 我們不妨來探索一種新的方法:我們不創(chuàng)建Thread類的子類,而是直接使用它,那么我們只能將我們的方法作為參數(shù)傳遞給 Thread 類的實例,有點類似回調(diào)函數(shù)。但是 Java 沒有指針,我們只能傳遞一個包含這個方法的類的實例。 那么如何限制這個類必須包含這
88、一方法呢?當(dāng)然是使用接口?。m然抽象類也可滿足,但是需要繼承,而我們之所以要采用這種新方法,不就是為了避免繼承帶來的限制嗎?) Java 提供了接口 java.lang.Runnable 來支持這種方法?! 》椒ǘ簩崿F(xiàn) Runnable 接口 Runnable接口只有一個方法run(),我們聲明自己的類實現(xiàn)Runnable接口并提供這一方法,將我們的線程代碼寫入其中,就完成了這一部分的任務(wù)。但是Runnable接</p
89、><p> new Thread(new MyThread(i+1)).start(); } } 嚴格地說,創(chuàng)建Thread子類的實例也是可行的,但是必須注意的是,該子類必須沒有覆蓋 Thread 類的 run 方法,否則該線程執(zhí)行的將是子類的 run 方法,而不是我們用以實現(xiàn)Runnable 接口的類的 run 方法,對此大家不妨試驗一下?! ∈褂?Runnable 接口來實現(xiàn)多線程使得我們能
90、夠在一個類中包容所有的代碼,有利于封裝,它的缺點在于,我們只能使用一套代碼,若想創(chuàng)建多個線程并使各個線程執(zhí)行不同的代碼,則仍必須額外創(chuàng)建類,如果這樣的話,在大多數(shù)情況下也許還不如直接用多個類分別繼承 Thread 來得緊湊?! ?lt;/p><p> 第4章 功能說明及實現(xiàn)</p><p> 本項目由本人和姚建波,以及周旭磊同學(xué)共同完成。本人主要負責(zé)數(shù)據(jù)采集與整合模塊的設(shè)計和實現(xiàn)。下面便
91、是本人所有設(shè)計的模塊的說明和具體實現(xiàn)。</p><p> 4.1 用戶登錄模塊</p><p> 具體登錄過程:查看登錄的用戶名是否存在;查看密碼是否正確。如圖4-1所示是用戶登錄界面圖。</p><p> 圖4-1用戶登錄界面</p><p> 4.5 數(shù)據(jù)采集客戶端 </p><p> 數(shù)據(jù)采集客戶端負責(zé)
92、日志解析、數(shù)據(jù)發(fā)送、數(shù)據(jù)備份、配置文件管理;</p><p> 數(shù)據(jù)采集客戶端的活動圖,如下圖(圖4-2)</p><p> 圖4-2數(shù)據(jù)采集客戶端活動圖</p><p> 如圖4-3所示是數(shù)據(jù)采集客戶端界面圖。</p><p> 圖4-3 數(shù)據(jù)采集客戶端界面</p><p> 4.6 數(shù)據(jù)采集服務(wù)端<
93、/p><p> 數(shù)據(jù)采集服務(wù)端負責(zé)數(shù)據(jù)接收、原始數(shù)據(jù)入庫、配置文件管理;</p><p> 數(shù)據(jù)采集服務(wù)端的活動圖,如下圖(圖4-4)</p><p> 圖4-4數(shù)據(jù)采集服務(wù)端活動圖</p><p> 如圖4-5所示是數(shù)據(jù)采集服務(wù)端面圖。</p><p> 圖4-5 數(shù)據(jù)采集服務(wù)端界面</p>&l
94、t;p> 4.7 數(shù)據(jù)整合端 </p><p> 數(shù)據(jù)整合端負責(zé)按用戶整合、按IP整合、整合數(shù)據(jù)入庫、配置文件管理;</p><p> 數(shù)據(jù)采集服務(wù)端的活動圖,如下圖(圖4-6)</p><p> 圖4-6數(shù)據(jù)整合端活動圖</p><p> 如圖4-7所示是數(shù)據(jù)整合界面圖。</p><p>
95、 圖4-7數(shù)據(jù)整合界面</p><p><b> 第5章 系統(tǒng)測試</b></p><p><b> 5.1 測試目的</b></p><p> 在開發(fā)過程中采用了多種措施保證軟件質(zhì)量,但是實際開發(fā)過程中還是不可避免地會產(chǎn)生差錯,系統(tǒng)中通??赡茈[藏著錯誤和缺陷,未經(jīng)周密測試的系統(tǒng)投入運行,將會造成難以想象的后果,因
96、此系統(tǒng)測試是為保證軟件質(zhì)量必須進行的工作。大量統(tǒng)計資料表明,系統(tǒng)測試的工作量往往占開發(fā)總工作量的40%以上。因此,我們必須重視測試工作。</p><p> 由于程序中隱藏的缺陷只在特定的環(huán)境下才有可能顯露,系統(tǒng)缺陷通常是由于對某些特定情況考慮不周造成的。因此測試不是為了表明程序正確;成功的測試也不是沒有發(fā)現(xiàn)錯誤的測試。有意義的軟件測試應(yīng)該是從“破壞”軟件系統(tǒng)的角度出發(fā),精心設(shè)計最有可能暴露程序系統(tǒng)缺陷的測試方案
97、。因此軟件測試的目標應(yīng)該是以盡可能少的代價和時間找出軟件系統(tǒng)中潛在的錯誤和缺陷。</p><p> 從產(chǎn)品角度看,測試計劃中的測試項目包括軟件結(jié)構(gòu)中的分系統(tǒng)層、子系統(tǒng)層、功能模塊層、程序模塊層中的各類模塊,從測試本身看,分為單元測試,組合測試,確認測試等。測試對象是隨階段而異的,最基本、最初的測試是單元測試,后面的組合測試、確認測試都是以被測過的模塊作為測試對象的。</p><p>&l
98、t;b> 1.單元測試:</b></p><p> 單元測試也稱模塊測試或程序測試,單元測試是對每個模塊單獨進行的,驗證模塊接口與設(shè)計說明書是否一致,對模塊的所有主要處理路徑進行測試且與預(yù)期的結(jié)構(gòu)進行對照,還要對所有錯誤處理路徑進行測試。對源碼進行審查,對照設(shè)計說明書,表態(tài)地檢查源程序是否符合功能的邏輯要求,是進行單元測試前的重要工作。單元測試一般是由程序員完成,也稱程序調(diào)試。</p&
99、gt;<p><b> 2.組合測試</b></p><p> 組合測試也稱集成測試或子系統(tǒng)測試,通常采用自頂向下測試和自底向上測試兩種測試方法。組合測試的對象是指已經(jīng)通過單元測試的模塊,不是對零散模塊進行單個測試,而是用系統(tǒng)化的方法裝配和測試軟件系統(tǒng),是一個嚴格的過程,必須認真地進行,其計劃的產(chǎn)生和單元模塊測試的完成日期要協(xié)調(diào)起來,這種測試應(yīng)在系統(tǒng)目標機上進行,造成系統(tǒng)應(yīng)
100、用的環(huán)境條件,除了開發(fā)部分項目負責(zé)人參加以外,還應(yīng)該有相應(yīng)系統(tǒng)的用戶參加,給評審員進行演示。</p><p><b> 3.確認測試</b></p><p> 確認測試是對通過組合測試的軟件進行的,這些軟件已經(jīng)存于系統(tǒng)目標設(shè)備的介質(zhì)上,確認測試的目的是對表明軟件是可以工作的,并且符合“軟件需求說明書”中規(guī)定的全部功能和性能要求。確認測試是按照這些要求定出的“確認測
101、試計劃”進行的。測試工作是由一個獨立的組織進行,而且測試要從用戶的角度出發(fā)。</p><p><b> 4.系統(tǒng)測試</b></p><p> 系統(tǒng)測試是對整體性能的測試,主要解決各子系統(tǒng)之間的數(shù)據(jù)通信和數(shù)據(jù)共享問題以及檢測系統(tǒng)是否達到用戶的實際要求,系統(tǒng)測試的依據(jù)是系統(tǒng)分析報告。系統(tǒng)測試應(yīng)在系統(tǒng)的整個范圍內(nèi)進行,這種測試不只對軟件進行,而是對構(gòu)成系統(tǒng)的硬、軟件一
102、起進行。系統(tǒng)測試與建構(gòu)同時進行或略慢。系統(tǒng)測試需要確認從頭到尾的功能正常才算完成,應(yīng)當(dāng)盡量避免系統(tǒng)測試延到項目末尾進行。</p><p><b> 5.用戶驗收測試</b></p><p> 在系統(tǒng)測試完成后,進行用戶的驗收測試,它是用戶在實際應(yīng)用環(huán)境中所進行的真實數(shù)據(jù)測試。</p><p> 在具體的測試中,一般應(yīng)遵循以下原則:由程序設(shè)
103、計者之外的人進行測試;測試用例應(yīng)由兩部分組成:輸入數(shù)據(jù)和預(yù)期輸出結(jié)果;應(yīng)選用不合理的輸入數(shù)據(jù)與非法輸入測試;不僅要檢驗程序是否實現(xiàn)預(yù)期功能,還應(yīng)檢查程序是否做了不應(yīng)該做的工作;集中測試容易出錯的程序模塊;對程序修改以后,必須重新進行測試。</p><p><b> 5.2 測試方法</b></p><p> 一般來說,對程序測試有兩種測試方法:如果已經(jīng)知道了軟件系
104、統(tǒng)應(yīng)具有的功能,可通過測試來檢測每個功能是否都能正常使用;如果知道程序的內(nèi)部工作過程,可以通過測試來檢測程序內(nèi)部是否按照規(guī)格說明書的規(guī)定正常進行。前一種方法稱為黑盒測試,后一種方法稱為白盒測試。黑盒測試又稱為功能測試,白盒測試又稱為結(jié)構(gòu)測試。</p><p> 我們所用的是功能測試。</p><p><b> 5.3 測試結(jié)果</b></p><
105、;p> 1.測試用戶登錄功能:</p><p> 打開DMS數(shù)據(jù)采集與整合系統(tǒng)登錄界面,用戶登錄的用戶名為admin、密碼為admin。填寫完成點擊“登錄”按鈕,將會出現(xiàn)社區(qū)首頁,即該用戶已經(jīng)登錄成功了。</p><p> 若輸入用戶名不正確,如:“iuihy”,密碼“123456”、不正確或者不填,系統(tǒng)會自動出現(xiàn)警告“用戶名或密碼不存在或輸入不正確,登錄失敗請重新登錄”。&l
106、t;/p><p> 2.測試數(shù)據(jù)采集服務(wù)端功能:</p><p> 用戶登錄成功進入DMS數(shù)據(jù)采集主界面,然后點擊“服務(wù)端”后,進入數(shù)據(jù)采集服務(wù)端選項,點擊“運行服務(wù)端”按鈕,系統(tǒng)成功啟動采集服務(wù)線程。</p><p> 3. 測試數(shù)據(jù)采集服務(wù)端功能:</p><p> 用戶登錄成功進入DMS數(shù)據(jù)采集主界面,然后點擊“客戶端”后,進入數(shù)據(jù)
107、采集服務(wù)端選項,點擊“運行客戶端”按鈕,系統(tǒng)成功啟動數(shù)據(jù)采集客戶線程。</p><p> 4.測試數(shù)據(jù)整合端功能:</p><p> 用戶登錄成功進入DMS數(shù)據(jù)采集主界面,然后點擊“整合端”后,進入數(shù)據(jù)采集服務(wù)端選項,點擊“運行整合端”按鈕,系統(tǒng)成功啟動數(shù)據(jù)整合線程。</p><p> 經(jīng)過以上各項的測試,證明本系統(tǒng)這些功能能夠正常運行,但也有許多不足之處,有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 用電信息采集系統(tǒng)與數(shù)據(jù)采集技術(shù).pdf
- 基于統(tǒng)一數(shù)據(jù)采集與集中監(jiān)控平臺的用電信息采集系統(tǒng).pdf
- 電信計費數(shù)據(jù)采集系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 電信計費數(shù)據(jù)采集系統(tǒng)的實現(xiàn)與研究.pdf
- 基于SSH的電信工程物資管理系統(tǒng)設(shè)計與實現(xiàn).pdf
- 基于FPGA的下肢肌電信號數(shù)據(jù)采集與傳輸研究.pdf
- 基于電信網(wǎng)絡(luò)管理的性能數(shù)據(jù)采集系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 基于大數(shù)據(jù)的用戶用電信息采集系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 電信網(wǎng)上的數(shù)據(jù)采集與控制系統(tǒng).pdf
- 基于數(shù)據(jù)挖掘的電信企業(yè)平臺整合研究及實踐.pdf
- 基于SSH的電信物資管理系統(tǒng)的研究與開發(fā).pdf
- 基于SSH的電信主動營銷系統(tǒng)的開發(fā).pdf
- 基于WiFi傳輸?shù)男碾娦盘柌杉c數(shù)據(jù)分析系統(tǒng)設(shè)計.pdf
- 基于ssh框架的電信計費系統(tǒng)——畢業(yè)論文
- 腦電信號的數(shù)據(jù)采集與分析研究.pdf
- 面向電信數(shù)據(jù)整合的收入歸集系統(tǒng)的設(shè)計與實現(xiàn).pdf
- 基于SSH2應(yīng)用系統(tǒng)的SSIS整合方案研究與設(shè)計.pdf
- 基于PCI總線的心電信號數(shù)據(jù)采集系統(tǒng)的設(shè)計.pdf
- 福州電信業(yè)務(wù)數(shù)據(jù)自助采集平臺的設(shè)計與實現(xiàn).pdf
- 基于ISA數(shù)據(jù)采集與處理.pdf
評論
0/150
提交評論